Search

봐도봐도 헷갈리는 iOS 코드 사이닝 5분만에 이해하기

date
2022/08/07
tags
iOS
자동화
게임개발
4 more properties
풀타임 iOS 개발자가 아니라도 iOS 앱을 배포해야 하는 경우는 많아요. iOS 앱 서비스도 해보고, iOS 개발도 가이드 해보고, iOS용 게임도 출시해봤지만 iOS 사이닝은 봐도 봐도 헷갈리고, 공부를 해도 그 때 뿐인 것 같아요.
이렇게 여러 번 해봐도 헷갈리는데 처음 하는 분들은 얼마나 헷갈릴까 하는 생각도 들어요. 그래서 iOS 코드 사이닝을 이해하고 빌드할 수 있도록 실용적인 측면에서 정리해 보려고 합니다.

코드 사이닝은 왜 하는 걸까?

코드 사이닝은 말 그대로 내가 만든 앱에 서명을 하는 행동이에요. 기술적으로 나 이외에 다른 사람은 서명을 할 수 없고, 내가 서명한 후에 다른 사람이 앱을 변조하는 것도 불가능합니다. 다시 말해, 이 앱을 내가 만들었다는 것을, 그리고 변조되지 않은 상태 그대로라는 것을 증명하기 위한 용도로 사용해요.

코드 사이닝에 필요한 재료

코드 사이닝을 구성하는 요소에는 아래와 같은 것들이 있어요.

App ID

com.codingdad.myapp 같은 형태로 내 앱에 부여된 고유한 ID입니다. 앱을 식별하기 위해서 사용합니다.

인증서 Certificate

Apple에서 발행한 인증서로 나의 신원을 보장합니다. “내"가 서명했다는 것을 확인하기 위한 용도로 사용합니다.
최초에 인증서를 요청할때 내 맥에서는 Private Key와 Public Key가 생성되고, Public Key가 이 인증서에 포함됩니다. 이 인증서를 사용해서 앱을 사이닝 하려면 Private Key가 필요한데, “나"만 소유하고 있으므로 나 이외의 사람은 할 수 없게 됩니다.

Device ID

iPhone이나 iPad와 같은 애플 디바이스에 부여된 고유한 ID입니다. 개발용으로 앱을 배포할 때 특정 디바이스만 허용하기 위한 용도로 사용합니다.

프로비저닝 프로파일 Provisioning Profile

위의 3가지를 묶어서 관리하는 설정 파일입니다. 하나의 App ID, 하나 이상의 인증서, 0개 이상의 Device ID를 포함합니다. 여기 포함된 인증서와 Private Key가 있어야 앱을 사이닝 할 수 있습니다. Device ID가 포함된 경우에는 해당 디바이스에서만 앱을 구동할 수 있습니다.

Code Signing Identity

인증서의 Common Name을 의미합니다. 인증서를 열어보면 “Apple Development: XXXXX (YYYYYYY)” 같은 형식으로 되어 있는 이름입니다.
XCode를 설정할 때 Code Singing Identity에 이 이름을 지정하면, Key Chain에서 이 이름을 가진 인증서를 찾고, 인증서와 쌍이 되는 Private Key를 찾아서 사이닝을 합니다.

프로비저닝 프로파일의 종류

개인 회원과 기업 회원에 따라서 생성할 수 있는 프로파일의 종류가 조금 달라요.

개발 프로파일 Development Profile

등록된 디바이스에만 앱을 설치할 수 있고, 디버깅이 가능합니다. 푸시 알림과 같은 서비스는 사용할 수 없습니다.
개발 과정에서 프로그래머가 앱을 디버깅하고 프로파일링하는 용도로 사용합니다.

앱스토어 프로파일 App Store Profile

앱스토어와 테스트 플라이트에 배포하기 위한 용도의 프로파일로 디바이스 제한은 없습니다.
테스트 플라이트를 통한 알파/베타 테스트 및 앱 배포를 위한 용도로 사용합니다.

인하우스 배포 프로파일 In-house Distribution Profile (Enterprise Profile)

기업 회원만 가능합니다. 앱스토어가 아닌 곳에서 디바이스 제한 없이 앱을 배포하기 위한 용도입니다.
테스트 플라이트에 테스터 등록없이도 ipa나 설치링크만 배포하면 누구나 앱을 설치할 수 있습니다.

애드혹 프로파일 Ad-hoc Profile

등록된 디바이스에만 앱을 설치할 수 있는 배포용 프로파일입니다.
한정된 테스터에만 앱을 배포하고 테스트하는 용도로 사용할 수 있습니다.

배포 시나리오

퍼블리셔나 본사에서 일하는 경우 기업 회원 계정에 개발자의 개인 계정을 등록해서 사용하게 됩니다. 개발사의 경우에도 기업 회원 계정을 만들 수 있지만, 퍼블리셔의 이름으로 앱을 배포해야 하기 때문에 굳이 비싼 기업 회원 계정을 만들 필요는 없습니다. 개인 회원으로 등록해서 개발을 진행하고, 배포시에만 퍼블리셔에게 받은 인증서와 프로비저닝 프로파일을 사용해서 사이닝하는 방식을 많이 사용합니다.

애드혹 프로파일을 사용한 테스터 배포

개인 회원의 경우 애드혹 프로파일을 사용해서 등록된 테스터에게 배포할 수 있습니다. 테스트용 기기는 개발자 사이트에 미리 등록해두어야 합니다. 프로비저닝 프로파일에 기기 정보가 기록되기 때문에 기기 등록시마다 프로비저닝 프로파일을 재발급해야 합니다.
ipa 파일을 직접 전달해서 XCode나 윈도우용 대체 어플을 통해 테스터가 직접 설치할 수 있습니다.
웹 설치 링크를 만들어서 배포하는 것도 가능합니다.

인하우스 배포 프로파일을 사용한 사내 배포

기업 회원은 인하우스 배포 프로파일을 사용하여 등록되지 않은 기기에도 배포가 가능합니다. 사내 테스트 용으로 사용하기 좋습니다.
애드혹 프로파일과 마찬가지로 ipa를 직접 배포하거나 웹 설치 링크를 통해서 배포할 수 있습니다.

테스트 플라이트를 사용한 배포

앱스토어 프로파일을 사용하면 테스트 플라이트를 통해서 배포할 수 있습니다. 테스터의 Apple 계정만 등록하면 됩니다. 테스터는 디바이스에 설치된 테스트 플라이트 앱을 통해서 등록된 앱을 설치하고 업데이트 할 수 있습니다.
테스트 플라이트에 업로드한 앱을 그대로 앱스토어에 배포할 수 있어서, 앱스토어 릴리즈 전의 QA 용으로 좋습니다.

설치 웹 링크 만들기 Over-the-air Distribution

설치 웹 링크를 만들기 위해서는 HTTPS로 접근 가능한 웹서버가 필요합니다. 우선 웹서버를 통해서 ipa 파일을 받을 수 있게 설정합니다. 그 다음에 해당 ipa의 링크를 포함하는 plist 파일을 만들고, 웹서버를 통해서 접근할 수 있게 하면 됩니다.
아래 plist에서 대문자로 된 부분을 바꿔서 사용하면 됩니다.
그리고 아래의 형식으로 링크를 배포하면 됩니다.
itms-services://?action=download-manifest&url=http://YOUR.DOMAIN/app.plist
HTML

참고 자료

코드 사이닝 공식 지원 페이지 https://developer.apple.com/support/code-signing/