본문 바로가기

IOS/IOS_Develop

[ ios 개발 ] 02 . Certificate와 Provisioning Profile 발급하기

[ 개발자 계정 준비하기 ]

[개발자 계정]

Apple Developer 

=>계정은 대략 12만9천원 ( 99$ )이며 사용기간은 1년이다 . 

 

[준비물]

=>애플 계정 / 계정내 국가,지역 인증 / 이메일 인증 / 휴대폰 번호 인증 / 이중 인증 설정

만약 이중인증 옵션이 켜져 있지 않다면

=>Apple ID의 이중 인증 을 참고하자

 

[계정 구매]

=>애플 계정 구매 를 참고하자.

 


[ Certificate ]

[ 코드 서명 ]

임대차 계약서처럼 우리는 서명을 통해 계약의 당사자를 확인하고 , 계약조항의 변경이 없음을 서로 합의한다 .

이와 비슷하게 코드서명은 코드를 디지털 서명하는 과정을 말한다 .

코드서명을 통해 "누가 코드를 작성하였는지" "서명 이후 코드가 변경되지 않았는지" 등의 사실을 보증한다 .

ios 에서는 코드서명을 위해 다음의 것들이 필요하다 .

 


 

[ 애플 발급 인증서 ]

졸업 증명서 혹은 재직 증명서와 같이 인증서는 신뢰할 수 있는 기관에서 제공할때 더욱 강력하다 .

Apple에서도 인증서를 발급 받을 수 있는데 , 해당 증명서를 통해 애플이 인정한 개발임을 증명한다 .

=> ios 앱을 개발할 Mac에서  LauchPad - 기타 - 키체인 접근 실행후 ,

상단의 메뉴바에서 키체인 접근 - 인증서 지원 - 인증기관에서 인증서 요청을 눌러 인증서 지원창을 켜준다.

 

=>디스크에 저장됨을 선택하고 , 이메일 주소를 입력후 저장을 마친다 .

=>위의 과정을 거치면 Certificate Signing Request 즉 ,CSR이라는 인증 서명 요청을 다운 받을 수 있다 .

=>해당 파일은 "인증서 발급을 위해 필요한 정보를 담고 있는 데이터" 이다 .

즉 , " 나는 누구고 이 공개키가 포함된 인증서를 만들고 싶다" 라는 내용이 있는 , 일종의 인증서를 위한 신청서이다 .

=>이때 , 공개키는 CSR 파일을 생성시 키체인에서 자동으로 생성하는 공개키/개인키의 키쌍중 공개키를 말한다 .

=>또한 CSR의 생성시 생성되는 키쌍에 대한 정보도 지정이 가능하다 . 기본값은 위와 같다 .

 


 

[ Certificates 발급 ]

Apple Developer Center에 접속

우측 상단 Account를 눌러 Certificates,Identifiers & Profiles (인증서와 프로파일 관리 메뉴) 를 선택한다.

=> + 버튼을 눌러 새로운 Certificate를  생성하자.

=>Apple Development 인증서는 Xcode 11 이후부터 iOS, macOS, tvOS, watchOS 같은 앱들의 

development version 을 서명하는데 사용한다 .프로젝트 빌드시 필요한 인증서이다 .

=>Apple Distribution 인증서는 Xcode 11 이후부터 App Store 제출용이나 Ad Hoc 등 배포 용도의 앱들을 서명하는데

사용된다.

 

=>방금 생성한 CSR 파일을 업로드 해준다 .

=>업로드후 나머지 과정을 거치면 해당 파일이 생성된다 . 더블클릭하여 설치해주자 .

로컬에 설치하면 , KeyChain 쪽에 아까  CSR 을 생성 할 때 생성된 개인키와 합쳐져 하나의 Signing Certificate

(서명 인증서)가 된다 .

=>해당 서명인증서는 코드서명에 사용되는 digital identity이다 .

=>키체인은 icloud 가 아닌 시스템으로 선택하자.

 

=>만약 인증서를 신뢰 할 수 없다면 키체인 접근 => 인증서 우클릭 => 정보가져오기

해당 부분을 항상 신뢰로 바꾸어 준다.

=>해당 키를 살펴보면 , 공개키를 포함하여 SCR을 생성하는 동안 제공한 모든 데이터와 만료날짜 발급자 정보등의 추가 데이터가 포함된다 개인키는 암호화 기능에서 서명생성하는데 사용된다 .

=>이렇게 애플에서 발급한 인증서와 개인키가 합쳐져서 하나의 서명 인증서가 된다 .

 

=>생성된 서명인증서를 사용해 앱을 서명하고 , 시스템은 유효한 서명을 통해 누가 앱에 서명했는지 식별하고

앱이 서명된 이후 수정되지 않았음을 알 수 있다 .

=>현재까지의 과정은 다음과 같다 .

  1. 엑스코드에서 요청으로
  2. 키체인에서 CSR을 생성한다
  3. 애플에 인증서를 요청한다
  4. 다운후 키체인에 서명 인증서를 형성한다 .

[ Provisioning Profile ]

[ 서명인증서 ]

이렇게 발급받은 서명인증서로 앱을 서명하면 디바이스에서 실행이 가능할까 ?

=>아니다 . Apple 인증서로 서명되어 AppStore에 올라간 App 만이 ios 기기에서 실행이 가능하다 .

 

그렇다면 Apple 인증서가 아닌 , Apple 이 "발급한"인증서를 통해 앱을 실행하려면 어떻게 해야 할까?

 


 

[ Provisioning Profiles ]

앱을 빌드시

  1. 해당 앱은 어느 디바이스에서 실행 가능한지 ?
  2. 해당 앱은 언제 실행이 가능한지 ?
  3. 앱의 권한은 어떤 것이 있는지

등의 제약조건을 명시후 , 실제 디바이스가 해당 제약조건과 일치하다면 실행이 가능할 것이다 .

다음과 같이 , 디바이스내에서 앱을 실행하기 위한 규칙을 모아놓은 것이 "프로비저닝 프로파일"이다 (공급 프로필?)

=>앱 실행에 필요한 App ID / Entitlement,Certificate,DeviceID등의 정보를 담고 , 실제 구동 디바이스 환경이

위 조건에 부합하면 앱 실행을 허용한다 .

즉 , 특정 기기에서 특정 앱을 실행 할 수 있는지 확인하는데 필요한 정보의 컨테이너이다 .

 

 


 

[ 생성전 과정 : 01 . ID 생성 - Identifiers]

=>앱에 사용할 ID를 생성 할 것이다. 내가 만들 앱을 등록하는 절차이다 . 

 

=>Select a type 에서는 App IDs 선택후 Continue

=> Bundle ID 에는 역도메인 형태의 문자열이 앱  ID가 된다. 

보통 번들 ID는 com.개발회사(개발자이름).앱이름 형식을 가진다.  Description은 표기되는 Name이다.

=>애플로 로그인 하기 등 앱의 기능을 넣는다면 해당 기능에 체크가 필요하다 .

애플로 로그인을 사용하기에 해당 부분을 체크 해주었고 , 추후에 수정 역시 가능하다


[ 생성전 과정 : 02 . 기기등록 - Devices]

=>개발할 앱을 테스트 할 장비 (ex) 아이폰)를 등록한다 . 테스트 플라이트에 개발중인 앱을 등록하기 전까지 맥 장비의 XCODE에서 바로 빌드를 넣을 수 있는 디바이스는 이때 등록한 디바이스 뿐이다. Devices로 이동하자

 

=>테스트할 기기 의UDID는  UDID확인 에서 확인이 가능하다 .

 

=>확인된 UDID 와 Device Name 을 입력후 Continue => Register => Done 으로 기기 등록을 마친다.


[ Provisioning Profiles  생성 ]

=>프로비저닝 파일도 개발용( development )과 배포용( distribution )이 따로 구분된다.

따로 생성후 다운로드를 받아 더블클릭하여 맥 장비에 설치해야 한다.

 

=>해당 프로비저닝으로 어떤 앱을 만들지 선택 한다 .

 

=>아까 만든 Certificate를 선택한다 .

=>앱을 설치 가능한 기기를 선택한다 .

=>마지막으로 이름을 정해준다 .

=> 위의 모든 과정을 거치면 해당 파일들이 생성된다 .

Certificate와 Provisioning Profile은 개발용,배포용이 쌍으로 필요하다.

 

 

이미지 출처 : https://sujinnaljin.medium.com/ios-certificate-와-provisioning-profile-e1b9455e8a51

 

=>현재까지의 과정은 다음과 같다 .

   5.엑스코드에서 프로파일을 만들게 한다

   6.특정 경로에 다운받는다

   7.앱 빌드할때 같이 포함시킨다 .

   8.번들에 포함시킨다

 

[ 전체과정 ]

 

 


[ 배포용 Certificate ]

[ 서명인증서 ]

내부 테스팅을 위해 , 기기를 컴퓨터에 연결하고 Xcode를 실행하기는 번거로운 일이다.

앱을 배포 , 혹은 AppStore에 올릴때 이를 위해 사용해야 하는 Distribution용도의 Certificate와 Profile의 종류가 따로 있다 .

 

[ 배포용 Certificate ]

우선 Certificate (인증서) 의 종류는 크게 Development 와 Distribution 으로 나뉜다.

 인증서 개요에 관하여

  • 개발 인증서는 기기에서 앱을 실행하고 앱 기능을 사용할 때 사용한다 .
  • 배포 인증서는 테스트를 위해 앱을 배포하거나 App Store Connect 에 업로드할 때 사용한다

=>앱은 배포 인증서로 재서명되며, 인증서가 어떤 이유로든 손상되거나 취소되는 경우, 해당 인증서를 사용하여 배포한

모든 앱이  작동을 중지하기 때문에 다시 서명하고 다시 배포해야 한다.

또한 인증서는 3년마다 만료되기 때문에 인증서 수명 주기를 관리하고, 필요시 그에 맞는 앱의 릴리스를 계획해야 한다

 App Distribution — From Ad-hoc to Enterprise에 관하여

 

앱 스토어에 앱을 제출하면 앱 스토어가 배포 프로세스의 일부로 앱에 다시 서명한다.

즉, 애플은 앱스토어에서 판매되는 모든 앱에 재서명한다

What is app signing?TN3125: Inside Code Signing: Provisioning Profiles에 관하여

 


[ 배포용 Provisioning Profile ]

[ 배포용 Provisioning Profile ]

=>Provisioning Profile 의 종류도Development 와 Distribution 을 위해 사용되는 것으로 나뉜다 .

=>Distribution 에서 사용되는 Profile은 크게 Ad hoc, In-House, App Store 로 세분화된다 .

 

 


 

 

[ App Store Connect ]

=>App Store Connect는 App Store에 앱을 제출하기 위해 사용됩니다.

이 프로파일을 사용하여 앱을 빌드하면 앱이 App Store에 등록된 디바이스에서 실행될 수 있도록 필요한 서명이 적용된다.

 

 

 


 

 

[ Ad Hoc ]

=>Ad Hoc 은 개발자 웹 사이트에서 등록된 디바이스에 한해 직접 앱을 설치할 수 있게한다.

단, 등록 가능한 디바이스의 수는 연간 100대이다. App Distribution — From Ad-hoc to Enterprise

출처 : https://sujinnaljin.medium.com/ios-certificate-%EC%99%80-provisioning-profile-e1b9455e8a51

실제로 Ad Hoc 에 대한 provisioning profile 안을 살펴보면 ProvisionedDevices 쪽에

설치 가능한 디바이스 목록이 명시되어있다.

 

Ad Hoc 은 테스트 목적으로 등록된 기기에 배포할 수 있도록 설계되었다.

따라서 규모가 더 큰 팀의 경우 장치 제한에 유의하는 것이 매우 중요하다.

 

기기가 부족하면 신제품 개발이 어려울 수 있어 테스터용 개발기기를 사용할 때 주의해야 한다.

이러한 장치 제한은 1년에 한 번 재설정되며, 계정에 대한 장치 수가 언제 재설정되는지 궁금하다면

개발자 웹 사이트의 회원 페이지로 이동하여 재설정 날짜를 확인할 수 있다.

 

앱을 테스트하려는 사람들의 수가 증가함에 따라 Ad Hoc 이 확장되지는 않는다.

 


 

 

[ Enterprise ]

=>기업회원은 Enterprise 배포를 선택 할 수 있다 .

배포 방법에 관하여

이때 사용되는 Provisioning Profile 종류가 In House 이다.

Enterprise 계정에서 Provisioning Profile 을 생성할때 In House 에 대한 옵션을 선택할 수 있다.

 

해당 옵션으로 배포된 앱은 실행 가능한 기기를 지정해 놓지 않기 때문에, In-House 를 사용하여 배포하는 앱은 반드시 직원들에게만 전달되어야 한다.

 App Distribution — From Ad-hoc to Enterprise

 

실제로 Enterprise 로 배포된 앱의 Provisioning Profile 을 보면 Provisioned Devices 목록이 보이지 않는다.

대신 ProvisionsAllDevices 의 값이 true 로 설정이 되어있다.

배포 방법에 따라 provisioning profile 안의 내용

 

 


 

[ Enterprise ] 

앱 스토어에 앱을 제출하면 앱 스토어가 배포 프로세스의 일부로 앱에 다시 서명한다 .

사실 애플은 그 전에, 앱이 개발자에 의해 제대로 서명되고 프로비저닝 되었는지부터 확인한다.

이 검사를 마치고 나면, 이후에는 추가적인 보안 검사를 수행할 필요가 없으므로 

앱 스토어에 올라가는 최종 앱에는 프로비저닝 프로파일이 없습니다

TN3125: Inside Code Signing: Provisioning Profiles

출처 : https://sujinnaljin.medium.com/ios-certificate-%EC%99%80-provisioning-profile-e1b9455e8a51

 

 


 

[ 요악 ]

[ 요약 ]

애플은 앱 개발과 앱 배포 모두에 자동 코드 서명을 사용할 것을 권장하기 때문에,

대부분 Automatically manage signing 을 잘 체크하고 사용해왔을것이다

Setting up Xcode to automatically manage your provisioning profiles

사실 이 뒤에서 Xcode 는 아래와 같은 일을 대신 수행해왔습니다. (참고 — automatic signing)

  1. 엑스코드에서 먼저 “키체인에 코드 서명에 필요한 서명 인증서 좀 만들어와라” 라고 하면
  2. 키체인에서는 “ㅇㅋㅇㅋ 개인키 공개키 키 쌍 만들었구, 공개키 포함해서 CSR 만들어야징~”
  3. “그리고 애플아, 요청서 가져왔으니까 확인하구 인증서 좀 발급해주라!” 라고 한다
  4. 그렇게 다운 받은 인증서는 키체인에서 개인 키와 쌍을 지어 서명 인증서를 형성하게 된다.

그 다음

5. 엑스코드에서 다시, “애플아~ 온갖 정보들 다 포함해가지고 Provisioning Profile 좀 만들어주라~” 라고 하면

6. 만들어진 profile 은 특정 경로 (~/Library/MobileDevice/Provisioning Profiles) 에 다운 받아집니다

그 다음

7. 이제 엑스코드에서 “앱 빌드 좀 해볼까나~” 할때

8. 앱 번들에 아까 만든 프로비저닝 프로파일 포함시키고

9. 알맞은 서명 인증서 서명을 한 후

10. 앱을 실행시킵니다

 

 

 

출처

https://sujinnaljin.medium.com/ios-certificate-%EC%99%80-provisioning-profile-e1b9455e8a51

 

[iOS] Certificate 와 Provisioning profile

인증서와 프로비저닝 프로파일에 대해 알아봅시다

sujinnaljin.medium.com

https://blog.naver.com/eastfever5/221949147733

 

애플 개발자 계정 사용법 - iOS 인증서 + 프로비저닝, 2020년

올해부터 iOS빌드할 일이 많아지고, 그와 동시에 블로그 글도 열심히 작성하다보니 자연스럽게 iOS관련...

blog.naver.com