Flutter嵌入swift混合开发

为什么我从 Swift 转向 Flutter,你也应该这样做 但根据我的经验,高科技公司需要快速,他们想要最有经验的公司。Flutter 的代码可重用性允许您只编写一个代码库,并且不仅可以将其用于移动 Android 和 iOS,甚至可以用于 Web、桌面等。Flutter 的生产力是最好的,成本更低,是创业应用开发的正确选择。首先,当我开始学习和构建移动应用程序时,我是从 Swift 开始的。现在时间颤动变得越来越流行,因为它是跨平台的,因此可以在多个设备上使用。大多数大小公司都在使用颤振,因为它是跨平台的,并且来自谷歌团队。不会有太多较小的项目。 阅读详情

前奏:

目前基于flutter的活跃程度,有很多的开发人员开始学习flutter,我也是其中的一枚小卒。由于本公司项目涉及一些小游戏的开发,两端或者是三端(包括web)开发起来可能比较耗费人力物力,并且在计算逻辑上可能还会存在一些差异问题等。混合开发成为了一个首选的定义。RN在这一步上面的灵活性没有flutter的灵活性大,简单的来讲,如果使用RN的话,项目的的打包依赖对平台的依赖性比较高,而flutter既可以作为一个模块开发,也可以作为一个应用开发,比较灵活。

 

本篇基于flutter的基本介绍这里就不再赘述。

对于flutter的了解。这里可以参考官网: Flutter中文网,这里推荐快速入门的人员可以先看《编写第一个Flutter应用》和《Flutter for iOS 开发者》这两个章节,其他组件的使用可以慢慢了解。熟能生巧嘛,万事不能期望一次就熟练的程度。既然有兴趣就不要浪费这三分钟的热度。

下面这里我们来配置swift项目的依赖flutter混合开发。网上也有很多人来讲swift旧项目中嵌入flutter,但是运行下来发现会多少存在一些问题。这里将我的问题以及缘由一一解说,如有问题,还望各位看官不吝赐教。

这里我们混合flutter开发有两种模式:1.项目独立开发,2.静态包倒入。

这里我采用的是项目独立开发,由于项目的不稳定性,产品基于这一块新品游戏的不确定性,概念性试水。对目前来看使用静态包的话可能修改起来不太方便,下一篇我也会整理一下静态包的方式给大家展示使用步骤。

 

第一

一个成熟的flutter环境,终端运行:flutter doctor。直至没有问题以及警告。

 

第二(这里我用swift项目,OC酌情配置相同)

我们创建一个iOS项目,或者是已经存在的iOS项目:

这个项目我建在了桌面的mixText文件夹下的FlutterIos项目。

然后我们在这个项目FlutterIos的同级目录下:即mixText文件夹下执行命令:

flutter create -t module flutter_module

 这里的flutter_module只是这个flutter的module名,(可以自定义,不过自定义下的话下面会讲到的新建的flutter的module路径也要相应的调整哈,不要这里任性改了,下面的不该照着我的打,编译不通过那就不怪我了😂)

  • 通过cocopod将iOS/swift工程和flutter进行关联
    • 进入FlutterIos文件夹
    • 执行 pod init
    • 将配置项添加到pod文件夹中
# Flutter
flutter_application_path = '../flutter_module/'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
  • 看起来应该是这样

其中的source这里也顺便一提。之前我们的cocoapods的索引地址是cocoapods/specs.git(即上文写的),但是目前cocoapods的索引地址换为了CDN(trunk)。你也可以执行pod repo来查看下载你本地的索引库是哪几个,由于trunk近期也是经常出问题。这里我们索引还是用git的索引源:https://github.com/CocoaPods/Specs.git

 

  • 保存,终端执行pod install (这里执行会报错,需要将依赖包的iOS版本号提高至10以及以上即可解决,应该是flutter的环境需要至少是iOS10以及以后的版本才可以)

  • 打开我们pod创建好的 FlutterIos.xcworkspace,进行基础配置

  • iOS工程Enable Bitcode 需要关闭,因为Flutter混合开发不支持Bitcode

这里如果我们项目中的其他一些第三方使用Enable bitcode的话,可以在podfile里面添加这样一段:

# Flutter相关集成是不支持bitcode的,所以需要将相关产物的bitcode功能关闭。如果你的现有工程中仓库众多,有的仓库是必须bitcode的,这样的话就需要每次pod install之后再在工程配置中手动设置回来,以下脚本放在podfile中可以解决此问题。

post_install do |installer|

        installer.pods_project.targets.each do |target|

                if target.name =="App" || target.name =="Flutter"

                        target.build_configurations.each do |config|

                                config.build_settings['ENABLE_BITCODE'] ='NO'

                        end

                end

        end

end

好了,我们接着来:

  • 添加Run Script

 

"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed

我们可以看到这两个脚本中涉及这个shell脚本:xcode_backend.sh      这个脚本很重要,这个路径呢是你本地安装Flutter SDK的路径下可以找到的这个文件。

然后是进行User-Defined的环境路径添加(这个文件是在上面pod install的时候会生成相应的连接的),这里也是一个项目独立的弊端,需要同时开发这个项目的都安装flutter环境,而framework则不用这样。(双刃剑,各取所需吧。)

 

然后我们编译flutter_module项目中的iOS环境:cd到flutter_module文件夹下,flutter run -d (ios),会在flutter_module目录下生成一个build文件夹,我们将文件夹中的flutter_assets文件夹拖拽进FlutterIos项目中(勾选Create floder reference)

然后在项目中需要的地方导入Flutter头文件,然后使用:

import UIKit
import Flutter

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.title = "混合开发测试"
        
        let btn: UIButton = UIButton()
        btn.backgroundColor = .cyan
        btn.frame = CGRect(x: 50, y: 100, width: 100, height: 50)
        btn.addTarget(self, action: #selector(btnChoose), for: .touchUpInside)
        self.view.addSubview(btn);
        
        
    }
    

    @objc func btnChoose() {
        let vc = FlutterViewController()
        self.navigationController?.pushViewController(vc, animated: true)
//        self.present(vc, animated: true, completion: nil)
    }

}

 

至此,项目运行起来。接下来就愉快的敲起心爱的Flutter的Hello World吧。

COMSOL后处理与可视化 公众号→【COMSOL仿真交流】←更多精彩内容 后处理是采用COMSOL建模的一个重要环节。通过软件自带的可视化工具,可以快速方便的展现仿真结果。 COMSOL为使用者提供了多种后处理工具,包括表面图、切面图、等值线图、流线图、线图、体图等等。可按功能分为数据集(储存数据的地方)、派生值和表单(对数据进行进一步的操作)、绘图组合绘图类型(显示数据结果的地方)、导出数据与生成报告。   如果想用origin、matlab对模拟数据做进一步的处理,导出excel格式的模拟结果,这可以通过“导出 阅读详情

相关推荐

开源 AHB不对称半桥反激电路设计(六)死区时间,谐振腔电流,谐振电感函数表达式

电流跌落可以使副边电流峰值和有效值降低,减小损耗,但如果开关管 S2 导通期间,谐振电流谐等于励磁电流,即副边电流A 点降至 0,会在原边变压器内形成环流,产生损耗,同时也不利于副边同步整流管驱动的正常工作,为了保证开关管 S2 导通期。在开关管 S1 和开关管 S2 均关断的死区时间内,谐振电流给原边开关管结电容和副边整流管结电容充放电,因此会引起开关 S1 关断瞬间电流跌落与开关 S2 关断瞬间电流震荡现象,受寄生参数影响原边谐振电流波形和副边电流波形如图。降到最低,变压器以最高效率向副边传递能量。

【Simon】的博客 1229

Flutter与原生IOS(swift)交互系列之一

flutter与原生ios基础交互实现过程

u013474690的博客 4573

如何加快香山处理器Chisel->Verilog编译速度

相比使用默认的scala firrtl complier,使用CIRCT能够将香山代码编译到Verilog的速度提高50%左右。在执行make命令时加上MFC=1,例如make verilog MFC=1或make emu MFC=1。在本地从源码编译CIRCT,在编译完成后将circt/bin路径加入PATH中。使用GraalVM免费版作为JVM编译香山比OpenJDK快10%-20%。我们推荐使用GraalVM代替OpenJDK。使用CIRCT编译香山。

专业技术人员的归宿 862

flutter与swiftUI简介与对比

本文简单介绍一下flutter简介与swiftUI对比 1、flutter简介 随机各种技术的不断发展成熟,5G,云计算,区块链等等,应把更多的精力放在数据运算,数据处理上。各大公司考虑跨平台技术的解决方案,React Native和Weex等等,每种框架都有各自的优缺点,但目标都是一致的,就是提升应用的开发效率,降低研发成本,一套代码运行多个平台。 Flutter是Google在2015...

baidu_33735542的博客 4470

Microchip Studio 7.0 从下载到项目调试:AVR开发者的完整入门指南(附常见问题解决)

本文为AVR开发者提供了Microchip Studio 7.0从下载安装到项目调试的完整入门指南。详细介绍了如何获取安装包、创建第一个AVR工程项目,并配置编译与调试环境。同时,文章重点解决了开发过程中常见的编译错误和仿真问题,帮助开发者快速上手并高效使用这一官方集成开发环境。

joy55的博客 335

基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现

本文详细介绍基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现。通过I2S接口直接传输PCM数据,避免SRC重采样,实现真正的HIFI级音质。涵盖硬件连接、软件架构、网络传输优化及实际音质对比,为音频爱好者提供高性价比的无损无线音频解决方案。

rnn9storyteller的博客 948

基于 Swift 的跨平台开发:使用 Flutter 与 Swift 的结合

Flutter 由谷歌开发,采用 Dart 语言。它基于 Skia 图形引擎实现高性能渲染,能在 iOS、Android 等多平台运行。Flutter 使用一套 Widget 来描述界面,这些 Widget 组成树形结构,构建出丰富的用户界面。热重载功能使开发者能在不重启应用的情况下实时看到代码修改效果,极大提升开发效率。Flutter 的组件库丰富,涵盖各种 UI 组件,能满足不同类型应用的界面设计需求。Swift 由苹果公司开发,旨在替代 Objective-C。

数字魔方操控师的博客 909

【AI】获取各类AI大模型api-key的快速教程(OpenAI、Gemini、Claude、DeepSeek)

【AI】获取各类AI大模型api-key的快速教程(OpenAI、Gemini、Claude、DeepSeek)

funfan的博客 3012

swift项目嵌入flutter的module混合开发(framework模式:适合多人协作开发,一个负责混合开发)

和之前一样,这个模块也是对于本地我们开发好的代码,需要到一起开发iOS的同事需要拉代码,调试的时候。这种静态包的方式就会好很多。不用在他的电脑上也搭建flutter环境,以及创建flutter项目的拉取调试等复杂的工作再做一遍。 综上所述,多人协作开发ios的项目,一人负责混合的flutter的module内容的,可以用到这种framework的形式会比较好。 ...

曹世鑫的杂谈 2110

【DRAM存储器六十五】DDR5介绍--训练相关之MPC、Read Training Pattern、Read Preamble Training Mode

简述DDR5 MPC操作和读训练时颗粒输出pattern的配置

highman110的博客 362

RockChip Android14 修改LCD背光最大值

在调试LCD屏时时长会出现硬件不匹配,导致电流过大,屏幕发热严重。在不调整硬件的情况下,我们可以通过修改软件,降低LCD背光最大值来实现适配。我们都知道LCD屏背光是靠pwm来控制,一般来说最大值可以设置为255,针对上述问题,我们可以通过软件来降低该值,比如200,100等等。

qq_34968572的博客 631

swift项目嵌入flutter的module混合开发(官方推荐模式)

上一篇有讲到项目混合开发配置问题。 上一篇是跟网上的各大网游搜罗的混合过程中的问题。这篇根据官方的介绍做了尝试配置比较简单。这里可以分享一下使用: 首先也是一样,在我们的项目MyApp的根目录同级文件夹下执行flutter方法 flutter create -t module my_flutter 来生成一个flutter的module来供我们配置。 如果你有的话就更好了,...

曹世鑫的杂谈 2199

Python爬虫实战:绕过Cloudflare反爬的最新技术与完整代码详解

在互联网数据采集领域,越来越多的网站开始部署CDN和安全防护服务,其中 Cloudflare 是最为广泛使用的防护方案之一。它不仅为网站提供DDoS防护,还能通过JS挑战、验证码和行为分析来识别并拦截爬虫。这给爬虫工程师带来了极大挑战——如何在不违反网站服务条款的情况下,实现有效的数据采集?本文将分享Python领域绕过Cloudflare反爬的最新技术方法,结合最新流行库与自动化浏览器,帮助你攻克这一难题。绕过Cloudflare反爬不是一蹴而就,需结合多技术、多策略,持续迭代。

2201_76125261的博客 2628

Flutter(二十一) 混合开发

一. 调用原生功能 二. 嵌入原有项目 三. Flutter模块调试

goodswifter 1225

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Flutter 与原生技术(Objective-C/Swift,java)的关系

在 iOS 开发中,Flutter 与原生技术(Objective-C/Swift)的关系。

yournameplease的专栏 2294

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Flutter学习之混合开发

Flutter学习之混合开发1. 调用原生功能1.1 Camera(已有三方插件支持直接调用)1.1.1 添加依赖1.1.2 平台配置1.1.3 代码实现1.2 电池信息(没有三方插件支持,需要编写原生代码)1.2.1 平台通过介绍1.2.2 创建测试项目1.2.3 编写Dart代码1.2.4 编写IOS平台代码1.2.4.1 swift代码实现1.2.4.2 Objective-C代码实现1.2.5 编写Android代码1.2.5.1 kotlin 实现代码1.2.5.2 java实现代码2. 嵌入原有

yong_19930826的博客 3427

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Flutter 与原生混合开发

特性将 Flutter 集成到原生应用 (Add-to-App)在 Flutter 中嵌入原生视图 (Platform Views)主导方原生 App是主导,Flutter 是一个或多个页面/模块。是主导,原生视图是嵌入的组件。适用场景渐进式重构、为现有大型应用添加新功能。复用已有的复杂原生组件(地图、WebView、专业SDK)。核心技术管理、、平台通道UiKitView、平台通道主要挑战引擎生命周期管理路由和数据同步统一导航体验。性能开销手势冲突键盘处理。

chaoxxggg的博客 519

Swift + Flutter混合开发实战(双引擎架构设计与性能调优秘籍)

掌握跨平台开发难题?本指南深入解析Swift与Flutter混合开发实战,基于1024 Swift 跨平台应用实战指南,详解双引擎架构设计与性能调优策略,适用于iOS、Android及多端统一场景。融合原生性能与Flutter灵活UI,提升开发效率与用户体验,值得收藏。

LogicGlow的博客 788

SwiftUI与Flutter混合开发:iOS原生界面无缝集成实战指南

还在为如何在Flutter应用中嵌入原生iOS界面而烦恼?本文将为你彻底解决这一痛点,通过实战案例展示如何实现SwiftUI(UIViewController)与Flutter的无缝混合开发。 读完本文你将掌握: - ✅ SwiftUI与Flutter混合架构的核心原理 - ✅ Platform Channel双向通信机制 - ✅ 原生UIViewController的集成方法 - ✅ 数据状态...

gitblog_00937的博客 1105

iOS Flutter 混合开发项目:高效与灵活的新选择

iOS Flutter 混合开发项目:高效与灵活的新选择 在这个快速发展的移动应用开发时代,开发者们总是寻求既能提高效率又能保证用户体验的解决方案。 就是一个这样的项目,它结合了苹果的原生iOS开发和Google的Flutter框架,旨在为开发者提供一个高效、灵活且易于维护的混合开发平台。 项目简介 该项目由CaffreySun开发,主要目标是创建一个可以同时运行Swift(iOS原生代码)和Da...

gitblog_00023的博客 369

GitHub_Trending/sam/samples Swift集成:原生UIViewController与Flutter混合开发

你是否遇到过这样的困境:Flutter应用开发到一半,突然发现某个功能必须使用原生iOS SDK才能实现?或者需要在应用中嵌入一个已经存在的原生UIViewController?传统的解决方案要么是重写整个功能,要么是通过复杂的插件机制,但都显得笨重且难以维护。 本文将为你揭示一种优雅的解决方案:通过Platform Channels(平台通道)实现原生UIViewController与Flut...

gitblog_00785的博客 479

iOS/Flutter混合开发之PlatformView配置与使用

flutter嵌入iOS原生组件。

虾米好吃的博客 847

终极指南:如何实现Flutter与Swift原生ViewController无缝集成

GitHub推荐项目精选(sam/samples)是一个包含丰富Flutter示例和演示的项目集合,其中展示了多种Flutter与原生平台集成的解决方案。本文将详细介绍如何突破混合开发壁垒,实现Flutter与Swift原生ViewController的无缝集成,帮助开发者构建更强大的跨平台应用。 ## 为什么选择Flutter与Swift集成? 在移动应用开发中,Flutter以其高性能和跨

gitblog_01151的博客 404

iOS与Flutter混合开发核心能力与面试指南

移动开发领域正经历从原生到跨平台的技术转型,其中Flutter凭借其高效的渲染引擎和跨平台能力成为行业热点。理解Widget渲染原理和Platform Channel通信机制是掌握Flutter开发的关键,而Swift的并发体系和内存管理则是iOS开发的必备技能。在混合开发场景中,合理运用状态管理方案如Riverpod或Bloc,能够有效提升代码复用率和维护性。对于开发者而言,同时掌握iOS原生与Flutter技术栈不仅能应对电商、直播等复杂业务场景的性能挑战,还能显著提升职业竞争力。当前市场对这类复合型人

weixin_29015051的博客 212

Flutter与已有iOS工程混合开发与脚本配置

作者:Realank Liu链接:https://juejin.im/post/5b7a1bfbe51d4538a93d2339来源:掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。本文转自⬆️, 并结合自己的实践对其中一些地方做修改, 使用 Swift 语言.修改的地方用"注释*"标出.运行一个原生的Flutter工程(也就是纯Flutter)非常简便,不过现在Flutt...

weixin_33727510的博客 409

【Flutter】Flutter 常用命令 ( 官方文档 | 环境与版本管理 | 项目创建与清理 | 设备与运行 | 构建与打包 | 环境与版本管理 | 代码管理 | 其它命令 )

一、官方文档 二、环境与版本管理 1、环境检查 2、版本与渠道 3、全局配置 三、项目创建与清理 1、创建项目 2、清理缓存 四、设备与运行 ( ★ 重点 ★ ) 1、 查看设备 2、 运行项目 3、 热重载 / 热重启 4、 附加到正在运行的 App 五、发布命令 : 构建与打包 1、Android 打包 2、iOS 打包 ( Mac 必需 ) 3、桌面端打包 4、Web 打包 六、环境与版本管理 1、依赖管理 ( pub 命令 ) 七、代码管理 1、代码分析 ( 检查语法 / 规范错误 ) 2、格式化代

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1369
上一篇: iOS 13 SceneDelegate适配
下一篇: swift项目嵌入flutter的module混合开发(官方推荐模式)
Cao_Shixin攻城狮
博客等级 码龄10年 710粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值