Failed to install WatchKit App, error: Application Verification Failed

本文翻译自Failed to install WatchKit App, error: Application Verification Failedxcode

WatchKit 刚发布没有多久,它的文档还很是少。这样有好也有坏,并塞翁失马得使我对这方面的知识挖得比平时更深,学到了也许我不会学到的知识。app

我以前遇到一个问题,就是用xcrun 命令而不是使用Xcode的 Archive和导出功能来打包一个iOS 和 WatchKit 包到一个 .ipa格式的安装文件中。有可能到头来你也会遇到这种状况,那就是在你的Apple Watch 设备上安装你的WatchKit app 时,会弹出如下的错误信息:ui

'Failed to install WatchKit App, error: 
Application Verification Failed'.

你获取不到任何的堆栈信息,没有控制台输出.... 这种状况就变得很是特殊了。.net

个人情形是在这个特定的工程中,使用一些花哨的构建脚原本自动进行Archived,签名和导出app。这在团队中彷佛是一个共同的过程,让整个团队可以更深刻地控制他们的持续集成。翻译

xcode-build

这个xcode-build 命令是用来编译Xcode 项目并生出一个 .app 后缀的文件。你不能把这个 .app 的文件直接分发,由于这个文件没有包含任何的 provision profiles 文件或者开发者的证书。code

xrun

当Xcode 项目被编译到一个 .app 文件后,xcrun 命令就是用来把这个 .app文件打包进一个 .ipa 文件中。这个 .ipa文件包括了前面的那个 .app文件以及 provision profiles 文件和开发者证书,这个 .ipa文件就能够安装到用户 的iOS 设备上了。blog

WatchKitSupport/ WK Required

直到如今我才意识到,一个 .ipa 包在任什么时候候都必须有一个固定的内存结构:ip

/Payload/
/Payload/Application.app
/WatchKitSupport/WK

/Payload/

这个目录包含了你的 .app文件,这个 .app文件自己包含了全部你的iOS 应用的资源, .xibs, .plist 。内存

/Payload/MyApp.app/Plugins

这个目录下包含了一个 MyApp_WatchKitExtension.appex 文件,它自己包含了全部你的WatchKit extension 扩展的资源。资源

/Payload/MyApp.app/Plugins/MyApp_WatchKitExtension.appex/

这个目录下包含了一个 MyApp_WatchKitApp.app 文件,它自己包含了全部你的WatchKit App(不是extension 扩展)相关的文件,例如Storyboards,Assets和以及一切在你的Watch 设备上存活的资源。 它同时也包含了 WatchKit Extension 的可执行文件。

/WatchKitSupport/

无文档。 应用若是提供一个 WatchKit 应用,那么就须要这个WatchKitSupport目录以及这个目录里面的一个WK 二进制文件

xcrun vs Xcode

知道这些后,我对比了xcrun 命令和 Xcode自带的Archive和导出功能所生成的文件目录。

Xcode

/Payload/
/Payload/Application.app
/WatchKitSupport/WK

xcrun

/Payload/
/Payload/Application.app

而后我发现了一个苹果工程师在 开发者论坛 上发表的一篇帖子,无心中描述了xcrun 没法支持打包一个提供 WatchKit 应用的 .ipa 包。他和Kassem Wridan的解决方法彷佛是惟一的解决方法了。

这确定不是一个永久性的解决问题的方法,对我来讲,这是一个提交bug报告的绝佳机会。若是你读到这篇文章,你也应该这么作,但愿在个问题有一天会修复。

更新

在最新的 Xcode 7 beta版中,已经修复了这个问题。太好了。

相关文章
相关标签/搜索