iOS 앱을 출시하기 위해서는 애플 개발자 계정이 있어야 하며, 이를 위해 무려 129,000원을 매년 내야 한다.
만약 출시를 한 이후에 결제 갱신을 하지 않는다면 앱스토어에서 앱이 내려가는 불상사를 겪을수도 있다.
그렇다면 우리는 왜!!! 이 거금을 매년 주면서 개발자계정을 갱신해주어야 할까?
예상컨데 애플의 보안정책과 관련이 있을것이다.
즉, 앱스토어에 앱을 출시하려면 그 개발자가 "신뢰할 수 있는 사람인가?"가 애플한테 가장 중요할것이다.
만약 별다른 조건 없이 앱을 출시할 수 있었다면, 악의를 가진 개발자가 악성코드를 심어서 배포할수도 있는 상황도 충분히 일어날 수 있다.
그러니까 애플은 "신뢰할 수 있는 개발자인가?"를 확인하기 위해 개발자 계정을 유지해야 한다는 조건을 마련한 것 같다.
물론, "돈을 낸다" == "신뢰할 수 있다"의 공식은 아니고 인증서, 프로비저닝 프로파일, 코드사이닝과 같은 개념들이 모두 애플의 보안 정책과 연관이 있다고 보면 된다.
오늘은 좋은 블로그 글들을 참고해서 코드 사이닝과 프로비저닝 프로파일에 대해 간단히 알아보겠다.
프로비저닝 프로파일이란?
애플 개발자계정을 등록하고, 애플에게 "나 신뢰할 수 있는 사람이야"라고 말하는게 인증서(Apple Certification) 발급과 등록 과정이다.
그러나 여기서 끝이 아니라, 해당 앱을 테스트할 기기가 개발자를 신뢰할수 있어야 한다. 이와 관련된 개념이 프로비저닝 프로파일이다.
프로비저닝 프로파일은 앱이 설치되고 실핼할 수 있도록하는 파일로, 위에서 언급한 인증서와, 앱의 번들ID, 그리고 앱을 구동시킬 기기의 UUID 등이 포함되어있다.
테스트할 기기에 해당 프로비저닝 프로파일이 설치되어있지 않다면, 앱을 실행할 수 없다.
이를 위해 xcode에서 설정 - Account에서 애플 계정을 등록해두어야 하고, Signing & Capabilities에서 관련 설정을 해주어야 한다.
자세한 과정은 다음 블로그에 정리가 잘 되어있다.
https://hyunndyblog.tistory.com/150
[iOS] 앱을 테스트&배포할 때 알게되었던 개념들 - 1
개요 그동안 회사를 다니면서 제 개인 프로젝트를 발표하기도 하고, 제가 맡은 기능을 넣은 내부 배포 버전, 라이브 배포 버전도 아카이빙을 해봤는데요. 앱을 테스트, 배포하는 과정에 필수적
hyunndyblog.tistory.com
실제로 애플 디벨로퍼 아카데미에서 다른 개발자들과 협업할 때, 내 기기에 빌드하고 싶은데 Signing & Capabilities의 Team이나 Bundle Identifier가 이전에 테스트한 개발자 기준으로 되어있어서 빌드가 되지 않았던 경험이 있었다.
이는 내 기기에 설치된 프로비저닝 프로파일의 정보와 일치하지 않아서 발생하는 문제였다.
xcode에서 프로비저닝 프로파일의 정보를 다음과 같이 확인해볼 수도 있다.
App ID나 Certificates, Device 정보들이 담겨있는걸 확인할 수 있다.
다른 팀원들과 작업할 때 자신의 디바이스에 빌드가 되지 않는다면, Signing & Capabilities쪽을 확인해보는 것을 추천한다.(사실 xcode가 친절하게 알려주긴 한다)
코드 사이닝이란?
코드 사이닝은 위에 언급한 인증서나 프로비저닝 프로파일을 모두 포괄하는 큰 범주라고 생각하면 될 것 같다.
애플 개발자문서에 따르면
코드 사이닝은 앱이 사용자에 의해 생성되었음을 인증하는 데 사용하는 macOS 보안 기술로, 앱이 서명되면 시스템은 앱의 모든 변경 사항을 감지할 수 있다고 한다.
즉, 맨 처음에 언급한 애플이 앱 출시 과정에서 "신뢰할 수 있는 개발자인가?"를 확인하는 과정이라고 볼 수 있다.
인증서를 통해 개발자의 신뢰를 확인하고, 프로비저닝 프로파일을 통해서 디바이스가 신뢰할 수 있는 앱이라는게 확인되면, 애플은 비로소 이 앱은 신뢰할 수 있는 앱이라는걸 확인하고 승인할 수 있다.
대부분의 경우 xcode의 자동 코드사이닝을 이용할 수 있으며, 그 과정을 그림으로 나타내면 다음과 같다.
자동으로 코드사이닝이 되면, 자세한 과정을 몰라도 될것 같았으나..
계속 코드사이닝 인증서가 xcode상에 쌓이게 되면 한도를 초과할 경우 인증서가 취소될수도 있다고 한다.
그래서 수동 서명을 사용하기도 하는데, 그 과정은 다음 블로그에 정리가 잘 되어있다.
https://medium.com/@bingkuo/a-beginners-guide-to-code-signing-in-ios-development-d3d5285f0960
A Beginner’s Guide to Code Signing in iOS Development
Certificates, provisioning profiles, code signing, and related concepts are a common part of an iOS engineer’s daily work, and we often…
medium.com
사실 iOS개발을 막 시작한 나에게, 이러한 개념들을 100%이해하기엔 조금 어려웠다.
다만, 이 글을 쓰면서 실제로 개발을 하면서 빌드가 안됐었던 이유나, 애플이 어떤 과정을 통해 앱들의 보안성을 유지하는지를 엿볼 수 있는 좋은 기회였다고 생각한다.
얼마후에 실제 앱을 출시할 때 이와 관련한 경험들을 추가로 더 작성해볼 계획이다.
※참고자료
https://developer.apple.com/documentation/security/code-signing-services
https://hyunndyblog.tistory.com/150
https://medium.com/@bingkuo/a-beginners-guide-to-code-signing-in-ios-development-d3d5285f0960