2016-11-14 3 views
1

私はAppleの署名システムに完全に困惑しています。それは私をナッツドライブ。ゲートキーパーが私のアプリケーションバンドルを拒否する

MacOS 10.12で手作業で署名しているQtアプリ(XCodeエコシステムを使わない)があります。

署名した後、ここで推奨されているように、私は協調設計--verify --deep --strict --verbose = 2 PATHTOAPPを実行します。https://developer.apple.com/library/content/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG211

そして私が手:期待されている

valid on disk satisfies its Designated Requirement

、有効な結果。私は協調設計-dv --verbose = 4 PATHTOAPPを行うと

は私が取得:

Authority=Developer ID Application: MYAPPLEID Authority=Developer ID
Certification Authority Authority=Apple Root CA
Sealed Resources version=2

私はアップルが提供するチェック・署名ツールに対してそれを実行すると、私はそれが正しく署名だという意味YESを取得します。

しかし、ときに私が私が取得spctl -a -tのexec -vvのPATHTOAPPに対してそれを実行します。

rejected (embedded framework contains modified or invalid version)

そして、最後に、ゲートキーパーは、私のアプリは

残念ながらspctlユーティリティにはない拒否私に何が間違っていてどこを見ているのかという手がかりを与えてください。 私はそれを得ていません。最も深くて最も厳しい旗を持っているcodesignはそれが大丈夫だと言って以来です。

詳細情報の入手方法はありますか?

EDIT1:私はspctl --assess --raw --verbose PATHTOAPP走ったと私はこの取得:

<key>assessment:authority</key> 
<dict> 
    <key>assessment:authority:flags</key> 
    <integer>0</integer> 
    <key>assessment:authority:source</key> 
    <string>obsolete resource envelope</string> 
    <key>assessment:authority:weak</key> 
    <true/> 
</dict> 
<key>assessment:cserror</key> 
<integer>-67009</integer> 
<key>assessment:remote</key> 
<true/> 
<key>assessment:verdict</key> 
<false/> 

今、私は信じることかわからないが、それは「埋め込まれたフレームワークが修正が含まれていますまたは無効なバージョン "またはそれは"廃止されたリソースの封筒 "(そしてなぜ)ですか?

私はここでエラーコードを確認してください。https://github.com/CamJN/Security/blob/77b26b3e434caec74403da43bcfb02532a25d7ff/libsecurity_codesigning/lib/CSCommon.h

私は、次を参照してください。

errSecCSWeakResourceRules =   -67013, /* resource envelope is obsolete */ 
errSecCSBadFrameworkVersion =  -67009, /* embedded framework contains modified or invalid version */ 

はEDIT2:それは本当に問題を引き起こしている私のフレームワークフォルダの内容です。署名する前にすべてを削除すると、spctlの検証にパスします。

問題は、私はちょうどそのような(Qtの5.7.0から)QtCoreとして1つの、純粋なフレームワークを許可すれば、私はすぐspctlエラーを取得し、次のとおりです。

rejected (embedded framework contains modified or invalid version)

+0

'macdeployqt'を使用すると、' -codesign'引数を使用してバンドルに署名を付けることができますあなたのために。 – TheDarkKnight

答えて

0

は、各フレームワークの内容は逃し判明フレームワーク。フレームワーク/バージョン/現在のシンボリックリンク

必要なシンボリックリンク:

FRAMEWORK.framework/Resources 
FRAMEWORK.framework/Versions/Current 

thosesシンボリックリンクを作成する簡単なスクリプト(フレームワークフォルダの中):

find . -path '*.framework/Versions/[0-9]' -and -not -type l -print0 | while read -d $'\0' FRMPATH 
    do 
     ln -s ${FRMPATH/*framework\//}/Resources $FRMPATH/../../Resources 
     ln -s ${FRMPATH/*Versions\//} $FRMPATH/../Current 
    done 

私はまた、ゲートキーパーが受け入れ可能コマンドを発見自己署名入りの証明書(Apple Developer IDがなくても、spctlをテストする必要がある場合に便利です):

(自分の自己署名/自己生成証明書の名前でMY CERTIFICATEを置き換える必要があります)

関連する問題