회사에서 Mac CLI tool을 공증받을 때에 xcrun altool
명령어를 사용해왔다. 그런데 altool을 대체하는 🌟notarytool
🌟의 존재에 대해 최근 알게되어서 (노답 주니어) WWDC21, 22 자료를 기반으로 짧은 정리를 해보려한다.
처음에 내가 공증이라는 단어를 들었을 때에? 예? 공..뭐요? 했던 기억이 나서 공증이 왜 필요한지에 대한 공감대 형성이 먼저라는 생각이 든다.
우리는 흔히 앱스토어에서 소프트웨어를 다운로드를 받지만 개발자가 제공한 링크를 통하여 소프트웨어를 다운로드받기도 한다. 하지만 이 경우에 해당 소프트웨어가 악성코드가 아니라는 것을 누가 보장할 것인가? 그래서 애플이 소프트웨어를 분석하고 '이 소프트웨어는 안전합니다 야호 🎉' 하고 딱지를 붙여주는 것이 notarization이다. 공증을 받은 소프트웨어를 사용자가 다운로드 후 열게되면 사용자의 mac은 해당 소프트웨어가 유효한 공증 ticket을 받은 프로그램인지를 확인한다. 이를 통해 사용자는 최소한 이 소프트웨어가 내 mac을 갈아엎지는 않을 것이라는 것을 신뢰할 수 있다.(공증을 받기 이전에 codesign
이 먼저 선행되어야 하는데 이에 관해서는 일단 넘어간다. pkgbuild
로 가능하다.)
과거의 altool
의 코드는 어떻게 쓰여져 있었는지 한 번 볼까?
requestUUID=$(xcrun altool --notarize-app -f path/to/submission.zip
--primary-bundle-id "$BUNDLE_ID"
--username "$user_account"
--password "$user_password"
--file "$file_path"
--asc-provider "$team_name"
| awk '/RequestUUID/ { print $NF; })'
while true; do
INFO_OUT=$(2>&1 xcrun altool
--notarization-info "$requestUUID"
--username "$user_account"
--password "$user_password")
STATUS=$(echo "$INFO_OUT" | grep "Status:" | sed -Ee "s|.*(.*)$|\1|")
if [["$STATUS" != "in progress"]]; then
break
fi
sleep 30
done
)
http://cwyang.github.io/2020/12/09/osx-codesign-notarization.html (altool 사용 관련)
https://zzsza.github.io/development/2017/12/20/linux-6/ (awk 관련)
참고하기에 좋은 소스입니다 🍯
그렇다면 우리의 notarytool
은 이 과정을 어떻게 헤쳐나갈까? 두둥 (넷플릭스 효과음)
notarytool submit path/to/submission.zip --wait
--keychain-profile "notary-profile.com"
ontarytool log $SUBMISSION_ID notary-log.json
--webhook
옵션 제공xcrun notarytool store-credential --apple-id "apple@account.com" --team-id "ABCD12345"
Profile name:
notary-profile.com
Password for apple@account:
Validating your credentials...
Success. Credentials validated.
Credential saved to Keychain.
To use them, specify '--keychain-profile "notary-profile.com"'
필수는 아니지만 공증 이후에 stapler
를 할 수도 있다.
https://scriptingosx.com/2021/07/notarize-a-command-line-tool-with-notarytool/
notary tool 전반에 대하여 아주 정리가 잘 된 글을 찾았다. 🐶🍯
WWDC2022에 따르면 altool 방식은 2023 Fall 까지 Sunset이라고 하니 아직 시간은 넉넉히? 남았다 싶으면서도 notarytool이 더 쉽고 빠른 것 같아서 얼른 갈아타도 좋지 않을까. Xcode 14에 built-in 되어 있는 것 같으니 조만간 다운로드해서 확인해봐야지. (beta는 이미 출시되었지만!) 그리고 개인적으로 Notary REST API에도 관심이 간다. 추후에 자세히 살펴보도록 하겠다.