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

Posted

技术标签:

【中文标题】通过 AppStore 更新后如何测试对钥匙串属性的访问?【英文标题】:How do I test access to a keychain property after update via the AppStore? 【发布时间】:2011-04-18 23:13:09 【问题描述】:

在钥匙串服务编程指南中声明如下:

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

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

是否只有将更新提交到 AppStore 并希望它能够正常工作?

【问题讨论】:

【参考方案1】:

这是个好问题。

您可能希望在钥匙串中存储一些数据的主要原因之一是防止恶意用户访问它。这句话本身就很枯燥,所以我建议阅读about how someone might access that data。

访问钥匙串数据的另一种方法是创建一个与目标应用具有相同应用 ID 的恶意应用。 Apple 通过要求配置文件相同来确保这条路线。


因此,要回答您的问题,您只能从同一配置文件中测试更新中的钥匙串数据,即

    临时到临时 应用商店到应用商店。

应用商店到应用商店并不是一个真正的选择,因为那时为时已晚(您的更新将投放市场)。因此,您需要删除您的应用商店应用并安装临时版本。然后在钥匙串上重新创建您的数据,然后更新到最新的临时版本并测试它是否有效。

当然,这需要您拥有应用商店中当前应用的存档临时版本。如果您没有此功能,则无法测试更新。

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

实际上,重要的不是配置文件,而是应用 ID。特别是您在创建 App ID 时设置的 Bundle Seed ID。钥匙串访问由它管理。因此,只要您的个人资料使用具有相同捆绑种子 ID 的应用 ID,您就可以继续访问钥匙串中的信息。我有几个应用程序可以做到这一点。

这允许您创建一套应用程序,只要您将它们设置为使用相同的捆绑种子 ID,它们都可以访问相同的钥匙串项目。因此,如果您使用轻量版和专业版,它们都可以访问相同的钥匙串信息,同时为用户默认值等内容维护单独的捆绑标识。

【讨论】:

你如何设置你的应用程序使用与以前版本相同的应用程序ID。我已经尝试过 GenericKeychain 示例代码中提到的技术,但由于以前的版本没有使用访问组安全属性,它似乎不起作用。我仍然无法通过从应用商店安装的应用访问钥匙串中设置的密码。 我也尝试将 Entitlements.plist 中的应用程序标识符键设置为 ##########.com.companyname.etc 但这似乎没有帮助。 这个答案与apple's docs 直接矛盾:在 iPhone 上,钥匙串权限取决于用于签署您的应用程序的配置文件。确保在应用程序的不同版本中始终使用相同的配置文件。 哪个是正确的,配置文件或应用 ID?【参考方案4】:

SFHFKeychainUtils 可能是您不错的选择。 它是访问钥匙串的包装器。 更多关于:SFHFKeychainUtils :http://www.ioslib.com/archives/sfhfkeychainutils/

【讨论】:

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

以上是关于通过 AppStore 更新后如何测试对钥匙串属性的访问?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以更新钥匙串项目的 kSecAttrAccessible 值?

钥匙串代码签名权利 - 奇怪的行为,钥匙串丢失

iOS 史上最详细的app测试或者上架AppStore流程

如何在 OS X 中成功从钥匙串中删除项目?

iOS现有工程 集成 flutter App.framework 找不到问题

清除 UIAutomation 测试的钥匙串