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.