iOS 앱을 웹에 배포했는데, 다운로드 받으니 파일이 열리지 않는다.
다음과 같이 애플 개발자 등록 후에 곧바로 만들어진 앱 파일을 배포할 수 있는 것이 아니였다.
Certificate , Notarization + Stampling 을 거치지 않으면
내가 만든 앱을 웹이나 App Store 에 배포할 수 없다.
(정확히는 업로드는 가능하나, 파일을 다운받았을 때 사용자가 열 수 없다.)
이는 안전하지 않은 악성파일을 배포하는 것을 방지하기 위한 것으로
모든 Apple 플랫폼의 개발자들은 배포 전에 Notarization + Stampling 을 거쳐야한다.
Notarization 이란 애플로부터 내가 배포하고자하는 애플리케이션 파일에 "악의적인 코드가 없음"을 확인 받는 것이다.
다음은 notarytool
이란 명령어로 애플리케이션 파일을 검증받는 예다.
# 이 명령어는 내가 배포하고자 할 파일을 Apple 서버에 업로드한다.
$ xcrun notraytool submit [배포파일 경로]
애플은 애플리케이션 Distribution(배포) 이전에 반드시 Notarization(공증) 받기를 권한다. (사실상 강제)
$ xcrun altool --list-providers -u [Apple-Developer-Email]
# This process stores your credentials securely in the Keychain. You reference these credentials later using a profile name.
$ xcrun notarytool store-credentials --apple-id [Apple-Developer-Email] --password [App-Password-by-apple] --team-id [Team-Id]
KEYCHAIN_PROFILE_NAME="[blahblah]"
xcrun notarytool --keychain "${KEYCHAIN_PROFILE_NAME}"
애플리케이션의 확장자로 압축된 패키지의 경우 .pkg
나 .dmg
, 실행 파일의 경우 .app
으로 생성되었을 것이다.
위 1~3번 과정에서 Notarization 을 성공했다면, 그 다음은 Gatekeeper (애플 앱 전용 보안관리자로만 알아두라) 라는 녀석이 해당 앱이 공증받았다는 사실을 알 수 있도록 도장을 찍는게 필요하다.
그게 바로 다음 명렁어다.
$ xcrun stapler staple "[App-Path]"
$ xcrun notarytool submit package.zip \
--keychain-profile [keychain-name] \
--wait
성공적으로 notarization 을 마치면 등록된 개발자 계정 이메일로 다음과 같은 메일이 온다.
앱을 배포해도 배포할 수 있다는 의미다.
이제, AppStore 나 웹상에 notarization 및 stampling 이 완료된 내 앱을 배포할 수 있다.