2010-12-01 7 views
7

iOS 용 정적 라이브러리를 만드는 경우 헤더 파일을 배포해야합니까? 아니면 작동시키기 위해 다른 방법이 있습니까?iOS 용 정적 라이브러리 및 배포 용 시뮬레이터

현재 장치 및 시뮬레이터 모두에 대해 하나의 my_lib.a 파일이 있지만 다른 테스트 응용 프로그램으로 드래그하여 사용하면 헤더를 찾을 수 없다고 말하여 사용중인 모든 장소 코드에서 선언되지 않습니다. 그래서 나는 잘못된 것을하고 있거나 적절한 헤더 파일을 보내야한다고 생각합니다. 내 프로세스

배경 : 나는 장치와 시뮬레이터 모두 정적 라이브러리를 생성하는 두 개의 가이드를 본 적이

. 이 사이트에 하나 : Build fat static library (device + simulator) using Xcode and SDK 4+

여기에 하나

http://mark.aufflick.com/blog/2010/11/19/making-a-fat-static-library-for-ios-device-and-simulator 난 그냥 그것을 밖으로 시도하는 두 번째 사이트를 사용했다. 내가 제대로 했어도 약간 궁금합니다. 방금 Release-iphone (os | 시뮬레이터) 폴더에 들어가서 ios 하나의 .a와 시뮬레이터 하나의 .o를 찾았습니다.

답변

3

짧은 대답은 예입니다. 정적 라이브러리로 헤더 파일을 패키징해야합니다. 사실, 동적 또는 정적 라이브러리에서 헤더 파일을 패키징해야합니다. 라이브러리 자체에는 컴파일 된 코드가 포함되어 있지만 컴파일러에게 라이브러리의 식별자를 알려줘야하므로 코드를 컴파일 할 때 코드가 존재한다는 것을 알 수 있습니다.

신경 쓰면 정적 라이브러리를 정적 인 프레임 워크에 패키지 할 수 있습니다. .dylib (또는 .so) 파일 대신 .a 파일을 사용하여 동적 프레임 워크와 동일한 디렉토리 구조를 만들면됩니다. 프레임 워크에는 헤더 용 디렉토리가 있으므로 바이너리와 헤더를 단일 패키지로 배포 할 수 있으며 추가 헤더 검색 경로 빌드 설정을 사용하지 않고 프레임 워크에서 헤더를 쉽게 가져올 수 있습니다.

+0

정보 주셔서 감사합니다. 내가 이해 한대로 (그리고 내가 봤던 것에서) devs는 iOS 용 프레임 워크를 만들 수 없다. 더 이상 그렇지 않은가요? 그렇다면이 프레임 워크를 만드는 방법에 대한 리소스가 있습니까? 마지막으로, 유니버셜 라이브러리를 올바르게 만들었습니까? 내가 사용한 가이드 (2 번째 링크)는 .o 파일에 대한 언급이 없기 때문에 묻습니다. – Aaron

+0

상위 레벨로 가야 할 때 프로젝트 파일의 .build 폴더 (project_name.build/Objects-normal/ARCHITECTURE/project_target.[a|o))에 들어가는 것을 알았습니다. Releases-iphone [os | simulator ]/project_target.a. 이후에는 armv6과 armv7이 하나의 .a 파일에 있고 i386이 시뮬레이터 폴더의 .a 파일에 있습니다. 또한 iphone os 라이브러리를 추가 할 때 armv6 및 armv7이 포함 된 뚱뚱한 파일이므로 아키텍처를 지정하지 마십시오. – Aaron

+0

정적 인 프레임 워크에서 정말 좋은 리소스를 모르는 이유는 Xcode에 내장 된 방법이 없기 때문입니다. 나는 정적 라이브러리를 포함하고 그것을 따로 따로 선택하는 몇 개의 프로젝트를 찾아 냈습니다. PLBlocks는 정적 프레임 워크로 제공되었으므로 GHUnit은 정적 프레임 워크로 제공됩니다. Cedar (http://github.com/pivotal/Cedar)에는 bash 스크립트를 사용하여 정적 프레임 워크를 작성한다는 목표가 있습니다. 한번 봐봐; 단순히 디렉토리 구조와 심볼릭 링크를 복제하는 문제입니다. –

0

유용한 경우 - here의 Ray Wenderlich의 지침을 따라 한 번에 여러 아키텍처를 지원하는 iOS 용 프레임 워크를 만들 수있었습니다 (시뮬레이터 포함). 지침이 너무 길어 여기에 복사하여 붙여 넣을 수 없습니다.