Programing

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

lottogame 2020. 2. 28. 18:37
반응형

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


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

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

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

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

코드와 리소스를 공유하는 몇 가지 대상이있을 수 있습니다. 이러한 다른 대상은 약간 다른 버전의 앱 (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(많은 사람들이하는) 사용할 때도 사용해야합니다 .


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


간단히

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

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


Xcode 구성 요소

먼저였다 Project통해 그것을 소스 코드, 자원 및 방법 (설정, 빌드, 테스트 ...)에 대한 작업 정의하는 targetsschemes. Project간단한 샘플을 만들 수 있지만 내부에서 다른 프로젝트 소스를 사용해야 할 때해야 할 일- dependency?

Xcode 3 introduced cross-project references[About] which allows you to add a sub-project. It is a type of Explicit dependency and has only project scope visibility. Sometimes it is not convenient to work with such type of dependency and you can run into

Couldn't load Project.xcodeproj because it is already opened from another project or workspace

Xcode 4 introduced Workspace to hold one or more projects. A project can belong to more than one workspace. Along with this appears Implicit dependency[About]. It has workspace scope visibility. For example CocoaPods[About] uses this approach to build a binary.

참고URL : https://stackoverflow.com/questions/21631313/xcode-project-vs-xcode-workspace-differences



반응형