尝试在模拟器中运行Watch应用程序,结果出现“FBSOpenApplicationErrorDomain错误4”,使用Xcode 6.3 +。

3
我正在为我的一款应用编写手表应用程序。由于我的团队还没有苹果手表,因此我在构建服务器上也构建了模拟器版本的应用程序,以供我的QA团队使用“xcrun simctl”运行和测试手表应用程序。
一切都很顺利,直到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.)

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

你有什么想法可以解决这个问题吗?

非常感谢您提供的任何帮助!


请检查此答案https://dev59.com/bl8e5IYBdhLWcg3wNYQn#25968057 - Musadhikh Muhammed K
谢谢。不幸的是,我已经看到了,但列出的解决方案都没有帮助。 - thorax
嗯...我必须向苹果报告此事: 看起来:
  1. 要能够使用模拟器构建运行手表应用程序,Info.plist 中手表应用程序的版本号必须保持为“1”,WatchKit 扩展的版本号必须为“1.0”。
  2. 要能够本地构建,版本号必须与配套的 iOS 应用程序相同。
- thorax
3个回答

2
我也遇到了这个问题。
基本上,你应该有3个目标(如果计算测试则为4个)。如果你检查构建阶段,你会发现WatchKit App必须首先编译,然后是WatchKit Extension,最后是主应用程序。
我有一个脚本,我使用了很长时间,每次编译应用程序时自动更新CFBundleVersion。
在Extension和主应用程序的Build Phases中都有一个“Run Script”的地方,但没有WatchKit应用程序。
所以,第一件被编译的事情是WatchKit应用程序,然后将其移动到构建目录。它将具有手动输入的最后一个CFBundleVersion中的任何数字。
第二个运行的是Extension编译。这里是我的脚本运行并更新数字的地方。然而,数字现在比已经移动到构建目录中的WatchKit应用程序中的数字多一个。因此,即使它们从生命开始就是相同的数字(比如1),当扩展被移动过去时,它现在是2,并且存在不匹配。
没有办法通过使用Run Script以自动化方式更新WatchKit App CFBundleVersion。
就我个人而言,我将解决它的方法是在我想要更改时手动设置我的WatchKit App的CFBundleVersion,然后我将在其他两个目标的构建阶段中运行Run Scripts,将CFBundleVersion从WatchKit App复制到它们各自的CFBundleVersions中以保持它们全部同步。
长话短说,你有三个CFBundleVersions要跟踪并确保它们都是相同的数字。

0
为了使手表应用程序正常运行,必须在手表应用程序和其应用程序扩展(18857540)之间匹配某些属性:
  • WatchKit App Extension 的 Info.plist 中的 NSExtensionAttributes 的 WKAppBundleIdentifier 属性必须与 WatchKit App 的 Info.plist 的 CFBundleIdentifier 匹配。
  • WatchKit App 的 Info.plist 的 WKCompanionAppBundleIdentifier 属性必须与包含 iOS 应用程序的 Info.plist 的 CFBundleIdentifier 匹配。

谢谢你的回答。我之前也检查过这两个问题。对于我的项目来说,这两个都是正确的。 - thorax

0

我发现在watchKit Extension/watchKitApp中添加CFBundleGetInfoString导致了我的问题(在iOS应用程序本身中拥有它是可以的)。将其移除后,问题得到了解决。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接