我正在为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 .
2)这是10.8 Mountain Lion中的情况,RB App Checker Lite无法验证可执行文件:
3)如果我扩展错误,我知道它是由Sparkle引起的:
我将闪烁的Xcode项目添加到我的应用程序项目中,并且在10.10和10.9下都可以正常工作 . 在10.8上,如果我启动应用程序闪烁不会抱怨签名,但CoreFoundation函数无法确定团队ID,尽管他们报告签名存在 .
任何帮助将不胜感激 . 谢谢
附:我在这个问题上得到了很多帮助,建议我从其中一个可执行文件中删除第三方证书签名,这些可执行文件是Autoupdate.app,它在之前的屏幕截图中显示为使用第三方证书签名 . 现在我也使用相同的开发者ID证书签署了Autoupdate.app,但错误仍然存在 . 正如您在下面的屏幕截图中看到的,如果您使用RB App Checker Lite单独检查Sparkle框架,它会说它正确验证:
如果我向我的程序添加了闪存框架所需的复制文件阶段,我会得到与以前相同的错误:
再次,任何帮助将不胜感激 .