10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Xcode13で新しくシンプルになったmacOSアプリの公証(Notarization)を行う

Last updated at Posted at 2021-10-24

Apple における公証(Notarization)とは、何かということについては割愛します。App Store を通さずにアプリに公証を行って配布したい場合、必要になってくる手段です。

Xcode13から公証が簡単に

私は今まで公証をしたことがなかったので、どう簡単になったかは分かりませんが、前よりもシンプルに行えるツールが提供されたようです。

Apple、App Store外で公開するMacアプリのマルウェアチェックを行う公証サービスをより速くシンプルに行える「notarytool」コマンドを提供。
https://applech2.com/archives/20210611-apple-provide-notarytool-command.html

とはいえ、けっこうつまずくことが多かったので、ここにシェアしたいと思います。

xcrun notarytool を使うには

notarytoolを使うには、大前提として Apple Developer Program に入っている Apple アカウントによるキーチェーンアクセスが必要です。

ヘルプを見てみましょう。

% xcrun notarytool --help
OVERVIEW: Manage submissions to the Apple notary service

USAGE: notarytool <subcommand>

OPTIONS:
  --version               Show the version.
  -h, --help              Show help information.

SUBCOMMANDS:
  store-credentials       Save Notary service credentials to the Keychain.
                          Leave credential options not specified for
                          interactive prompts.
  submit                  Submit an archive to the Notary service
  info                    Get status information for a submission
  wait                    Wait for completion of a previous submission
  history                 Get a list of previous submissions for your team
  log                     Retrieve notarization log for a single completed
                          submission

 
store-credentialsを使ってキーチェインアクセスをするようだ、ということは分かりました。

さっそくアクセスしてみましょう。以下の "m@hibara.org"は、Apple ID で、"XXXXXXXXXX"はチームID、キーチェーンアクセスでいうところの「部署」記号です。

% xcrun notarytool store-credentials --apple-id "m@hibara.org" --team-id "XXXXXXXXXX"

This process stores your credentials securely in the Keychain. You reference these credentials later using a profile name.

Profile name:

いきなり、Profile name は何?と聞かれます。これは、

Apple ID - Appleアカウントの管理
https://appleid.apple.com/

にアクセスすることで作成することができます。

「App用パスワード」から、Apple Developer Program に入っている Apple ID でアクセスします。

signin.png

表示されたアカウントの、「セキュリティ」欄にある「パスワードを生成...」をクリックします。

App用パスワード.png

プロファイル名の入力を促されますので、あとでターミナルから入力するとき、判別できる適当な名前を入力します。ここでは、仮に「notaryprofile」とします。

プロファイル名.png

「作成」ボタンを押すと、いまサインイン中の Apple IDアカウントのパスワードを聞かれますので、入力します。

AppleIDアカウントのパスワード.png

すると、「App用パスワード」が表示されますので、これをメモしておきます。

App用パスワード表示.png

ここでは、「zkf-edpz-kioz-mvnf」が、パスワードになります。

ターミナルへ戻ってキーチェーンアクセスに保存します

再び、以下のコマンドをターミナルから入力します。Profile nameを聞かれるので、先ほど Apple ID アカウントで作った「App用パスワード」名を入力します。

ここの例では、「notaryprofile」を入力します。

% xcrun notarytool store-credentials --apple-id "m@hibara.org" --team-id "XXXXXXXXXX"

This process stores your credentials securely in the Keychain. You reference these credentials later using a profile name.

Profile name:
notaryprofile

すると、「App用パスワード」名を入力したときのパスワードを求められます。

App-specific password for m@hibara.org: 

ここの例では、「zkf-edpz-kioz-mvnf」を後から入力します。

Validating your credentials...
Success. Credentials validated.
Credentials saved to Keychain.
To use them, specify `--keychain-profile "notaryprofile"`

と表示され、ローカルのキーチェーンアクセスに保存されます。

準備が整ったので公証を行ってみる

公証を行うには、Apple へ「*.app」をアップロードしてチェックを受けなければなりませんが、そのままでは、アップロードは行えずエラーになります。

Error: AttacheCase.app must be a zip archive (.zip), flat installer package (.pkg), or UDIF disk image (.dmg)

アップロードできるファイル形式は、「.zip」「.pkg」「.dmg」に限ります。

ここの例では、「.zip」へ圧縮を行ってからアップロードを行いましょう。

% /usr/bin/ditto -c -k --keepParent "AttacheCase.app" "AttacheCase.zip"          

Zip圧縮を行ったら、いよいよそのアーカイブの公証を行います。

% xcrun notarytool submit /Users/hibara/Desktop/AttacheCase.zip --keychain-profile "notaryprofile" --wait

アップロードされ、チェックにしばらく待たされたあと、以下のメッセージが出れば、公証は成功です。

Conducting pre-submission checks for AttacheCase.zip and initiating connection to the Apple notary service...
Submission ID received
  id: d78c6198-b368-4c9a-9847-9a011ccffbde
Successfully uploaded file15.4 MB of 15.5 MB)    
  id: d78c6198-b368-4c9a-9847-9a011ccffbde
  path: /Users/hibara/Desktop/AttacheCase.zip
Waiting for processing to complete.
Current status: Accepted........
Processing complete
  id: d78c6198-b368-4c9a-9847-9a011ccffbde
  status: Accepted

公証が失敗する場合

アップロードされ、公証のチェックが行われたあと、失敗することがあります。

Conducting pre-submission checks for AttacheCase.zip and initiating connection to the Apple notary service...
Submission ID received
  id: c3a641ea-716b-4c56-9efa-63835ef73450
Successfully uploaded file15.4 MB of 15.5 MB)    
  id: c3a641ea-716b-4c56-9efa-63835ef73450
  path: /Users/hibara/Desktop/AttacheCase.zip
Waiting for processing to complete.
Current status: Invalid.............
Processing complete
  id: c3a641ea-716b-4c56-9efa-63835ef73450
  status: Invalid

その場合は、同時に出力された UUID(ここではc3a641ea-716b-4c56-9efa-63835ef73450)から、エラーログを参照することができます。コマンドは以下の通りです。

% xcrun notarytool log c3a641ea-716b-4c56-9efa-63835ef73450 --keychain-profile "notaryprofile" developer_log.json

この例では、「developer_log.json」というファイルにログを出力させます。成功すれば、以下のメッセージが表示され、ログファイル(JSONファイル)が生成されると思います。

Successfully downloaded submission log
  id: c3a641ea-716b-4c56-9efa-63835ef73450
  location: /Users/hibara/Desktop/developer_log.json

ログファイルを見れば、公証に失敗した理由は書かれていますが、主に失敗する例は、

  • コードサインが「Developer ID Application」で行われていない
  • Hardened Runtimeを有効になっていない
  • Secure Timestampが付いていない

などでしょうか。順を追って説明します。

コードサインが「Developer ID Application」で行われていない

意外と「Distribution」などの証明書をコードサインしそうですが、ここでは「Developer ID Application」で行います。

参考:
https://developer.apple.com/forums/thread/128772

まだ作成していない場合は、

https://developer.apple.com/account/resources/certificates/list

で作成し、ダウンロードしてください。

DeveloperIDApplication.png

Hardened Runtimeを有効になっていない

ランタイムのセキュリティを強化することで、コードを容易に変更されないようにし、アプリケーションを防御します。プロセスで実行できるものを詳細に制御します。ようは公証を行うには、アプリケーション内部のセキュリティ強化が必須ということです。

Xcodeから設定するときは、以下の記事が役立つでしょう。
参考:https://qiita.com/IKEH/items/5d093644922991079ee2

また、Visual Studio for Mac で設定を行っている場合は、「プロジェクト オプション」の「コード署名」で「セキュリティが強化されたランタイムを有効化」をチェックします。

セキュリティ強化ランタイム.png

また、「Entitlements.plist」の編集も必要です。

Entitlements.png

Secure Timestampが付いていない

これも、Xcodeのプロジェクト設定で指定できます。「--timestamp」を追加します。
先ほどの記事が同様に参考になります。
参考:https://qiita.com/IKEH/items/5d093644922991079ee2

Visual Studio for Mac で設定を行っている場合は、「プロジェクト オプション」の「コード署名」で「追加引数」の欄に、「--timestamp」を追加することで対応できます。

timestamp.png

以上です。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?