Watchtips
这是一个实验,旨在看看是否可以使用 Flutter 构建一个 iOS 应用,并附带一个 watchOS 应用。我最初尝试使用 Beta 产品时并未成功,因此该想法被搁置了。现在重新审视这个问题,我已能够用 Flutter 应用成功运行一个编译好的空白手表应用,因此我将分阶段尝试使用 Flutter 重新创建 WatchTips 应用。
计划
我的计划是
- 1.0 创建一个纯 Flutter 应用(本次初始提交)
- 1.1 添加一个空白手表项目并使其正常工作
- 1.2 将手表应用的功能修改为 WatchTips
- 1.3 更新 Flutter 应用为 WatchTips
- 1.4 查看是否可以实现两个应用之间的通信(正如 Titanium 版本所做的那样)
- 2.0 整理 Flutter 代码和 iOS 项目,并将其用于将应用提交到 App Store
Flutter 包项目
基于此测试项目的成果,我开始开发一个 Flutter 包,以允许 Flutter iOS 应用和手表应用之间的通信。这应该可以更轻松地集成一些标准功能,尽管目前仍然很麻烦,因为在向 iOS 项目添加 Watch Kit 目标后,Flutter 的运行/构建将不再起作用。这意味着所有包测试和开发都需要通过 XCode 进行。
我已通过插件实现了从 iOS 应用向手表发送消息,这可以在此视频中看到。
生成发行版本
到目前为止,我找到的创建发行版本的唯一方法是遵循此顺序。
设置 Bundle ID
在添加 Watch Kit 应用目标之前,设置最终的 Bundle ID,因为 Watch 应用和相关扩展需要使用相同的 Prefix。否则,您可能需要在创建最终归档文件之前更新所有引用。
更改所有版本和构建值
这必须为每个目标(在本例中为 3 个)完成,将它们分别更改为 **$(FLUTTER_BUILD_NAME)** 和 **$(FLUTTER_BUILD_NUMBER)**,否则,尽管测试运行正常,但归档文件将无法正常工作,除非版本号匹配。
先运行 Flutter 构建
这将失败,但它会生成*正确的 shell 脚本*,使 iOS 能够执行构建(*flutter build ios --release*)。
在 XCode 中创建归档文件
- 1 选择 Generic Device + watchOS Device 作为目标
- 2 运行 Product -> Archive
- 3 如果构建成功,运行 Validate App
- 4 如果验证成功 - 上传到 App Store!!!
版本
2.1
- 更新了手表和手机 UI
- 货币现在默认使用手机/平板电脑的地区设置
- 软件包已通用化,可在 iPad 上运行(不支持手表)
2.0
- 首次 App Store 发布
1.4 - 粗糙但可用!
我现在已经成功地将所需的代码添加到了 iOS 项目中,使其能够与 Flutter 通信,并从手表发送数据更新,以便在应用中反映出来。
基本上,如果你在手表上计算小费,数据就会传输到相应的设备。
您需要原谅(糟糕的?)Objective C 代码,因为它不是我擅长的领域——毕竟谁会想出它来呢 :-) 。其中很多都是硬碰硬的试错,以及大量的搜索和测试。
除此之外,对我来说困难的问题是,尽管 **MethodChannel** 有相当多的文档记录,但 **EventChannel** 却没有,我找到的唯一例子都与插件扩展有关,但同样,这可能是因为我不喜欢(由于不太理解)Objective C。
我稍后会尝试创建一个通用的插件,但那将是用 Swift 完成的。
1.3
所以,经过一番折腾,我终于让它成功了。我现在拥有一个 iWatch 应用以及一个 Flutter iOS 应用来构建和运行。我已经通过 HockeyApp 构建并分发到物理手机上进行了测试。现在是坏消息......
我无法使用 Flutter 来构建 Flutter 项目或进行 iOS 发布版本,所以我实际上是在一个单独的项目中构建了 Flutter 应用,然后将 lib 目录添加回了这个项目中。
这是一个很大的麻烦,因为要在设备或模拟器上进行测试,我需要使用 XCode 来完成所有构建(即没有热重载),但它确实有效。
为了创建应用的 AD-HOC 发行版本,我再次使用了 XCode,将目标设置为 Generic Device 并归档了项目。生成的 AD-OC 签名应用运行良好。
但我认为最后一步将是一个主要障碍,因为我需要使用 XCode 来完成所有构建.........
1.2
更新了 Watch 应用并添加了功能性的 WatchTips。Watch 应用现在可用于计算账单分摊和提示。
1.1
在使用 XCode 定义一个带有连接的 Watch 模拟器的模拟器后,标准的 Vanilla 应用(来自 1.0)已按以下方式更新:
- 在 iOS Runner 应用上设置 bundle id(u.spiralarm.watchtips)
- 在 XCode 中添加一个新 Target(File->New->Target),选择了 WatchKit app
- 取消勾选*Include Notification Scene* 和*Include Complication*
- 将产品命名为*WatchTips*
- 生成 2 套资源(我使用了一个名为**Asset Catalog Creator**的应用程序),一套用于 Runner 应用,一套用于 Watch App,以便两者都有完整的图标集。
- 打开 WatchTips 应用的 interface.storyboard 并向屏幕添加一个按钮
在此之后,我再也无法使用 IDE(VSC)在调试模式下启动应用程序,因为我遇到了以下错误(可能需要某种自定义构建配置)
=== BUILD TARGET WatchTips Extension OF PROJECT Runner WITH CONFIGURATION Debug ===
target specifies product type 'com.apple.product-type.watchkit2-extension', but there's no such product type for the 'iphonesimulator' platform
Could not build the application for the simulator.
Error launching application on iPhone 7 with Watch 42mm.
但是,如果我使用 XCode,我就可以使用 XCode 来编译应用程序并在模拟器上运行手表应用。