※この記事は、ios向けの記事ではありません。
Mac os x app開発における公証についてまとめた記事になります。
記事の後半に、PyinstallerでinstallしたPython appを公証する方法も載せてます。
公証をしないと?
公証をしないと、Gatekeeperによって怪しい警告文が表示されたり、
そもそもアプリが起動しなかったり。
macOS Mojave以降で実行するAppに必要ぽい。
ユーザーの信頼を高めることが可能なので、やった方がいいらしい。
https://developer.apple.com/jp/developer-id/
公証のやり方は?
Xcodeで簡単に出来ます。
メニューバーから、Product -> Archive を選択。
Archive終了後、リストからArchiveしたappを選択し、Distribute app を選択。
Developer ID -> Upload .. その後は基本的にNext
その後時計アイコンが表示されるviewになるので、
その後は☑️マークがつくまで待機するという形になります。
⭐️注意
公証を受ける前に、Hardend Runtimeを有効にする必要があります。
こちらをしないと、公証を受けることができません。
Signing & Capabilities から 右上の+ボタンを押下し、Hardend Runtimeを追加するだけで基本的にOK。
↑Pythonやその他の子プロセスを導入している場合は、さらに追加の設定が必要です。
公証にかかる時間は?
数分程度で終わります。
意外と早いです。
公証済みかどうか確認する方法は?
Apparency というアプリを使用して簡単に確認することができます。
https://mothersruin.com/software/Apparency/
子プロセスに対して、HardendRuntimeはどう有効にする?
筆者が遭遇した問題になります。
着手したプロジェクトは、Mac向けappが大枠としてあり、
その中に子プロセス(Python)が組み込んであるという構造でした。
この作りでどこが問題になるかというと、
先述したHardend Runtimeを子プロセスで有効にするにはどうやんの?
という壁にぶつかりました。
PyinstallerでinstallしたPythonをどう公証するか。ということですね。
どうやった?
コード署名と、Hardend Runtimeを有効にする必要があります。
そのためには、
1.entitlements.plistを作成する。
2.証明書のDeveloperIDを控えておく。
3.そのplistと、証明書をappに対して当ててやる。
※1.entitlements.plistの追記内容
entitlements.plistはXcodeから作成することが可能です。
Xcodeから作ってやらないとエラーが発生することがあるみたいです。。
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
</dict>
</plist>
※2 証明書確認
実行結果の"Apple Development"の箇所をコピー
security find-identity -p basic -v
※3 実行コマンド
codesign --deep --force --options=runtime --entitlements "あなたのentitlements.plistのパス" --sign
"Apple Development: hoge tarou (XXXXXXXXX)" --timestamp "あなたのpython appのパス"
entitlements.plistがめちゃ重要なようで、
これを作らないとPythonが全く動かなる現象にあい、どん詰まりしました。