我制作了一个应用程序,要求用户授予访问功能的权限。当应用程序首次启动并请求可访问性时,它的工作方式如下
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 签名吗?我正在应用程序商店之外分发我的应用程序。
我没有办法对此进行测试,但我希望当用户批准应用程序的可访问性时,它会为应用程序创建一个临时代码签名,并随后使用该签名来识别应用程序。新版本,甚至同一版本的另一个副本,不会具有相同的签名,因此出于可访问性目的,不会被识别为“相同”应用程序。
解决方案:对应用程序进行签名,并使用相同的代码签名证书对后续版本进行签名。 Apple 提供的开发者 ID 证书对此很有用(并且也会让 Gatekeeper 满意),但我认为任何随机代码签名证书都可以让可访问性识别它(前提是您始终使用相同的证书)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)