iOS 공부하는 감자

App Project, Info.plist 속성 본문

Xcode

App Project, Info.plist 속성

DongTaTo 2022. 2. 7. 20:36
반응형

<PROJECT - Info> - 정리가 잘 되어있는 블로그

Deployment Target :

OS 지원 버전을 의미한다. Deployment Target은 Project와 Targets에서 설정 가능하고, Targets의 Deployment Target은 Project의 Deployment Target을 override한다. 

Project와 Targets의 Deployment Target이 다른 경우 Targets의 Deployment Target이 Minumum버전이 된다.

 

Targets에서 iOS 앱이 지원할 최소 버전 설정하기 :

TARGETS - General - Deployment Info 에서 설정 가능

 

 

Configurations : 

- Debug: 커멘드+R을 사용하여 프로젝트를 Run 시킬 때 Build Configuration(빌드구성)을 Debug로 하겠다는 의미 (실행파일에 디버깅 정보를 포함하여 속도가 릴리즈모드에 비해 느림)

- Release:  아카이브 또는 Profile할 때 사용 (코드를 최적화하여 실행파일의 크기를 최대한 줄여 디버그 모드에 비해 빠름 / 릴리즈 모드는 앱스토어에 올라가는 환경)

하단의 + 아이콘을 통해 Configuration을 추가할 수 있다.

 

Localizations : (참고)

- 로컬라이징 : 현지화 (그 나라의 실정에 맞추어 수정하는 것)

- 사용자의  기본 설정 언어에 따라서 번역된 텍스트를 보여줄 수 있다.

 

 

 

<PROJECT - Build Settings>

Build Setting은 아주 중요하고 민감한 값이다.

설정을 어떻게 하는지에 따라 생산성에 큰 영향을 미치고, 심지어는 알 수 없는 런타임 오류를 발생할 수도 있다.

따라서 Build Setting의 값을 수정할 때에는 충분한 이유가 있어야 하고, 해당 내용이 팀 전체에 공유가 되어야 한다.

 

project.pbxproj 파일이 Build Setting의 내용을 저장하는데, project.pbxproj 파일의 내용은 읽기 매우 불편해서 Build Setting에 변화가 생겼을 때 코드리뷰 단계에서 이 변경사항을 눈치채기 어렵다.

 

Xcode에서 제공하는 여러 도구를 잘 확용할 수 있어야 문제 상황에 대처하기 수월하다.

1. 수정된 Build Setting 값만 모아보기

잘못된 Build Setting으로 문제가 발생했다면, 먼저 "기본값이 아닌" 값을 사용하는 Build Setting을 살펴봐야 한다.

Customized 탭에서 기본값이 아닌 내용만 살펴볼 수 있다.

+ All 탭에서도 기본값이 아닌 값은 굵게 처리되어 쉽게 확인 가능

 

 

2. Target Build Setting보다는 Project Build Setting을 이용하기

같은 프로젝트 안에서 개발용 타겟과 배포용 타겟을 별도로 관리하는 경우가 많다.

이런 경우 각각의 타겟별로 Build Setting을 바꿀 수 있다.

하지만 가급적이면 Targets의 Build Setting을 수정하지 않는 것이 좋다. 왜냐하면 두 타겟의 Build Setting은 달라야 하는 경우보다 같아야 하는 경우가 더 많기 때문이다.

 

예를 들어, 개발을 하던 중 어떤 문제를 해결하기 위해 개발용 타겟의 Build Setting을 수정했다가 해당 변경으로 문제가 해결되어 나머지 개발을 진행하고 배포한다. 만약 배포용 타겟의 Build Setting에 변경사항을 적용하지 않고 배포를 시도한다면 개발용 타겟과 배포용 타겟의 Build Setting에 차이가 있기 때문에 배포시점이 다가와서 앱에 문제가 발생할 수 있다.

 

따라서 Build Setting을 바꿀 때는 이 변경이 "프로젝트 전체에 걸쳐 적용되어야 하는 변경인지, 이 타겟에 대해서만 적용되어야 하는 변경인지"를 염두에 두어야 한다. (가급적 Build Setting 변경은 프로젝트 단위로 하기!)

 

 

3. Level 단위로 Build Setting 보기

Build Setting의 Level 탭에서는 현재 적용되어 있는 Build Setting이 어느 차원에서 정의되었는지 (기본값을 쓰고 있는지, 프로젝트에 적용된 값을 쓰고 있는지, 타겟별로 override를 한 것인지, xcconfig에서 정의된 값을 쓰는지) 등을 볼 수 있다.

 

 

4. 각 Build Setting의 의미 파악하기

Build Setting의 각 값에서 Quick Help를 통해 각 값들에 대한 상세한 설명을 볼 수 있다.

 

 

5. 불필요한 Build Setting의 변경을 최소화

Build Setting을 변경할 경우는 많다. 하지만 각 값의 의미를 이해하지 못한 상태에서 누군가의 답변에 따라 무심코 Build Setting을 변경하지 않는게 좋다.

때로는 시간을 투자하여 프로젝트 내 불필요하게 override하고 있는 Build Setting이 있는지, 또 override하는 값들은 왜 override하게 되었는지를 명확하게 할 필요가 있다.

 

xcconfig 파일을 통해 중요 빌드셋팅을 별도 문서로 관리하는 것도 좋은 방법이다.

 

 

 

<PROJECT - Package Dependencies> : (참고)

Xcode 11부터 생긴 기능이다.

이전에도 코코아팟과 카르타고 등의 third-party tool이 사용 가능했지만 이때부터 Apple에서 이 종속성을 관리하기 위한 공식 지원을 추가한 것.

SPM(Swift Package Manager)이라고 부르는 듯!

 

아직 지원하는 라이브러리가 많지 않다고는 하지만 .. 찾아보니 코코아팟, 카르타고보다 훨씬 적용(?)하기 편했다.!

 

 

 

 

<TARGETS - General>

Identity :

  • Display Name : 어플리케이션 이름
  • Bundel Identifier : 앱스토어에 앱을 배포할 때 사용할 이름
  • Version : 사용자가 보게될 내 앱의 버전
  • Build : 동일한 버전 내에서 업데이트를 할 때 설정

 

Deployment Info : 배포와 관련된 환경

  • Target : Minimum OS 버전을 설정
  • Device : 어떤 디바이스에서 앱을 실행할 수 있는지 설정
  • Device Orientation : 앱의 실행 화면을 설정 (가로, 세로, 둘 다)
  • Status Bar Style : 디폴트 값을 추천 (맨 위 상태바에 대한 설정)
    • Hide status bar : 상태 표시줄 숨기기
    • Requires full screen : 전체 화면 미디어 표시를 위해 상태 표시줄을 일시적으로 숨기기

 

App Icons and Launch Images :

  • App Icons Source : 우측 화살표로 들어가서 Assets의 아이콘들을 입력해줘야 함
  • Launch Screen File : 앱 실행할 때 나오는 첫 화면

 

Supported Intents : (참고)

SifiKit등의 확장 기능을 추가하고 구성한다.

 

 

Frameworks, Libraries, and Embedded Content :

앱에서 사용하는 라이프러리를 embedded 시킬지, 시키지 않을지에 대한 설정

embedded 시키는 경우 앱에 라이브러리가 포함된 상태로 배포되고,

embedded 시키지 않는 경우 앱을 실행할 때 라이브러리가 참조된다.

 

 

Development Assets :

프로덕션에는 제공되지 않지만 개발 중에 사용할 수 있는 Assets을 프로젝트에 추가

 

 

 

<TARGETS - Signing & Capabilities>

Signing :

애플에서 받은 개발자 인증관련 항목이다.

Automatically manage signing을 하면 내 인증과 관련한 자료를 Xcode가 서버에서 자동으로 가져온다.

 

Capability :

앱이 사용하는 기능을 추가할 수 있다. (Apple Pay 등 애플의 앱 서비스를 구성하는 기능들)

상단의 "+ Capability" 버튼을 클릭해서 기능 추가

 

 

<TARGETS - Resource Tags>

Xcode는 태그 생성 및 편집, 태그와 연결된 리소스를 추가, 삭제하는 툴을 제공한다. 해당 툴은 태그와 연결된 리소스가 운영체제에서 다운로드되는 시기를 지정할 수도 있다.

 

 

<TARGETS - Info>

HTTP 접속을 허용하거나, 권한 허용에 관한 알림을 줄 때 왜 Push를 해야하는지에 대한 설명을 적어야 하는 곳이다.

+ 설정해놓은 다양한 정보들을 Key : Value 형식으로 볼 수 있는 탭인 것 같다.

 

 

<TARGETS - Build Settings>

타겟 단위로 빌드 셋팅을 설정할 수 있다.

 

 

<TARGETS - Build Phases>

내 앱이 어떤 file들을 갖고 배포가 되는지 볼 수 있다.

빌드 시 수행하는 작업들을 설정할 수 있다.

 

 

<TARGETS - Build Rules>

Xcode에는 컴파일할 때 표준 규칙이 있고, Build Rules 탭을 사용하여 규칙을 추가할 수 있다.

ex) 컴파일 과정에서 컴파일러가 자동으로 어떤 동작을 수행하도록 추가하는 탭?!

 

 

 


<Info.plist> (참고)

Information Property List Files

Info.plist는 실행 패키지에 관한 필수 설정 정보가 포함된 텍스트 파일이다.

사용자에게 더 나은 환경을 제공하기 위해 각 앱 또는 번들에 있는 메타데이터를 사용한다. 메타데이터는 다양한 방식으로 사용되며, 앱이 시스템에 메타데이터를 제공하는 방식으로 Info.plist라는 파일을 통해 제공한다.

 

Xcode 버전이 올라가면서 Info.plist에 있던 여러 항목들이 프로젝트 설정으로 넘어갔다. (TARGETS-Info)

컴공선배 튜터님께서는 아마 Target별로 다른 Info가 적용될만한 항목들을 옮긴 것 같다고 말씀하셨다.!

 

<구성요소>

Info.plist구성요소 참고한 링크

Information Property List

  • Localization native development region : 앱이 만들어진 지역, ISO 639등 언어 분류를 위한 코드
  • Executable file : 실행 가능한 번들의 이름
  • Bundle identifier : 애플리케이션의 고유 식별자
  • InfoDictionary version : Info.plist의 현재 버전 (자동으로 키를 더하기 때문에 수정x)
  • Bundle name : 사용자가 보는 어플리케이션의 실제 이름
  • Bundle version string(short) : 번들의 배포 및 버전 번호, 배포용으로 주로 사용 (제품이 될 가능성이 있는 베타 버전, 상당한 버그가 나타나지 않는다면 출시할 준비가 되었음을 의미)
  • Bundle version : 번들의 빌드 버전 / 번들의 버전 번호, 배포용이 아닌 내부 빌드용으로 사용
  • Application requires iPhone environment : 반드시 아이폰에서 작동해야 하는지 체크
  • Application Scene Manifest : Scene 기반의 생명주기 관련 정보 설정
    • Enable Multiple Windows : 여러 Scene을 설정할 수 있는지 체크하는 속성
    • Scene Configuration : 새 Scene을 만들 때 UIKit의 기본 설정값을 설정
      • Application Session Role : 2가지 역할 (Application / External Display)
        • Item 0 (Default Configuration)
          • Configuration Name : 설정 이름
          • Delegate Class Name : 대신 코드 실행해줄 클래스 이름
          • Storyboard Name : 스토리보드 이름
  • Application supports indirect input events : 간접 입력 장치 지원 유무를 선택하는 속성
  • Launch screen interface file base name : 런치스크린 파일 이름
  • Main storyboard file base name : 메인 스토리보드 파일 이름
  • Required device capabilities : 디바이스와 연관된 특성을 설정 (가속도, AR, camera, gps 등)
  • Supported interface orientations : 앱에서 지원하는 회전 처리 설정
  • Supported interface orientations (iPad) : 앱에서 지원하는 회전 처리 설정 (iPad 전용)
  • Privacy 항목들 : 사용자에게 특정 권한(ex-카메라)을 사용할 수 있도록 요청하는 내용들 (참고)
    • Privacy - Access to a File Provide Domain Usage Description : 앱이 파일 공급자가 관리하는 파일에 접근해야 하는 이유을 사용자에게 알려주는 메시지
    • Privacy - AppleEvents Sending Usage Description : 앱이 Apple 이벤트를 보낼 수 있는 기능을 요청하는 이유를 사용자에게 알려주는 메시지
    • Privacy - Bluetooth Always Usage Description : 앱이 블루투스에 접근해야 하는 이유를 사용자에게 알려주는 메시지
    • Privacy - Calendars Usage Description : 앱이 사용자의 캘린더 데이터에 접근하는 이유를 사용자에게 알려주는 메시지
    • Privacy - Camera Usage Description : 앱이 카메라에 접근해야 하는 이유를 사용자에게 알려주는 메시지
    • Privacy - Contacts Usage Description : 앱이 연락처에 접근해야 하는 이유를 사용자에게 알려주는 메시지
    • Privacy - Desktop Folder Usage Description : 앱이 사용자의 데스크탑 폴더에 접근해야 하는 이유를 사용자에게 알려주는 메시지
    • Privacy - Documents Folder Usage Description : 앱이 사용자의 문서 폴더에 접근해야 하는 이유를 알려주는 메시지
    • Privacy - Downloads Folder Usage Description : 앱이 사용자의 다운로드 폴더에 접근해야 하는 이유를 알려주는 메시지
    • Privacy - Driver Extension Usage Description : 앱이 시스템 확장 번들을 설치하려고 하는 이유를 사용자에게 알려주는 m
    • Privacy - Face ID Usage Description : 앱이 페이스 아이디 인증하는 기능을 요청하는 이유를 사용자에게 알려주는 M
    • Privacy - File Provider Presence Usage Description : 다른 앱이 관리하는 파일에 접근할 때 앱이 알려야 하는 이유를 사용자에게 알려주는 메시지
    • Privacy 관련 항목이 너무 많다.. 너무 노다가같아서 쭉 읽어보고 필요할 때 찾아봐야지...

 

 

 

 

 

 

 

 

반응형

'Xcode' 카테고리의 다른 글

Xcode) GItHub 연동하기  (0) 2022.07.08