我试着创建一个支持android和apple watch的flutter应用程序。对于android,我目前还没有遇到问题。但是我在apple watch上遇到了麻烦。
我按照官方的指示从flutter:https://docs.flutter.dev/development/platform-integration/ios/apple-watch。如果我没看错的话,我们就不用再启用Bitcode了,因为Xcode 14 Bitcode已经过时了。但是不管怎样,我试过启用和不启用Bitcode。两种方法都遇到了同样的错误。
在我将Watch应用程序添加为目标后,我收到以下错误:
未能为设备生成预编译应用程序。
错误(Xcode):无法解析产品类型'com. apple.产品类型. watchkit2-extension'为平台'iphoneos'
错误(Xcode):无法在域'iphoneos'中查找产品类型'com.apple.watchkit2-extension':无法在域"iphoneos"中加载标识符为"com. apple. product-type. watchkit2-extension"的规范
错误(Xcode):无法解析产品类型'com. apple.产品类型.应用程序. watchapp2'为平台'iphoneos'
错误(Xcode):无法在域'iphoneos'中查找产品类型'com.apple.product-type.application.watchapp2':无法在域"iphoneos"中加载标识符为"com. apple. product-type. application. watchapp2"的规范
谷歌这个错误导致我这个stackoverflow问题和答案从'karim'。
target specifies product type 'com.apple.product-type.watchkit2-extension', but there's no such product type for the 'iphonesimulator' platform
在我的情况下,当我添加watchkit扩展与xcode 7.但扩展的调试目标是iOS.所以当我在调试/模拟器中运行时,我得到了这个错误.我必须将它们更改为WatchOS.并解决.选择项目〉目标〉支持的平台〉调试〉watchOS(我在这里有iOS).
检查我的支持平台,我看到我的手表目标在'支持平台'它也是'watchOS'为'调试',但为'配置文件'和'发布'它是'iphonos'
我将"Profile"和"Release"更改为"watchOS"。使用此更改运行时,我只得到之前的三个错误:
未能为设备生成预编译应用程序。
错误(Xcode):无法解析产品类型'com. apple.产品类型. watchkit2-extension'为平台'iphoneos'
错误(Xcode):无法解析产品类型'com. apple.产品类型.应用程序. watchapp2'为平台'iphoneos'
错误(Xcode):无法在域'iphoneos'中查找产品类型'com.apple.product-type.application.watchapp2':无法在域"iphoneos"中加载标识符为"com. apple. product-type. application. watchapp2"的规范
在这一点上,我卡住了...我不知道该怎么继续。
我发现这个指南和例子运行得很好。但是flutter显示了一个警告,部分代码已经被弃用了。我不知道是什么差异使他的项目运行,而我的项目有问题...
https://medium.com/kbtg-life/adding-apple-watch-to-flutter-app-via-flutter-method-channel-f1443532d94e
https://github.com/theamorn/flutter-apple-watch
有人能帮忙吗?提前感谢!:)
编辑1 - 2022年9月19日
好的,我上面提到的例子的代码,并没有被弃用,只是需要一个小的迁移。最初的警告是:
此应用使用的是Android嵌入的弃用版本。
为了避免意外的运行时失败或将来的构建失败,请尝试将此应用迁移到V2嵌入。
查看迁移应用的文档:https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects
我只需要在AndroidMainifest.xml中进行更改:
〈应用程序
安卓系统:名称="io. flutter. app.Flutter应用程序"
致:
〈应用程序
安卓系统:名称="${应用程序名称}"
就像这里描述的:
How to Fix Flutter Warning: Your Flutter application is created using an older version
https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects
但这仍然没有解决我最初的问题。我不想基于示例项目构建我的应用。我想从一个全新的flutter项目开始,并添加一个Apple Watch作为目标。我仍然无法弄清楚基于flutter指令新建的项目与工作示例项目之间有什么区别...
编辑2 - 2022年9月20日
多亏了@Einzeln的回答,我注意到我的配置界面布局看起来和他的不一样。
所以我检查了所有需要的程序的更新。
只是为了澄清什么,我已经安装了更新后:
- 扑动3.3.2-通道稳定
- dart 2.18.1
- 开发工具2.15.0
- Android Studio海豚|二○二一年三月一日
- Xcode版本14.0
我注意到的第一个不同之处是,如果我添加一个监视作为目标,则文件结构会有所不同:
手表只有一个目录,和我更新之前不一样,在我之前提到的例子中,有两个目录,一个标为'watch',另一个标为'watch extension'。
感谢@Einzelns的回答,我还检查了配置。我不得不手动添加手表到我的'Runner'应用程序的'框架,库和嵌入式内容'。
在'手表'我不需要添加Runner应用程序。
但我必须添加'WatchKit配套应用程序包标识符'为'手表'在构建设置-〉信息. plist值。
从Xcode启动两个应用程序(手表应用程序和智能手机应用程序)都正常工作,没有任何问题。
但从Android Studio以及从终端启动Flutter项目/应用程序时,使用"flutter run"或"flutter run--release"会导致以下问题:
为什么它从Xcode开始运行良好,但从flutter开始就有问题?对我来说,默认生成的手表应用程序的代码似乎只有在iOS 14及更高版本才可用。以下是生成的默认代码:
但也许我可以从这里开始工作,“只是”需要重新创建代码,以便旧的iOS版本也支持它。
4条答案
按热度按时间zf9nrax11#
事实上,我不知道你的项目发生了什么,但我猜它是关于Xcode配置。
你能检查一下Xcode〉Targets〉General,看看里面有没有漏掉任何Watch应用程序吗
iOS
苹果手表
slmsl1lt2#
我最近遇到这个问题,我试了以上所有的解决方法,但是都没有效果,我在快要给予的时候发现了这个:https://dev.to/gie3d/add-an-apple-watch-target-on-flutter-app-3m0m
通过将WatchKit Extension文件夹中的
WKCompanionAppBundleIdentifier
更新为info.plist
,所有的问题都消失了,我可以重新编译应用程序。70gysomp3#
将构建设置中支持的平台更改为watchOS。
WatchOS Target Setting
7kqas0il4#
您面临两个主要问题:
1.缺少Apple的最新文档在他们更改watchOS项目结构并将watchOS App目标设置移至主项目文件后。
1.xCode中的错误不允许您正确设置项目。
我最近花了一周的时间建立了一个类似的项目,下面是我是如何开始的:
1.将您的xCode降级为late 2021/early 2022 [!!!关键步骤!!!]
1.照常创建Flutter项目(
flutter create ...
)1.按照每个manual添加watchOS配套应用(文件-〉新建-〉目标-〉watchOS-〉添加WatchOS配套应用),并确保它仍按预期运行
1.通过手动将手表应用和扩展文件从查找器拖到xCode项目中,将项目与Apple Watch Conectivity代码示例合并,确保目标分配正确。确保手动合并
AppDelegate.swift
文件的代码。此处的技巧是保留代码示例中手表应用的Info.plist文件,但将其排除在xCode构建阶段之外[!!!关键步骤!!!]1.将xCode升级回最新版本
1.根据需要更新所有三个目标的
Info.plist
文件中的捆绑包ID1.确保您的项目仍在运行并进行备份
1.按照xCode的建议升级您的xCode项目-它将删除其中一个目标,这样您将只有两个,而不是三个。
1.如果一切顺利-现在你应该可以运行手表应用程序与Flutter应用程序。
1.将本地通道添加到Flutter应用程序和iOS应用程序,以端口连接状态和Flutter应用程序内外的其他事件。
1.通过xCode运行watchOS目标并将其最小化(不要关闭!)。
1.按常规运行Flutter调试。
现在你应该结束了你的Flutter调试会话连接到手表应用程序,你可以使用热加载等开发你的Flutter应用程序,如往常一样。