[iOS] Provisioning profile이란 & ipa에서 까보기

naljin
7 min readSep 24, 2021

프로비저닝 프로파일(Provisioning profile)

원칙대로라면 오직 Apple만이 앱 실행을 할 수 있읍니다

하지만 프로비저닝 프로파일과 함께라면??! 두려울게 업찌!!

프로비저닝 프로파일을 이용해 개발자가 배포한 앱도 실행할 수 있다구요!!

엥 도대체 먼말이냐;;; 🤔 좀 알아먹게 설명을 해바라;;

흠,,, 그러니까 애플 놈들이 배포한 앱을 제외하면 기본적으로는 다 못믿을 앱이란 말이져?? 예를 들어 인터넷에 어떤 앱이 올라와있는데 얘가 막 나쁜맘 먹고 이상한 코드 심어놓은 앱일 수도 있고,, 그렇단 말이에요!

🤔 흠 그럼 어떤 앱을 깔고, 어떤 앱을 안깔지 어떻게 결정 하는데?

🤓 만약 개발자가 신뢰할 수 있는 사람이라면 이 앱은 설치해도 되겠군 ㅇㅇ 라고 생각할 수 있겠져?

즉, 디바이스에서 앱을 실행하기 위해서는 내 디바이스가 개발자를 신뢰할 수 있는지를 알아야 앱 설치를 허락할지 말지를 결정할 수 있는데, 이 결정을 도와주는 파일이 프로비저닝 프로파일입니다.

요 파일은 앱을 테스트하려고 하는 디바이스에 설치가 되어야 합니다.

🤔 엥 그러면 여기에 뭔 내용이 담겨 있길래 개발자가 만든 앱을 믿고 수행할 수 있게 도와주는건데???

프로비저닝 프로파일은 아래와 같은 정보를 포함합니다.

  • 앱 ID
  • 푸시 알림, Passbook, HealthKit, CloudKit 등과 같이 앱에서 사용할 수있는 특별한 Entitlements (권한/자격)
  • 앱 실행이 허용 된 기기의 UDID 목록
  • Apple에서 발급 한 배포 인증서 (certificate)

iOS 기기Provisiong Profile을 설치 후 앱의 서명에 사용된 Certificate를 포함하는 지 확인하고, 기기의 UDIDApp ID도 맞는 지 확인한 후에 앱의 설치를 허용합니다.

즉, 프로비저닝 프로파일은 개발 및 테스트를 위해 iOS 장치에서 애플리케이션을 실행할 수 있도록 Apple에서 발급한 특별 hall pass 라고 할 수 있습니다

목적에 따라 아래와 같은 다른 유형의 프로파일을 사용할 수 있는데요, 이 내용에 대한 자세한 정보가 궁금하다면 이곳을 확인하세요!

  • App Store Connect
  • Ad-Hoc
  • Enterprise
  • Development

그래서 어떻게 생겨먹었냐구요? 직접 까봅시다

프로비저닝 프로파일을 얻기 위해선 우선 .ipa 로 archive 된 파일이 필요합니다. 우선 저는 App Store Connect 를 체크하고 export 해줘씀여

그럼 이런 파일들이 담긴 폴더가 하나 나오는데

여기서 .ipa.zip 확장자로 바꾸고

더블 클릭해서 압축 풀어주면 폴더가 쨘 나옵니다

여기서 Payload 폴더 안의 내 app 을 확인할 수 있는데

우클릭해서 패키지 내용 보기를 클릭합니다

이런 폴더가 다시 쨘하고 나오는데!!

보이나요 embedded.mobileprovision?!?!?! 바로바로 우리의 프로비저닝 프로파일이죠.

아래 명령어로 내용을 확인할 수 있습니다. vi 로 열면 깨지는 글자들이 있더라고요?

$ security cms -D -i embedded.mobileprovision

근데 걍 더 좋은건 뭔줄 아셈여? 이 상태에 space 누르면 미리보기로 바로 내용 뜬다는 것 ㅋ

진짜로 Entitlements, 인증서, 유효기간 등이 명시되어 있네유? 만약 실행 환경이 프로비저닝 프로파일에 명시된 자격 조건과 맞지 않는다면 앱을 실행할 수 없겠쥬?

님덜 근데 위에서 “목적에 따라 다른 유형의 프로비저닝 프로파일을 사용” 한다고 그랬잖아여? 제가 비록 enterprise 계정은 아니라 ^^,, Enterprise 는 빼낼 수 없었지만 나머지 세개는 다 뽑아봤습니다. 머가 다른지 궁금하니까여~

한번 보면 조금씩 차이가 있긴 하죠???

AdHoc 이나 Development 에서는 아까 AppStoreConnect 의 provisioning 에선 못봤던 Provisioned Devices 항목도 있네요. 이거 뭐냐면 앱 실행이 허용 된 기기의 UDID 목록임!! ㅇㅇ

+) 추가로 Enterprise 도 빼봤는데 프로비저닝 프로파일 이름과 Provisioned Devices 항목이 없다,, 정도만 다른거 같네요?

Bonus

참고로 내 로컬에 있는 모든 프로비저닝 프로파일은

~/Library/MobileDevice/Provisioning\ Profiles

경로를 통해 확인할 수 있습니다.

여기에 있는 provisioning profile 이 최종적으로 .app 내에 들어가는 형태인가봐여? 신기

마무리

하쒸 근데 이거 갑자기 왜썼지.,,???

요즘 certificate 랑 provisioning profile 집중적으로 조지면서 이전에 정리해놨던 것들이 슬슬 조금씩 이해가 가고 있는것 같다,,?

ㅎㅎ,, 그럼 20000!

참고

http://la-stranger.blogspot.com/2014/04/ios.html

https://www.sharpmobilecode.com/making-sense-of-ios-provisioning/

https://medium.com/ios-os-x-development/ios-code-signing-provisioning-in-a-nutshell-d5b247760bef

https://m.blog.naver.com/mym0404/221611576550

--

--