Xcode 프로젝트와 Xcode 작업 영역-차이점


401

전체 생태계가 어떻게 iOS작동 하는지 이해하려고 합니다.
지금까지 나는 대부분의 내 질문에 대한 답을 찾을 수 있었으며 (나를 믿어도 많은 질문이 있었음) 아직 답이없는 것 같습니다.

XcodeProject와 XcodeWorkspace 파일의 차이점은 무엇입니까?

  1. 두 사람의 차이점은 무엇입니까?
  2. 그들은 무엇을 담당합니까?
  3. 팀 / 혼자에서 내 앱을 개발할 때 어떤 작업을해야합니까?
  4. 이 두 파일에 관해 알아야 할 것이 있습니까?

답변:


606

프로젝트 구조와 관련하여 이해해야 할 세 가지 주요 항목이 있다고 생각합니다. 대상 , 프로젝트 및 작업 공간 . 대상 은 제품 / 이진 (예 : 응용 프로그램 또는 라이브러리)을 구축하는 방법을 자세히 지정합니다. 여기에는 컴파일러 및 링커 플래그와 같은 빌드 설정이 포함되며 실제로 제품에 속하는 파일 (소스 코드 및 리소스)을 정의합니다. 빌드 / 실행할 때 항상 하나의 특정 대상을 선택합니다.

코드와 리소스를 공유하는 몇 가지 대상이있을 수 있습니다. 이러한 다른 대상은 약간 다른 버전의 앱 (iPad / iPhone, 다른 브랜딩 등)이거나 자연스럽게 앱과 동일한 소스 파일에 액세스해야하는 테스트 사례 일 수 있습니다. 이러한 모든 관련 대상은 프로젝트 에서 그룹화 할 수 있습니다 . 프로젝트에는 모든 대상의 파일이 포함되어 있지만 각 대상은 관련 파일의 자체 하위 집합을 선택합니다. 빌드 설정도 마찬가지입니다. 프로젝트에서 기본 프로젝트 전체 설정을 정의 할 수 있지만 대상 중 하나에 다른 설정이 필요한 경우 언제든지 해당 설정을 무시할 수 있습니다.

덮어 쓰지 않는 한 모든 대상이 상속하는 공유 프로젝트 설정

재정의하지 않는 한 모든 대상이 상속하는 공유 프로젝트 설정

구체적 대상 설정 : PSE iPhone이 프로젝트의 기본 SDK 설정을 덮어 씁니다.

구체적 대상 설정 : PSE iPhone 이 프로젝트 Base SDK설정을 재정의 합니다.

Xcode에서는 항상 프로젝트 (또는 작업 영역은 있지만 대상은 아님)를 열고 프로젝트에 포함 된 모든 대상을 빌드 / 실행할 수 있지만 프로젝트를 빌드 할 방법 / 정의는 없으므로 모든 프로젝트는 하나 이상의 대상을 필요로합니다. 단순한 파일 및 설정 모음 이상이어야합니다.

실행할 프로젝트 대상 중 하나를 선택하십시오.

실행할 프로젝트 대상 중 하나를 선택하십시오.

많은 경우에 프로젝트 만 있으면됩니다. 소스에서 빌드 한 종속성이있는 경우 하위 프로젝트 로 포함 할 수 있습니다 . 하위 프로젝트는 개별적으로 또는 수퍼 프로젝트 내에서 열 수 있습니다.

demoLib는 하위 프로젝트입니다

demoLib 는 하위 프로젝트입니다

하위 프로젝트의 대상 중 하나를 수퍼 프로젝트의 종속성에 추가하면 변경되지 않은 하위 프로젝트가 자동으로 빌드됩니다. 여기서 장점은 동일한 Xcode 창에서 프로젝트와 종속성 모두에서 파일을 편집 할 수 있으며 빌드 / 실행할 때 프로젝트 및 하위 프로젝트의 대상에서 선택할 수 있다는 것입니다.

서브 프로젝트에서 대상 실행

그러나 라이브러리 (하위 프로젝트)가 다양한 다른 프로젝트 (또는 대상)에서 사용되는 경우 동일한 계층 구조 수준에 배치하는 것이 좋습니다 . 이것이 작업 공간 입니다. 작업 공간은 프로젝트를 포함하고 관리하며, 프로젝트가 직접 포함하는 모든 프로젝트 (예 : 하위 프로젝트가 아님)는 동일한 수준에 있으며 목표는 서로 의존 할 수 있습니다 (프로젝트의 목표는 하위 프로젝트의 목표에 의존 할 수 있지만 그 반대는 아닙니다).

작업 공간 구조

작업 공간 구조

이 예에서 두 응용 프로그램 ( AnotherApplication / ProjectStructureExample )은 demoLib 프로젝트의 대상을 참조 할 수 있습니다 . 이것은 또한 포함하여 가능한 것 demoLib의 당신이 상호 의존성이 많이있는 경우, 그러나, 작업 공간이 더 의미가 없다 (어떤 중복 필요가 있으므로, 참조 만입니다) 하위 프로젝트로 모두 다른 프로젝트에서 프로젝트를. 작업 공간을 열면 빌드 / 실행할 때 모든 프로젝트의 대상 중에서 선택할 수 있습니다.

작업 공간에서 대상 실행

여전히 프로젝트 파일을 개별적으로 열 수는 있지만 작업 공간 파일을 열지 않으면 Xcode가 종속성을 해결할 수 없기 때문에 대상이 빌드되지 않을 수 있습니다. 작업 공간은 하위 프로젝트와 동일한 이점을 제공합니다. 종속성이 변경되면 Xcode는 최신 상태를 유지하기 위해 Xcode를 다시 빌드합니다 (문제가 있지만 안정적으로 작동하지 않는 것 같습니다).

간단히 말해서 귀하의 질문 :

1) 프로젝트에는 파일 (코드 / 리소스), 설정 및 해당 파일 및 설정에서 제품을 빌드하는 대상이 포함됩니다. 작업 공간에는 서로 참조 할 수있는 프로젝트가 포함되어 있습니다.

2) 두 프로젝트 모두 전체 프로젝트를 구성 할 책임이 있지만 레벨은 다릅니다.

3) 대부분의 경우 프로젝트가 충분하다고 생각합니다. 특별한 이유가 없다면 작업 공간을 사용하지 마십시오. 또한 나중에 언제든지 작업 공간에 프로젝트를 포함 할 수 있습니다.

4) 나는 그것이 위의 텍스트에 대한 것이라고 생각합니다 ...

3)에 대한 한 가지 언급이 있습니다. CocoaPods 는 타사 라이브러리를 자동으로 처리하며 작업 영역을 사용합니다. 따라서 CocoaPods(많은 사람들이하는) 사용할 때도 사용해야합니다 .


7
하나의 프로젝트가 두 개의 별도 작업 공간에 속할 수 있습니까? 아니면 하나의 프로젝트를 다른 두 프로젝트와 공유하려면 모두 동일한 작업 공간의 일부 여야합니까?
— Jack

8
물론, 프로젝트는 원하는만큼 많은 작업 공간의 일부가 될 수 있습니다. 작업 공간에 프로젝트를 추가해도 프로젝트 자체에 대한 내용은 변경되지 않습니다. 따라서 하나의 작업 공간, 하나의 프로젝트를 공유하는 두 개의 작업 공간 또는 공유 프로젝트를 하위 프로젝트로 갖는 두 개의 프로젝트에 모두 많은 옵션이 있습니다.
— hagi

1
나는 그것에 대한 경험이 없지만 README 는 " 프로젝트 구조와 설정에 대한 모든 권한을 유지 하고" " 종속성을 단일 작업 공간에 통합하는 대신에 [...] 그들 자신의 Xcode 프로젝트 ". 한마디로 : 프로젝트 / 작업 공간에 전혀 영향을 미치지 않으므로 답변에 포함시켜야하는 방법을 모르겠습니다. 당신은 특히, 카르타고를 사용하는 경우 대답은 여전히 도움이 당신이 당신의 의존성을 구성하는 방법을 결정해야하지만 아무도 카르타고 특정 없습니다.
— hagi

프로젝트 계층 구조에 대해 잘 설명했습니다. 위치에서 하위 프로젝트를 제거 / 이동하면 하위 프로젝트가 기본 프로젝트에 유지됩니까? stackoverflow.com/questions/40214505/…
— Ganesh Guturi

부모 프로젝트 파일에는 복사본이 아닌 하위 프로젝트에 대한 참조가 있습니다. 하위 프로젝트가 제거되면 더 이상 상위 프로젝트를 찾지 못합니다. 일반적으로 파일 시스템 레벨에서 상위 프로젝트에 모든 서브 프로젝트의 로컬 사본이 있는지 확인하려고합니다. CocoaPods 또는 Carthage와 같은 종속성 관리자가이를 수행하거나 git 하위 모듈을 사용할 수 있습니다.
— hagi

102

작업 공간은 프로젝트의 모음입니다. 프로젝트간에 상관 관계가있을 때 프로젝트를 구성하는 것이 유용합니다 (예 : 프로젝트 A는 프로젝트 B로 프로젝트 자체로 제공되는 라이브러리를 포함합니다. 작업 영역을 빌드 할 때 프로젝트 B는 프로젝트 A에서 컴파일 및 링크 됨).
널리 사용되는 CocoaPods 에서 작업 공간을 사용하는 것이 일반적 입니다. 포드를 설치하면 프로젝트와 포드 라이브러리가있는 작업 영역 안에 배치됩니다.


34

간단히

  • Xcode 3는 부모-자식 관계인 하위 프로젝트를 도입했습니다. 이는 부모가 자식 대상을 참조 할 수 있지만 그 반대는 아닙니다.
  • Xcode 4는 형제 관계인 작업 공간을 도입했습니다. 이는 모든 프로젝트가 동일한 작업 공간에서 프로젝트를 참조 할 수 있음을 의미합니다.

2

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

2
  1. 두 사람의 차이점은 무엇입니까?
    작업 공간은 일련의 프로젝트입니다

  2. 그들은 무엇을 담당합니까?
    프로젝트는 소스 코드를 담당합니다. 작업 공간은 프로젝트 간 종속성을 담당합니다.

  3. 팀 / 혼자에서 내 앱을 개발할 때 어떤 작업을해야합니까?
    프로젝트 유형에 따라 선택해야합니다. 예를 들어 프로젝트가 CocoaPods 종속성 관리자를 사용하는 경우 작업 공간이 작성됩니다.

  4. 이 두 파일에 관해 알아야 할 것이 있습니까?
    작업 공간의 경쟁자는 cross-project references[정보]

[Xcode 구성 요소]

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