4

我制作了一个应用程序,要求用户授予可访问性功能的权限。它在应用程序首次启动并要求可访问性时正常工作

const void * keys[] = { kAXTrustedCheckOptionPrompt };
const void * values[] = { force };
CFDictionaryRef options = CFDictionaryCreate(kCFAllocatorDefault,
                                             keys,
                                             values,
                                             sizeof(keys) / sizeof(*keys),
                                             &kCFCopyStringDictionaryKeyCallBacks,
                                             &kCFTypeDictionaryValueCallBacks);
    
access = AXIsProcessTrustedWithOptions(options);
CFRelease(options);

问题是,当我发布新版本(使用 sparkle)时,可访问权限已经消失,所以用户应该再次授予权限。那是因为我的代码没有使用 Apple Developer ID 签名吗?我正在应用商店之外分发我的应用。

4

1 回答 1

6

我没有办法对此进行测试,但我希望当用户批准应用程序的可访问性时,它会为应用程序创建一个临时代码签名,然后使用该签名来识别应用程序。一个新版本,甚至是同一版本的另一个副本,都不会具有相同的签名,因此不会被识别为“相同”的应用程序以实现可访问性目的。

解决方案:对应用进行签名,后续版本使用相同的代码签名证书进行签名。Apple 提供的开发人员 ID 证书对此有好处(并且也会让 Gatekeeper 满意),但我认为任何随机代码签名证书都可以让可访问性识别它(前提是您始终使用相同的证书)。

于 2015-03-13T02:08:21.067 回答