[iOS] Project , Target, Scheme, Code Signing, Provisioning

Youngwoo Lee·2021년 11월 18일
0

iOS

목록 보기
33/46
post-thumbnail

참고자료

sweetdev - Xcode Target 분리하기
Zedd - Xcode Target, Project, Workspace, Scheme 그리고 Build Setting
Code signing Help Apple


WorkSpace는?

Workspace는 관련있는 프로젝트를 묶어 주는 컨테이너이다. 유틸리티 프로젝트, macOS 프로젝트, iOS 프로젝트를 만들어서, 3개를 묶어서 Workspace로 관리할 수 있다.

이전에 진행했던 프로젝트인데, Workspace에서 프로젝트와 CocoaPods가 묶여 있는 것을 볼 수 있다


Project란?

Project는 모든 파일, 리소스, 하나 이상의 소프트웨어를 빌드하는데 필요한 정보의 저장소이다. 연관된 Target의 집합소이다.
프로젝트는 product를 build하는 방법을 명시하는 target을 하나 이상 포함합니다.
프로젝트는 프로젝트의 모든 target에 대한 기본 build setting을 정의합니다.

Xcode의 프로젝트 파일에는 다음 정보가 들어있습니다.

  • 소스파일에 대한 참조(reference)
  • structure navigator에서 소스파일을 구성하는데 사용되는 그룹
  • Project-level build configuration. 프로젝트에대해, 둘 이상의 build configuration을 지정할 수 있습니다. 예를들어, 프로젝트의 Debug 및 release build setting이 있을 수 있습니다.
  • 각 target이 지정하는 target
  • 프로그램을 디버깅 하거나 테스트 하는데 사용 할 수 있는 실행가능한 환경(executable environment ). 각 실행환경은 다음을 지정합니다.

Target이란?

A target specifies a product to build, such as an iOS, watchOS, or macOS app. When you create a project from a template, targets are added automatically. If you choose Unit and UI tests when creating a project, the project includes targets for the main app and the test apps. A watchOS app, that is dependent on an iOS app, has targets for the iOS app, WatchKit extension, and WatchKit app. macOS apps can have multiple targets too. Choose a target in the project editor to view and modify the target’s settings. Click the Add button (+) in the project editor to add a new Application, Framework & Library, Test, or Application Extension target to your project.

Target은 iOS, watchOS, macOS 앱과 같은 빌드할 Product를 지정하는 것이다.

간단하게 말하자면, Target이 뭔지 말하자면, Xcode에서 Build를 실행하여 생성되는 Product입니다.
여기서 말하는 Product는 앱이 될 수도 있고, 프레임워크가 될 수도 있고, Unit Test번들일 수도 있습니다.
iOS 앱에 의존하는 WatchOS 앱은 iOS 앱, WatchKit 확장 및 WatchKit 앱을 대상으로 합니다.

보이다시피 일단 프로젝트는 하나 이상의 Target을 생성할 수 있다는 것을 볼 수 있습니다.


Configuration과의 차이점은

Configuration은 dev, inhouse, production 등 하나의 target에 다른 버전의 앱을 만드는 것이고,
Target 분리는 국내와 다른 UI로 해외 앱 출시, 무료/유료버전 구분 등을 위해 사용된다.


Build Settings

Build Setting은 product 빌드 프로세스의 특정 측면을 수행하는 방법에 대한 정보가 들어있는 변수입니다.
예를들어, build setting의 정보는 Xcode가 컴파일러에 전달하는 옵션을 지정할 수 있습니다.

아래 Target > Build Settings와 Build Phases가 거기에 속한다.

그리고 중요한 사실 하나!

Target은 Project build setting을 상속받습니다.

위 처럼 Project > Build Settings를 통해서 볼 수 있는데,
그러니까 Target은 기본적으로 Project Build Setting을 상속 받으며,
Target level에서 다른 설정을 지정함으로써 Project Setting을 Override할 수 있다는 것으로 보입니다.


Scheme

Scheme은 빌드 된 시점에서, 실행 설정, 앱이 실행된 시점에서 필요한 설정들을 모아 둔 것이다. 하나의 Product에 대한 Test 조건을 말하는 것이다.

보면, App Language, App Region 등을 설정해줄 수 있는 것을 볼 수 있다


Signing Certificate

Code Signing을 하기 위해서 필요한 인증서이다. 팀별로 인증서를 소유하고 있으며, Develope인증서와 Distribution 인증서 두 가지 종류가 있다. Code Signing 과정에 사용된다

처음에는 Signing가 자동으로 관리되도록 설정되어있는데, 보통은 자동으로 하지 않고 수동으로 관리한다고 한다.


Code Signing

앱을 빌드하는 과정, 혹은 아카이브 하는 과정 중에 앱 서명을 수행한다. 서명한 이후에는 위변조가 되지 않았다는 것을 증명하기 위해서 해당 서명이 사용된다.

아카이브 관련 참고 링크
https://scshim.tistory.com/182


Provisioning Profile

Provisioning Profile은 여러개의 Certificates와 App Id, UUID 들을 갖고 있는다.

이 정보들을 이용해 앱을 설치할 지 검사한다.

쉽게 말해서 Provisioning Profile은 해당 기기가 배포 혹은 개발에 허용이 된 기기인지를 검증하는 것이다. Signing Certificate와 같이 Development 와 Disptribution 두 가지 종류가 있다. Target마다 Provisioning Profile을 관리 한다는 점에서, Team마다 관리하는 Signing Certificate와 차이점이 있다.

profile
iOS Developer Student

0개의 댓글