2

大多数人可能会同意,iOS App Provisioning 是 iOS 开发人员必须处理的最令人困惑和复杂的主题之一,我就是其中之一。:-)

我们的一个团队需要开始对他们的应用进行 Beta 测试。这是一个公司应用程序,最终将在我们公司的应用程序目录 (InTune) 中发布,供几千名同事使用。据我所见,Inhouse 分发正是为了这个目的:部署到有限数量的受邀非开发人员测试人员,但不必收集他们的 UDID。为此,我设置了:

  • 内部配置文件,基于与团队开发配置文件完全相同的 AppId。
  • 成立 AppCenter Beta 测试组,并邀请了一些同事作为测试人员。
  • 在项目的构建定义中添加了“发布到 AppCenter”步骤,将 .IPA 文件部署到 AppCenter 中提到的测试组。

当构建运行一切正常并且应用程序按预期部署到测试组时。每个测试人员都可以安装应用程序,一切看起来都很好。但是,当他们尝试安装该应用程序时,他们会收到一条非常不具描述性的错误消息,称“无法安装该应用程序”。

我检查了设备日志,发现一条错误消息:“可执行文件的签名无效。”

我还通过下载内部配置文件(+ 签名证书)从 Visual Studio (Mac) 重新创建了失败的部署,并将构建/部署重新定位到“内部”。为了更好地衡量,我还手动选择了内部配置文件。

当我构建并部署到模拟器时一切正常,但是当我部署到物理设备时,我在 Visual Studio (Mac) 中收到此错误:

ApplicationVerificationFailed: Failed to verify code signature of /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.zveLv9/extracted/{name-of-app}.app : 0xe8008016 (The executable was signed with invalid entitlements.) error MT1006: Could not install the application '{path-to-app}.app' on the device '{my-device-name}': Your code signing/provisioning profiles are not correctly configured. Probably you have an entitlement not supported by your current provisioning profile, or your device is not part of the current provisioning profile. Please check the iOS Device Log for details (error: 0xe8008016).

我的理解是,使用 AppId 启用权利并使用代码中的权利要求(通过 Entitlements.plist 文件)。这导致 med 假设引用相同 AppId 的两个配置文件也将启用相同的权利。这是不正确的吗?显然,我从代码中请求相同的权利,因为我正在使用两个不同的配置文件编译完全相同的分支。

我怀疑我误解或忽略了一些东西......

4

1 回答 1

2

问题原来是“推送通知”权利。

Entitlement.plist 文件包含一个“aps-environment”设置(在 Visual Studio Mac 中打开 Entitlements 文件并选择“Source”选项卡),该设置设置为“development”。在将发布版本部署到物理设备时,这会导致与配置文件的实际权利不匹配。

为了解决这个问题,我创建了第二个 Entitlement.plist 文件,将“aps-environment”设置更改为“production”并将其保存为“Entitlement.prod.plist”(我还将原始文件重命名为“Entitlement.dev.plist”为了清楚起见)。

最后,我只是更改了 Bundle 设置(调试、发布等)以选择正确的授权文件,现在它可以按预期工作。

于 2018-04-17T16:00:56.770 回答