Iphone 当我向AppStore提交应用程序更新时,更新配置文件是否会影响密钥链访问?
我有一个iPhone应用程序,用于与身份验证相关的存储 我还有一个即将到期的配置文件 在报告中指出: 在iPhone上,钥匙链权限取决于用于 在申请表上签名。确保始终使用相同的方法 跨应用程序的不同版本设置配置文件 因为我的资源调配配置文件即将过期,我更新了它(在资源调配门户中),下载了它,然后双击它,将它“安装”到XCode的管理器中 在向应用商店提交应用更新后,我基本上看到了一个空的钥匙链(要求用户再次登录) 我的问题是:当更新的配置文件用于向应用程序提交更新时,更新用于签署应用程序的配置文件是否会影响密钥链访问?文档只是说要使用“相同的配置配置文件”,但不清楚更新的配置文件是否算作不同的配置文件(正如我上面描述的经验所示) 有什么好处 更新 在tc的回答的帮助下解决。查看提交给苹果的每个.ipa中的Iphone 当我向AppStore提交应用程序更新时,更新配置文件是否会影响密钥链访问?,iphone,ios,xcode,provisioning-profile,ios-provisioning,Iphone,Ios,Xcode,Provisioning Profile,Ios Provisioning,我有一个iPhone应用程序,用于与身份验证相关的存储 我还有一个即将到期的配置文件 在报告中指出: 在iPhone上,钥匙链权限取决于用于 在申请表上签名。确保始终使用相同的方法 跨应用程序的不同版本设置配置文件 因为我的资源调配配置文件即将过期,我更新了它(在资源调配门户中),下载了它,然后双击它,将它“安装”到XCode的管理器中 在向应用商店提交应用更新后,我基本上看到了一个空的钥匙链(要求用户再次登录) 我的问题是:当更新的配置文件用于向应用程序提交更新时,更新用于签署应用程序的配置文
embedded.mobileprovision
文件,发现一个过期的证书和配置文件被用来签署应用程序的x版,另一个证书和配置文件被用来签署应用程序的x+1版(罪魁祸首:“自动配置文件选择器”代码签名标识的XCode功能)
第一个证书和配置文件是开发人员使用不同的iOS开发人员程序帐户开发不相关的应用程序(在同一台机器上,使用相同的OSX用户)时遗留下来的。跨多个iOS开发者程序帐户的配置文件显然都存储在~/Library/MobileDevice/Provisioning profiles
中,因此它们都是XCode自动配置文件选择功能的候选配置文件
我更改了代码签名身份,选择了一个完全不同的分发配置文件,将其误认为是过期分发配置文件的更新/有效版本,并提交了更新。相同的应用程序、不同的证书、不同的配置文件==空密钥链。哦。只要你的应用程序包id没有改变,钥匙链就不会有任何问题 考虑到我们都必须每年更新证书和分发配置文件,如果这样做破坏了我们应用程序的钥匙链访问,那将是一场混乱
我有一个应用程序已经在应用程序商店中使用了超过4年。它使用钥匙链。多年来,它已多次更新,多次使用更新的资源调配配置文件。没有钥匙链问题。允许您使用的钥匙链由权利中的
钥匙链访问组决定,该组仅限于调配配置文件中钥匙链访问组的子集,该子集由“捆绑种子”/“前缀”决定(ApplicationIdentifierPrefix
在配置配置文件中),在“应用程序ID”中设置
假设您保留了旧提交的应用程序(或者从iTunes中获得了.ipa
,这只是一个zip),请查看新旧应用程序中的嵌入式.mobileprovision
(less Foo.app/embedded.mobileprovision
在终端中应该可以做到这一点,或者你可以在文本编辑器中打开它,尽管有时他们会选择错误的行尾)。你正在寻找类似的东西(你可能会看到push/iCloud的额外键):
IIRC钥匙链访问组默认为A1B2C3D4E5.com.example.MyApp
,但只要它匹配A1B2C3D4E5.
(Xcode 4甚至有一个很好的GUI权限编辑器),就可以将其设置为任何您想要的值。如果bundle前缀不同,这将导致您看到的问题。我认为您可以将其更改回,前提是您没有启用push/Game Center等功能。对于其他搜索者,我遇到了不同的问题。我退出ipa所遵循的手动步骤导致它没有权限,这意味着没有钥匙链访问。因此我创建了一个脚本退出ipa,但保留原始权限。我将其发布在上,并在需要时保持更新。如果应用程序的捆绑id更改,是否意味着没有人会获得更新?意思是:我确定它没有更改。知道为什么keychain access会发现一个空的密钥链吗?@maddy,这与应用程序捆绑有关id,不是配置配置文件?这为我们解开了谜团,谢谢。我将很快发布问题的最新信息。。。
<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>
codesign -d --entitlements - Foo.app/Foo | vis