当我向AppStore提交应用更新时,更新配置文件会影响钥匙串访问吗?

Roa*_*rth 16 iphone xcode ios provisioning-profile ios-provisioning

我有一个iPhone应用程序,使用钥匙串进行身份验证相关的存储.

我也有一个即将到期的配置文件.

钥匙串访问文档中,它指出:

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

由于我的Provisioning Profile即将到期,我更新了它(在配置门户中),下载了它,然后双击它"安装"到XCode的管理器中.

在向应用程序商店提交应用程序更新后,我基本上看到一个空钥匙串(要求用户再次登录).

我的问题是:在使用续订的个人资料向应用提交更新时,续订用于签署应用的配置文件会影响钥匙串访问吗?文档只是说使用"相同的配置文件",但不清楚更新的配置文件是否算作不同的配置文件(正如我上面描述的经验所示).

是什么赋予了?

更新

在tc的回答帮助下解决了.查看embedded.mobileprovision提交给苹果的每个.ipas 中的文件显示,使用过期的证书和配置文件来签署应用程序的版本x,并使用不同的证书和配置文件来签署应用程序的版本x + 1(罪魁祸首:XCode的"自动配置文件选择器"功能,用于代码签名标识).

当开发人员使用不同的iOS Developer Program帐户开发不相关的应用程序(在同一台机器上,使用相同的OSX用户)时,第一个证书和配置文件是剩下的.多个iOS开发人员计划帐户中的配置文件显然全部存储在一起~/Library/MobileDevice/Provisioning Profiles,因此它们都是XCode自动配置文件选择功能的候选者.

我通过选择完全不同的分发配置文件来更改代码签名标识,我将其误认为过期分发配置文件的续订/有效版本,并提交了更新.相同的应用程序,不同的证书,不同的配置文件==空钥匙串.D'OH.

tc.*_*tc. 18

您允许使用的密钥链由keychain-access-groups权利确定,权利仅限keychain-access-groups于供应配置文件中的子集,该子集由"捆绑种子"/"前缀"/(ApplicationIdentifierPrefix在配置文件中)确定,设置在"应用程序ID"中.

假设您保留了旧的已提交的应用程序(或者.ipa来自iTunes,这只是一个zip),请查看embedded.mobileprovision旧应用程序和新应用程序(less Foo.app/embedded.mobileprovision在终端中应该可以做到这一点,或者您可以在文本编辑器中打开它)虽然有时他们会选择错误的行结尾).你正在寻找这样的东西(你可能会看到push/iCloud的额外键):

    <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>
Run Code Online (Sandbox Code Playgroud)

您还可以查看您的应用签署的实际权利:

codesign -d --entitlements - Foo.app/Foo | vis
Run Code Online (Sandbox Code Playgroud)

IIRC的钥匙串访问组默认为例如A1B2C3D4E5.com.example.MyApp,但你可以将它设置为你想要的任何东西,只要它匹配A1B2C3D4E5.*(Xcode 4甚至有一个很好的GUI权利编辑器).如果捆绑前缀不同,那将导致您看到的问题.如果你没有启用push/Game Center /等,我你可以改回来.


rma*_*ddy 8

只要您的应用程序的包ID不会更改,钥匙串就不会出现任何问题.

考虑到我们每年都必须更新我们的证书和分发配置文件,如果这样做会破坏我们应用程序的钥匙串访问权限,那将是混乱的.

我有一个应用程序已经在App Store超过4年.它使用钥匙串.多年来,它已经多次更新,多次使用更新的配置文件.没有钥匙串问题.

  • 如果应用程序的包ID已更改,那是不是意味着没有人会获得更新?含义:我确定它没有改变.知道为什么钥匙串访问发现一个空的钥匙串? (2认同)