【问题标题】:Xcode 6.3 + trying to run the Watch App in simulator results in "FBSOpenApplicationErrorDomain error 4"Xcode 6.3 + 尝试在模拟器中运行 Watch App 导致“FBSOpenApplicationErrorDomain 错误 4”
【发布时间】:2015-06-24 01:42:27
【问题描述】:

我正在为我的一个应用程序编写一个手表应用程序。由于我的团队还没有 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 应用程序失败并出现此错误:

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

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

你知道如何解决这个问题吗?

提前感谢您的帮助!

【问题讨论】:

  • 谢谢。不幸的是,我已经看到了,但列出的解决方案都没有帮助。
  • 嗯...我必须向 Apple 报告:看来:1. 为了能够使用模拟器构建运行手表应用程序,Info.plist 中的手表应用程序版本号WatchKit 扩展必须保持“1”和“1.0”。 2.要能够在本地构建,版本号必须与配套的iOS应用相同。

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


【解决方案1】:

我也遇到了这个问题。

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

我有一个使用了很长时间的脚本,它会在每次编译应用程序时自动更新 CFBundleVersion。

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

因此,首先编译的是 WatchKit 应用程序,然后将其移至构建目录。它将具有上次手动输入的 CFBundleVersion 中的任何数字。

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

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

就我个人而言,我要解决的方法是在我希望更改时在我的 WatchKit 应用程序中手动设置 CFBundleVersion,然后我将在构建阶段为其他两个目标设置运行脚本将 WatchKit App 中的 CFBundleVersion 复制到它们各自的 CFBundleVersions 中,以使它们保持同步。

长话短说,您需要跟踪三个 CFBundleVersions 并确保它们的编号相同。

【讨论】:

    【解决方案2】:

    为了让 Watch 应用正常运行,某些属性必须在 Watch 应用及其应用扩展 (18857540) 中匹配:

    • WatchKit App Extension 的 Info.plist 中 NSExtensionAttributesWKAppBundleIdentifier 属性必须与 WatchKit App 的 Info.plist 的 CFBundleIdentifier 匹配。
    • WatchKit App 的 Info.plist 的 WKCompanionAppBundleIdentifier 属性必须与 Containing iOS App 的 Info.plist 的 CFBundleIdentifier 匹配。

    【讨论】:

    • 感谢您的回答。我以前也检查过这个。这两个对我的项目都是正确的。
    【解决方案3】:

    我发现将 CFBundleGetInfoString 添加到 watchKit Extension/watchKitApp 对我造成了问题(可以将它放在配套的 iOS 应用程序本身中)。删除它为我解决了这个问题。

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

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 2016-01-10
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多