Xcodeには、ゲートキーパーによってブロックされている「コマンドラインツール」ターゲット(アプリケーションバンドルではありません)があります。私はPostCheckアドレス帳のプラグインのための簡単なインストーラとして、このツールを長年使ってきました。Mac OSゲートキーパーが署名付きコマンドラインツールをブロックしています
2012年には、Apple Developer IDでツールに署名し、ゲートキーパーによってブロックされずにしばらくの間、すべてがうまくいっていました。私は今、macOS Sierra(10.12)がブロックされていることに気付きました。テスト中に10.11.6でもブロックされていることがわかりました。 (ブロックされていると、警告ダイアログのオプションが表示される代わりに、ユーザーが右クリックして「開く」を選択する必要があります)。10.11.2でも問題なく動作します。 - 私が思い出したように、Mac OS X 10.11.4には、非アプリケーションバンドルが署名されていてもブロックされたバグがありましたが、問題は10.11.5で修正されたと思います。多分それは関連しているでしょうか?
Sierraでは、Xcode 8で実行可能ファイルを再コンパイルして再署名しようとしました。 Info.plistをバイナリに埋め込むことを試みました。デバッグとリリースの設定で問題があった場合に備えて、単に「ビルド」するのではなく、アーカイブを試みました。
codesign --verify --verbose <executable>
<executable>: valid on disk
<executable>: satisfies its Designated Requirement
そして、この:
spctl --assess --verbose <executable>
<executable>: rejected (the code is valid but does not seem to be an app)
source=matched cdhash
そして、この:
私はこれがあります...一見矛盾する結果を、適切に署名された私の実行可能ファイルを検証するための方法を探して二日を費やしてきました
spctl -a -v --raw <executable>
<executable>: accepted
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>assessment:authority</key>
<dict>
<key>assessment:authority:flags</key>
<integer>0</integer>
<key>assessment:authority:source</key>
<string>allowed cdhash</string>
<key>assessment:authority:weak</key>
<true/>
</dict>
<key>assessment:cserror</key>
<integer>-67002</integer>
<key>assessment:remote</key>
<true/>
<key>assessment:verdict</key>
<true/>
</dict>
</plist>
私の問題の一部は、コマンドライン実行可能ファイルがsu有効なアップルデベロッパーIDで署名された後に表示されます。とにかく私が何もできないmacOSの問題かどうかもわかりません。また、コマンドラインツールとコード署名の問題の両方についてGoogleにとって非常に難しく、コマンドラインのUnix実行可能ファイルに署名するコードに実際に関連するものを見つけることができます。
ここで何が起こっているのかについての洞察があります。ありがとう!
'--strict'オプションを' codesign'と一緒に使ってみてください。また、実行ファイルをダブルクリックすると実際には直接実行されず、ドキュメントとしてターミナルに渡され、Terminalはそのパスをコマンドとして実行するので、 '-t open'オプションを' spctl'とともに使用してみてください。それは "アプリではないようです"という問題に対処するかもしれない。 '-v'を複数回指定して冗長性を増やすこともできます。新鮮なファイルを評価していることを確認するために '--ignore-cache'を使用してください。 –
FWIW、エラーcserror-67002はerrSecCSNotAppLikeです(これはおそらく大きな驚きではありません)。基本的にはコマンドラインツールを使ってアプリケーションバンドルを作成し、バンドルに署名することでこれを「固定」しました。コマンドラインツールを実行してfooとして参照するだけでした。app/Contents/MacOS/foo。優れたユーザーエクスペリエンスではなく、私のニーズに応えます。 – dmaclach