2015-04-17 42 views
3

我正在为我的一个应用程序编写一个Watch应用程序。由于我的团队还没有Apple Watch,因此我在我的QA团队的构建服务器上构建了我的应用程序的模拟器版本,他们使用“xcrun simctl”运行并测试手表应用程序本身。Xcode 6.3 +试图在模拟器中运行Watch应用程序导致“FBSOpenApplicationErrorDomain error 4”

一切都很顺利,直到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仍然能够运行iPhone应用程序,而是启动监视应用程序失败,出现此错误:

> 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.) 

我什么都看不到系统控制台日志可能与此有关。 :/

你知不知道这个问题怎么解决?

在此先感谢您的帮助!

+0

请检查此答案http://stackoverflow.com/a/25968057/2497120 –

+0

谢谢。不幸的是我已经看到了,但列出的解决方案都没有帮助。 – thorax

+0

嗯... 我必须向苹果报告这个: 看来: 1.要能够使用模拟器构建运行手表应用程序,Info.plist中的手表应用程序的版本号必须停留WatchKit Extension的“1”和“1.0”。 2.要能够在本地构建,版本号必须与配套的iOS应用程序相同。 – thorax

回答

0

事实证明,将CFBundleGetInfoString添加到watchKit Extension/watchKitApp引起了我的问题(可以将它放在伴随iOS应用程序本身中)。删除,解决了我的问题。

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

为了观看应用程序正常运行,某些属性必须在监视应用程序匹配,并且它的应用程序扩展(18857540):

  • NSExtensionAttributes在WatchKit应用扩展的Info.plist的WKAppBundleIdentifier属性必须匹配WatchKit App的Info.plist的CFBundleIdentifier。
  • WatchKit App的Info.plist的WKCompanionAppBundleIdentifier属性必须与Containing iOS App的Info.plist的CFBundleIdentifier相匹配。
+0

感谢您的回答。我之前也检查过这个。这两个都适用于我的项目。 – thorax

2

我也遇到了这个问题。

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

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

在Extension阶段和主应用程序的构建阶段有一个“运行脚本”的地方,但不是WatchKit应用程序。

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

运行的第二件事是扩展编译。这是我的脚本运行和更新号码的地方。但是,该数字现在比WatchKit应用程序中的数字多了一个,该应用程序已被移至构建目录。所以,尽管他们的生活始终是相同的数字(比如说1),但当扩展移到时,它现在变为2,并且存在不匹配。

无法通过使用运行脚本以自动方式更新WatchKit应用程序CFBundleVersion。

就我个人而言,我要解决这个问题的方法是在我的WatchKit应用程序中手动设置CFBundleVersion,当我想要更改它时,我将在其他两个目标的构建阶段中运行脚本将WatchGuard应用中的CFBundleVersion复制到它们各自的CFBundleVersions中,以保持它们全部同步。长话短说,你有三个CFBundleVersions来跟踪并确保它们都是相同的数字。

相关问题