티스토리 뷰
우선 코드 사이닝의 가장 중요한 개념은
오직 애플만이 자신들의 하드웨어에서 어떤 소프트웨어가 동작하도록 허락할 수 있다. |
실제로 매번 앱이 실행될 때마다 앱은 애플로부터 인증을 받았는지
즉, 앱을 실행할 수 있는 권한을 가지고 있는지 확인한다.
1. Apple 인증서
애플만이 앱을 실행할 권한을 가진다면, 개발자들은 어떻게 디바이스에서 테스트할 수 있을까?
해답은, 애플이 개발자를 신뢰하여 애플 대신 앱을 실행할 수 있는 권한을 부여받는다.
인증서의 역할은 개발자가 애플 대신 앱을 사인할 수 있는 권한을 가지게한다.
인증서는 "키체인 접근" 앱에서 만들 수 있는데, 여기서 Certificate Signing Request (CSR) 을 생성해야한다.
1. "키체인 접근" 앱은 공개키와 개인키를 자동으로 생성한다.
(이 키는 "키체인 접근" 앱의 "Key" 카테고리에서 확인할 수 있다.
또한, 개발자가 누구인지 증명하는 키이므로, 키를 잃어버리면 더 이상 앱 스토어에 배포할 수 없다.)
2. 이 키를 이용하여 CSR 을 생성한다.
이 파일은 개발자의 이름, 이메일, 공개키를 포함하고 있고 개인키를 이용하여 사인된다.
이 매커니즘으로 애플은 정말 사용자가 이 것을 만들었음을 알 수 있게 된다.
이 CSR 을 업로드하면 애플은 인증서를 발급해준다.
개발자는 이 인증서를 "키체인 접근" 앱에 추가할 수 있고 이는 "My Certificate" 카테고리에 추가된다.
2. Provisioning Profile
디바이스에서 앱을 실행하기 위해서는 내 디바이스가
개발자를 신뢰할 수 있는지를 알아야
앱 설치를 허락할지 말지를 결정할 수 있다.
이 역할을 해주는 것이 Provisioning Profile 이다.
프로비저닝 프로파일은 iOS 디바이스들을 Apple 인증서와 연결하는 역할을 담당한다.
이 결과로 만들어진 *.mobileprovision 파일은
iOS 앱을 컴파일하는 과정에서 사용되며
앱을 테스트하려고 하는 디바이스에 설치가 되어야한다.
프로피저닝 포탈에서 받은 프로피저닝 프로파일을 더블클릭하면
XCode 가 인식하고 자동으로 프로비저닝 프로파일 목록에 저장한다.
개발자는 복수의 프로비저닝 프로파일을 가질 수 있다.
하지만 프로비저닝 프로파일을 생성할 때 연동한 App Id 와
실제 컴파일하려는 앱에 설정된 bundle Id 가 일치해야하므로
결국은 각 프로젝트마다 하나의 프로비저닝 프로파일을 만들게된다.
3. 빌드 및 실행 과정
1) Ad-Hoc 배포
위 과정을 거치면
1. 개발자를 증명하는 공개키와 비밀키
2. 애플이 인정해준 앱 서명 허락 인증서
3. 디바이스에 설치 가능한 프로비저닝 프로파일
총 3가지를 가지게 된다.
이 3가지를 이용하여 XCode 에서 빌드를 하면
.app 파일을 얻게되는데, .app 패키지 내부에는 2가지가 존재한다.
1. 실제 프로비저닝 프로파일 : 컴파일 시 사용된 프로비저닝 프로파일 파일이 복사된다.
2. "_CodeSignature" 폴더 : CodeResources 란 파일(.plist)을 담고 있고, 패키지에 있는 모든 파일의 암호화된 해쉬정보를 담고있다.
앱이 최종적으로 디바이스에 설치될 때
1. .app 에 포함된 프로비저닝 프로파일이 애플에서 서명된 것인지 확인 2. "CodeResources" 란 파일에 기록된 각 파일의 해쉬 정보를 실제의 파일들과 확인하여 빌드 후 수정이 되지 않았음을 확인 3. 디바이스에 .app 에 포함된 프로비저닝 프로파일이 있는지 확인 |
총 3가지 확인 후 실행된다.
2) Enterprise 배포
개발자의 회사가 많은 아이폰 유저들을 가진다고 하면,
애플은 회사를 신뢰할 수 있는 충분한 이유가 있으므로
개발자에게 정말로 애플인 것처럼 개발한 앱들을 서명할 수 있는 인증서를 발급해준다.
따라서 이 인증서로 서명된 앱들은 따로 확인을 거치지 않고
모든 디바이스를 애플에 등록하지 않고도 개발된 앱을
디바이스에서 바로 실행할 수 있도록 해준다.
3) App Store 에 배포
Enterprise 배포와 비슷하지만 이 배포 과정에 포함되는 프로비저닝 프로파일은
빌드된 앱이 어떤 디바이스에서도 실행이 되지 않도록한다.
App Store 를 위해 빌드된 앱은 제출용도 말고는 어디서도 쓸 수 없다.
애플 측에 앱을 제출했을 때의 해당 앱은 개발자에 의해 이미 서명되었고
프로비저닝 파일을 가지고 있기 때문에 애플에 인증된 개발자가 제출한 앱임을 확인할 수 있다.
애플 측에서 앱 배포를 승인하면 애플에서 자신들의 서명을 다시함으로써
모든 iOS 디바이스에서 실행될 수 있도록 해준다.
4. 출처
http://la-stranger.blogspot.kr/2014/04/ios.html?m=1
'iOS 개발 > iOS' 카테고리의 다른 글
dispatch_queue 의 sync, async 와 Thread 의 관계 (1) | 2017.02.23 |
---|---|
[iOS] Carthage 의 장점 및 사용법 (0) | 2017.02.01 |
[iOS] TextKit 의 사용 (탐지 및 글씨 제외영역 잡기) (0) | 2016.12.02 |
[iOS] 안면 인식 (CIDetector) (0) | 2016.11.29 |
[iOS] CoreImage Filter (CIFilter) 사용하기 (0) | 2016.11.28 |
- Total
- Today
- Yesterday
- NSManagedObjectContext
- Swift
- applicationWillResignActive
- Swift 3
- CIImage
- delegate
- Block
- dictionary
- RunLoop
- NSManagedObject
- Arc
- UIView
- 꺼내먹어요
- EffectiveObjectiveC
- 읽기 좋은 코드가 좋은 코드다
- Swift 3.0
- docker
- coredata
- workerThread
- AWS
- optional
- CGImage
- set
- string
- HTTP
- NSManagedObjectModel
- Swift3
- Swfit
- ios
- thread
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |