[ios]Certificates, Identifiers & Profiles

코드깎는 노인·2020년 12월 7일
2
post-thumbnail
post-custom-banner

provisioning이 왜 필요한가?

애플은 사용자가 안전하고 안정적인 경험을 제공하기를 원한다.따라서 다음사항을 지키려고 한다.

  • 서명이후 코드가 바뀌지 않음
  • 개발자나 서명가로부터 코드 식별
  • 코드가 특정사항에 대해 신뢰가능한가

이 사항들을 따르기 위해 애플과 컴파일된 당신의 어플리케이션과의 인증체인을 만들었다.이러한 인증체인은 아이폰과 아이패드에 안정성을 제공한다.

위의 그림에서 최상단에 Apple Certificate Authrity(이하 애플인증기관)가 있다.애플은 당신이 애플인증기관에 앱을 올릴 수 있게 허용하는 유일한 인증기관이다.App Store Connect는 앱스토어로 가는 일종의 관문이다.

ios 개발자로 첫번쨰 할일은 Signing Certificate를 생성하는것이다.Signing Certificate는 본인이 본인임을 확인하고 애플또한 본인임을 확인하는것이다.상세 절차는 공식문서에 나와있지만 요점은 당신이 public/private key를 개발컴퓨터에 저장하고 애플에 전달하는것이다.이러한 절차는 Signing Certificate를 생성함으로서 애플인증기관과 당신을 연결한다.

그리고나서 App Id(identifider)를 생성하는데 앱아이디는 Signing Certificate와 앱을 연결한다.(bundle ID로 구분됨)

마지막으로 한개이상의 Provision Profiles를 생성하는데 각각의 profile은 App Id중 한개와 연결되고 특정한 빌드가 내부개발용인지,Ad Hoc 배포용인지,앱스토어를 통한 릴리즈배포용인지 정의된다.내부내포가 Ad Hoc배포는 앱이 테스트될 디바이스 리스트를 요구할 것이다.

The Signing Cerificate

Signing Cerificate에는 개발용과 배포용 2가지가 있다.개발용은 당신이 개발자임을 식별하고 당신의 developer identifier를 포함한다.배포용 cerfiticate는 당신 팀의 identifier와 당신의 identifier를 포함한다.둘중 배포인증서만 앱스토어 배포용으로 사용될 수 있다.또한 당신은 개인으로 애플 개발자에 가입했지만 당신은 개인으로서와 팀으로서 identifier를 소유할 것이다.(둘자 6자리문자열임)

signing certificate를 받기위해 키체인을 이용해 Certificate Signing Request를 보내야 한다.이는 당신의 인증서를 식별하는 퍼블릭,프라이빗키를 생성한다.그리고 당신은 이렇나 request를 애플 개발자 사이트에 reqeust를 certificate로 전환할 수 있게 업로드한다.이렇게 생성된 cerfiticate는 당신과 애플이 서로 신뢰할수게 보증한다.애플계정에 가입했을때를 생각해보면 당신은 그들에게 신용카드정보과 회사로 가입했다면 DUNS번호를 입력했을 것이다.certificate를 받았다면 키체인에 certificate를 추가하여 Xcode의 빌드과정에 사용할 수 있게 한다.이러한 과정을 겇니 인증서로 서명된 앱은 당신이 만든것임을 보장한다.

The App ID(s)

당신이 Xcode로 새로운 어플리케이션을 만들때 bundle ID를 요구할것이다.이것은 앱이 고유하게 식별되는 문자열이다.애플은 인터넷주소를 사용한 역도메인 이름을 사용할것을 추천한다.하지만 진정으로 요구하는것은 bundle ID가 고유해야 한다는 것이다.즉 다른 앱에서 사용된것은 안된다.


앱아이디는 현재 explicit(고유 bundle ID)와 개발용(wildcard app Id) 2가지로 만들 수 있다.Wildcard app IDs는 당신이 배포전까지 개발용으로 번들아이디없이 어플을 개발할 수 있게 해준다.위의 사진은 wildcard app Id의 예시

App ID recored는 너가 사용하고자 하는 권한을 포함한다.권한은 너의 앱에서 지원하고자 하는 부가 서비스나 작업등이다.너의 Xcode의 capabilities탭에서 권한을 설정하고 애플개발자사이트에서 identifiers를 생성할때 capabilities에 까지 권한을 설정해야 앱에서 해당 api를 사용할 수 있다.만약 당신이 App ID에 설정되지 않은 권한을 Xcode Capability에 설정했다면 Ad Hoc배포나 릴리즈배포시 signed error를 마주할 것이다.

App ID 예시

com.Apple.myApp(com.회사명.앱이름)

Provioning Profiles

Provisioning Profile은 앱과 팀에 관한 모든 정보가 포함된다.Provisioning profile은 배포목적(ad hoc,앱스토어용등)과 앱스토어용이 아니라면 특정기기목록등이 포함된다.빌드 프로세스중 앱의 유효성을 검사하는것은 팀이나 개인의 cerfificate와 profile이다.

The Device List

개발이나 Ad Hoc배포를 위해 앱이 구동될 디바이스 목록을 설정해야 된다.이를 위해 UDID와 장치의 일반 이름의 내용이 들어간다.

요약

  • 모든것은 Apple signing authority로 부터 시작된다.
  • 그들은 신용카드정보와 DUNS번호정보가 담긴 애플아이디를 통해 당신의 신원을 확인한다.당신의 애플아이디는 당신이나 팀이 개발자임을 식별한다.
  • 앱아이디는 각각의 앱을 식별하고 signing certificate는 당신임을 식별한다.
  • Provisioning Profile은 위의 정보를 모두 모으고 어디서 어떻게 앱이 배포되는지 식별한다.

App distribution

앱 배포는 development,ad hoc,app store 배포,엔터프라이즈 배포 3가지가 있다.하지만 엔터프라이즈 배포는 비싼 비용이 들어간다.

Provisioning Profile을 생성할때 당신은 profile이 어떤 배포방식으로 쓰일것인지 설정해야 한다.

  • development profile로 검증된 프로필은 시뮬레이터와 개발자의 기기에서만 구동된다.
  • ad hoc용 프로필은 제한된 숫자의 디바이스에서만 구동된다.이는 예를 들어 QA팀(품질보증팀)에서 유용하다.
  • 앱스토어용 프로필은 아이튠즈나 앱스토어에 제출된다.

Develeopment Distribution

개발용프로필은 팀이나 개인용 certificate를 사용할 수 있으며 번들아이디를 사용할 수 있고 wildcard(*)번들아이디를 사용할 수 있다.그리고 구동될 기기정보가 필요하다.

Ad Hoc Distribution

반드시 팀 certificate를 사용해야 한다.고유한 번들아이디를 사용해야 한다.구동될 기기정보가 필요하다.

App Store Distribution

팀cerficicate와 고유한 번들아이디를 사용한다.또한 profile에 앱스토어용으로 체크해야 한다.앱이 앱스토어에 게시될만 하다면 Provisioning Profile을 이요하여 서명을 하는것은 앱을 appstore-connect에 업로드가 가능하다.번들아이디와 앱이름은 앱스토어에서 고유해야 한다.

출처:
https://www.bounteous.com/insights/2018/08/08/demystifying-ios-app-provisioning-process/

profile
내가 볼려고 만든 블로그
post-custom-banner

0개의 댓글