1

私は Mac Os X 用のアプリケーションを開発しています。独立した配布のために、サードパーティの Apple 開発者 ID で署名されたコードを持っています。コードでは、次のように CoreFoundation 関数を使用して署名の有効性をチェックします。

SecCodeRef myCode;


status = SecCodeCopySelf(kSecCSDefaultFlags,&myCode);

status = SecCodeCheckValidity(myCode,kSecCSDefaultFlags,NULL);

NSString *result;

switch (status)
{
    case noErr:
        result = @"Code signature is present";
        break;
    case errSecCSUnsigned:
        result = @"Executable is unsigned";
        break;
    case errSecCSSignatureFailed:
        result=@"Signature failed.";
        break;
    default:
        result=@"Error validating signature";
        break;
}

NSAlert *myAlert =[[NSAlert alloc] init];

[myAlert setAlertStyle:NSCriticalAlertStyle];
[myAlert setMessageText:@"Program Beta Error"];
[myAlert setInformativeText:result];

[myAlert runModal];




SecStaticCodeRef fileCode;

status = SecCodeCopyStaticCode(myCode, kSecCSDefaultFlags, &fileCode);

if (status != noErr)
{
    // NSLog(@"Unable to get static code object.");

}

CFDictionaryRef signingInfo = NULL;

status = SecCodeCopySigningInformation(fileCode, kSecCSSigningInformation, &signingInfo);

NSDictionary *myDictionary = [NSDictionary dictionaryWithDictionary:(__bridge NSDictionary *)(signingInfo)];

指定された kSecCSSigningInformation パラメータにより、署名する開発者の ID とチーム ID に関する情報を収集できます。これは 10.10 Yosemite と 10.9 Mavericks では問題なく動作しますが、10.8 Mountain Lion では失敗します。RB App Checker Lite で状況を確認したところ、実際、Mountain Lion の下で同じ実行可能ファイルに対して、次のスクリーンショットに示すように異なる結果が得られました。

1) これは 10.10 と 10.9 の状況で、正常に表示され、私のコードはチーム ID を取得します。

10.10 スクリーンショット

2) これは 10.8 Mountain Lion の状況で、RB App Checker Lite は実行可能ファイルの検証に失敗します:

10.8 スクリーンショット

3) エラーを展開すると、Sparkle が原因であることがわかります。

10.8 拡大されたスクリーンショット

アプリケーションのプロジェクトにスパークル Xcode プロジェクトを追加しましたが、10.10 および 10.9 ですべて正常に動作しています。10.8 でも、アプリケーションを起動すると、sparkle は署名について文句を言いませんが、CoreFoundation 関数は、署名が存在すると報告しますが、チーム ID を特定できません。

どんな助けでも大歓迎です。ありがとう

Ps 私はこの問題について多くのことを助けられました.Autoupdate.app である実行可能ファイルの 1 つからサード パーティの証明書署名を削除することをお勧めしました. 同じ開発者 ID 証明書を使用して Autoupdate.app にも署名しましたが、エラーは引き続き発生します。次のスクリーンショットでわかるように、sparkle フレームワークだけを RB App Checker Lite でチェックすると、正しく検証されたことが示されます。

10.8 RB Checker Lite による輝きの検証

必要なコピー ファイル フェーズを sparkle フレームワークでプログラムに追加すると、以前とまったく同じエラーが発生します。

RB App Checker Lite アプリケーション全体がすべて開発者 ID 証明書で署名されていることを確認します。

繰り返しますが、どんな助けでも大歓迎です。

4

0 に答える 0