Apple Watchkit 模拟器问题:SPErrorInvalidBundleNoGizmoBinaryMessage
Apple Watchkit simulator issue: SPErrorInvalidBundleNoGizmoBinaryMessage
当我打开我现有的 Watchkit 应用程序 (Xcode 6.2) 时,它编译正确,模拟器启动 (iPhone+Watch),随后是有意义的错误:
启动错误'xxx Watchkit Extension'
SPErrorInValidBundleNoGizmoBinaryMessage
我对所有模拟器都有这个问题(iPhone 5/5S/6/6+ - 38mm/42mm)
知道问题出在哪里吗?
似乎出于某种原因,应用程序不想 运行 在模拟器上,即使它曾经是。与其他 Watchkit 示例应用程序一样,同一项目中包含的 iPhone 应用程序 运行。
您是否更改了应用的捆绑包 ID?如果是这样,您可能需要手动更新 WatchKit 扩展中的 WKAppBundleIdentifier 以及 WatchKit 应用程序中的 WKCompanionAppBundleIdentifier。
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 扩展目标和信息选项卡下,您将 NSExtension > NSExtensionAttributes > WKAppBundleIdentifier 设置为 com.myapp.watchkitapp
所以一个以 .watchkitextension 结尾,另一个以 .watchkitapp 结尾
检查 Info.plist“您的 App WatchKit 扩展”和“您的 App WatchKit 应用程序”。所有标识符的第一部分应该相同。
在我的例子中,问题出在“你的 App WatchKit 扩展”> NSExtension > NSExtensionAttributes > WKAppBundleIdentifier。
我多次检查了所有的包标识符,但无法解决这个问题。清理构建文件夹也没有用。
但是,我能够通过 关闭 Game Center 在 我的 WatchKit Extension 的功能中解决这个问题。
为 iOS 主机应用程序打开它似乎工作正常,但为 WatchKit 扩展打开它会导致 SPErrorInvalidBundleNoGizmoBinaryMessage 尝试 运行 模拟器中的 WatchKit 应用程序,它在没有任何投诉的情况下完成构建。
我正在为 Apple Watch 开发游戏,期待支持 Game Center。实际上我从一开始就计划与托管 iOS 应用程序通信来这样做,但后来我看到 Game Center 列在 WatchKit 扩展本身的功能中,所以我希望能够处理它在那里。但是,由于它似乎不起作用,我将坚持我最初的计划,通过托管 iOS 应用程序支持它。
Xcode 版本 6.2 (6C131e)
编辑: 与 Xcode 版本 6.3 (6D570) 相同的问题
我已经尝试了迄今为止在此线程中发布的所有内容,但仍然无法正常工作。我求助于回溯到它工作的那一点,并回溯我所做的每一个动作,以确定它在哪一点中断...
事实证明,WatchKit 应用程序的 info.plist 文件不喜欢任何自定义 plist 条目,至少这是我在我的案例中发现的。我添加了一个名为 "MyAppBundlePrefix" 的条目,它导致了 "Error Launching 'xxx Watchkit Extension' SPErrorInValidBundleNoGizmoBinaryMessage"
我希望 XCode 能为该错误提供更具体的细节,但我花了大约 5 个小时才通过蛮力找到它。
对于真实设备(而非模拟器)上的问题,请执行此 post 中的所有操作:
http://blog.jaredsinclair.com/post/117350678170/jareds-code-signing-tips-apple-watch-edition
最重要的是:
All three targets require the following:
a unique app ID for that target a code signing identity (applies to
all targets) a unique provisioning profile for that target.
并确保应用 ID 一致:
Your app IDs will look something like this:
com.company.App-Name
com.company.App-Name.todaywidget
com.company.App-Name.watchkitapp
com.company.App-Name.watchkitextension
如果还是不行,请手动从手表中删除该应用程序(按住图标然后点击 'x'),然后重试。这是为我做的踢球者。
确保您使用的是 8.3 模拟器。
我在使用 8.2 时一直收到此消息。尝试了此处列出的所有内容并为此苦苦挣扎了几个小时。切换到 8.3 解决了它。具有讽刺意味的是,因为你现在 必须 将部署目标设置为 8.2,但 watchkit 应用程序需要 8.3 才能 运行 我猜...
我解决问题的过程是
- 检查WatchKit扩展和WatchKit App中的WKAppBundleIdentifier和bundle标识符是否正确
- 删除 ~/Library/Developer/CoreSimulator/Devices
的子文件夹
- 删除 ~/Library/Developer/Xcode/DerivedData
的子文件夹
- 清理我的项目
- 重启模拟器
- 运行
我也一直在努力解决这个问题。这就是我在 Xcode 7.1 iOS 9 上的问题的解决方法。
请确保您遵循以下标识符命名方式:
- 目标 - com.myCompany.myApp
- Watchkit 应用程序 - com.myCompany.myApp.watchkitApp
- Watchkit 扩展 -
com.myCompany.myApp.watchkitApp.watchkitextension
扩展应该有 WatchKit 应用目标的标识符 + .watchkitextension
当我打开我现有的 Watchkit 应用程序 (Xcode 6.2) 时,它编译正确,模拟器启动 (iPhone+Watch),随后是有意义的错误:
启动错误'xxx Watchkit Extension' SPErrorInValidBundleNoGizmoBinaryMessage
我对所有模拟器都有这个问题(iPhone 5/5S/6/6+ - 38mm/42mm)
知道问题出在哪里吗?
似乎出于某种原因,应用程序不想 运行 在模拟器上,即使它曾经是。与其他 Watchkit 示例应用程序一样,同一项目中包含的 iPhone 应用程序 运行。
您是否更改了应用的捆绑包 ID?如果是这样,您可能需要手动更新 WatchKit 扩展中的 WKAppBundleIdentifier 以及 WatchKit 应用程序中的 WKCompanionAppBundleIdentifier。
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 扩展目标和信息选项卡下,您将 NSExtension > NSExtensionAttributes > WKAppBundleIdentifier 设置为 com.myapp.watchkitapp
所以一个以 .watchkitextension 结尾,另一个以 .watchkitapp 结尾
检查 Info.plist“您的 App WatchKit 扩展”和“您的 App WatchKit 应用程序”。所有标识符的第一部分应该相同。
在我的例子中,问题出在“你的 App WatchKit 扩展”> NSExtension > NSExtensionAttributes > WKAppBundleIdentifier。
我多次检查了所有的包标识符,但无法解决这个问题。清理构建文件夹也没有用。
但是,我能够通过 关闭 Game Center 在 我的 WatchKit Extension 的功能中解决这个问题。
为 iOS 主机应用程序打开它似乎工作正常,但为 WatchKit 扩展打开它会导致 SPErrorInvalidBundleNoGizmoBinaryMessage 尝试 运行 模拟器中的 WatchKit 应用程序,它在没有任何投诉的情况下完成构建。
我正在为 Apple Watch 开发游戏,期待支持 Game Center。实际上我从一开始就计划与托管 iOS 应用程序通信来这样做,但后来我看到 Game Center 列在 WatchKit 扩展本身的功能中,所以我希望能够处理它在那里。但是,由于它似乎不起作用,我将坚持我最初的计划,通过托管 iOS 应用程序支持它。
Xcode 版本 6.2 (6C131e)
编辑: 与 Xcode 版本 6.3 (6D570) 相同的问题
我已经尝试了迄今为止在此线程中发布的所有内容,但仍然无法正常工作。我求助于回溯到它工作的那一点,并回溯我所做的每一个动作,以确定它在哪一点中断...
事实证明,WatchKit 应用程序的 info.plist 文件不喜欢任何自定义 plist 条目,至少这是我在我的案例中发现的。我添加了一个名为 "MyAppBundlePrefix" 的条目,它导致了 "Error Launching 'xxx Watchkit Extension' SPErrorInValidBundleNoGizmoBinaryMessage"
我希望 XCode 能为该错误提供更具体的细节,但我花了大约 5 个小时才通过蛮力找到它。
对于真实设备(而非模拟器)上的问题,请执行此 post 中的所有操作: http://blog.jaredsinclair.com/post/117350678170/jareds-code-signing-tips-apple-watch-edition
最重要的是:
All three targets require the following:
a unique app ID for that target a code signing identity (applies to all targets) a unique provisioning profile for that target.
并确保应用 ID 一致:
Your app IDs will look something like this:
com.company.App-Name
com.company.App-Name.todaywidget
com.company.App-Name.watchkitapp
com.company.App-Name.watchkitextension
如果还是不行,请手动从手表中删除该应用程序(按住图标然后点击 'x'),然后重试。这是为我做的踢球者。
确保您使用的是 8.3 模拟器。
我在使用 8.2 时一直收到此消息。尝试了此处列出的所有内容并为此苦苦挣扎了几个小时。切换到 8.3 解决了它。具有讽刺意味的是,因为你现在 必须 将部署目标设置为 8.2,但 watchkit 应用程序需要 8.3 才能 运行 我猜...
我解决问题的过程是
- 检查WatchKit扩展和WatchKit App中的WKAppBundleIdentifier和bundle标识符是否正确
- 删除 ~/Library/Developer/CoreSimulator/Devices 的子文件夹
- 删除 ~/Library/Developer/Xcode/DerivedData 的子文件夹
- 清理我的项目
- 重启模拟器
- 运行
我也一直在努力解决这个问题。这就是我在 Xcode 7.1 iOS 9 上的问题的解决方法。 请确保您遵循以下标识符命名方式:
- 目标 - com.myCompany.myApp
- Watchkit 应用程序 - com.myCompany.myApp.watchkitApp
- Watchkit 扩展 - com.myCompany.myApp.watchkitApp.watchkitextension
扩展应该有 WatchKit 应用目标的标识符 + .watchkitextension