이 문제에 대해 내가 본 각 솔루션은 우아하지 않은 것처럼 보였거나 (헤더를 응용 프로그램의 프로젝트에 복사) 사소한 상황에서만 작동 할 정도로 지나치게 단순화되었습니다.
짧은 대답
사용자 헤더 검색 경로에 다음 경로를 추가하십시오.
"$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
왜 이것이 작동합니까?
먼저 문제를 이해해야합니다. 실행, 테스트, 프로파일 링 또는 분석과 같은 정상적인 상황에서 Xcode는 프로젝트를 빌드 하고 $ BUILT_PRODUCTS_DIR 매크로 를 통해 사용할 수 있는 Build / Products / Configuration / Products 디렉토리에 출력을 저장합니다 .
정적 라이브러리와 관련된 대부분의 가이드에서는 공용 헤더 폴더 경로 를 $ TARGET_NAME로 설정하는 것이 좋습니다. 즉, lib 파일은 $ BUILT_PRODUCTS_DIR /libTargetName.a가되고 헤더는 $ BUILT_PRODUCTS_DIR / TargetName에 배치됩니다. 앱 이 검색 경로에 $ BUILT_PRODUCTS_DIR 을 포함하는 한, 가져 오기는 위에 주어진 4 가지 상황에서 작동합니다. 그러나 아카이브를 시도하면 작동하지 않습니다.
보관은 약간 다르게 작동합니다.
프로젝트를 보관할 때 Xcode는 ArchiveIntermediates라는 다른 폴더를 사용합니다. 해당 폴더에서 / YourAppName / BuildProductsPath / Release-iphoneos /를 찾을 수 있습니다. 아카이브를 수행 할 때 $ BUILT_PRODUCTS_DIR이 가리키는 폴더입니다 . 거기를 살펴보면 빌드 된 정적 라이브러리 파일에 대한 심볼릭 링크가 있지만 헤더가있는 폴더가 없다는 것을 알 수 있습니다.
헤더 (및 lib 파일)를 찾으려면 IntermediateBuildFilesPath / UninstalledProducts /로 이동해야합니다. 정적 라이브러리에 대해 설치 건너 뛰기 를 YES 로 설정하라는 지시를 받았던 때를 기억 하십니까? 이것이 아카이브를 만들 때 설정이 갖는 효과입니다.
참고 : 설치를 건너 뛰도록 설정하지 않으면 헤더가 다른 위치에 저장되고 lib 파일이 아카이브에 복사되어 App Store에 제출할 수있는 .ipa 파일을 내보낼 수 없습니다. .
많은 검색 끝에 UninstalledProducts 폴더에 정확히 해당하는 매크로를 찾을 수 없었기 때문에 "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"로 경로를 구성해야합니다.
요약
정적 라이브러리의 경우 설치를 건너 뛰고 공개 헤더가 $ TARGET_NAME에 배치되었는지 확인하세요.
앱의 경우 사용자 헤더 검색 경로를 일반 빌드에 대해 잘 작동하는 "$ (BUILT_PRODUCTS_DIR)"과 아카이브 빌드에 대해 작동하는 "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"로 설정합니다.