프로젝트에서 정적 라이브러리를 사용하려고합니다. 정적 라이브러리는 여러 프레임 워크에 따라 달라집니다. CoreData, CFNetwork, AddressBook 등XCode에서 정적 라이브러리를 사용할 때 라이브러리와 이진 파일을 두 번 연결해야합니다.
정적 라이브러리도 범주를 사용하므로 주 프로젝트의 "기타 링커 설정"에서 -all_load 링커 옵션을 사용해야합니다. 이 기능을 활성화하면 내 정적 프로젝트 (CoreData, CFNetwork, AddressBook 등)와 동일한 프레임 워크와 연결되지 않는 주 프로젝트와 관련된 120 개의 오류가 발생합니다.
개발자가 정적 라이브러리를 사용하고 싶지만 라이브러리가 링크 된 모든 프레임 워크에 링크해야하는 것은 매우 불편합니다. 이 프로세스를 자동화하는 방법은 없으므로 기본 프로젝트가 정적 라이브러리에 연결된 모든 프레임 워크에 자동으로 연결됩니다.
저는 XCode 4.4를 사용하고 있습니다.
편집 :
StaticLibrary.xcodeproj
- AFNetworking
- files...
- CoreData
- categories for NSManagedObjectContext, for convenience
- AddressBook
- convenience methods for working with contacts
이 프로젝트의 목표는 빌드 페이즈> 링크 바이너리 라이브러리에서 필요한 프레임 워크에 연결되어 있습니다 : 더 명확하게하기 위해, 나는 다음 있습니다. 여기에는 CoreData.framework, AddressBook.framework 등이 포함됩니다.
이제이 라이브러리를 다른 프로젝트에 추가 할 수 있습니다. 사실,이 라이브러리를 내가 작성한 모든 새 프로젝트에 추가하고 싶습니다. 그래서 필자가 작성한 편의 기능/카테고리에 항상 쉽게 액세스 할 수 있습니다. 그래서 : 내 프로젝트에 라이브러리를 추가 한 다음 .a
파일을 Build Phases> Link with Binary With Link (내 주요 프로젝트)에 추가하십시오. 나는 또한 내가 알고있는 모든 것을 필요로한다 (의견을 보라).
기본 프로젝트가 이제 라이브러리에 연결되어 모든 라이브러리 링크를 상속하므로 주 프로젝트가 현재 CoreData.framework, AddressBook.framework 등에도 연결됩니다.
무슨 일이 일어나는가? 메인 프로젝트는 라이브러리에 필요한 것과 연결되지 않았기 때문에 오류가 발생합니다.
정적 라이브러리에서 기본 프로젝트로 링크 된 프레임 워크를 자동으로 추가하는 방법이 있습니까? 아니면 라이브러리를 CoreDataStaticLibrary 등으로 분할하고 개발자가 CoreData.framework와 정적을 추가해야합니다. 라이브러리를 매번 프로젝트 대상으로?
저는 Xcode가 모든 소스를 실행 파일에 연결하려고 시도하지만 정적 라이브러리가 아니라고 생각합니다. 적절한 설정을 사용 했습니까? –
xcodeproj 라이브러리를 내 메인 프로젝트로 끌었습니다. 내 주요 프로젝트에서 "Target Dependencies"에 라이브러리를 추가했습니다. 내 주요 프로젝트의 "라이브러리와 이진 링크"라이브러리에 .a 파일을 추가했습니다. 기본 프로젝트의 빌드 설정에서 기타 링크 설정에 "-all_load"를 추가했습니다. 재귀 적으로 메인 프로젝트의 헤더 검색 경로를 라이브러리 디렉토리로 변경했습니다. 내가 놓친 게 있니? –
필자는 simmilar 문제가 있었고 havent는 all_load 플래그를 사용하는 방법을 찾았습니다. 대신 -force_load 플래그를 사용하거나 IOS 범용 프레임 워크에 범주를 넣는 것이 좋습니다. [link] (https://github.com/kstenerud/iOS-Universal-Framework). -force_load로 할 수 있다면 아마 더 나은 해결책 일 것입니다. –