Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 当我向AppStore提交应用程序更新时,更新配置文件是否会影响密钥链访问?_Iphone_Ios_Xcode_Provisioning Profile_Ios Provisioning - Fatal编程技术网

Iphone 当我向AppStore提交应用程序更新时,更新配置文件是否会影响密钥链访问?

Iphone 当我向AppStore提交应用程序更新时,更新配置文件是否会影响密钥链访问?,iphone,ios,xcode,provisioning-profile,ios-provisioning,Iphone,Ios,Xcode,Provisioning Profile,Ios Provisioning,我有一个iPhone应用程序,用于与身份验证相关的存储 我还有一个即将到期的配置文件 在报告中指出: 在iPhone上,钥匙链权限取决于用于 在申请表上签名。确保始终使用相同的方法 跨应用程序的不同版本设置配置文件 因为我的资源调配配置文件即将过期,我更新了它(在资源调配门户中),下载了它,然后双击它,将它“安装”到XCode的管理器中 在向应用商店提交应用更新后,我基本上看到了一个空的钥匙链(要求用户再次登录) 我的问题是:当更新的配置文件用于向应用程序提交更新时,更新用于签署应用程序的配置文

我有一个iPhone应用程序,用于与身份验证相关的存储

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

在报告中指出:

在iPhone上,钥匙链权限取决于用于 在申请表上签名。确保始终使用相同的方法 跨应用程序的不同版本设置配置文件

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

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

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

有什么好处

更新

在tc的回答的帮助下解决。查看提交给苹果的每个.ipa中的
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