Xcode 4는 정적 라이브러리 종속성에서 공용 헤더 파일을 찾을 수 없습니다.


91

검색에 도움이되는 대체 제목

  • Xcode에서 헤더를 찾을 수 없습니다.
  • Xcode에서 .h 누락
  • Xcode .h 파일을 찾을 수 없습니다.
  • 어휘 또는 전 처리기 문제 파일을 찾을 수 없습니다.

저는 Xcode 3에서 가져온 iOS 애플리케이션 프로젝트에서 작업하고 있습니다. 이제 Xcode 4로 이동했습니다. 제 프로젝트는 여러 정적 라이브러리를 빌드합니다.

이러한 정적 라이브러리는 또한 공용 헤더를 선언하며 해당 헤더는 애플리케이션 코드에서 사용됩니다. Xcode 3.x에서는 헤더가 (빌드 단계로)에 복사 된 public headers directory다음 애플리케이션 프로젝트 public headers directory에서 headers search list.

Xcode 4에서 빌드 디렉토리는 ~/Library/Developer/Xcode/DerivedData/my-project.

문제는 헤더 검색 설정에서이 새 위치를 어떻게 참조합니까? 다음과 같이 보입니다.

  • public headers directory 에 상대적이다 DerivedData디렉토리에 이지만
  • headers search 디렉토리가 다른 항목 (아마도 프로젝트 위치)에 상대적입니다.

종속성으로 컴파일하려고 할 때 정적 라이브러리를 사용하는 클라이언트가 헤더 파일을 사용할 수 있도록 Xcode 4에서 iOS 개발 용 정적 라이브러리 대상을 어떻게 설정해야합니까?


경로 이름과 관련 될 수 있습니다. 이 게시물을 확인하십시오. [Xcode 4의 정적 라이브러리] [1] [1] : stackoverflow.com/questions/6074576/static-libraries-in-xcode-4/…
Diego Marafetti 2011

답변:


124

이 문제에 대해 내가 본 각 솔루션은 우아하지 않은 것처럼 보였거나 (헤더를 응용 프로그램의 프로젝트에 복사) 사소한 상황에서만 작동 할 정도로 지나치게 단순화되었습니다.

짧은 대답

사용자 헤더 검색 경로에 다음 경로를 추가하십시오.

"$ (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"로 설정합니다.


DerivedData 폴더와 어떤 관련이 있습니까?
리처드 Stelling

일반 빌드 : DerivedData / WorkspaceName-hash / Build / Products / Debug-iphoneos / TargetName.app --- 아카이브 빌드 : DerivedData / WorkspaceName-hash / Build / Intermediates / ArchiveIntermediates / TargetName / BuildProductsPath / Release-iphoneos / TargetName.app
Colin

3
나를 위해 재귀 확인란과 함께 "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"를 사용하면 작동하지 않았습니다. 재귀 플래그없이 "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts / <nameOfStaticLibrary>"를 사용하자마자 효과가있었습니다.
TPoschel

7
당신의 참고 $ (BUILD_ROOT가) /../ IntermediateBuildFilesPath / UninstalledProducts 사실이다 $(TARGET_BUILD_DIR). 보관하는 동안에도. ;)
Pascal

1
나를 위해 Xcode 5 : $ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts / include / NAME OF LIBRARY로 설정하지 않았습니다. 항상 사용자 경로를 검색합니다.
xarly

84

자체 정적 라이브러리를 개발할 때 동일한 문제가 발생했으며 Colin의 답변이 매우 도움이되었지만 작업 공간을 사용하여 Xcode 4에서 프로젝트를 실행하고 보관할 때 일관되고 간단하게 작동하도록 약간 수정해야했습니다.

내 방법의 차이점은 모든 빌드 구성에 단일 사용자 헤더 경로를 사용할 수 있다는 것입니다.

내 방법은 다음과 같습니다.

작업 공간 만들기

  1. Xcode 4에서 File, New, Workspace로 이동합니다.
  2. 그런 다음 Finder에서 사용하려는 정적 라이브러리와 라이브러리를 사용하는 빌드중인 새 앱에 대한 .xcodeproj 프로젝트를 드래그 할 수 있습니다. 작업 영역 설정에 대한 자세한 내용은 Apple Docs를 참조하십시오. https://developer.apple.com/library/content/featuredarticles/XcodeConcepts/Concept-Workspace.html

정적 라이브러리 프로젝트 설정

  1. 모든 정적 라이브러리의 헤더가 "공용"으로 복사되도록 설정되어 있는지 확인하십시오. 이는 정적 라이브러리 대상> 빌드 단계의 설정에서 수행됩니다. "헤더 복사"단계에서 모든 헤더가 "공개"섹션 내에 있는지 확인합니다.
  2. 다음으로 빌드 설정으로 이동하여 "공용 헤더 폴더 경로"를 찾아 라이브러리 경로를 입력하십시오. 나는 이것을 사용하기로 선택한다 :

include / LibraryName

RestKit과 함께 사용하여 이것을 채택했으며 모든 정적 라이브러리에서 가장 잘 작동한다는 것을 알았습니다. 이것이하는 일은 Xcode가 1 단계에서 "Public"헤더 섹션으로 이동 한 모든 헤더를 빌드 할 때 Derived Data 폴더 내에있는 여기에서 지정한 폴더로 복사하도록 지시하는 것입니다. RestKit과 마찬가지로 저는 프로젝트에서 사용하는 각 정적 라이브러리를 포함하기 위해 단일 "include"폴더를 사용하는 것을 좋아합니다.

또한 정적 라이브러리를 사용하여 프로젝트를 구성 할 때 나중에 단일 사용자 헤더 검색 경로를 사용할 수 있기 때문에 여기서 매크로를 사용하는 것을 좋아하지 않습니다.

  1. "Skip Install"을 찾아 이것이 YES로 설정되어 있는지 확인하십시오.

정적 라이브러리를 사용한 프로젝트 설정

  1. Build Phases> Link Binary With Libraries 아래에서 정적 라이브러리를 프레임 워크로 추가하고 사용할 정적 라이브러리에 대해 libLibraryName.a 파일을 추가합니다.
  2. 다음으로 프로젝트가 사용자 검색 경로를 검색하도록 설정되어 있는지 확인하십시오. 이는 빌드 설정> 항상 사용자 경로 검색에서 수행되며 YES로 설정되어 있는지 확인하십시오.
  3. 같은 영역에서 사용자 헤더 검색 경로를 찾아 다음을 추가합니다.

    "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / include"

이렇게하면 Xcode가 빌드 프로세스 중에 생성하는 중간 빌드 폴더 내에서 정적 라이브러리를 찾도록 Xcode에 지시합니다. 여기에는 정적 라이브러리 프로젝트 설정을 위해 2 단계에서 설정 한 정적 라이브러리 위치에 사용하는 "include"폴더가 있습니다. 이것은 Xcode가 정적 라이브러리를 올바르게 찾는 데 가장 중요한 단계입니다.

작업 공간 구성

여기서는 앱을 빌드 할 때 정적 라이브러리를 빌드하도록 작업 공간을 구성하려고합니다. 이것은 우리 앱에 사용되는 체계를 편집하여 수행됩니다.

  1. 응용 프로그램을 만들 구성표를 선택했는지 확인하십시오.
  2. 구성표 드롭 다운에서 구성표 편집을 선택합니다.
  3. 왼쪽 목록 상단에서 빌드를 선택합니다. 가운데 창에서 +를 눌러 새 대상을 추가합니다.
  4. 링크하려는 라이브러리에 대한 정적 라이브러리가 표시되어야합니다. iOS 정적 라이브러리를 선택하십시오.
  5. 실행과 보관을 모두 클릭합니다. 이렇게하면 앱을 빌드 할 때마다 정적 라이브러리 용 라이브러리를 컴파일하도록 스키마에 지시합니다.
  6. 애플리케이션 타겟 위로 정적 라이브러리를 드래그합니다. 이렇게하면 정적 라이브러리가 애플리케이션 대상보다 먼저 컴파일됩니다.

라이브러리 사용 시작

이제 다음을 사용하여 정적 라이브러리를 가져올 수 있습니다.

import <LibraryName/LibraryName.h>

이 방법은 다른 구성에 대해 다른 사용자 헤더 경로를 가져야하는 번거 로움을 덜어 주므로 아카이브를 위해 컴파일하는 데 문제가 없습니다.

왜 이것이 작동합니까?

그것은 모두 다음 경로에 달려 있습니다.

"$(PROJECT_TEMP_DIR)/../UninstalledProducts/include"

"Skip Install"을 사용하도록 정적 라이브러리를 구성하기 때문에 컴파일 된 파일은 임시 빌드 디렉토리 내의 "UninstalledProjects"폴더로 이동됩니다. 여기서 경로는 정적 라이브러리에 대해 설정하고 사용자 헤더 검색 경로에 사용하는 "include"폴더로도 확인됩니다. 두 가지가 함께 작동하면 Xcode가 컴파일 과정에서 라이브러리를 찾을 수있는 위치를 알 수 있습니다. 이 임시 빌드 디렉토리는 디버그 및 릴리스 구성 모두에 존재하므로 정적 라이브러리를 검색하려면 Xcode에 대한 단일 경로 만 필요합니다.


3
넌 대단해! 이것은 정말 도움이되며 설명대로 작동합니다.
neevek

1
대박. 어디로 꽃을 보낼
까요?

1
이를 설정 한 후 " ...] 클래스 0x ... "로 전송 된 인식 할 수없는 선택자를 만날 수 있습니다 . 이 경우 프로젝트의 Targets-> Project-> Build Settings-> Linking-> Other Linker Flags에
추가해보십시오

사용자 헤더 검색 경로에 공백이있는 경우 따옴표로 묶어야합니다.
respectTheCode

Xcode 4.6.2는 "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / include"에 아무것도 쓰지 않습니다. 내가 뭘 놓치고 있는지 알아? 아니면 Xcode 동작이 다시 변경 되었습니까?
c roald

16

Xcode 4 프로젝트가 정적 라이브러리를 컴파일하지 못함

관련 질문 : Xcode 4의 "어휘 또는 전 처리기 문제 파일을 찾을 수 없음"

오류에는 다음이 포함될 수 있습니다. 헤더 파일 누락, "어휘 또는 전 처리기 문제"

해결책 :

  1. "사용자 헤더 경로"가 올바른지 확인하십시오.
  2. "항상 사용자 경로 검색"을 예로 설정
  3. 프로젝트에서 "인덱싱 헤더"라는 그룹 호출을 생성하고 헤더를이 그룹으로 드래그합니다 . 메시지가 표시 될 때 대상에 추가 하지 마십시오 .

11
쉽게 간과되지만 매우 중요한 또 다른 단계 : 검색 경로를 큰 따옴표로 묶어 공백을 이스케이프하도록하십시오. 나는 항상 그것을 잊는다.
Brad

@Brad에게 감사합니다. 이것은 참으로 매우 중요하고 도움이되는 발언입니다.
Julian D.

15

이것은 매우 유용한 스레드였습니다. 내 상황을 조사하다가 2012 년 9 월에 "iOS에서 정적 라이브러리 사용"이라는 제목으로 12 페이지 분량의 문서가 Apple에 있음을 발견했습니다. 다음은 pdf 링크입니다. http://developer.apple.com/library/ios/technotes/iOSStaticLibraries/iOSStaticLibraries.pdf

대부분의 인터넷 토론보다 훨씬 간단하며 사용중인 외부 라이브러리가 구성되는 방식을 설명하기위한 몇 가지 작은 모드를 사용하면 잘 작동합니다. 가장 중요한 부분은 다음과 같습니다.

라이브러리 대상에 "헤더 복사"빌드 단계가있는 경우이를 삭제해야합니다. 복사 헤더 빌드 단계는 Xcode에서 "아카이브"작업을 수행 할 때 정적 라이브러리 대상에서 올바르게 작동하지 않습니다.

Xcode 4.4 이상으로 생성 된 새로운 정적 라이브러리 타겟은 헤더에 대해 적절하게 구성된 Copy Files 단계와 함께 제공되므로 생성하기 전에 이미 존재하는지 확인해야합니다. 그렇지 않은 경우 대상 편집기 하단의 "Add Build Phase"를 누르고 "Add Copy Files"를 선택합니다. 새 파일 복사 빌드 단계를 공개하고 대상을 "제품 디렉토리"로 설정합니다. / $ {PRODUCT_NAME}을 포함하도록 하위 경로를 설정합니다. 이렇게하면 빌드 된 제품 디렉토리 내의 include라는 폴더 안에있는 라이브러리 (PRODUCT_NAME 빌드 설정에서 가져옴) 이름의 폴더에 파일이 복사됩니다. 빌드 제품 디렉토리 내의 포함 폴더는 애플리케이션의 기본 헤더 검색 경로에 있으므로 헤더 파일을 배치하기에 적합한 위치입니다.

기존의 많은 상황에서 Apple의 접근 방식으로는 충분하지 않을 수 있습니다. 나는 정적 도서관 정원 경로에서 막 여행을 시작하는 모든 사람을 위해 여기에 게시합니다. 이것은 간단한 경우에 가장 좋은 출발점이 될 수 있습니다.


위의 링크를 따르는 사람들을 위해 .. 조심하십시오 : 라이브러리 프로젝트를 만들 때 더미 템플릿 파일을 삭제하라는 단계 .. * .pch 파일을 삭제하지 마십시오 .. 결국 당신을 괴롭힐 것입니다 + 위 조언은 카테고리와 함께 작동하지 않습니다 .. 그래도 수정이 있습니다 (어딘가에서 보았습니다)
abbood

정적 라이브러리 빌드를위한 공식 Apple 접근 방식에 대한 링크를 제공해 주셔서 감사합니다. 이 접근 방식을 사용하여 정적 라이브러리를 구축하는 것으로 시작 했지만 보관할 수 없었습니다. @abbood-생성 된 pch 파일을 삭제하는 데 어떤 문제가 있습니까?
augusto callejas

.pch 파일을 삭제하면 .. 프로젝트가 컴파일되지 않습니다 .. (아카이브 또는 기타 목적으로) ..
abbood

그것은 나를 위해 작동하지 않습니다. ""로 import 문을 시도하면 작동하지 않습니다. <>가 필요합니다. 또한 보관하는 동안 헤더를 찾을 수 없습니다. 아이디어가 있습니까?
user1010819 dec

4

http://developer.apple.com/library/ios/#technotes/iOSStaticLibraries/Articles/creating.html

Apple 문서에 따라 :

라이브러리에는 해당 라이브러리의 클라이언트가 가져와야하는 하나 이상의 헤더 파일이 있습니다. 클라이언트로 내보낼 헤더를 구성하려면 라이브러리 프로젝트를 선택하여 프로젝트 편집기를 열고 라이브러리 대상을 선택하여 대상 편집기를 열고 빌드 단계 탭을 선택하십시오. 라이브러리 대상에 "헤더 복사"빌드 단계가있는 경우 삭제해야합니다. Xcode에서 "아카이브"작업을 수행 할 때 복사 헤더 빌드 단계가 정적 라이브러리 대상에서 올바르게 작동하지 않습니다.


3

통찰력을 얻으려면 Jonah Wlliam의 솔루션 (중간) 및 GitHub 모델 (댓글)을 살펴보십시오. http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/


4
이 기술적 질문에 대답 수 있지만, 그것은 바람직 할 것이다 당신이 당신의 대답에 링크 된 문서의 중요한 부분을 포함하고 참조 할 수 있도록 링크를 제공하는. 그렇게하지 않으면 링크 부패로 인한 답변이 위험 해집니다.
jscs

2

추가 $ (OBJROOT을) / UninstalledProducts / exactPathToHeaders 받는 헤더 검색 경로.

어떤 이유로 재귀 확인란이 작동하지 않았고 헤더가있는 위치에 나머지 경로를 추가해야했습니다.

Xcode의 로그 네비게이터 (중단 점 네비게이터 오른쪽에있는 탭)에서 빌드 히스토리를 볼 수 있습니다. 실제 빌드 실패를 선택하면 세부 정보를 확장하여 setenv PATH 를보고 헤더 파일의 경로가 있는지 확인할 수 있습니다.


재귀 확인란에 대한 좋은 메모, 여기에서 동일한 문제입니다.
Codezy

예, 특정 하위 폴더도 지정해야했는데 재귀 검사가 작동하지 않았습니다.
Oliver Pearmain

그러나이 경로를 사용하게되었습니다 (단순히 짧아서) "$ (PROJECT_TEMP_DIR) /../ UninstalledProducts / SubProjectHeaders"
Oliver Pearmain

2

제 경우에는 작업 공간에 몇 개의 정적 라이브러리 프로젝트가 있었고 그중 하나에는 헤더 파일을 포함하여 다른 하나와의 종속성이 있습니다. 문제는 건물의 순서에 있었다. 빌드 섹션의 스키마 편집 페이지에서 병렬화 옵션을 선택 취소하고 종속성에 따라 대상의 순서를 정렬했으며 문제로 해결되었습니다.


1

사용자 헤더 검색 경로에 다음 경로를 추가하십시오.

$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts

이것은 확인되었습니다!


1

내가 어떤 바보인지 보여줄 위험에 처해 ... 나는 오후 내내 내 .h 파일을 찾는 것을 거부하는 XCode로 고통 받고 있습니다.

그런 다음 깨달았습니다.

"XCode 4"를 사용하고 있었기 때문에 " XCode 4 프로젝트 " 라는 폴더의 하위 폴더에 모든 프로젝트를 "지능적으로"배치하기로 결정했습니다 .

폴더 이름의 공백은 XCode를 크게 망쳤습니다!

이 폴더의 이름을 " XCode_4_Projects로 바꾸는 중 "로 바꾸는 것은 제 삶에 기쁨 (그리고 덜 욕설)을 다시 가져 왔습니다.

다시 알림 어떤 이 올해?

누군가가 Apple 개발자에게 말할 수있을 것입니다 ...


1

이 답변 중 어느 것도 나를 위해 일하지 않았습니다. 여기에 무슨 일이 있습니다. 사용자 헤더 검색 경로 빌드 설정에 다음을 정확하게 추가하십시오 (큰 따옴표를 포함하여 복사하여 붙여 넣기) .

"$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include/"

다른 답변과 비교하여 "/ include /"하위 디렉토리가 추가되었습니다. 다른 사용자가 지적했듯이 "재귀"옵션은 아무 작업도 수행하지 않는 것 같으므로 무시해도됩니다.

내 프로젝트는 이제 다음 형식으로 정적 라이브러리 헤더 파일을 가져올 때 성공적으로 보관할 수 있습니다.

#import "LibraryName/HeaderFile.h"

당신은 할 수 없습니다 활성화 할 필요가 항상 검색 사용자 경로 는 꺾쇠 괄호 (와 정적 라이브러리 헤더를 포함하지 않는 설정을 #import <LibraryName/HeaderFile.h>)하지만 시스템 / 프레임 워크 헤더 아니라면 당신은 정말 그렇게 어쨌든 그 일을 할 수 없습니다.


1

위의 답변 중 어느 것도 Xcode 7에서 저에게 효과가 없었지만 좋은 아이디어를 얻었습니다. Xcode 7에서 어려움을 겪는 사람들을 위해 사용자 헤더 검색 경로에 다음을 추가하여이 문제를 해결했습니다 (따옴표 포함).

"$(BUILT_PRODUCTS_DIR)/usr/local/include"

usr/local/include정적 라이브러리의 '공용 헤더 폴더 경로'설정에있는 내용에 따라 상대 URL 부분을 변경합니다.


0

이것은 나를이 질문으로 이끈 관련 문제이므로 문서화를 위해 내 솔루션을 엄격하게 추가하고 있습니다 / 땀을 흘리는 또 다른 영혼 시간을 절약 할 수 있습니다

DropboxSDK.h 파일을 찾을 수 없습니다.

VES가 iOS 용으로 컴파일되도록 며칠을 시도한 끝에 결국이 문제에 부딪 혔습니다. 는 DropboxSDK.h의 범위에 확실히 있었다 search headers나는 심지어에 추가 framework headers검색 경로 include는 D .h직접 시도하고 얻을 훌륭한 길이에 모든 종류의에 갔다 DropboxSDK.h발견했다.

해결책

EXPLICITYDropboxSDK.framework 파일을 Xcode로 드래그하고 체크되어 Project Navigation있는지 확인하십시오 Copy Files if needed. 또한 필요에 따라 타겟이 확인되었는지 확인하십시오.

경고

명시적인 프레임 워크 위치를 설정하는 build phases것이 저에게 효과적이지 않았습니다. .framework를 Xcode 로 드래그 하고 파일이 내 프로젝트에 복사되었는지 확인해야했습니다.

# mbp2015 # xcode7 # ios9


0

이를 수행하는 여러 가지 복잡한 방법이 있으며이 스레드에서는 매우 스마트 한 솔루션이 제안됩니다.

이 모든 솔루션의 주요 문제는 라이브러리 이식성을 심각하게 저하 시킨다는 것입니다.

  • 보관함을 사용하여 새 프로젝트를 시작하고 iTunes 용으로 보관해야 할 때마다 구성 지옥입니다.
  • 프로젝트를 팀이나 고객과 공유해야 할 때마다 어떤 이유로 든 중단 될 수 있습니다 (컨텍스트, Xcode 버전 등 ..).

제 선택은 드디어 Apple이 권장하는 프레임 워크를 사용하는 것입니다 (WWDC 비디오).

너무 쉽고 마지막에 동일한 작업을 수행합니다!

작동하는 것처럼 보이는 또 다른 매우 우아한 솔루션은 Private Cocoapods를 사용하는 것입니다. Cocoapods는 모든 구성 작업, 헤더 복사 등을 수행합니다.

프레임 워크 락!


1
이것을 어디에 설정합니까? simply use frameworks - always -
Neil Faulkner

아무데도 설정되지 않습니다. 단순한 건축 선택입니다. 프레임 워크는 연결 및 관리가 훨씬 쉬운 '최신 라이브러리'입니다. 이 메시지가 표시되는 시점에서 swift는 바이너리 라이브러리를 빌드 할 수 없습니다.
Moose

0

다음은 저에게 동일한 문제를 해결 한 것입니다.

앱 대상과 iMessage 확장 대상이 있습니다. 그런 다음 앱 타겟이 연결하는 2 개의 SDK (내 소유)가있었습니다.

문제는 내 iMessage 대상도 내 2 개의 SDK (별도의 프로젝트)를 사용하고 있었지만 빌드 단계-> 바이너리와 라이브러리 연결에서 서로 연결되지 않았습니다. 내 앱 대상과 일치시키기 위해 2 개의 SDK를 iMessage 대상에 추가해야했는데 이제는 보관됩니다.

따라서 이야기의 교훈은 다음과 같습니다. 확장과 같은 여러 대상이있는 경우 모든 대상이 필요한 라이브러리와 연결되어 있는지 확인하십시오. 시뮬레이터와 장치에 빌드하고 배포 할 수 있었지만 아카이브는 불가능했습니다.


0

업데이트 : Xcode 9

위의 답변은 Xcode 9를 사용하여 저에게 효과가 없었지만이 답변 은 저에게 완벽하게 작동했습니다. 내가 추가 한 $(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include내 "헤더 검색 경로"와 엑스 코드는 아무런 문제없이 링크 내 정적 라이브러리의 헤더를했다.


-18

문제를 해결하고 이렇게하십시오 = Mac에서 새 사용자 계정 생성-새 사용자 계정으로 프로젝트 열기-모든 문제가 사라집니다. 시간을 절약하고 정신을 유지하십시오. 그 모든 괴상한 답변은 도움이되지 않습니다 !!

행운을 빕니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.