通过AppStore更新后,我如何测试对钥匙串属性的访问?

8
在Keychain服务编程指南中,它指出:

“在iPhone上,Keychain权限取决于用于签署应用程序的配置文件。请确保在不同版本的应用程序中始终使用相同的配置文件。”

我对此没有问题,但我想测试一下,如果我提供了一个更新到我的应用程序在AppStore中,它仍然能够访问存储在钥匙串中的旧值。我尝试通过使用包含与原始版本相同的捆绑标识和产品名称的ad-hoc分发配置文件签署的版本来进行测试,但它无法访问钥匙串中的旧值。

唯一的选择是提交更新到AppStore并希望它能正常工作吗?

4个回答

4

这是一个好问题。

将某些数据存储在钥匙串中的主要原因之一是为了防止恶意用户访问它。单独来看,这是一个相当枯燥的句子,因此建议阅读有关如何访问该数据的内容。

访问钥匙串数据的另一种方式是创建一个与目标应用程序具有相同应用程序ID的恶意应用程序。苹果通过要求提供相同的配置文件来确保了这条路线的安全性。


所以,回答你的问题,你只能使用相同配置文件的更新测试钥匙串数据,即:

  1. Ad hoc到Ad hoc
  2. App Store到App Store。

App Store到App Store实际上不是一个选择,因为那时已经太晚了(您的更新将上市)。因此,您需要删除您的应用商店应用程序并安装一个自由发布版本。然后重新创建您在钥匙串中的数据,然后升级到最新的自由发布版本并测试它是否有效。

当然,这需要您拥有当前在应用商店上的应用程序的已存档自由发布版本。如果您没有这个,那么就无法测试更新。


-1

除非我错了,否则在应用商店更新应用程序时,您需要使用相同的配置文件。因此,由于您将使用相同的配置文件,因此您应该可以访问相同的钥匙串项目。


-1

实际上,重要的不是配置文件,而是应用程序ID。特别是在创建应用程序ID时设置的Bundle Seed ID。Keychain访问受其管理。因此,只要您的配置文件使用具有相同Bundle Seed ID的应用程序ID,您就可以继续访问Keychain中的信息。我有几个这样的应用程序。

这使您能够创建一组应用程序,所有这些应用程序都可以访问相同的Keychain项目,只要您将它们设置为使用相同的Bundle Seed ID即可。因此,如果您创建了轻量级和专业版,则两者都可以访问相同的Keychain信息,同时保持用户默认值等内容的独立包标识。


你如何设置应用程序使用与之前版本相同的应用程序ID?我已经尝试了GenericKeychain示例代码中提到的技术,但由于之前的版本没有使用访问组安全属性,所以似乎无法正常工作。我仍然无法从从应用商店安装的应用程序中访问在钥匙串中设置的密码。 - Shane Fitzgibbon
我也尝试在Entitlements.plist中设置application-identifier密钥为##########.com.companyname.etc,但似乎没有帮助。 - Shane Fitzgibbon
2
这个回答直接与苹果文档相矛盾:在 iPhone 上,Keychain 权限取决于用于签署应用程序的预配文件。请确保在不同版本的应用程序中始终使用相同的预配文件。哪一个是正确的,预配文件还是应用程序 ID? - Roatin Marth

-3

这不是对Shane问题的回答。他想知道如何测试应用程序的新更新是否仍能够访问存储在钥匙串中的旧值。使用包装器将不能解决这个问题。 - artberri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接