我正在为Mac Os X开发一个应用程序 . 我的代码是用第三方Apple开发者身份签名的,用于独立分发 . 在代码中,我使用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的信息 . 这在10.10优胜美地和10.9小牛队中运行良好,但在10.8山狮队失败 . 我已经使用RB App Checker Lite检查了情况,实际上,在Mountain Lion下,对于相同的可执行文件,我得到了以下屏幕截图中显示的不同结果:

1)这是10.10和10.9中的情况,看起来很正常,我的代码获得了团队ID .

10.10 screenshot

2)这是10.8 Mountain Lion中的情况,RB App Checker Lite无法验证可执行文件:

10.8 Screenshot

3)如果我扩展错误,我知道它是由Sparkle引起的:

10.8 Screenshot expanded

我将闪烁的Xcode项目添加到我的应用程序项目中,并且在10.10和10.9下都可以正常工作 . 在10.8上,如果我启动应用程序闪烁不会抱怨签名,但CoreFoundation函数无法确定团队ID,尽管他们报告签名存在 .

任何帮助将不胜感激 . 谢谢

附:我在这个问题上得到了很多帮助,建议我从其中一个可执行文件中删除第三方证书签名,这些可执行文件是Autoupdate.app,它在之前的屏幕截图中显示为使用第三方证书签名 . 现在我也使用相同的开发者ID证书签署了Autoupdate.app,但错误仍然存在 . 正如您在下面的屏幕截图中看到的,如果您使用RB App Checker Lite单独检查Sparkle框架,它会说它正确验证:

10.8 RB Checker Lite validation of sparkle

如果我向我的程序添加了闪存框架所需的复制文件阶段,我会得到与以前相同的错误:

RB App Checker Lite Entire application check everything is signed with Developer ID certificate.

再次,任何帮助将不胜感激 .