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版中,已經修復了這個問題。太好了。

相關文章
相關標籤/搜索