【问题标题】:Does renewing a provisioning profile affect keychain access when I submit an app update to the AppStore?当我向 AppStore 提交应用更新时,更新配置文件会影响钥匙串访问吗?
【发布时间】:2012-10-30 02:32:34
【问题描述】:

我有一个uses the keychain 用于身份验证相关存储的 iPhone 应用程序。

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

documentation for keychain access 中声明:

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

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

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

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

什么给了?

更新

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

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

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

【问题讨论】:

    标签: iphone ios xcode provisioning-profile ios-provisioning


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      假设您保留了旧提交的应用程序(或拥有来自 iTunes 的 .ipa,这只是一个 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 钥匙串访问组默认为例如A1B2C3D4E5.com.example.MyApp,但你可以将它设置为任何你想要的,只要它匹配A1B2C3D4E5.*(Xcode 4 甚至有一个不错的 GUI 权利编辑器)。如果捆绑前缀不同,则会导致您看到的问题。我认为如果你没有启用推送/游戏中心/等,你可以把它改回来。

      【讨论】:

      • 这为我们解开了谜团,谢谢。我将尽快发布有关问题的更新...
      【解决方案3】:

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

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

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

      【讨论】:

      • 如果应用的 bundle id 改变了,那不就意味着没有人会得到更新吗?含义:我确定它没有改变。知道为什么钥匙串访问会发现一个空的钥匙串吗?
      • @maddy 所以它与应用程序包 ID 相关,而不是配置文件?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多