iOS应用程序配置是大多数人可能会同意的,是iOS开发人员必须处理的最混乱和最复杂的主题之一,而我是其中之一。 : - )
我们的一个团队需要开始测试他们的应用程序。它是一个企业应用程序,最终将在我们公司的应用程序目录(InTune)中发布,供几千名同事使用。据我所知,Inhouse发行版就是出于这个目的:部署到有限数量的受邀非开发人员测试人员,但无需收获他们的UDID。为此我设置了:
当构建运行时,一切正常,应用程序按预期部署到测试组。允许每个测试人员安装应用程序并且看起来都很好。但是当他们尝试安装应用程序时,他们会收到一条非描述性的错误消息,说明"应用程序无法安装"。
我已检查设备日志并发现错误消息:"可执行文件已使用无效的权利签名。"
我还通过下载Inhouse配置文件(+签署证书)并将构建/部署重新定位到"内部",从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的两个配置文件也将启用相同的权利。这是不正确的?显然,我正在从代码中请求相同的权利,因为我使用两个不同的配置文件编译完全相同的分支。
我怀疑我误解或忽略了某些事情......
答案 0 :(得分:2)
问题原来是“推送通知”权利。
Entitlement.plist文件包含“aps-environment”设置(在Visual Studio Mac中打开Entitlements文件并选择“Source”选项卡),该文件设置为“development”。将发布版本部署到物理设备时,会导致与配置文件的实际权利不匹配。
为了解决这个问题,我创建了第二个Entitlement.plist文件,将“aps-environment”设置更改为“production”并将其保存为“Entitlement.prod.plist”(我还将原始文件重命名为“Entitlement.dev” .plist“为了清楚起见。”
最后,我刚刚更改了Bundle设置(Debug,Release,...)以选择正确的Entitlement文件,现在它按预期工作。