注:macOS 12/Monterey および Xcode 13 用のアップデートです。 Xcode 12以前については、このブログ記事を参照してください。
Monterey (macOS 12) では、パブリックネットワーク上で配布されるアプリケーションを公証することが強く推奨されています。多くの開発者は、接続されたストレージデバイスを使用して、またはファイル共有を介してアプリケーションを転送しています。公証は、アプリケーションが悪意のあるものではないことをユーザーに保証することを目的としており、ウェブサイトからダウンロードされたアプリケーションにのみ必要です。
4D v18でアプリケーションを構築する際に、ビルトイン署名機能を使用すると、アプリケーションを公証する準備ができます。このプロセスは、4Dの外部で行われます。申請書に電子署名を追加し、署名された申請書を自動検査サービスに提出することになります。ここでは、必要な情報をご紹介します。
必要なもの
XCODE
公証には、Xcode 13 以降とmacOS 12 以降が必要です。
Macに複数のバージョンのXcodeがインストールされている場合、Xcode-selectユーティリティを使用して適切なバージョンを選択することができます。
sudo xcode-select -s /path/to/Xcode13.app
普段、Xcodeを直接使わない場合でも、一度は起動しておくとよいでしょう。ダウンロードする “Developer Tools “について警告されたら、それを受け入れる。
ライセンス条件を確認するように言われたら、それを受け入れる。
Xcodeの新しいバージョンをインストールした後、このステップを繰り返すのは悪いアイデアではありません。通常、ライセンスの変更を受け入れる必要があります。そうしないと、公証に失敗します。
場合によっては、新しいApple Storeの条件を受け入れるために、https://appleid.apple.com/account/homeにログインする必要があります。そうしないと、公証が失敗する可能性があります(App Storeに公開したくない場合であっても)。
2ファクタ認証
また、Apple IDの2ファクタ認証を有効にしておく必要があります。
よくわからない場合は、2ファクタ認証を設定した上で、Apple IDのアカウントページにサインインし、セキュリティセクションで2ファクタ認証オプションを検索し、機能がオンになっているかオフになっているかを確認してください。
プロセスの概要
公証のための設定が必要です。これは一度だけ行う必要があります。その後、ビルドのたびに、ZIP、アップロード、結果待ち、スタンプ、再度ZIPを行う必要があります。そしてこれは、すべてのアプリケーション(クライアント、サーバー、シングルユーザー、コンポーネント)、すべてのビルドに適用されます。
このブログ記事ではまず、プロセスを理解するためにすべてのステップを詳細に説明し、最後に4Dメソッドを使用して作業を完全に自動化する方法を説明します。
シングルタイムのセットアップ
公証のために以下のものが必要です。
- あなたのApple IDアカウント、通常はEメール
- あなたのAppleの会社のチームID。取得方法は下記の「チームIDの取得」を参照してください。
- アプリ固有のパスワードは、以下の取得方法を参照してください。
このデータがあれば、キーチェーンにパスワードを登録することができます。これにより、パスワードを平文で提供することなく、コマンドラインを使って(あるいは4Dから自動的に)公証することができます。
アプリ固有のパスワードを生成する
- apple.comにサインインします。
- サインインとセキュリティ」セクションで、「アプリ固有のパスワード」をクリックします。
- Generatean app-specific password をクリックするか、「+」をクリックし、画面に表示される手順に従います。
- 新しいパスワードに “notarytool” という名前を付けるとよいでしょう。
- 表示されたコードをコピーしてください。
チームIDを取得する
アプリケーションをコード化するためのApple証明書は、すでにリクエストして登録してあるはずです。その際、通常は2つ(iOSを含めると4つ)あります。一つはApple Development: your name(user-id) で始まり、もう一つはDeveloper ID Application: company name(team-id) で始まります。
Appleキーチェーンを起動し、証明書を選択し、Developer ID Application: company nameと表示されているかどうか確認します。表示されていれば、( )内の数字があなたのIDです。
表示されていない場合は、Terminalで以下を実行します。
xcrun altool --list-providers -u "AC_USERNAME" -p secret_2FA_password
AC_USERNAMEをあなたのAppleアカウントのユーザー名とメールアドレスに置き換え、上記でコピーしたコード/2FAパスワードを入力します。
Terminalがあなたのteam-idで応答します。
詳しくはこちら。
認証情報を保存する
Terminalで、以下を実行します。
xcrun notarytool store-credentials "notarytool" --apple-id "AC_USERNAME" --team-id <WWDRTeamID> --password <secret_2FA_password>
引用符はそのままに(内容を置き換えるだけ)、<>記号は使わず、idかパスワードだけにしてください。
ビルド/Zip/公証/スタンプ
さて、(一度だけの)プリインストールプロセスの後、本当のビルド作業をする時が来ました。
BUILD APPLICATION コマンドやダイアログを使って、コンポーネントやアプリケーションをビルドしてください。作成したアプリケーションには、認証機能を使って自動的に署名を行います。署名のエラーでビルドが失敗した場合は、まずそれを修正する必要があります。署名されていないアプリケーションの場合、公証は失敗します。
コンポーネントがリソースフォルダに実行ファイルを含む場合、またはアプリケーションがコンポーネントやプラグインを含む場合、それらは前もって署名された有効なものである必要があります。
Zip
ビルドが終了したら、次はアプリケーションをZIPします。
ターミナルで、次のように入力します。
/usr/bin/ditto -c -k --keepParent "$APP_PATH" "$ZIP_PATH"
正しいパスを入力する最も簡単な方法は、コピーしてターミナルに貼り付けることです。
/usr/bin/ditto -c -k --keepParent "
注: keepParent とシングルクォート記号の後にスペースがあります。
次に、アプリケーションまたはコンポーネントを Terminal にドラッグ アンド ドロップし、別の引用符を追加して、次のようにします。
/usr/bin/ditto -c -k --keepParent "/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.4dbase"
スペース、引用符を追加し、ターゲットフォルダをドラッグ&ドロップし、要求されたZIPの名前を入力し、スペースを追加します。
最終行はこのようになります。
/usr/bin/ditto -c -k --keepParent "/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.4dbase" "/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.zip"
Enterを押してコマンドを実行し、zipを取得します。
重要: Finderを含む他のzipツールでこの操作を行わないでください。公証を行うには、dittoコマンドを使用する必要があります。
アップロード
Terminalで、次のように入力します(注意:ファイルパスをドラッグ&ドロップすると、より簡単にできます)。
xcrun notarytool submit /Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.zip --keychain-profile notarytool --wait
得られる答えは以下の通りです。
FileTransfer.zip の送信前チェックを行い、Apple の公証サービスへの接続を開始します…
サブミッションIDを受信
id: 2071ae83-6660-4d84-afaf-97ea34e945c5
ファイルのアップロードに成功しました
id: 2071ae83-6660-4d84-afaf-97ea34e945c5
のパスが必要です。/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.zipをアップロードしました。
処理の完了を待っています。
現在の状態です。受付中…………………………….です。
処理完了
id: 2071ae83-6660-4d84-afaf-97ea34e945c5
ステータス受理されました
ステータスが “Invalid “であれば、その理由を入力で尋ねることができます。
xcrun notarytool log fb4a2e8f-e2fe-4689-b38f-f6a840abfeb6 --keychain-profile "notarytool" developer_log.json
ログの後ろの数字は、提出された回答からの ID です。最後のdeveloper_log.jsonは、あなたのディスクにある結果ファイルの名前かパスで、好きなように選んでください。
と答えます。
投稿ログのダウンロードに成功しました
id: fb4a2e8f-e2fe-4689-b38f-f6a840abfeb6
の場所です。/Users/thomas/developer_log.json です。
で失敗の原因を確認します。
cat /Users/thomas/developer_log.json
処理を自動化する
この作業はビルドのたびに繰り返す必要があるので、自動化するのは理にかなっています。そうでしょう?自動化するために必要なことは、以下のとおりです。
- クラス”_build “をコピーして、アプリケーションに貼り付ける: https://github.com/ThomasMaul/Classes/blob/main/Project/Sources/Classes/_build.4dm
- ドキュメント: https://github.com/ThomasMaul/Classes/blob/main/Documentation/Classes/_build.md
- Client/Serverをビルドするための使用例:https://github.com/ThomasMaul/Classes/blob/main/Project/Sources/Methods/Example_build.4dm
もう一つの使用例として、コンポーネントのビルドがある。Silicon Mac用にコンパイルされたコンポーネントは公証が必要なため、Github経由でコンポーネントを公開することに違和感を覚えます。
component:https://github.com/ThomasMaul/FileTransfer_Classには「_buildComponent」というメソッドがあり、コンパイル、ビルド、署名、公証、ホチキス留め、Zip圧縮を行います。すべて実行時に自動で行われます。
最後に、zipを “Releases “としてGitHubにアップロードします。
このヒントがあなたの次のアプリケーションを公証するのに役立つことを願っています。もし、さらに支援が必要なら、遠慮なく4Dフォーラムで私たちに連絡してください。