【问题标题】:Apple Watchkit simulator issue: SPErrorInvalidBundleNoGizmoBinaryMessageApple Watchkit 模拟器问题:SPErrorInvalidBundleNoGizmoBinaryMessage
【发布时间】:2015-04-01 22:05:20
【问题描述】:

当我打开现有的 Watchkit 应用程序(Xcode 6.2)时,它编译正确,模拟器启动(iPhone+Watch),随后出现有意义的错误:

启动“xxx Watchkit 扩展”时出错 SPErrorInValidBundleNoGizmoBinaryMessage

所有模拟器都有这个问题(iPhone 5/5S/6/6+ - 38mm/42mm)

任何想法可能是什么问题?

似乎出于某种原因,该应用程序不想在模拟器上运行,尽管它曾经如此。同一个项目中包含的 iPhone 应用程序确实可以运行,其他 Watchkit 示例应用程序也是如此。

【问题讨论】:

  • 你有没有做一个清晰干净的构建文件夹?该错误听起来像是手表扩展程序未包含在应用程序包中。
  • 尽管遵循了这篇文章中的建议,但仍然出现此错误。此问题的任何其他来源?
  • 消息键中Gizmo这个词的使用很有趣;我想知道它是否源于 Watch 是一个绝密项目的日子,所以他们不能在关键常数中使用“Watch”这个词。根据早期的'Project Purple' 天。

标签: ios xcode6 watchkit


【解决方案1】:

您是否更改了应用的捆绑 ID?如果是这样,您可能需要手动更新 WatchKit Extension 中的 WKAppBundleIdentifier 以及 WatchKit App 中的 WKCompanionAppBundleIdentifier。

【讨论】:

  • 我最终对以前的包标识符名称进行了全局搜索,这向我显示了问题所在。
  • 我不认为我曾经重命名过任何东西,但我遇到了同样的问题,因为 WatchKit Extension > WKAppBundleIdentifier 中的包标识符的大小写与实际不匹配WatchKit 应用程序中的包标识符。
  • 尝试重命名我的应用程序并遇到此问题。转到我的扩展 plist 并更新了“WKAppBundleIdentifier”。它现在构建成功,但在它能够加载任何东西(lldb)之前崩溃......“无法实例化类_TtC23App_WatchKit_Extension18MyInterfaceScript”......知道为什么会这样
【解决方案2】:

WKAppBundleIdentifier 可能需要与 WatchKit App 的 Bundle Identifier 相同。

请查看 WatchKit Extension 的 info.plist。 NSExtension - NSExtensionAttributes - WKAppBundleIdentifier - xxxxx.watchkitapp

编辑:进一步解释澄清......

在您的 App 目标下,您转到 INFO 选项卡并将 Bundle Identifier 设置为 com.myapp

然后在 WatchKit Extension 目标下,您转到 INFO 选项卡并将 Bundle Identifier 设置为 com.myapp.watchkitextension

然后仍然在 WatchKit Extension 目标下,仍然在 INFO 选项卡下,您将 NSExtension > NSExtensionAttributes > WKAppBundleIdentifier 设置为 com.myapp.watchkitapp

所以一个以 .watchkitextension 结尾,另一个以 .watchkitapp 结尾

【讨论】:

  • 我搜索了 WKAppBundleIdentifier 并立即找到了我的问题。谢谢。
  • 它对我不起作用 xcode 6.2 公开发布 @Reuben 有什么帮助吗?
  • 我有同样的问题,捆绑版本和 id 的匹配,使用公共 6.2 Xcode。不久前正在建造,停止工作。
【解决方案3】:

检查 Info.plist 中的“Your App WatchKit Extension”和“Your App WatchKit App”。所有标识符的第一部分应该相同。

在我的情况下,问题出在“您的 App WatchKit 扩展”> NSExtension > NSExtensionAttributes > WKAppBundleIdentifier。

【讨论】:

  • 您是否检查了两个 plist 文件?小部件 info.plist 中的 Bundle 标识符是否等于 WatchKit Extension 中的 Bundle 标识符并等于我屏幕上突出显示的 WKAppBundleIdentifier?应用程序重新安装和深度清理(Shift+Cmd+Option+K)对我很有帮助。希望对你有帮助 =)
【解决方案4】:

确保您使用的是 8.3 模拟器。

我在使用 8.2 时始终收到此消息。尝试了此处列出的所有内容,并为此苦苦挣扎了几个小时。切换到 8.3 解决了它。具有讽刺意味的是,因为您现在必须将部署目标设置为 8.2,但我猜 watchkit 应用程序需要 8.3 才能运行...

【讨论】:

  • 你说得对,这有帮助。哦,“讽刺”是我想到的最礼貌的表达方式......
  • 是的,除非我必须使用 8.4 模拟器。使用 8.2 或 8.3 模拟器时,我始终收到错误消息,但使用 8.4 模拟器时可以正常工作。这是 Xcode 6.4。
【解决方案5】:

我多次检查了所有捆绑包标识符,但无法解决这个问题。清理构建文件夹也没有成功。

但是,我可以通过在我的 WatchKit 扩展功能中关闭 Game Center 来解决这个问题。

为 iOS 主机应用打开它似乎可以正常工作,但在尝试在模拟器中运行 WatchKit 应用时,为 WatchKit 扩展打开它会导致 SPErrorInvalidBundleNoGizmoBinaryMessage 错误,而它完成建设没有任何投诉。

我正在为 Apple Watch 开发游戏,并期待支持 Game Center。实际上,我从一开始就计划与托管的 iOS 应用程序进行通信,但后来我看到 Game Center 列在 WatchKit 扩展本身的功能中,所以我希望能够在那里处理它。但是,由于它似乎不起作用,我将坚持我最初的计划,通过托管 iOS 应用程序来支持它。

Xcode 版本 6.2 (6C131e)

编辑:与 Xcode 版本 6.3 (6D570) 相同的问题

【讨论】:

    【解决方案6】:

    对于真实设备(不是模拟器)上的问题,请按照这篇文章中的所有内容进行操作: http://blog.jaredsinclair.com/post/117350678170/jareds-code-signing-tips-apple-watch-edition

    最重要的是:

    所有三个目标都需要以下内容:

    针对代码签名身份的唯一应用 ID(适用于 所有目标)该目标的唯一配置文件。

    并确保应用 ID 一致:

    您的应用 ID 将如下所示:

    com.company.App-Name

    com.company.App-Name.todaywidget

    com.company.App-Name.watchkitapp

    com.company.App-Name.watchkitextension

    如果仍然无法使用,请从手表中手动删除应用程序(按住图标然后点击“x”),然后重试。这是为我做这件事的踢球者。

    【讨论】:

      【解决方案7】:

      我解决问题的过程是

      1. 检查WatchKit扩展和WatchKit App中的WKAppBundleIdentifier和bundle标识符是否正确
      2. 删除 ~/Library/Developer/CoreSimulator/Devices 的子文件夹
      3. 删除 ~/Library/Developer/Xcode/DerivedData 的子文件夹
      4. 清理我的项目
      5. 重启模拟器
      6. 运行

      【讨论】:

        【解决方案8】:

        我也一直在为此苦苦挣扎。这就是解决我在 Xcode 7.1 iOS 9 上的问题的方法。 只需确保您的标识符遵循以下命名:

        • 目标 - com.myCompany.myApp
        • Watchkit 应用程序 - com.myCompany.myApp.watchkitApp
        • Watchkit 扩展 - com.myCompany.myApp.watchkitApp.watchkitextension

        扩展应该有 WatchKit 应用目标的标识符 + .watchkitextension

        【讨论】:

          【解决方案9】:

          到目前为止,我已经尝试了此线程中发布的所有内容,但仍然无法使其正常工作。我采取了回溯到它工作的点并回溯我所做的每一个动作以找出它在哪个点中断......

          事实证明,WatchKit 应用程序的 info.plist 文件不喜欢任何自定义 plist 条目,至少在我的案例中是这样。我添加了一个名为“MyAppBundlePrefix”的条目,它导致了“Error Launching 'xxx Watchkit Extension' SPErrorInValidBundleNoGizmoBinaryMessage”

          我希望 XCode 能够为该错误提供更具体的细节,但我花了大约 5 个小时才通过暴力方式找到它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-01-15
            • 2021-04-12
            • 2015-01-16
            • 1970-01-01
            • 1970-01-01
            • 2015-03-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多