zoukankan      html  css  js  c++  java
  • Failed to install WatchKit App, error: Application Verification Failed

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

    WatchKit 刚发布没有多久,它的文档还非常少。这样有好也有坏,并因祸得福得使我对这方面的知识挖得比平时更深,学到了也许我不会学到的知识。

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

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

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

    我的情形是在这个特定的工程中,使用一些花哨的构建脚本来自动进行Archived,签名和导出app。这在团队中似乎是一个共同的过程,让整个团队能够更深入地控制他们的持续集成。

    xcode-build

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

    xrun

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

    WatchKitSupport/ WK Required

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

    /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版中,已经修复了这个问题。太好了。

  • 相关阅读:
    Linux cron
    web报表工具FineReport常用函数的用法总结(文本函数)
    web报表工具FineReport常用函数的用法总结(文本函数)
    oracle instr函数
    死锁的例子和 synchronized 嵌套使用
    死锁的例子和 synchronized 嵌套使用
    Perl 监控批量错误
    Linux以百万兆字节显示内存大小
    Linux以GB显示内存大小
    Linux以KB显示内存大小
  • 原文地址:https://www.cnblogs.com/YungMing/p/4804252.html
Copyright © 2011-2022 走看看