iOS/개념

[iOS] 앱을 테스트&배포할 때 알게되었던 개념들 - 1

누알라리 2020. 11. 8. 20:57

개요

그동안 회사를 다니면서 제 개인 프로젝트를 발표하기도 하고, 제가 맡은 기능을 넣은 내부 배포 버전, 라이브 배포 버전도 아카이빙을 해봤는데요.

앱을 테스트, 배포하는 과정에 필수적으로 알아야될 기초개념들이 많이 있어서 글로 정리해놓지 않으면 분명 까먹는다는걸 깨닫고 오늘 이 글로 정리해보고자 합니다.

 

큰 줄기로는

Apple Certification

Provisioning Profile

Code Signing

App Thinning

BitCode

on-demand resource

을 정리하는 글이라고 볼 수 있겠네요.

 


Apple Certification (인증서)

제가 iOS 어플을 처음 만들었을 때 들은 생각은 Apple은 보안을 위해 개발자를 매우 귀찮게 한다는 것이었습니다.

 

"Apple은 기본적으로 자기들이 만든 하드웨어에 Apple의 승인을 받은 소프트웨어만 실행할 수 있게 합니다."

 

따라서 iOS 앱을 만들고 싶은 개발자는 Apple의 승인을 받기 위해 Apple Developer Program에 가입해야 합니다.

 

Apple Developer에 가입하고, 개발자 센터에서 인증서를 받아야 비로소 Apple의 신뢰를 얻은 개발자가 될 수 있습니다.

 

이 말은, Apple이 개발자를 신뢰하여 Apple 대신 개발자가 만든 소프트웨어를 Apple이 만든 기계에서 실행시킬 수 있게 되었다는 말입니다.

 

인증서를 받기위해 개발자는 본인의 CSR에서 공개키와 개인키를 생성하여 애플에 CertSigningRequest 파일을 생성하고, 애플은 확인 후 개발자에게 인증서를 발급해줍니다.

(인증서를 받는 과정은 다른 블로그에서 많이 다루었으니 이 글에서는 생략하겠습니다.)

 

근데 여기서 또 신기한 인증을 해야합니다.

Apple이 만든 기계, 즉 테스트할 디바이스가 개발자를 신뢰해야지만 소프트웨어를 설치할 수 있습니다.

 

이 때 등장하는 개념이 Provisioning Profile 입니다.

 

Provisioning Profile (프로비저닝 프로파일)

"프로비저닝 프로파일은 iOS 디바이스를 Apple 인증서와 연결하는 역할을 담당합니다."

 

프로비저닝 파일의 구성은 위와 같습니다.

 

Apple의 인증을 받은 개발자들(Certificate)이 +

어떤 디바이스(Devices)에 +

어떤 앱(App ID)

을 등록할건지 모여있는 파일이라고 볼 수 있겠네요.

 

App ID는 앱의 Bundle ID,

Certificate는 위에서 만들었던 인증서들

Devices는 앱을 구동시키고 싶은 디바이스들의 UUID가 들어갑니다.

 

프로비저닝 프로파일은 app bundle에 포함되며, 전체 bundle은 code-signed 됩니다. (코드 사이닝은 밑에 다룹니다.)

따라서, 프로비저닝 프로파일은 테스트하고싶은 모든 디바이스에 설치되어야만 합니다.

당연히 단일 장치에 여러 프로비저닝 파일이 포함될 수 있습니다!

만일 프로비저닝 프로파일의 정보가 일치하지 않는다면, 앱은 절대 실행되지 않습니다.

 

지금까지의 개념이 좀 추상적이었는데요,

그래서 이걸 어디서 생성하고 어떻게 등록해야 앱을 테스트기기에서 실행할 수 있느냐?!

 

2-1) 생성

App ID 생성, Device UUID & Certification 등록, Profile 생성 모두 Apple Developer 사이트에서 할 수 있습니다.

developer.apple.com/

 

Apple Developer

Universal App Quick Start Program Get everything you need to prepare your apps for Apple Silicon Macs before they become available to customers. The Universal App Quick Start Program will give you access to all the tools, resources, and support you need

developer.apple.com

 

2-2) 등록

등록은 모두 xCode에서 진행할 수 있습니다.

xCode - Preference - Account 에 Apple Developer에 가입된 계정 기입

xCode - Signing&Certificate에 정보 기입

 

등록화면은 이런식으로 되어있습니다.

 

2-3) 적용

위의 모든 과정이 성공적이라면,

1. 서명된 바이너리가 디바이스로 전송되고,

2. 앱의 동일한 프로비저닝 프로파일에 대해 유효성 검사가 실행되고,

3. 드디어 테스트 디바이스에서 우리가 만든 어플이 실행됩니다!

 

2-4) 개발용 vs 배포용

개발용 배포용이 나눠져 있는데, 인증서, 프로비저닝 프로파일 생성할 때 TYPE만 DEVELOPMENT, DISTRIBUTION로 설정하는것 빼고는 동일합니다.

차이점은 배포용 프로비저닝 프로파일은 인증 디바이스는 등록하지 않아도 됩니다.

하지만 배포를 하기 위해서는 앱스토어의 검수를 통과해야 합니다! (껄껄)

 

배포를 하기 위해 프로비저닝 프로파일이 빌드된 앱은 어떤 디바이스에서도 실행되지 않습니다.

즉, 앱스토어 배포용으로 빌드된 앱은 제출 용도로만 사용할 수 있습니다.

 

애플측에서는 제출된 앱이 프로비저닝 파일이 빌드되어있기 때문에 애플에서 인증한 개발자가 제출한 앱임을 확인할 수 있습니다.

그를 확인한 애플이 앱스토어 검수를 통해 최종으로 앱을 승인하면 앱이 비로소 Apple의 승인을 받는것이기 때문에 모든 iOS 디바이스에서 실행할 수 있게 됩니다.

(따라서 배포용 프로비저닝 프로파일에는 디바이스 등록이 필요하지 않는 것 입니다.)

 

3. Code Signing (코드 사이닝)

그렇다면 코드 사이닝이란 무엇일까요?

 

코드사이닝이란 위에서 한 모든 과정을 통합해서 말하는 개념입니다.

코드사이닝의 원칙이 위에서 말한

 

"Apple은 기본적으로 자기들이 만든 하드웨어에 Apple의 승인을 받은 소프트웨어만 실행할 수 있게 합니다."

 

입니다.

결국 애플의 승인을 받은 개발자가 앱을 개발하여 앱스토어 등록을 위해 애플에 제출하고,

최종적으로 애플이 앱을 승인함으로써 코드사이닝 원칙이 지켜지게 되는 것 입니다.

 


 

앱스토어에 앱을 제출하기 위해서는,

1. xCode에서 제출할 코드를 Archive하여 .ipa 파일을 생성하고,

2. App Store Connect(appstoreconnect.apple.com/)에 배포용으로 제출할 앱을 등록, 검수 요청을 하게 됩니다.

3. 코드사이닝이 제대로 되었다면 성공적으로 앱스토어에 앱이 올라가게 됩니다.

 

그렇다면 배포 후에 알게된 개념들에는 뭐가 있을까요?

 

4. App Thinning (앱 시닝)

앱 시닝이란

앱이 디바이스에 설치될 때 앱 스토어와 운영체제가 그 디바이스의 특성에 맞게 설치하도록 하는 설치 최적화 기술

을 의미합니다.

 

이를 통해 앱의 설치용량을 최소화하고, 다운로드 속도를 향상시킬 수 있습니다.

앱 시닝의 기술 구성요소는 슬라이싱(Slicing), 비트코드(bitCode), 주문형 리소스(on-demand resource)가 있습니다.

 

앱 시닝에 관한 내용은 너무 길어지므로 다음 글로 가겠습니다.

 

 

 

출처:

la-stranger.blogspot.com/2014/04/ios.html

abhimuralidharan.medium.com/what-is-a-provisioning-profile-in-ios-77987a7c54c2

'iOS > 개념' 카테고리의 다른 글

[iOS] if kakao 2020 iOS 세션 후기  (0) 2020.11.22
[iOS] 앱을 테스트&배포할 때 알게되었던 개념들 - 2  (0) 2020.11.08
[iOS] iOS SandBox 란?  (1) 2020.10.25
StackView 톺아보기  (3) 2020.10.04
서버 연동을 위한 기초 이론  (0) 2020.08.27