一: 官方建议使用pod方法
引入,因此我也采用pod方法
引用
二:原生项目接入flutter
工程。
不建议使用Android Studio
或者VSCode
创建,因为尝试创建后发现.iOS/Flutter
目录缺少podhelper.rb
脚本命令,会导致配置完pod
引入后报错,建议使用命令行创建。
三: 建议使用命令行创建
创建的flutter工程
目录最好和iOS原生项目
目录一个级别文件目录下:
//其中`my_flutter`为定义的`flutter工程名` 这里我定义为`flutter_project `
flutter create -t module flutter_project
四: 使用命令行创建完后 在指定目录下生成的flutter
工程目录如下
五: 经过调研对比 Android Studio
和VSCode
都可以开发flutter
项目,但是个人建议使用Android Studio
,真机调试或者log控制台以及智能提示Android Studio
都有较大优势,极其好用,我这里用的VSCode
注意:这个时候可以去看看 VSCode
创建flutter项目
哪篇文章,主要看如何先让VSCode
安装好插件,如何VSCode
跑起来看看效果。最后可以在VSCode
的下面的终端里面执行:flutter pub get
命令,安装插件,此命令也可以不执行。
六: flutter
项目创建完毕后。
1,打开新建的flutter
项目,运行项目:
flutter run
确认无报错。
2,那接下来SSB-iOS
原生项目配置通过pod
接入flutter
项目,SSB-iOS
项目的podfile
配置如下:
pod
目录上面配置路径下面配置对路径的引用,如图所示:
SSB-iOS
项目的podfile
配置具体代码如下:
platform :ios, '12.0'
# flutter_application_path 是flutter 工程的项目路径
flutter_application_path = '../flutter_project'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
post_install do |installer|
flutter_post_install(installer) if defined?(flutter_post_install)
end
# 以及
target 'SSBApp' do
use_frameworks!
# 这边引入
install_all_flutter_pods(flutter_application_path)
end
七: 原生项目,执行即可
1,原生项目,pod
执行
// cd 到iOS原生项目目录下执行:
pod install
// 或者
pod update --verbose --no-repo-update
2,原生项目,引入flutter
配置
AppDelegate.h
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#pragma mark -- flutter配置3
@import Flutter;
#import <FlutterPluginRegistrant/GeneratedPluginRegistrant.h>
@interface AppDelegate : FlutterAppDelegate //UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) FlutterEngine *flutterEngine;
@property (readonly, strong) NSPersistentContainer *persistentContainer;
- (void)saveContext;
@end
AppDelegate.m
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#pragma mark -- flutter配置4
self.flutterEngine = [[FlutterEngine alloc] initWithName:@"my flutter engine"];
[self.flutterEngine run];
[GeneratedPluginRegistrant registerWithRegistry:self.flutterEngine];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
八: 执行完毕后 pod
目录下会引入flutter1.0
和FlutterPluginRegistrant
如图:
然后可以在VSCode
下面的终端里面执行
flutter run
如果真机运行报错:
那么需要把
flutter
里面的iOS工程Runner项目
的bundle Identifier
改下,改成符合你的开发者开发者账号格式改成示例
注意:
1,flutter
工程每次修改后,都需要进行
flutter run
2,flutter
工程每次修改后,原生主工程每次运行,都需要执行一下:
pod install
运行原生主工程,报错
报错1:Module 'Flutter' not found
解决:
Flutter工程
flutter clean
flutter pub get
SSB-iOS
原生项目工程
pod install
报错2:
Sandbox: rsync.samba(82572) deny(1) file-write-create /Users/yinxia/Library/Developer/
Xcode/DerivedData/iOSProject-dinnfnutvwrmoefkwmfpwlrafovp/Build/Products/Debug-iphonesimulator/Flutter.framework
//以及
[ +5 ms] Flutter failed to write to a file at "/Users/yinxia/Library/Developer/Xcode/DerivedData/
iOSProject-dinnfnutvwrmoefkwmfpwlrafovp/Build/Products/Debug-iphonesimulator/.last_build_id".
解决:在项目的构建设置 > 构建选项(BuildSettings
)> 沙盒(User Script Sandboxing
)' 改成NO
九: 那么iOS和flutter如何混编呢?iOS跳转flutter页面并传参,flutter跳转iOS页面并传参,如何做?
有多种种方式,其中一种就是flutter_boost
,我们用这种就行,看下一篇文章。【五:Flutter与原生通信的方式简介】