私はQt5でMacアプリを開発しているので、Xcodeの外です。「開発者の身元を確認できないため、開くことができません」という警告を発行するのではなく、GateKeeper がクライアントのコンピューターでアプリを実行できるようにしたいと考えています。
アプリのデジタル署名に成功しましたが、GateKeeper にはまだこの苦情が付きものです。私は Apple 開発者証明書 (私はチーム エージェントです) を持っていますが、キーチェーンはそれが有効であると言っています。また、2 つの Apple ルート証明書もインストールしました。
コマンド ライン ユーティリティを使用してcodesign
、アプリ フォルダー内のすべてのバイナリにデジタル署名し、さらにアプリ フォルダー自体にもデジタル署名します。いずれの場合も、codesign の応答は有益であり、エラーは表示されません。codesign を使用すると、実際にすべてのバイナリが署名され、実行されていることを確認できます
$ codesign --verify --deep --verbose=2 MyApp.app
は、すべてのバイナリが検証済みであることを示しています。さらに、次のように報告します。
MyApp.app: ディスク上で有効
MyApp.app: その指定要件を満たす
ランニング:
$ codesign -v --verbose=4 --display MyApp.app
与える
Executable=/Users/xxx/trunk/yyy/deploy/release/MyApp.app/Contents/MacOS/MyApp
Identifier=aaaa.MyApp
Format=Mach-O Thin (x86_64)
CodeDirectory のバンドル v=20200 size=12461 flags=0x0 (なし) hashes=616+3 location=embedded
Hash type=sha1 size=20
CDHash=d1c12c783dac0e8d9a2b749fb896b11558cec8b6
Signature size=8532
Authority=Developer ID Application: XXXXXX
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=29 jul. 2015 12;04:40
Info.plist エントリ = 8
TeamIdentifier = YYYYY
封印されたリソース バージョン = 2 ルール = 12 ファイル = 10
内部要件数 = 1 サイズ = 180
これは問題ないようです。
ランニング
$ spctl -a -t exec -vv MyApp.app
すべてのバイナリで結果として得られる
MyApp.app: 承認された
source=Developer ID
origin=Developer ID アプリケーション: XXXX
これもOKのようです
アプリまたはアプリ フォルダー内のバイナリに対して、XCode コマンド ライン ツールの check-signature を実行します。
$ ./check-signature /Users/xxx/trunk/yyy/release/MyApp.app
結果として与える
(c) 2014 Apple Inc. 無断複写・転載を禁じます。
はい
いずれの場合も、これは望ましい結果です。
しかし、GateKeeper はまだアプリを受け入れておらず、開発者を確認できないという事実について不満を述べています。
[2015 年 7 月 17 日金曜日に著者が追加]
私は問題を見つけたと思います。それが機能なのかOSXのバグなのかはわかりません。stackoverflow question 19551298に大いに助けられました。
ファイルがインターネットからダウンロードされるたびに、それに関連付けられた拡張ファイル属性 com.apple.quarantine が取得されます。このダウンロードしたファイルを Finder でダブルクリックすると、GateKeeper には次の 2 つの可能性があります。
ファイルが署名されていない場合、「不明な開発者など」というメッセージが表示されます
ファイルがデジタル署名されると、「開発者を確認できませんなど」というメッセージが表示されます
どちらの場合も、MessageBox には 1 つのボタン ([OK] ボタン) しかありません。このボタンをクリックしても、MessageBox が閉じる以外は何も起こりません。
拡張属性が削除された場合 (xattr -d)、アプリケーションは署名されているかどうかにかかわらず実行されます。
アプリの Finder でマウスを右クリックしてアプリケーションを起動し、[開く] メニュー アクションをクリックすると、動作が異なります。再び 2 つのメッセージ ボックスの 1 つが表示されますが、ユーザーがアプリを開くためのボタンが追加されています。ここでも、署名されている場合と署名されていない場合の唯一の違いは、「未確認」または「確認されていません」というメッセージです。私の顧客が違いを語れるとは思っていません。その結果、アプリに署名することは無益な練習になります。
Apple サポート ドキュメントに基づいて、ダウンロードしたアプリをダブルクリックしたときの GateKeeper の別のより良い動作を期待しました (ドキュメントが古くなっているか、読み間違えている可能性があります)。
アプリが署名されている場合、GateKeeper は「インターネットなどからダウンロードしました」というメッセージ ボックスと、「続行しますか?」というボタンを表示する必要があります。
アプリが 1 つの [OK] ボタンと「不明な開発者など」というテキストを含む MessageBox に署名されていない場合。