正如大多数人可能会同意的那样,iOS 应用程序配置是 iOS 开发人员必须处理的最令人困惑和最复杂的主题之一,我就是其中之一。 :-)
我们的一个团队需要开始对其应用进行 Beta 测试。这是一款企业应用程序,最终将在我们公司的应用程序目录 (InTune) 中发布,供数千名同事使用。据我所知,内部分发正是为了这个目的:部署到有限数量的受邀非开发人员测试人员,但无需获取他们的 UDID。为此,我设置了:
- 内部配置配置文件,基于与团队开发配置文件完全相同的 AppId。
- 成立 AppCenter Beta 测试组并邀请一些同事作为测试人员。
- 在项目的构建定义中添加了“发布到 AppCenter”步骤,该步骤将 .IPA 文件部署到 AppCenter 中提到的测试组。
当构建运行时,一切正常,并且应用程序按预期部署到测试组。每个测试人员都可以安装该应用程序,并且一切看起来都很好。但是,当他们尝试安装该应用程序时,他们收到一条非常非描述性的错误消息,指出“无法安装该应用程序”。
我检查了设备日志,发现一条错误消息:“可执行文件使用无效的权利进行签名。”
我还通过下载内部配置文件(+签名证书)从 Visual Studio (Mac) 重新创建了失败的部署,并将构建/部署重新定位为“内部”。为了更好地衡量,我还手动选择了内部配置文件。
当我构建并部署到模拟器时一切正常,但当我部署到物理设备时,我在 Visual Studio (Mac) 中收到此错误:
ApplicationVerificationFailed:无法验证/private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.zveLv9/extracted/{name-of-app}.app 的代码签名:0xe8008016(可执行文件使用无效的权利进行签名。)
错误 MT1006:无法在设备“{my-device-name}”上安装应用程序“{path-to-app}.app”:您的代码签名/配置配置文件配置不正确。您的当前配置文件可能不支持您的权利,或者您的设备不是当前配置文件的一部分。请检查 iOS 设备日志以了解详细信息(错误:0xe8008016)。
我的理解是,权利是通过 AppId 启用的,并通过代码中的权利请求(通过 Entitlements.plist 文件)。这导致 med 假设引用相同 AppId 的两个配置文件也会启用相同的权利。这是不正确的吗?显然,当我使用两个不同的配置文件编译完全相同的分支时,我从代码中请求相同的权利。
我怀疑我误解或忽略了某些事情......
最佳答案
问题原来是“推送通知”权利。
Entitlement.plist 文件包含一个“aps-environment”设置(在 Visual Studio Mac 中打开 Entitlements 文件并选择“Source”选项卡),该设置被设置为“development”。将发布版本部署到物理设备时,这会导致与配置文件的实际权利不匹配。
为了解决这个问题,我创建了第二个 Entitlement.plist 文件,将“aps-environment”设置更改为“生产”并将其保存为“Entitlement.prod.plist”(我还将原始文件重命名为“Entitlement.dev” .plist”为清楚起见)。
最后,我刚刚更改了捆绑设置(调试、发布等)以选择正确的权利文件,现在它可以按预期工作。
关于ios - 内部配置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49878625/