应用程序更新后重置辅助功能权限

时间:2015-03-12 09:46:25

标签: objective-c macos

我制作了一个应用程序,要求用户授予辅助功能。它在应用程序首次启动时起作用,并要求可访问性

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签名吗?我正在应用程序商店外发布我的应用程序。

1 个答案:

答案 0 :(得分:0)

我没有办法对此进行测试,但我希望当用户批准该应用的辅助功能时,它会为该应用创建一个临时代码签名,然后使用该签名识别该应用。新版本,甚至同一版本的另一个副本,不会有相同的签名,因此不会被识别为"相同的"应用程序用于辅助功能。

解决方案:对应用进行签名,并使用相同的代码签名证书对后续版本进行签名。一个Apple提供的开发者ID证书对此有好处(并且也会让Gatekeeper高兴),但我认为任何随机代码签名证书都可以让访问权限识别它(前提是你总是使用相同的证书)。