1

我正在为 Mac Os X 开发一个应用程序。我使用第 3 方 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 Yosemite 和 10.9 Mavericks 中运行良好,但在 10.8 Mountain Lion 中失败。我已经使用 RB App Checker Lite 检查了情况,实际上,在 Mountain Lion 下,对于相同的可执行文件,我得到了以下屏幕截图中显示的不同结果:

1)这是10.10和10.9的情况,看起来很正常,我的代码获取了Team ID。

10.10 截图

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

10.8 截图

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

10.8 屏幕截图展开

我将 sparkle Xcode 项目添加到我的应用程序项目中,并且在 10.10 和 10.9 下一切正常。同样在 10.8 上,如果我启动应用程序 sparkle 不会抱怨签名,但 CoreFoundation 函数无法确定团队 ID,尽管它们报告签名存在。

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

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

10.8 RB Checker Lite 验证 sparkle

虽然如果我使用 sparkle 框架向我的程序添加所需的复制文件阶段,我会得到与以前相同的错误:

RB App Checker Lite 整个应用程序检查所有内容都使用 Developer ID 证书签名。

同样,任何帮助将不胜感激。

4

0 回答 0