我正在制作一个独立的Apple Watch应用程序(但有一个配套的iPhone应用程序,这对手表应用程序的功能来说并不是必需的。)
如果安装了iPhone配套应用,应用会使用WatchConnectivity来同步设备之间的数据。我可以在iOS应用上调用session.updateApplicationContext(),并在Watch应用上接收session(didReceiveApplicationContext)。但另一种方式是不可能的。我总是得到7018的NSError代码,这意味着没有安装iOS配套应用。
我已经确保watchOS和iOS应用程序都安装在模拟器中(并在我的实际设备上进行了测试,iPhone 11和Watch系列5。)但从watchOS -〉iOS得到同样的失败结果。
我注意到watchOS 6.0+isCompanionAppInstalled有一个新的WCSession示例变量可用。当我在手表应用程序上激活WCSession后读取此变量时,它总是返回false。
还有什么我需要注意的吗?我在想也许我在所有不同的info. plist中做错了什么。但是我已经检查了很多次。
我的信息.plist文件:
在我的手表应用程序中:
WKWatchKitApp is YES
WKCompanionAppBundleIdentifier is com.abc.myapp
在我的手表扩展中:
App can run independently of companion iPhone app is YES
NSExtension
WKAppBundleIdentifier is com.abc.myapp.watchkitapp
NSExtensionPointIdentifier is com.apple.watchkit
- iOS应用程序捆绑包标识符为com.abc.myapp
- watchOS应用程序是com.abc.myapp.watchkitapp
- watchOS应用程序扩展名是com.abc.myapp.watchkitapp.watchkitextension
还有什么我可能忽略的吗?
非常感谢您提供的任何帮助/见解。
5条答案
按热度按时间wnrlj8wa1#
好的。我找到了一种方法来消 debugging 误,让手表连接从手表到iPhone都能正常工作。
本来我希望watch app是独立的,所以在Xcode的watch扩展目标中,勾选了“支持不安装iOS App运行”的复选框。但是只要我取消勾选这个复选框,WCSession.isCompanionAppInstalled就返回true,错误消失。从watch同步到iPhone开始工作。
所以希望这不是故意的行为,很快就会被苹果修复。(我提交了一份错误报告。)但现在,我只是要离开独立的watchOS应用程序未经检查,因为我确实想要WatchConnectivity,以防iPhone应用程序被用户安装。
感谢您的阅读,祝您编程顺利。
798qvoo82#
如果您在Info.plist中有“App is only available as a standalone watchOS app”,即使它是false也要删除它。只留下“App can run independently of companion iPhone app”。另外,不要忘记为Watch App设置“WKCompanionAppBundleIdentifier”(不是扩展)。至少它在真实的设备上对我来说可以使用这些参数。
hxzsmxv23#
这似乎是一个bug,有时当我启动我的WatchOS应用程序时,它会一直得到
WCSession.isCompanionAppInstalled = false
,尽管iPhone上的配套应用程序正在运行,其他应用程序也能够与手机通信。当我在手表上强制重启应用程序时,这似乎消失了(按侧边按钮,然后向左滑动应用程序并按下大红色按钮,然后再次启动应用程序)。重启后,一切似乎都很好。
到目前为止,这只发生在Testflight版本中,如果它发生在生产版本中,我将提交一个bug。
svmlkihl4#
如果我取消选中“支持在不安装iOS应用程序的情况下运行”,我的iOS应用程序将无法在模拟器中启动。
xkftehaa5#
我在Xcode 14.2中遇到了这个问题。解决方案:
1.将INFOPLIST_KEY_WKWatchOnly设置为NO
1.在watch os应用中添加WKCompanionAppBundleIdentifier键,并将值设置为iOS应用的绑定ID