development

Xcode 작업 공간에서 프로젝트 간의 종속성을 어떻게 관리해야합니까?

big-blog 2020. 12. 9. 21:07
반응형

Xcode 작업 공간에서 프로젝트 간의 종속성을 어떻게 관리해야합니까?


iOS 앱 프로젝트에서 작업 중이며 json-framework 프로젝트를 작업 영역에 추가합니다. 왼쪽의 프로젝트 탐색기는 두 프로젝트를 모두 표시하고 빌드 체계 선택기는 두 프로젝트의 체계도 표시합니다. 이제 json-framework 프로젝트의 libjson.a 대상을 다른 프로젝트의 iOS 앱 대상에 대한 종속성으로 추가하고 싶습니다. 예상되는 결과는 앱 타겟이 빌드 될 때마다 라이브러리 타겟을 빌드하고 (필요한 경우) 앱 타겟을 이에 연결하는 것입니다. 이 작업을 시도한 방법은 다음과 같습니다.

  • 동일한 계획의 일부로 둘 다 구축하십시오. 내가 시도하는 방법은 내 앱의 구성표를 편집하고 구성표의 '빌드'부분에 'libjson.a'를 추가하고 "암시 적 종속성 찾기"를 선택하는 방법입니다. 그런 다음 내 앱 대상의 대상 편집기로 이동하여 "Build Phases"-> "Link Binary With Libraries"에서 작업 공간 라이브러리 목록에서 'libjson.a'를 선택합니다. 나중에 스키마를 빌드하려고하면 라이브러리 타겟이 빌드되는 것을 볼 수 있지만, 앱 타겟 빌드가 실패하고 링커 오류 "Library not found for -ljson"이 발생하여 실제로 라이브러리가 빌드되었음을 발견하지 않았 음을 나타냅니다. 실제로 프로젝트 탐색기에서 라이브러리의 앱 프로젝트 아래 항목은 여전히 ​​빨간색으로 표시되어 파일이 존재하지 않음을 나타냅니다.

  • json 대상을 명시 적 종속성으로 추가하십시오. 이를 시도하기 위해 빌드 스키마를 수정하지 않고 내 앱 대상의 대상 편집기로 이동하여 '대상 종속성'아래에있는 추가 버튼을 클릭합니다. 작업 공간에있는 다른 프로젝트의 대상이 표시되지 않으므로 이것은 시작이 아닙니다.

  • JSON 프로젝트를 다른 프로젝트로 끌어온 다음 대상을 종속성으로 추가하십시오. 이것이 제가 Xcode 3에서했을 것입니다. 프로젝트 탐색기에서 라이브러리 프로젝트를 가져 와서 앱 프로젝트 위로 드래그합니다. 이렇게하면 '마침'을 클릭하여 닫는 일반적인 '파일 추가'창이 나타납니다. 이제 프로젝트 네비게이터에 라이브러리 프로젝트에 대한 두 개의 항목 이 있습니다 . 하나는 최상위 레벨에 있고 다른 하나는 앱 프로젝트 아래에 있습니다. 이제 대상 편집기를 사용하여 라이브러리 대상을 앱 대상의 종속성으로 추가하고 링크 라이브러리 단계에서 오류없이 연결할 수 있습니다. 그러나 그것은 깨진 것처럼 보입니다 : 네비게이터에 같은 프로젝트에 대한 여러 항목이 있습니다. 이를 수행하는 다른 방법이 있습니까?

동일한 작업 공간의 다른 프로젝트에서 이러한 대상을 연결하는 "Xcode 4-ish"방식으로 간주해야하는 것은 무엇입니까? 같은 작업 공간에있는 여러 프로젝트가 실제로 서로 상호 작용할 수 없다면 부족해 보일 것입니다. 고마워, 그레이엄.


버전 3에서 설명한대로 새 작업 공간을 만들고 두 개의 Xcode 프로젝트를 여기에 끌어 놓은 다음 그림과 같이 중첩하여 테스트 프로젝트를 설정했습니다.

이미있는 경우 형제 프로젝트를 삭제할 수 있습니다.

이것에 빌드를 치면 내가 볼 수있는 한 작동합니다.

구성표 설정 프로젝트 레이아웃

두 개의 프로젝트가있는 경우 내부 경로 혼란이 있다고 생각합니다. "보기"-> "유틸리티"-> "파일 검사기"에서 위치 설정을 조작하고 어떤 효과가 있는지 확인하는 경향이 있습니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

시도 할 또 다른 방법은 Xcode "Preferences…"-> "Source Trees"에서 경로를 설정하고 여기에 설명 된대로 참조하는 것입니다. iPhone 앱에서 간편한 모듈 식 코드 공유 : 정적 라이브러리 및 교차 프로젝트 참조

HTH. 앤디 W.


http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/에서 설명한 것처럼 작업 공간에서 프로젝트 간의 종속성을 가져 왔습니다 .

불행히도 Xcode가 암시 적 종속성을 발견하거나 광고 된대로 빌드의 모든 항목을 인덱싱하는 방법을 찾을 수 없습니다. 둘 다에 대한 해결 방법을 찾았지만 Xcode 4가 성숙함에 따라 수동 구성이 덜 필요하기를 바랍니다.


나는 내 자신의 해결책이 옳지 않다고 생각하면서 같은 질문을하려고했다. 하지만 여기에 언급되지 않았고 작동하는 것 같습니다. 분명히 XCode 4는 진행중인 작업입니다. :)

정적 라이브러리와 라이브러리를 사용하는 앱의 두 가지 프로젝트가있는 작업 공간이 있습니다. 프로젝트는 형제 자매입니다. 각 프로젝트에는 고유 한 체계가 있으며 각 체계는 하나의 대상 만 빌드하도록 설정됩니다. 즉, 작업 공간에 두 개의 프로젝트를 추가했습니다.

정적 라이브러리를 앱의 종속성으로 추가하려면 라이브러리 프로젝트 (Project Navigator)에서 libsomething.a 제품을 앱 대상의 "Link Binary with Libraries"목록으로 드래그하기 만하면됩니다. 그게 다야. 이제 앱을 빌드 할 때 라이브러리 프로젝트가 먼저 빌드 된 다음 연결됩니다. 흥미롭게도 다른 구성 (예 : Debug 대신 Release)을 사용하도록 앱의 구성표를 수정하면 동일한 구성을 사용하여 라이브러리가 빌드됩니다.

그래서 그것은 작동하고 여기에서 진행되는 자동 종속성 검사가 분명히 있습니다. 그러나 그것은 잘못된 것 같습니다. 그런 다음 모달 스키마 편집기 / 관리자도 마찬가지이며 프로젝트 탐색기에 작업 영역 개체가 없습니다. 내가 말할 것이라고는 생각하지 못했지만 Visual Studio UI (bleh)가 훨씬 더 명확합니다.


이 작업을 수행하는 내 방탄 솔루션 :

../MyLibProject/build/Debug-iphoneos 또는 ../MyLibProject/build/Release-iphonesimulator 등을 포함하도록 기본 프로젝트 (lib 아님)의 빌드 설정에서 "디버그 릴리스 별 / 아키텍처 별"설정을 만듭니다. ..
구성에 따라 (디버그 또는 릴리스 옆에있는 +를 클릭하고 "모든 iOS 시뮬레이터 SDK"또는 "모든 iOS SDK"를 선택하여 이러한 종류의 구성을 생성 할 수 있습니다.이 작업은 "헤더 검색"모두에 대해 수행해야합니다) Path "(라이브러리가 일부 헤더 파일을 복사하는 경우) 및"Library Search Paths ". 즉, 각 설정에 대해 4 개의 다른 경로 (debug sim, debug ios , release sim, release ios) 두 프로젝트의 구성이 일치하는지 확인합니다.

이제 lib를 자동 컴파일하기 위해, 즉 종속성을 생성하려면 위에 제공된 "Build Phase-> Link to Binary With Libraries-> +-> select the .a file"조언을 사용할 수 있습니다.

이것이 내가 xcode 4.5의 모든 환경에 대해 올바르게 빌드하고 링크하는 것을 관리하는 유일한 방법입니다.

참고 : "다른 링커 플래그"에 -lmyLib 플래그도 추가했지만 이것이 실제로 필요한지 잘 모르겠습니다.


완벽한 솔루션은 아니지만 프레임 워크와 같은 정적 라이브러리 를 만드는 데 성공 했습니다.


다음 변형을 봅니다.

  1. Explicit dependency프로젝트 [정보]
  2. Implicit dependency작업 공간에서 [정보]

Xcode 사용자 가이드 : Xcode 개념-> '작업 공간의 프로젝트 공유 빌드 디렉토리'에서 Xcode 작업 공간을 참조하십시오.

단일 작업 공간의 모든 프로젝트는 빌드 디렉토리를 공유합니다. 종속성은 자동으로 검색되고 필요한 경우 빌드됩니다.

"Xcode는 암시 적 종속성을 찾기 위해 빌드 디렉토리의 파일을 검사합니다. 예를 들어 작업 공간에 포함 된 한 프로젝트가 동일한 작업 공간의 다른 프로젝트에 연결된 라이브러리를 빌드하는 경우 Xcode는 다른 프로젝트를 빌드하기 전에 라이브러리를 자동으로 빌드합니다. 빌드 구성이이 종속성을 명시 적으로 만들지 않더라도 필요한 경우 명시 적 빌드 설정으로 이러한 암시 적 종속성을 재정의 할 수 있습니다. 명시 적 종속성의 경우 프로젝트 참조를 만들어야합니다. "

참고 URL : https://stackoverflow.com/questions/5483909/how-should-i-manage-dependencies-across-projects-in-an-xcode-workspace

반응형