私は 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 を取得します。
2) これは 10.8 Mountain Lion の状況で、RB App Checker Lite は実行可能ファイルの検証に失敗します:
3) エラーを展開すると、Sparkle が原因であることがわかります。
アプリケーションのプロジェクトにスパークル Xcode プロジェクトを追加しましたが、10.10 および 10.9 ですべて正常に動作しています。10.8 でも、アプリケーションを起動すると、sparkle は署名について文句を言いませんが、CoreFoundation 関数は、署名が存在すると報告しますが、チーム ID を特定できません。
どんな助けでも大歓迎です。ありがとう
Ps 私はこの問題について多くのことを助けられました.Autoupdate.app である実行可能ファイルの 1 つからサード パーティの証明書署名を削除することをお勧めしました. 同じ開発者 ID 証明書を使用して Autoupdate.app にも署名しましたが、エラーは引き続き発生します。次のスクリーンショットでわかるように、sparkle フレームワークだけを RB App Checker Lite でチェックすると、正しく検証されたことが示されます。
必要なコピー ファイル フェーズを sparkle フレームワークでプログラムに追加すると、以前とまったく同じエラーが発生します。
繰り返しますが、どんな助けでも大歓迎です。