[mac] アプリの公証を受ける方法 (Notarized Applicationのビルド方法)
本文書の目的
macOSアプリケーションについて、Appleから公証を受ける方法について説明します。内容は、Appleの公開している「Notarizing Your App Before Distribution」の意訳・要約になります。内容に謝りなどございましたら、ご指摘お願いします。
実行環境・作成日時
作成日時: 2019.03.02
開発ツール: Xcode 10.1
概要
公証が受けられるソフトウェアの種類は以下です:
- macOSアプリ
- カーネルエクステンションなどの、非アプリケーションバンドル(Non-app bundle)
- ディスクイメージ(UDIFフォーマット)
- Flat installer package
公証は、ソフトのデベロッパIDが流出してしまった時に、ソフトのユーザを守るためにも使用できます。不法に改造されたソフトウェアが出回ってしまった時、Appleと協力してそれらのソフトの実行を不許可に出来ます。
公証を受けるための準備
- 配布するすべてのアプリケーション(executable software)に対してcode-signingを行います(参考リンク: [iOS 10] Xcode 8 の新しい Signing 機能について)。
- 実行時強化機能(Hardened Runtime capability)を有効にします。方法については、「Enable hardened runtime (macOS)」を参照してください。
- Xcodeの
capability
設定で、Hardened Runtime
を有効にします。 - Developer IDを使ってアプリをビルドします。詳細については、「Create, export, and delete signing certificates」を参照してください。
AppleはWWDC 2018発表以前のソフトについても公証を受けることを推奨しています。詳細については、Notarize Your Pre-Existing Software を参照してください。
配布用ソフトの準備
- Open your Xcode project.
- Create an archive of your app.
- Open Xcode's Organizer window.
- In the Archives tab, select the archive you created.
- Click Distribute App to view the distribution options.
- Choose Developer ID for your method of distribution.
- Click Next.
- Choose Upload to send your archive to the Apple notary service.
- Click Next.
最後のクリックで、Xcodeは生成されたアーカイブをnortary serviceに送信します。nortary serviceは、アーカイブを検査します。検査には1時間くらいかかります。詳細については、「Upload a macOS app to be notarized」を参照してください。
トラブルシューティング
- Hardened Runtime capabilityを有効にするとカスタムフレームワークがリンクできなくなりました。カスタムフレームワークをリンクする場合、それらは
Embedded Library
としてリングする必要がありそうです。