你如何在 Xcode 中使用 Flutter Flavors

Posted

技术标签:

【中文标题】你如何在 Xcode 中使用 Flutter Flavors【英文标题】:How do you use Flutter Flavors in Xcode 【发布时间】:2020-01-28 10:23:29 【问题描述】:

我现在想要为 ios 构建一个现有项目(20k 行代码)(该项目已使用 android 进行开发和测试,尽管我确实检查了它所依赖的每个包都表明 iOS 支持。)

我对 Mac 完全陌生(我花了一段时间才弄清楚如何通过 GUI 启动应用程序),但我设法完成了 MacOS 的 Flutter 设置指南。

Flutter Doctor 显示一切正常,到目前为止,Sample Flutter 应用程序可以在 Xcode iPhone 模拟器上运行。

应用程序需要在构建或启动时指定一个风格,在 android 端我有 dev、qa 和 prod,每个都有完整和免费的,即总共 6 个风格和单独的入口点。

现在,当我尝试从 Android Studio 在模拟器上运行应用程序时,出现错误

Xcode 项目没有定义自定义方案。 您不能使用 --flavor 选项。 无法为模拟器构建应用程序。 在 iPhone 11 Pro Max 上启动应用程序时出错。

在 android 端,我使用多个 src 目录结构与 AndroidManifest 文件和单独的 mipmap 资源目录,加上一个脚本来根据风格切换资产包。每个 Flavors 都指定了一个特定的 main-*.dart 入口点/目标,并且还有一系列 googleservices.json 文件也对应于这些风味。

我现在需要一种将所有这些转换为 xcode 的方法——我认为它被称为“Schemas”。我收集到我需要一个工具来设置模式(如果失败,则需要一个脚本来在构建过程中设置每个风味部分)。或者它们被称为 Runner Profiles?

我的问题是这个工具在哪里。有命令行版本吗?我可以以某种方式启动 Xcode GUI 并为 Android Studio 中的项目设置架构吗?一旦我真正看到它的样子,许多博客中使用的很多术语可能会变得清晰。

一旦我有了工具,我从阅读其他人的问题中意识到,下一个障碍将是查看需要特定设置/调整以使 iOS 构建通过的地方,我认为这对于某些软件包来说尤其是一个问题,但目前我仍在研究工具。

可能与“我的下一个障碍”有关,或者可能与不完整的工具设置有关,当我尝试在没有指定任何风格的情况下在模拟器上运行应用程序时,它告诉我 Xcode 构建完成并且应用程序安装在模拟器,但它失败并显示堆栈跟踪。我的猜测是它告诉我它没有 googleservices.json 文件(一旦设置了正确的 (googleservices-plist.info?) 文件,就应该根据激活的风味对其进行整理 - 但是在哪里和这是怎么做到的?)

也可能是权限问题,甚至是包错误。

编辑:调用堆栈是指 FIRapp 配置和 FLFirebaseMessagingPlugin registerWithRegistrar。这暗示了丢失的 googleservices 配置显然尚不可用 - 因为它是特定于风味的,我需要进行设置。

一些尖锐/具体的问题: 1、flutter run和flutterbuild是否将“flavor”参数作为scheme的名称传递给xcode?我会假设答案是肯定的,否则需要在某个地方进行映射。 2. 如何在 xcode 中为每种风格设置方案(认识到项目在 Android Studio 中的事实)。 3. AndroidManifest.xml 的 iOS 等效项是什么,专门用于指定 applicationID 和 Launcher Icon 和 Application "Label" 4. 如何为 iOS 指定每个架构(每种风格)的 googleservices.json 文件? 5. 如何/在哪里设置每个模式启动器图标?

我想我可以通过使用属于指定“风味”的一组文件替换“默认架构”文件的脚本来完成上述所有工作 - 这是我使用的策略,因为 Flutter Flavors 不会扩展到资产或 pubspec.yaml 文件中设置的任何内容 - 但我更喜欢尽可能使用受支持的工具而不是骇人听闻的解决方案。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。如果您使用的是 git,请尝试删除源代码文件夹并再次克隆。 Git 缓存了一些阻止为 iOS 构建的东西

如果您还没有为 iOS 设置风味,请按照第 3 部分教程进行操作

https://medium.com/@LohaniDamodar/flutter-separating-build-environment-with-multiple-firebase-environment-92e40e26d275

【讨论】:

【参考方案2】:

删除 .idea 目录并重新启动 Android Stdio 修复了我的环境中的相同问题。

【讨论】:

以上是关于你如何在 Xcode 中使用 Flutter Flavors的主要内容,如果未能解决你的问题,请参考以下文章

如何解决错误 FAILURE: Build failed with an exception。 * 其中:脚本 'C:\flutter\packages\flutter_tools\gradle\fl

如何在 Flutter 中使用 Xcode 12.5 解决 Stripe 支付问题?

我可以使用我在Android工作室或视觉工作室为ios编写的扑动代码吗?以及如何使用?

如何在 Flutter Web 中使用 Skia/CanvasKit?

Flutter-如何在flutter的整个应用程序生命周期中将数据保存在内存中?

Flutter 创建项目初体验