我有一个uses the keychain的iPhone应用程序用于与身份验证相关的存储。
我还有一个即将到期的配置文件。
在documentation for keychain access中声明:
在iPhone上,Keychain权利取决于以前的配置文件 签署您的申请。一定要始终如一地使用它 在不同版本的应用程序中配置配置文件。
由于我的配置文件即将到期,我更新了它(在配置门户中),下载了它,然后双击它将“安装”到XCode的组织者中。
在向应用程序商店提交应用程序更新后,我基本上看到一个空钥匙串(要求用户再次登录)。
我的问题是:在使用续订的个人资料向应用提交更新时,续订用于签署应用的配置文件会影响钥匙串访问吗?文档只是说使用“相同的配置文件”,但不清楚更新的配置文件是否算作不同的配置文件(正如我上面描述的经验所示)。
是什么给出了?
更新
在tc的回答帮助下解决了。查看提交给Apple的每个.ipas中的embedded.mobileprovision
文件,显示已过期的证书和配置文件用于签署应用程序的x版本,并使用不同的证书和配置文件签署版本x +应用程序中的1个(罪魁祸首:XCode的“自动配置文件选择器”功能,用于代码签名标识)。
当开发人员使用不同的iOS Developer Program帐户开发不相关的应用程序(在同一台机器上,使用相同的OSX用户)时,第一个证书和配置文件是剩下的。多个iOS开发人员计划帐户中的配置文件显然全部存储在~/Library/MobileDevice/Provisioning Profiles
中,因此它们都是XCode自动配置文件选择功能的候选者。
我通过选择完全不同的分发配置文件来更改代码签名身份,我将其误认为已过期的分发配置文件的续订/有效版本,并提交了更新。相同的应用程序,不同的证书,不同的配置文件==空钥匙串。 D'OH。
答案 0 :(得分:17)
您可以使用的钥匙串由权利中的keychain-access-groups
确定,该权限仅限于配置文件中keychain-access-groups
的子集,该子集由“捆绑种子”确定/“前缀”/(配置文件中的ApplicationIdentifierPrefix
),在“应用程序ID”中设置。
假设您保留了旧的已提交应用(或从iTunes获得.ipa
,这只是一个zip),请查看旧应用和新应用中的embedded.mobileprovision
({{1}在终端中应该做的伎俩,或者你可以在文本编辑器中打开它,虽然有时他们会选择错误的行结尾)。你正在寻找这样的东西(你可能会看到push / iCloud的额外键):
less Foo.app/embedded.mobileprovision
您还可以查看应用签名的实际权利:
<key>Entitlements</key>
<dict>
<key>application-identifier</key>
<string>A1B2C3D4E5.com.example.MyApp</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>A1B2C3D4E5.*</string>
</array>
</dict>
IIRC,钥匙串访问组默认为例如codesign -d --entitlements - Foo.app/Foo | vis
,但您可以将其设置为您想要的任何内容,只要它匹配A1B2C3D4E5.com.example.MyApp
(Xcode 4甚至有一个很好的GUI权利编辑器)。如果捆绑前缀不同,那将导致您看到的问题。如果您没有启用推送/游戏中心/等,我认为您可以将其更改回来。
答案 1 :(得分:8)
只要您的应用的捆绑ID不会发生变化,钥匙串就不会出现任何问题。
考虑到我们每年都必须更新我们的证书和分发配置文件,如果这样做会破坏我们应用程序的钥匙串访问权限,那将会很混乱。
我有一个应用程序已经在App Store中存在了4年多。它使用钥匙串。多年来,它已经多次更新,多次使用更新的配置文件。没有钥匙串问题。
答案 2 :(得分:1)
对于其他任何搜索,我有一个不同的问题。我为了辞职ipa而采取的手动步骤导致它没有权利,这意味着没有钥匙串访问权限。所以我创建了一个脚本来重新签名ipa,但保留了原来的权利。我在http://baltaks.com/2013/08/resigning-enterprise-ios-apps发布了它,并会在必要时保持更新。