如何在 Flutter 中启用对现有项目的 Swift 支持

Posted

技术标签:

【中文标题】如何在 Flutter 中启用对现有项目的 Swift 支持【英文标题】:How to enable Swift support for existing project in flutter 【发布时间】:2019-02-14 02:16:12 【问题描述】:

我想知道是否有一种方法可以快速支持 Flutter 项目。我只在创建项目时启用了 Kotlin 支持。我也需要启用 Swift。是否有我可以执行的命令或 android Studio 的颤振插件中的任何设置,我可以启用或在 Xcode 中是否有启用选项?

这是我想要做的,但对于现有的 Flutter 项目

【问题讨论】:

【参考方案1】:
    从 Flutter 项目的根目录中删除现有的 ios 文件夹。 运行此命令flutter create -i swift .

此命令将仅创建 ios 支持 swift 的目录。

【讨论】:

删除 iOS 也会删除与之相关的所有信息。如果你已经在一个应用程序上工作了很长时间,这不是一个选择,因为你必须从头开始 @Dyary 确实如此,如果在/ios 项目中编写了一些自定义代码,您必须小心。但是,我认为我们有 git(假设这是我们都使用的做法),我们总能从历史中找到旧代码。 :) 当然。我只是想通知其他人再次从 git 中提取的额外步骤,因为您真的不需要无缘无故删除文件夹:) 因为这就是我所做的并且必须重建我的项目【参考方案2】:

好吧,我现在搜索同样的东西,我也启用了 kotlin 支持...... 那么,如何为现有项目启用 swift 或 kotlin 支持?

    为了获得快速支持,您需要将 ios 文件夹移动到项目文件夹之外,对于 kotlin 移动到 android 文件夹之外,还要检查您的 @清单中的 987654321@ 名称,或您的 PRODUCT_BUNDLE_IDENTIFIER

    在你的项目根文件夹的终端中运行以下颤振命令(我使用com.custom_name.my_proyect作为这个例子的包名)

    -i swift 用于快速 -a kotlin 用于 kotlin。 --org 是设置你的包的前两个字,本例为 com.custom_name --project-name 是在这种情况下设置你的包的最后一个字 my_proyect

您可以只使用 switf/kotlin 或两者都使用,(不要忘记命令末尾的句点 '.')

    flutter create -i swift -a kotlin --org com.custom_name --project-name my_proyect .

    *在 ios 文件夹中再次应用您之前的自定义更改(例如:info.plist、自定义初始屏幕等),现在在 Runner 文件夹中您没有 main.mAppDelegate.h文件,而您只有 swift 语言的 AppDelegate.swift 文件,所以如果您需要将 API_KEYs 放在那里,代码是不同的。

    1234563再次是您之前在 Android 文件夹中的自定义更改(例如:build.gradle、res 文件夹、android_manifest 等)。

【讨论】:

【参考方案3】:

鲜为人知的秘密——您可以在 Flutter 应用程序目录中运行 flutter create .,它将修复项目,重新创建任何丢失的文件。所以如果你已经有一个用 Objective-C 和 Java 创建的项目,你可以运行:

flutter create -i swift -a kotlin .

将宿主应用程序转换为 Kotlin 和 Swift。

(忽略你想要的 Kotlin,但我的经验是把它留在那里)

【讨论】:

它会撤消我对应用程序所做的任何更改,例如我在 android 目录文件中所做的更改吗? 它是flutter create -i swift -a kotlin .(点在末尾)【参考方案4】:

必须创建桥接头。 使用 XCode 打开项目。然后选择文件 -> 新建 -> 文件 -> Swift 文件。 创建 swift 文件时会显示一个对话框(由于该文件已删除,因此可以使用任何名称。)。 XCode 会询问您是否要创建桥接头,单击是。 确保你有 use_frameworks!在 Runner 块中,在 ios/Podfile 中。 确保在 XCode -> Build Settings 中选择了 SWIFT_VERSION 4.2 做颤振清洁 进入你的 ios 文件夹,删除 Podfile.lock 和 Pods 文件夹,然后执行 pod install --repo-update

【讨论】:

【参考方案5】:

对于你已经有一个部分用Objective-C编写的ios模块,现在只想使用Swift代码的场景,我建议你右键单击project window中的ios并选择@ 987654327@这个来自上下文菜单

您可以按照以下说明进行操作: https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c

如果您的计划是用 swift 重写模块,那么我会创建一个与原始项目同名的新项目并启用 Swift 支持。我只是将整个 ios 模块复制到您的原始项目中。

【讨论】:

【参考方案6】:

先删除AppDelegate.h、AppDelegate.m、main.m文件 并从构建阶段删除 main.m -> 编译源代码

然后运行这个命令 flutter create -i swift .

【讨论】:

以上是关于如何在 Flutter 中启用对现有项目的 Swift 支持的主要内容,如果未能解决你的问题,请参考以下文章

如何在项目中使用 firebase 和 firebase 功能的现有 Flutter 应用程序中更新包名称?

现有项目中集成Flutter

如何使用 flutter_webview 插件在 Flutter 中启用位置?

Flutter混合开发:Android中如何启动Flutter

如何禁用从未启用的迁移

Flutter:如何避免在现有路由上推送相同的路由