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 플래그도 추가했지만 이것이 실제로 필요한지 잘 모르겠습니다.
완벽한 솔루션은 아니지만 프레임 워크와 같은 정적 라이브러리 를 만드는 데 성공 했습니다.
다음 변형을 봅니다.
Xcode 사용자 가이드 : Xcode 개념-> '작업 공간의 프로젝트 공유 빌드 디렉토리'에서 Xcode 작업 공간을 참조하십시오.
단일 작업 공간의 모든 프로젝트는 빌드 디렉토리를 공유합니다. 종속성은 자동으로 검색되고 필요한 경우 빌드됩니다.
"Xcode는 암시 적 종속성을 찾기 위해 빌드 디렉토리의 파일을 검사합니다. 예를 들어 작업 공간에 포함 된 한 프로젝트가 동일한 작업 공간의 다른 프로젝트에 연결된 라이브러리를 빌드하는 경우 Xcode는 다른 프로젝트를 빌드하기 전에 라이브러리를 자동으로 빌드합니다. 빌드 구성이이 종속성을 명시 적으로 만들지 않더라도 필요한 경우 명시 적 빌드 설정으로 이러한 암시 적 종속성을 재정의 할 수 있습니다. 명시 적 종속성의 경우 프로젝트 참조를 만들어야합니다. "
'development' 카테고리의 다른 글
typescript 파일에서 정의 파일없이 js 라이브러리를 가져 오는 방법 (0) | 2020.12.09 |
---|---|
Python 사전 액세스 코드 최적화 (0) | 2020.12.09 |
메모리 주문 "획득"과 "소비"는 어떻게 다르며 언제 "소비"가 선호됩니까? (0) | 2020.12.09 |
문제 : Bob의 판매 (0) | 2020.12.09 |
응용 프로그램 풀 ID를 사용하는 IIS 응용 프로그램에서 기본 토큰이 손실됩니까? (0) | 2020.12.09 |