我制作了一个应用程序,要求用户授予辅助功能的权限。当应用程序首次启动并请求可访问性时,它的工作方式如下
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 满意),但我认为任何随机代码签名证书都可以让可访问性识别它(前提是您始终使用相同的证书)。
这个仍然是macOS的问题。我提交了反馈 FB13704792,希望他们能够解决这个问题,因为当您需要更改签名证书时,它会为付费客户提供糟糕的用户体验...