답변:
프로젝트 구조와 관련하여 이해해야 할 세 가지 주요 항목이 있다고 생각합니다. 대상 , 프로젝트 및 작업 공간 . 대상 은 제품 / 이진 (예 : 응용 프로그램 또는 라이브러리)을 구축하는 방법을 자세히 지정합니다. 여기에는 컴파일러 및 링커 플래그와 같은 빌드 설정이 포함되며 실제로 제품에 속하는 파일 (소스 코드 및 리소스)을 정의합니다. 빌드 / 실행할 때 항상 하나의 특정 대상을 선택합니다.
코드와 리소스를 공유하는 몇 가지 대상이있을 수 있습니다. 이러한 다른 대상은 약간 다른 버전의 앱 (iPad / iPhone, 다른 브랜딩 등)이거나 자연스럽게 앱과 동일한 소스 파일에 액세스해야하는 테스트 사례 일 수 있습니다. 이러한 모든 관련 대상은 프로젝트 에서 그룹화 할 수 있습니다 . 프로젝트에는 모든 대상의 파일이 포함되어 있지만 각 대상은 관련 파일의 자체 하위 집합을 선택합니다. 빌드 설정도 마찬가지입니다. 프로젝트에서 기본 프로젝트 전체 설정을 정의 할 수 있지만 대상 중 하나에 다른 설정이 필요한 경우 언제든지 해당 설정을 무시할 수 있습니다.
재정의하지 않는 한 모든 대상이 상속하는 공유 프로젝트 설정
구체적 대상 설정 : PSE iPhone 이 프로젝트 Base SDK
설정을 재정의 합니다.
Xcode에서는 항상 프로젝트 (또는 작업 영역은 있지만 대상은 아님)를 열고 프로젝트에 포함 된 모든 대상을 빌드 / 실행할 수 있지만 프로젝트를 빌드 할 방법 / 정의는 없으므로 모든 프로젝트는 하나 이상의 대상을 필요로합니다. 단순한 파일 및 설정 모음 이상이어야합니다.
실행할 프로젝트 대상 중 하나를 선택하십시오.
많은 경우에 프로젝트 만 있으면됩니다. 소스에서 빌드 한 종속성이있는 경우 하위 프로젝트 로 포함 할 수 있습니다 . 하위 프로젝트는 개별적으로 또는 수퍼 프로젝트 내에서 열 수 있습니다.
demoLib 는 하위 프로젝트입니다
하위 프로젝트의 대상 중 하나를 수퍼 프로젝트의 종속성에 추가하면 변경되지 않은 하위 프로젝트가 자동으로 빌드됩니다. 여기서 장점은 동일한 Xcode 창에서 프로젝트와 종속성 모두에서 파일을 편집 할 수 있으며 빌드 / 실행할 때 프로젝트 및 하위 프로젝트의 대상에서 선택할 수 있다는 것입니다.
그러나 라이브러리 (하위 프로젝트)가 다양한 다른 프로젝트 (또는 대상)에서 사용되는 경우 동일한 계층 구조 수준에 배치하는 것이 좋습니다 . 이것이 작업 공간 입니다. 작업 공간은 프로젝트를 포함하고 관리하며, 프로젝트가 직접 포함하는 모든 프로젝트 (예 : 하위 프로젝트가 아님)는 동일한 수준에 있으며 목표는 서로 의존 할 수 있습니다 (프로젝트의 목표는 하위 프로젝트의 목표에 의존 할 수 있지만 그 반대는 아닙니다).
작업 공간 구조
이 예에서 두 응용 프로그램 ( AnotherApplication / ProjectStructureExample )은 demoLib 프로젝트의 대상을 참조 할 수 있습니다 . 이것은 또한 포함하여 가능한 것 demoLib의 당신이 상호 의존성이 많이있는 경우, 그러나, 작업 공간이 더 의미가 없다 (어떤 중복 필요가 있으므로, 참조 만입니다) 하위 프로젝트로 모두 다른 프로젝트에서 프로젝트를. 작업 공간을 열면 빌드 / 실행할 때 모든 프로젝트의 대상 중에서 선택할 수 있습니다.
여전히 프로젝트 파일을 개별적으로 열 수는 있지만 작업 공간 파일을 열지 않으면 Xcode가 종속성을 해결할 수 없기 때문에 대상이 빌드되지 않을 수 있습니다. 작업 공간은 하위 프로젝트와 동일한 이점을 제공합니다. 종속성이 변경되면 Xcode는 최신 상태를 유지하기 위해 Xcode를 다시 빌드합니다 (문제가 있지만 안정적으로 작동하지 않는 것 같습니다).
간단히 말해서 귀하의 질문 :
1) 프로젝트에는 파일 (코드 / 리소스), 설정 및 해당 파일 및 설정에서 제품을 빌드하는 대상이 포함됩니다. 작업 공간에는 서로 참조 할 수있는 프로젝트가 포함되어 있습니다.
2) 두 프로젝트 모두 전체 프로젝트를 구성 할 책임이 있지만 레벨은 다릅니다.
3) 대부분의 경우 프로젝트가 충분하다고 생각합니다. 특별한 이유가 없다면 작업 공간을 사용하지 마십시오. 또한 나중에 언제든지 작업 공간에 프로젝트를 포함 할 수 있습니다.
4) 나는 그것이 위의 텍스트에 대한 것이라고 생각합니다 ...
3)에 대한 한 가지 언급이 있습니다. CocoaPods 는 타사 라이브러리를 자동으로 처리하며 작업 영역을 사용합니다. 따라서 CocoaPods
(많은 사람들이하는) 사용할 때도 사용해야합니다 .
간단히
CocoaPods를 사용하여 iOS 프로젝트를 개발할 때 파일이 있으면 CocoaPods 관련 파일로 .xcworkspace
프로젝트를 열어야합니다 .xcworkspace
.
그러나 파일 을 Show Package Contents
가지고 .xcworkspace
있으면 파일을 찾을 수 contents.xcworkspacedata
있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:BluetoothColorLamp24G.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
이 줄에주의하십시오 :
location = "group:BluetoothColorLamp24G.xcodeproj"
.xcworkspace
파일에 참조가.xcodeproj
파일을.
개발 환경 :
macOS 10.14
Xcode 10.1
두 사람의 차이점은 무엇입니까?
작업 공간은 일련의 프로젝트입니다
그들은 무엇을 담당합니까?
프로젝트는 소스 코드를 담당합니다. 작업 공간은 프로젝트 간 종속성을 담당합니다.
팀 / 혼자에서 내 앱을 개발할 때 어떤 작업을해야합니까?
프로젝트 유형에 따라 선택해야합니다. 예를 들어 프로젝트가 CocoaPods 종속성 관리자를 사용하는 경우 작업 공간이 작성됩니다.
이 두 파일에 관해 알아야 할 것이 있습니까?
작업 공간의 경쟁자는 cross-project references
[정보]