我制作了一个应用程序,要求用户授予辅助功能。它在应用程序首次启动时起作用,并要求可访问性
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签名吗?我正在应用程序商店外发布我的应用程序。
答案 0 :(得分:0)
我没有办法对此进行测试,但我希望当用户批准该应用的辅助功能时,它会为该应用创建一个临时代码签名,然后使用该签名识别该应用。新版本,甚至同一版本的另一个副本,不会有相同的签名,因此不会被识别为"相同的"应用程序用于辅助功能。
解决方案:对应用进行签名,并使用相同的代码签名证书对后续版本进行签名。一个Apple提供的开发者ID证书对此有好处(并且也会让Gatekeeper高兴),但我认为任何随机代码签名证书都可以让访问权限识别它(前提是你总是使用相同的证书)。