Xcode 6.3 +试图在模拟器中运行Watch App导致" FBSOpenApplicationErrorDomain错误4"

时间:2015-04-17 09:23:36

标签: ios simulator watchkit apple-watch xcode6.3

我正在为我的一个应用程序编写Watch App。由于我的团队还没有Apple Watch,我在我的QA团队的构建服务器上构建了我的应用程序的模拟器版本,他们正在使用" xcrun simctl"运行并测试手表应用程序本身。

一切顺利,直到Xcode 6.3出现。   使用Xcode 6.3,当我尝试在我的开发机器上本地构建应用程序时,我收到了此错误:

error: The value of CFBundleVersion in your WatchKit app's Info.plist (1) does not match the value in your companion app's Info.plist (2.0.492). These values are required to match.

要解决此问题,我已修改 info.plist 文件以包含相同的CFBundleVersion。此修改修复了本地开发计算机上的构建问题,但是:QA仍然可以运行iOS应用程序,但启动Watch App失败并出现此错误:

> xcrun simctl launch 0D5238ED-CBE9-4DCC-961D-BC756E0885CD com.company.enterprise.appname.watchapp
An error was encountered processing the command (code=4):
The operation couldn’t be completed. (FBSOpenApplicationErrorDomain error 4.)

我无法在系统控制台日志中看到与此相关的任何内容。 :/

你知道怎样才能解决这个问题?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

我也遇到了这个问题。

基本上,你应该有3个目标(如果计算测试数为4个)。如果检查构建阶段,您将看到WatchKit App必须首先编译,然后是WatchKit Extension,最后是主应用程序。

我有一个我已经使用多年的脚本,每次编译应用程序时都会自动更新CFBundleVersion。

有一个地方可以运行脚本"在扩展的构建阶段和主应用程序,但不是WatchKit应用程序。

因此,编译的第一件事是WatchKit应用程序,然后将其移动到构建目录。它将具有CFBundleVersion中的最后一次手动输入的数字。

第二件事是扩展编译。这是我的脚本运行并更新数字的地方。但是,该数字现在比WatchKit应用程序中的数字多一个,该应用程序已经被移动到构建目录中。因此,即使他们以相同的数字(比如1)开始生活,当扩展被移动时,它现在处于2并且存在不匹配。

无法使用运行脚本以自动方式更新WatchKit App CFBundleVersion。

就我个人而言,解决问题的方法是在我希望它改变的时候在我的WatchKit App中手动设置CFBundleVersion,然后我会在构建阶段中设置Run Scripts。另外两个目标是将来自WatchKit App的CFBundleVersion复制到各自的CFBundleVersions中,以使它们保持同步。

长话短说,你有三个CFBundleVersions来跟踪并确保它们都是相同的数字。

答案 1 :(得分:0)

为了使Watch应用程序正常运行,Watch应用程序及其App Extension(18857540)中的某些属性必须匹配:

  • WatchKit App Extension的Info.plist中WKAppBundleIdentifier的{​​{1}}属性必须与WatchKit App的Info.plist的CFBundleIdentifier匹配。
  • WatchKit App的Info.plist的NSExtensionAttributes属性必须与包含iOS应用的Info.plist的WKCompanionAppBundleIdentifier匹配。

答案 2 :(得分:0)

我发现将CFBundleGetInfoString添加到watchKit Extension / watchKitApp会给我带来问题(可以将它放在随附的iOS应用程序中)。删除它解决了我的问题。

defaults delete `pwd`/myApp WatchKit Extension/Info CFBundleGetInfoString
defaults delete `pwd`/myApp WatchKit App/Info CFBundleGetInfoString