我正在为我的一个应用程序编写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.)
我无法在系统控制台日志中看到与此相关的任何内容。 :/
你知道怎样才能解决这个问题?
提前感谢您的帮助!
答案 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)中的某些属性必须匹配:
WKAppBundleIdentifier
的{{1}}属性必须与WatchKit App的Info.plist的CFBundleIdentifier匹配。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