16

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

我还有一个即将到期的配置文件。

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

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

因为我的供应配置文件即将到期,所以我更新了它(在供应门户中),下载它,然后双击它,将它“安装”到 XCode 的管理器中。

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

我的问题是:当更新的配置文件用于提交应用程序更新时,更新用于签署应用程序的配置文件会影响钥匙串访问吗?文档只是说使用“相同的配置文件”,但不清楚更新的配置文件是否算作不同的配置文件(正如我上面描述的经验所暗示的那样)。

是什么赋予了?

更新

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

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

我通过选择一个完全不同的分发配置文件更改了代码签名身份,我误认为该分发配置文件是过期分发配置文件的更新/有效版本,并提交了更新。相同的应用程序,不同的证书,不同的配置文件 == 空钥匙串。哦。

4

3 回答 3

19

您被允许使用的钥匙串由keychain-access-groups权利确定,权利限制为keychain-access-groups配置文件中的子集,由“捆绑种子”/“前缀”/(ApplicationIdentifierPrefix在配置文件中)确定,设置在“应用程序 ID”中。

假设您保留了旧提交的应用程序(或.ipa从 iTunes 获得,这只是一个 zip),请查看embedded.mobileprovision旧应用程序和新应用程序(less Foo.app/embedded.mobileprovision在终端中应该可以解决问题,或者您可以在文本编辑器中打开它虽然有时他们会选择错误的行尾)。您正在寻找这样的东西(您可能会看到用于推送/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>

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

codesign -d --entitlements - Foo.app/Foo | vis

IIRC 钥匙串访问组默认为 eg A1B2C3D4E5.com.example.MyApp,但您可以将其设置为您想要的任何内容,只要它匹配A1B2C3D4E5.*(Xcode 4 甚至有一个不错的 GUI 权利编辑器)。如果捆绑前缀不同,则会导致您看到的问题。如果你没有启用推送/游戏中心/等,我认为你可以把它改回来。

于 2012-11-09T20:24:39.597 回答
8

只要您的应用程序的捆绑包 id 没有改变,钥匙串就不会有任何问题。

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

我有一款应用在 App Store 中已经存在 4 年多了。它使用钥匙串。多年来,它已多次更新,其中多次使用更新的配置文件。没有钥匙串问题。

于 2012-11-09T18:38:56.387 回答
1

对于其他搜索的人,我有一个不同的问题。我为退出 ipa 所遵循的手动步骤导致它没有任何权利,这意味着没有钥匙串访问权限。因此,我创建了一个脚本来退出 ipa,但保留原始权利。我将它发布在http://baltaks.com/2013/08/resigning-enterprise-ios-apps并会在需要时保持更新。

于 2013-08-05T10:44:39.763 回答