JUST DO IT PROJECT
[iOS] Provisioning Profile 생성하기, Code Signing이란? 본문
개발자 계정이 잘 활성화 되었습니다. 얼른 앱을 개발하고 싶군요.
하지만 그 전에 꼭 짚고 넘어가야 할 게 있습니다.
Apple 생태계에서 개발을 하기 위해서는 Code Signing과 Provisioning Profile 이라는 개념을 알아야 합니다.
이 글에서는 그 개념을 알고, 실제 기기에다가 첫 앱을 올리기까지 과정을 함께 할겁니다.
Provisioning Profile이란?
어떤 앱에 대해서, 그 앱을 개발할 수 있는 개발자들과, 그 앱을 설치할 수 있는 기기 목록을 등록한 관리문서입니다.Provisioning Profile에 등록된 개발자들만, 허가받은 기기에 앱을 설치해 테스트할 수 있습니다.
Code Signing이란?
Apple 플랫폼에서 코드 서명 (Code signing)이란, 앱이 안전하고 신뢰할 수 있는 출처를 가지고 있으며, 조작되지 않았다는 것을 보장하기 위한 과정입니다.
- 신뢰할 수 있는 앱인지? (보안 보장)
- 앱이 배포된 이후에 변경되거나, 악의적으로 수정되지는 않았는지? (무결성 확인)
- 특정 기능을 사용할 수 있는 권한을 받았는지? (권한 부여)
- 어떤 개발자에 의해 작성되었는지? (식별)
Apple은 위 내용을 Code Signing 과정을 통해 확인하고 실행하기에 안전한 앱이라는 것을 보장해줍니다.
- 개발자들은 개발자 인증서를 발급받습니다.
- Provisioning Profile이라는 관리문서에서 앱을 개발할 수 있는 개발자와, 앱 개발 과정에 사용할 수 있는 기기를 관리합니다.
- Xcode라는 개발 도구에서 개발자 인증서와 Provisioning Profile문서를 이용해 서명을 합니다.
- 서명한 앱만 실제 기기에서 실행이 가능합니다.
- 이 서명이 유효하지 않으면 앱을 실행할 수 없습니다.
즉, 개발자 인증을 받은 개발자가, 앱 설치 허가를 받은 뒤, 허가받은 기기에만 이 앱을 설치해 테스트 할 수 있게 강제하는 시스템인 것이죠.
이렇게 하면 아무나 앱을 만들어서 테스트/배포할 수 없고, 어떤 개발자가 이 앱을 만들었는지 다 추적이 가능해집니다. 결국 사용자 입장이나, 회사의 입장에서도 이 Code Signing 과정이 안전장치로서 기능하게 되는거죠.
개발자의 입장에서는요?
애플이 항상 그렇듯이 개발자들은 좀 귀찮아집니다. 애플은 개발자들을 괴롭히는걸 좋아합니다. (아님)
Code Signing 과정을 준수하지 않으면 기기에 앱을 올릴 수 조차 없죠.
우린 오늘 이 과정을 하나씩 해볼겁니다.
- 개발자 페이지에서 개발자 인증서 발급 받기
- 개발자 페이지에서 개발용 기기 등록하기
- 개발자 페이지에서 개발할 App ID 등록하기
- 개발자 페이지에서 Provisioning Profile 생성하기
- Xcode에서 project 생성하기
- Xcode에서 Provisioning Profile import해주기
- App Store Connect 페이지에서 앱 추가하기
이 순서대로 하지는 않을거예요. 여러분의 이해를 돕기 위한 순서대로 진행해보겠습니다.
1. Certificate
먼저 우리는 개발자가 되어야 합니다. 아니 이미 개발자 프로그램을 샀으니 개발자인거 아닌가?
아닙니다. 적어도 아직은요.
우리는 가장 먼저, 내가 개발자라는걸 증명해 줄 수 있는 신분증을 발급받아야 합니다.
그걸 Development Certificates, 즉 개발자 인증서라고 부릅니다.
마치 대학에 입학해 학생증을 받거나, 어른이 된 후 주민등록증을 받거나, 운전면허증을 받는 것 처럼 우리는 개발자라는걸 증명할 신분증이 필요합니다. 내가 대학에 다녀도, 어른이어도, 운전을 할 수 있어도 그걸 증명해줄 수 있는 신분증이 없으면 이벤트를 해도 대학생 할인도 못받고, 은행 계좌도 못 만들고, 운전자 보험도 들 수 없듯이 개발자 인증서가 없으면 할 수 있는게 없습니다.
1-1. Developer Certificate 개발자 인증서 발급받기
먼저 여기에 들어가봅시다.
https://developer.apple.com/account/resources/certificates/list
여기는 정부 24 홈페이지 라고 생각하면 편합니다. 정부 24 홈페이지에서 제가 필요한 증명서를 뗄 수 있듯이, 여기서 개발에 필요한 각종 서류나 인증서, 관리문서를 발급받을 수 있고, 발급받은 서류들을 관리할 수 있습니다.
플러스 버튼을 눌러보면, 제가 어떤 신분증(인증서)을 발급받을 수 있는지 확인할 수 있습니다.
우리는 일단 개발자 인증서를 발급받아야 합니다.
첫번째 Apple Developement를 선택하고 다음으로 넘어가봅시다.
그러면 뭔가 올리라고 합니다.
운전면허증을 재발급 받기 위해 인적사항을 포함한 신청서를 작성하듯 우리는 개발자 인증서를 발급받기위해 CSR(Certificate Signing Request를 작성해서 제출해야 합니다.
여기에 가면 그 신청서를 어떻게 만드는지 잘 나와있습니다. 그대로 하시면 됩니다.
https://developer.apple.com/help/account/create-certificates/create-a-certificate-signing-request
하지만!
이렇게 하지 않고 Xcode에서 자동으로 생성할 수도 있습니다. 좀 쉽게 가봅시다.
Xcode > Settings > Accounts에 사용자를 AppleID를 추가하고
우측하단 Manage Certificates 버튼을 눌러주세요
그럼 아래와 같은 창이 뜹니다. 거기서 좌측하단 + 버튼을 눌러 AppleDevelopment를 선택
그럼 로딩이 돌다가 뭔가 생겼을겁니다.
이렇게 하고 다시 여길 들어가봅시다.
https://developer.apple.com/account/resources/certificates/list
그러면
짠
제 개발자인증서가 생겼습니다. 저는 이제 이걸로 개발자 행세를 할 수 있는거죠.
한번 이름을 클릭해서 들어가봅시다.
인증서에대한 설명과, 다운로드 받을 수 있는 버튼, 인증서를 폐기할 수 있는 Revoke버튼이 있습니다.
운전면허증에도 유효기간이 있듯이 이 인증서에도 유효기간이 있습니다. 1년의 유효기간이 지나면 어떻게 하냐구요? 기간이 지나기 전에 연장을 하거나, 만료가 되었다면 위에 한것처럼 다시 발급 받으면 됩니다.
Revoke는 이 인증서를 폐기하는 기능입니다. 우리가 신용 카드를 잃어버리면 카드를 정지시키듯이, 이 인증서가 더이상 효력이 없게 하는거죠. 만약 회사에서 사용하는 계정이라면, 개발자가 퇴사했을 때 그 개발자의 인증서를 Revoke 시켜서 더이상 권한을 주지 않을 수도 있을겁니다. 퇴사한 직원에게 권한을 계속 부여하고 있을 수는 없으니까요.
우리는 이 인증서를 키체인에 설치해주어야 합니다. 키체인에 인증서가 있어야 Xcode에서 이 인증서를 인식할 수 있습니다.
개발자 인증서를 Xcode로 생성했다면 이미 키체인에 등록되었을겁니다. 꼭 기본 키체인 하위에 있는 "로그인" 키체인에 등록해주세요. 그래야 인생이 좀 편해집니다. 아래 이미지처럼 개인키도 같이 있어야 합니다. 만약 개발 PC를 바꿔야 한다면, 이 개인키 (private key) 까지 포함해서 내보내기 한 후, 다시 새로운 PC에서 키체인에 등록해주는 과정이 필요합니다.
2. Identifier
개발자 인증서를 받았으니 이제 뭘 해야 할까요? 우리는 앱을 만들어야 합니다. 앱을 만들기 위해 가장 먼저 해야 하는 일은 무엇일까요?
저는 성질이 급하니까 Xcode를 열어서 코드를 작성해볼랍니다. 개발자가 됐잖아요 인증서도 받았고.
Xcode > File > New > Project
App 선택
자 여기에 뭘 써야 할까요?
- Product Name
- 한번 써봅니다. 저는 myfirstapp이라고 써봤어요.
- Team
- 아까 개발자 인증서를 키체인에 잘 설치했다면 여기서 자신의 이름 (혹은 법인명)을 선택할 수 있을겁니다. 우리는 개발자 신분증을 받았죠.
- Organizatoin Identifier
- 아마도 처음에 뭔가 적혀있을거예요.
- 개인개발자라면 높은 확률로 com.이름 이 적혀있을겁니다. 회사라면 보통 여기 적어야 할 값이 정책적으로 정해져 있을겁니다.
- 우리는 일단 아무렇게나 쳐봅시다. 저는 com.justdoitproject.sample로 쳐볼게요. 어떻게 되나요?
- 바로 아래 Bundle Identifier가 함께 바뀌는 것을 확인할 수 있을겁니다.
- Bundle Identifier
- 번들 ID는 제가 직접 쓸 수 없네요. Product Name과 Organization Identifier를 입력하면 자동으로 반영됩니다.
- 나름의 권장되는 규칙이 있습니다. com.yourcompany.ProductName 형식을 권장하죠.
- 우리가 앱스토어에 앱을 올리기까지 할거라면 이 Bundle ID에 대해서 잘 알아야 합니다.
2-1. App ID 만들기
그럼 당장 Xcode로 프로젝트를 만드는건 잠시 멈추고 여기 들어가봅시다.
우리가 앱스토어에 앱을 등록하기 위해서는 여기 들어가야 합니다.
https://appstoreconnect.apple.com/apps
그럼 이런 화면을 만나게 될겁니다.
일단 한번 만들어봅시다. 앱 추가!
신규 앱에 대해서 작성하는 창이 나오죠. 물음표를 눌러보세요 설명들이 나옵니다.
하나씩 작성하다보면 갑자기 막히는 부분이 있을겁니다.
바로 번들ID 입니다. 여기서도 등장하네요. ID를 등록하기 위해서 링크를 클릭하면 여기로 가게됩니다.
https://developer.apple.com/account/resources/identifiers/list
App ID가 번들 ID일까요? 하나 만들어봅시다.
개발자 인증서를 발급받을 때 처럼 다양한 ID를 등록할 수 있습니다.
여기서는 Create a new identifier가 아니라 Register a new identifier인걸 눈치채셨나요? 여기는 등록을 하는 겁니다. 개발자 인증서는 애플에서 저에게 발급해주는 것이지만, ID는 제가 정하고, 이걸로 쓸거라고 등록을 하는거죠.
App ID가 뭔지 읽어봅니다. provisioning profile에서 나의 앱을 구분하게 해주는 identifier라고 하네요.
Provisioning profile이 뭐람? 이 글의 가장 처음에 간단히 언급한 앱 관리문서입니다.
어디에든 가입을 하면 나라는 회원을 특정하기 위해서 ID를 입력하고, 생년월일도 입력하기도 하고, 이름도 입력하죠. 애플의 앱 세상에도 마찬가지입니다. 나의 앱을 특정할 수 있도록 ID를 정하고, 이 앱이 뭐하는 앱인지 identity를 제공해야 합니다. 한번 계속 해봅시다.
우리는 앱을 만들거니까 앱!
헉 또 어려워보이는 화면이 나옵니다.
차근차근 살펴볼게요.
App ID는 말 그대로 이 앱의 Identity를 의미합니다. 뭐하는 앱인지(Description), 이 앱을 다른 앱들과 구분할 수 있는 ID는 뭔지 (앱 이름과는 다릅니다.) 이 앱에서는 무슨 기능을 제공하는지 우리가 작성해서, 등록하는거죠. 난 이런 앱이야.
아까 보았던 번들 ID가 여기에 또 나오네요.
Bundle ID란?
번들이란 뭘까요?
번들(Bundle)이란 묶음, 뭉치라는 뜻입니다. 우리가 개발할 앱은 아주 다양한 파일들을 묶어놓은 하나의 덩어리입니다. 번들이라는건 우리가 작성한 코드 리소스들을 요리조리 잘 뭉친 하나의 큰 파일을 의미한다고 보면 되고, 번들 ID라는건 결국 그 최종 파일의 ID를 의미한다고 보면 됩니다. 쉽게말해서 앱을 구성하는 큰 파일뭉치의 ID이기 때문에 이 번들 ID는 Xcode에서 최초로 프로젝트를 만들 때 작성하게 되는겁니다. 파일의 ID이니, 파일을 생성할 때 만들게 되는거고, 우리는 그 값을 App ID에 등록하고, 앱스토어에 파일을 등록할 때 연결해 쓰는거죠.
이 번들 ID는 한번 정하면 바꿀 수 없습니다. 물론 지금은 괜찮습니다. 잘못 작성했다면 Xcode project를 다시 만들고, App ID도 지우고 새로 만들면 돼요. 지금은 테스트용이니까 App ID에 번들 아이디도 아무렇게나 써서 편하게 하나 만들어도 보고, 지워도 보세요. 프로젝트 파일도 만들어보고 지워보세요. 아무런 코드 한줄 쓰지 않았으니 편하게 생각하세요.
하지만 앱스토어에 앱을 한번 올리고나면 이 번들아이디는 더이상 바꿀 수 없습니다 주의하세요.
번들ID는 보통 도메인 역순으로 많이 작성합니다. 티스토리라는 회사에서 만드는 앱의 홈페이지를 만든다고 생각해봅시다. 홈페이지 주소는 앞에 justdoitproject.tistory.com 이렇게 많이 작성하죠. 앱에도 이런 유니크한 주소를 할당해줍니다. 다만 관례적으로 이 유니크한 주소를 역순으로 입력합니다. com.tistory.justdoitproject 이렇게 작성해줍니다. 저는 Organization Identifier를 com.justdoitproject.sample, ProjectName을 myfirstapp이라고 적었죠. 그러니 우리의 번들 ID는 com.justdoitproject.sample.myfirstapp이 되겠군요.
Capabilities, App Services란?
번들 아이디를 적었다면 그 아래에는 Capabilities, App Services가 차례로 있죠. 이 항목들은 앱 개발에 필요한 기능, 다시말해 앱에서 제공하는 기능을 선택하게 되어있습니다. 애플은 절대로 모든 기능들을 쉽게 사용하게 하지 않습니다. 사용자들의 프라이버시를 위해 개발자들을 많이 괴롭히는 회사죠. 명시적으로 어떤 기능을 제공하는지 여기서 명시해야 합니다. 그렇지 않으면 Xcode에서 이 기능들을 활성화해서 개발할 수가 없습니다. 예를들어 건강 기능을 사용하고 싶다면 HeathKit을 선택합니다.
물론 지금 꼭 할 필요는 없습니다. 이건 나중에 필요할 때 선택하면 됩니다. 한번 넘어가볼까요? 등록까지 해보면 이렇게 뜹니다.
한번 들어가봅시다.
Description은 수정할 수 있습니다. 보이시나요? 번들 ID는 수정할 수 없죠. App ID를 삭제하고 다시 만들어야 합니다. 아직까진 그래도 괜찮습니다. 우린 아무것도 개발하지 않았잖아요. 하지만 진짜 앱을 개발할 때에는 신중하게 정하세요.
이제 App ID를 등록했으니 번들ID가 생겼습니다.
당장 App Store Connect로 돌아가서 앱스토어에 올릴 앱을 추가해봅시다.
App Store Connect 앱 추가
여기에 우리는 앱스토어에서 노출될 이름, 언어, 번들 ID를 입력할 수 있게 되었습니다.
SKU는 Stock Keeping Unit이라는 뜻입니다. 앱스토어를 대형마트라고 생각해볼까요? 거기에는 다양한 회사에서 만든 다양한 상품들이 판매되고 있죠. 상품의 재고관리를 위해 붙여놓은 바코드같은거라고 생각하시면 될 것 같습니다. 예전에는 번호의 형태였는데, 요즘은 문자열로 바뀐 것. 같더라구요. 우선 번들 ID와 동일하게 작성하셔도 됩니다. 저는 조금 더 간단하게 적었어요.
사용자 액세스 권한은 지금 전체 액세스밖에 선택할 수 없을겁니다. 이제 앱을 생성해볼까요?
자. 어떤가요?
Apple Store Connect는 앱스토어에 올릴 앱을 관리하는 페이지입니다. 그러니까 사실 여기서의 앱 생성이란 상품 등록인거죠. 여기서 앱을 만드는건 아니고, 내가 만든 앱을 앱스토어에 올리기 위한 관리 페이지를 만든 셈입니다.
아래로 내려보면서 훑어보세요. 앱스토어에 올리기 위해 해야 할 것들이 여기에 다 있습니다.
우리가 앱을 다 개발하고 나면, 여기에 앱 빌드를 올리고, 여러 설명과, 심사할 수 있는 정보를 제공한 후에, 애플에 이 앱을 앱스토어에 등록해달라는 심사요청을 합니다. 앱스토어 측에서 심사 후 거절하면 왜 거절되었는지, 뭘 수정해야 하는지 알려주고, 그 내용을 받아다 보충해서 다시 재심사 요청을 하게 되죠.
심사에 통과되면 바로 앱스토어에 올라가나요? 그건 정하기 나름입니다. 가장 아래 App Store 버전 출시 항목에서 정할 수 있습니다. 심사가 통과되면 자동으로 공개할지, 내가 수동으로 앱을 공개할지 등을 정할 수 있죠. 서비스에서 중요한 업데이트를 하고 마케팅 홍보까지 계획되어 있다면? 당연히 모두와 손발이 맞아야 하기 때문에, 특정 날짜에 앱을 공개해야 하겠죠.
3. Profiles
멀리 왔습니다. 이제 뭘 하면 될까요? Xcode로 가서 다시 프로젝트를 계속 만들어봅시다. 여기까지 왔었죠
product name, Organization Identifier에 의해 생성된 Bundle Identifier를 App ID에 등록해야 한다는걸 잊지 마세요. 두 값이 같아야 합니다.
Testing System과 Storage는 우선 None으로 설정하고 다음으로 가봅시다.
이 프로젝트 폴더를 어디에 저장할지 지정한 다음 넘어가봅시다
짠!
이제 다 된걸까요? 우리가 이제 개발만 하면 될까요?
만약 시뮬레이터만 사용해서 개발을 시작해볼거라면 여기까지 하고도 코드를 이리저리 작성해서 돌려볼 수 있습니다.
하지만 실단말에서 앱을 돌려보고 테스트하려면 아직 하나를 더 해야 합니다. 조금 더 알아봅시다.
물론 당장 SwiftUI로 이것저것 화면을 만져보고 싶을거예요. 너무 재밌겠죠. 압니다. 하지만 오늘의 목적은 그게 아닙니다.
우린 이걸 이해하려고 여기까지 달려왔어요.
바로 Provisioning Profile과 Code Signing입니다.
먼저 Xcode project에서 아래와 같이 차례로 눌러서 Signing & Capabilities까지 들어가봅시다.
뭔가 경고가 떠있네요.한번 읽어봅시다.
첫번째 경고
Communication with Apple Failed.
Your team has no devices from which to generate a provisioning profile. Connect a device to use or manually add device IDs in Certificates, Identifiers &. Profile
애플이랑 어째 얘기가 잘 안된다.
너네 팀은 provisioning profile을 생성할 기기가 없다. device를 연결하거나, device ID를 Certificates, Identifiers & Profile에 수동으로 등록해라!
두번째 경고
No profile for "Bundle ID" were found.
Xcode couldn't find any iOS App Development provisioning profiles matching 'Bundle ID'
네 번들아이디에 해당하는 profile을 못찾겠다.
네 번들 아이디와 매칭되는 iOS 앱개발 프로비저닝 프로파일을 Xcode가 못찾고 있다.
Run Destination을 뭘로 설정했느냐에 따라 저랑은 다른 경고가 뜰 수도 있습니다.
Automatically manage sigining에 체크한 상태 + iOS 시뮬레이터를 선택한 상태라면 위와 같은 노랑 warning이 뜰 것이고,
Automatically manage sigining에 체크한 상태 + Any iOS Device (arm64)를 선택했다면 같은 내용이지만 빨간 x 아이콘으로 바뀌면서 error가 뜰겁니다.
Automatically manage sigining에 체크한 상태 + 실제 아이폰 기기를 선택했다면 이런 오류가 뜹니다.
Device "iPhone" isn't registered in you development account.
The device must be registered in order to be included in a provisioning profile
네 아이폰이 네 개발자 계정에 등록이 안되어있다.
프로비저닝 프로파일에 포함하려면 기기가 등록이 되어있어야 한다.
자 이게 대체 무슨 이야기일까요?
일단 용어부터 알아봅시다.
3-1. Provisioning Profile이란?
Provisioning profile 이라는 단어가 계속 나오죠. Provisioning은 뭔가 사용하기 앞서 준비하는 행위를 말합니다. Profile은 설정파일을 의미한다고 생각하면 편합니다. 앱개발을 위해 준비한 설정파일이죠.
어느 웹사이트에 가입해서 내 프로필 페이지에 들어가면 무엇이 나오나요? 간단하게는 제 이름, 별명, 이메일주소처럼 저에 대한 정보를 작성하는 란이 있기도 하지만, 제가 정회원인지, 준회원인지, 프리미엄 회원인지에 따라 할 수 있는 것들이 명시되어 있기도 하고, 어떤 기능을 켜고 끄는 설정이 있기도 하죠.
그것처럼 Provisioning profile은 앱에 대한 기본적인 정보와, 앱을 설치하기 위한 권한, 규칙을 정해놓은 일종의 명세서, 계약서, 관리문서입니다.
우리가 회사원이라고 생각해봅시다. 우리 회사에서 앱을 하나 개발하려고 합니다.
그렇다면 회사는, 이 개발중인 앱을 잘 관리해야만 할겁니다.
허가받지 않은 개발자가 코드를 변경해 앱을 배포하는 일이 있어서도 안되고
허가받지 않은 기기에 앱을 설치해서 반출하는 일도 없어야 하겠죠.
그래서 이 앱을 개발할 수 있는 개발자 목록과, 이 앱을 설치할 수 있는 기기 목록을 관리해야 합니다.
이 목록들이 포함된 파일을 provisioning profile이라고 합니다.
(물론 그것 말고도 많은것이 포함되어있지만 우선 이것만 있다고 단순화해봅시다.)
즉, 이 파일에는 (1) 앱에 대한 정보와, (2)누가 이 앱을 개발할 수 있는지, (3) 어떤 기기에 설치할 수 있는지가 적혀있습니다.
우리는 아직 이 파일을 만들지 않았죠. 그래서 Xcode가 불평하는겁니다.
야 너 개발자라고? 너 이 앱을 설치해볼거라고? 근데 너 이 앱 개발자 맞아? 그 기기에다 설치해도 되는거 맞아? 내가 관리문서 한번 확인해볼게. 아니 이 앱에 대한 관리문서가 아예 없네. 그것부터 가져와봐. 아니 지금 정보가 없다니까~ 만들어와, 나는 이 앱에 대한 관리문서를 보고, 거기 적혀있는 개발자가, 거기 적힌 기기에만 빌드하게 해줄거야!
Xcode의 Run Destination을 바꿀 때 마다 경고가 달라지는 이유는 "어떤 기기에 설치할지"가 달라지기 때문입니다.
시뮬레이터에서 노란 경고만 뜬 이유는, 실물 기기에 앱을 설치하는게 아니기 때문에 빌드하고 설치하는데 큰 제약이 없는거죠. 그래 시뮬레이터에는 설치하게 해줄게, 하지만 실제 기기에 설치하려면 이런게 필요해~라고 경고만 날려주는거고,
Any iOS Device (arm64)을 선택했다면 실제 기기에 설치할 수 있게 빌드하는 것을 목표로 하기 때문에, 빨간 오류가 뜹니다. 빌드를 할 수 없다는거죠. 너는 어디에 이 앱을 설치할 수 있는지 명시한 파일을 나한테 안 줬으니까 안해줄거야.
만약 실제 아이폰을 선택했을 때는 이 기기에 설치해도 되는지를 판단해야 하는데, 아니 그 전에 이거 모르는 기기인데? 하는 오류를 내뱉는겁니다.
3-2. Devices 등록하기
아직 잘 이해가 안될겁니다. 아무래도 한번 보는 게 이해가 더 빠르겠죠. 여길 한번 들어가봅시다.
https://developer.apple.com/account/resources/devices/list
여기는 개발 기기를 관리하는 화면입니다. 제 개발자 계정에서 사용하는 개발용 기기를 등록하는 곳이죠.
하나 등록 해봅시다.
파란 정보창을 한번 읽어봅시다.
앱을 테스트하거나, 배포하기 위한 프로비저닝 파일을 만들려면 등록된 기기를 명시해야 합니다. 만약에 Xcode에서 automatic signing을 체크해놨다면 이 페이지가 아니라 Xcode에서도 등록할 수 있습니다. 만약에 당신의 개발자 계정에서 등록된 기기를 삭제하더라도, 기기 개수 제한에 여전히 포함 됩니다. 개발자 계정을 갱신할 때, 기기 등록을 진짜 제거하고, 기기 갯수를 복구할 수 있습니다.
개발자 계정에 등록할 수 있는 기기의 최대 개수는 정해져 있습니다. 무한히 많은 기기를 등록할 수 없죠. 일단 등록하고 나면 비활성화 시킬 수는 있지만 당장 제거할 수는 없습니다. 멤버십 갱신 시점에 진짜 제거할 수 있죠. 그래서 기기 등록은 신중해야 합니다.
Device name 이름은 적당히 구분하기 쉽게 적어주세요. 저는 보통 iPhone 14 Pro 이런식으로 작성합니다.
Device ID (UDID)는 애플에서 모든 애플 기기에 할당하는 유니크한 ID입니다. 어떻게 알 수 있냐구요?
등록하려는 아이폰을 케이블로 맥에 연결하고 Xcode > Windows > Devices and Simulators를 선택해주세요
여기서 Device의 Identifier를 알 수 있습니다. 이 값을 복사해서 UDID에 넣어준 뒤 다음!
이제 이 화면에서, 등록가능한 기기 수가 몇대 남았는지 알 수 있습니다.
넘어가볼게요.
이제 Done을 눌러주면
이렇게 Device 등록이 된 것을 볼 수 있습니다.
이제 우리는 개발자 인증서도 있고, 만들려는 App의 ID도 있고, 테스트할 기기도 등록했으니, 관리문서를 쓰러 가봅시다.
3-3. Provisioning Profile 생성하기
여기 들어가주세요, 눈치채신 분이 있을지 모르겠습니다만,
우리는 좌측 메뉴를 순서대로 방문하고 있습니다. Certificates, Identifiers, Devices 이제 Profiles
https://developer.apple.com/account/resources/profiles/list
Provisioning profile은 여기서 만들 수 있습니다. 잘 적혀있죠.
이건 앱을 기기에 설치할 수 있게 해주는 파일이다. 이 파일은 인증서, 기기, 앱ID를 포함한다.
즉 AppID를 가진 앱을 설치할 수 있는 개발자가 누군지, 설치할 수 있는 기기가 뭔지 관리한다는 이야기죠.
관리 문서는 크게 두가지로 나뉩니다.
- 앱 개발 (Developement) 관리문서
- 앱 배포(Distribution) 관리문서
우선은 앱을 개발하고싶으니 iOS App Development를 선택해봅니다.
어떤 앱에 대한 관리문서를 쓸거니? 우리가 앞서 등록한 App ID를 선택해봅니다.
앱을 처음 설치하려고 할때, 이게 최신 관리문서가 맞는지, 등등 온라인으로 확인하는 과정을 거칠텐데, 인터넷 연결이 없이도 가능하게 할지 물어보네요. 우린 필요 없으니까 No를 외쳐줍니다.
다음은 이 앱을 설치하도록 허가받은 개발자가 누군지 등록해야 합니다.
우리는 가장 먼저 개발자 인증서를 받았었죠. 여기서 확인할 수 있습니다.
그 다음은요? 어떤 개발 기기에 앱을 설치할 수 있는지 정해줘야 합니다.
만약 위에서 기기를 하나도 등록하지 않았다면 아래와 같은 화면이 뜰겁니다. 그럼 등록해주면 됩니다.
우리는 기기를 앞서 등록해놨으니 목록에 뜰겁니다.
그럼 다 왔습니다.
파일명을 적당히 써주시고 생성!
이제 다운로드 받으면 myfirstapp_development.mobileprovision이라는 파일을 다운 받았을 겁니다.
이제 이 파일을 Xcode의 프로젝트에 등록해주어야 합니다. Xcode 프로젝트를 열어두고, Finder에서 이 파일을 더블클릭해주시면 Xcode에 잘 등록이 됩니다. 다시 아까 그 페이지로 돌아와볼까요?
우선 Automatically manage signing에 체크를 제거해주세요.
우리는 iOS Development Profile을 만들었었죠.
Xcode의 iOS app을 만들거기 때문에, iOS 항목에 가서, 우리가 다운받은 provisioning profile을 선택해줍니다.
그러면 자동으로 Team, Signing Certificate이 채워지면서 모든 오류가 사라진 것을 볼수 있을겁니다. 이제 상단에 Run Destination을 무엇으로 변경해도 오류가 없을겁니다. 이제 진짜 개발을 시작할 수 있게 되었어요. 실물 기기에 앱을 돌려볼까요?
Run!
개발 기기로 등록한 아이폰을 맥에 케이블로 연결한 후, Xcode 상단 Run Destination에서 그 기기를 선택해주세요. 그리고 좌측에 있는 재생버튼을 눌러주면
아래와 같은 확인 창이 뜰겁니다.
codesign이(가) 키체인에서 'Apple Development:' 키 접근을 허용하고자 합니다.
이를 허용하려면 '로그인' 키체인 암호를 입력하십시오
맥북 로그인 암호를 입력해주세요. Xcode에서, 이 개발자가 진짜 관리문서에 적힌 개발자가 맞는지 확인하기 위해서 우리가 키체인에 저장한 개발자 인증서를 확인하는 과정입니다. 저는 항상 허용을 눌러서 다음에 안뜨게 합니다.
그렇다면 이렇게 빌드가 시작됩니다. 우리의 첫 앱 빌드!
어떤가요. 실제 아이폰에서 Hello world가 잘 나오고 있나요?
끝났습니다.
이제 개발을 시작하시면 됩니다.
4. 정리
글이 아주 길어졌습니다. 따라오실만 했나요?
우리는 이 프로젝트의 Bundle ID를 이용해서 App ID를 만들었고, 제 개발자 인증서를 받아서 키체인에 잘 저장 해뒀고, 개발 기기도 등록했으며, Provisioning Profile이라는 관리문서 파일에 App ID, 개발자, 개발 기기를 명시한 뒤, Xcode project에 넣어주었죠. 그래서 비로소 우리는 진짜 개발을 할 준비가 되었습니다.
오늘 살펴본 내용을 한번 정리해보겠습니다. 설명이 장황했지만, 아래와 같이 차근차근 해보시면 됩니다.
- 개발자 프로그램 가입하기
- 개발자 페이지에서 개발자 인증서 발급 받고 키체인에 등록하기(Certificate)
- 개발자 페이지에서 개발용 기기 등록하기 (Devices)
- 개발자 페이지에서 개발할 App ID 등록하기 (Identifier)
- 개발자 페이지에서 Provisioning Profile 생성하기 (Profile) - AppID에 개발자 인증서, 등록된 기기 목록을 매핑하기
- Xcode에서 project 생성하기 - App ID에 등록한 Bundle ID 이용
- Xcode > target > Signing & Capabilities에서 Provisioning Profile import
- App Store Connect 페이지에서 앱 추가하기 - App ID 이용
저는 iOS 개발을 처음 시작했을때, 이 일련의 과정을 잘 모른 채 무작정 개발을 시작했었기 때문에, 아주 혼란스러웠습니다.
Xcode가 갑자기 오류를 내뿜으면 괴로웠죠.
왜 이 기기에는 설치가 안되는지 (기기 등록이 안되었기 때문입니다.)
기기 등록을 했는데 왜 안되는지 (등록한 기기를 Provisioning Profile에 포함해줘야 합니다.)
몇시간 전까지만 해도 빌드 잘 했는데, 왜 갑자기 내 개발자 인증서를 왜 인식을 못하는지 (대부분 인증서 기간이 만료되었기 때문입니다.)
개발자 인증서를 새로 받았는데도 왜 안되는지 (새로 발급받은 개발자 인증서를 Provisioning Profile에 포함해줘야 합니다.)...
그래서 어렴풋하게 알고 있던 내용들을 한번은 정리하고 싶었습니다.
이 글을 읽는 여러분은 이제 저처럼 헤매지 않으시기를 바랍니다.
오늘은 개발을 시작하기위해서 개발용 인증서만을 발급받았지만, 앱스토어에 올리기 위해서는 배포 인증서가 필요한 순간이 올겁니다.
관련 내용은 또 그때가 오면 App Store Connect에 대한 설명과 함께 다시 작성해보겠습니다.
읽어주셔서 감사합니다.
'개발 > iOS' 카테고리의 다른 글
[iOS] Capability 추가하기 (0) | 2025.01.19 |
---|---|
[iOS] Apple Developer Program 애플 개발자 계정 구입하기 (0) | 2025.01.18 |
[iOS] Core Data란? 1. Core Data Model과 NSPersistentContainer 만들기 (0) | 2023.02.10 |