Flutter-已有iOS工程中加入Flutter之远程Pod产物方式集成

相关链接,如有需要请移步:
Flutter-已有iOS工程中加入Flutter之Cocoapods+Flutter环境方式集成
Flutter-已有iOS工程中加入Flutter之远程Pod产物方式集成
Flutter-远程Pod集成Flutter脚本优化

最近,我研究了下不依赖flutter开发环境的方式集成,推送到远程pod仓库,以Framework形式在cocoapods中集成。

开始

1. 创建flutter_module:flutter create -t module flutter_module

KKdeMacBook-Pro:remotepod kaye$ flutter create -t module flutter_module
Creating project flutter_module... androidx: true
flutter_module/test/widget_test.dart (created)
flutter_module/flutter_module.iml (created)
flutter_module/.gitignore (created)
flutter_module/.metadata (created)
flutter_module/pubspec.yaml (created)
flutter_module/README.md (created)
flutter_module/lib/main.dart (created)
flutter_module/flutter_module_android.iml (created)
flutter_module/.idea/libraries/Flutter_for_Android.xml (created)
flutter_module/.idea/libraries/Dart_SDK.xml (created)
flutter_module/.idea/modules.xml (created)
flutter_module/.idea/workspace.xml (created)
Running "flutter pub get" in flutter_module...                      1.7s
Wrote 12 files.

All done!
Your module code is in flutter_module/lib/main.dart.

添加依赖库,比如:

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2
  shared_preferences: ^0.5.6

运行flutter pub get安装依赖库

KKdeMacBook-Pro:flutter_module kaye$ flutter pub get
Running "flutter pub get" in flutter_module...                      0.4s
KKdeMacBook-Pro:flutter_module kaye$ 

build获取产物

KKdeMacBook-Pro:flutter_module kaye$ flutter build ios --debug --no-codesign
Warning: Building for device with codesigning disabled. You will have to manually codesign
before deploying to device.
Building com.example.flutterModule for device (ios)...
Running Xcode build...                                                  
                                                   
 ├─Assembling Flutter resources...                           6.8s
 └─Compiling, linking and signing...                         4.5s
Xcode build done.                                           17.6s
Built /Users/kaye/Desktop/remotepod/flutter_module/build/ios/iphoneos/Runner.app.

产物路径:


基础库路径.png
依赖插件路径.png

我们先将各个产品,手动copy出来,放到一个文件夹ios_frameworks中备用。
note:这里我们先不用脚本,手动获取,验证一下pod能不能成功

2. 创建Pod:pod lib create KKFlutterPod

KKdeMacBook-Pro:remotepod kaye$ pod lib create KKFlutterPod
Cloning `https://github.com/CocoaPods/pod-template.git` into `KKFlutterPod`.
Configuring KKFlutterPod template.

------------------------------

To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide: 
 - https://guides.cocoapods.org/making/using-pod-lib-create.html
 ( hold cmd and double click links to open in a browser. )


What platform do you want to use?? [ iOS / macOS ]
 > ios

What language do you want to use?? [ Swift / ObjC ]
 > objc

Would you like to include a demo application with your library? [ Yes / No ]
 > no

Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > none

Would you like to do view based testing? [ Yes / No ]
 > no

What is your class prefix?
 > KK

Running pod install on your new library.

Analyzing dependencies
Fetching podspec for `KKFlutterPod` from `../`
Downloading dependencies
Installing KKFlutterPod (0.1.0)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `KKFlutterPod.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

[!] Automatically assigning platform `ios` with version `9.3` on target `KKFlutterPod_Tests` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

 Ace! you're ready to go!
 We will start you off by opening your project in Xcode
  open 'KKFlutterPod/Example/KKFlutterPod.xcworkspace'

To learn more about the template see `https://github.com/CocoaPods/pod-template.git`.
To learn more about creating a new pod, see `http://guides.cocoapods.org/making/making-a-cocoapod`.
KKdeMacBook-Pro:remotepod kaye$ 

将上一步的ios_frameworks文件夹移动到Pod仓库中,目录结构如下:

Pod库中Framework目录.png

3. 创建远程Pod对应的Git仓库

3.1 创建仓库

这里自己测试使用的是GitHub,创建过程就不描述了。

3.2 关联仓库

tip:或者你也可以先把远程的Pod仓库创建好,clone下来,然后把创建的KKFlutterPod里面除了.git之外的所有文件拷贝到你clone的git仓库中,从而省去关联的关系

KKdeMacBook-Pro:flutter_module kaye$ cd ../KKFlutterPod/
KKdeMacBook-Pro:KKFlutterPod kaye$ git remote add origin https://github.com/yuyangkk/flutterpod.git

修改KKFlutterPod.podsepc文件,在其末尾添加如下:

s.static_framework = true
p = Dir::open("ios_frameworks")
arr = Array.new
arr.push('ios_frameworks/*.framework')
s.ios.vendored_frameworks = arr
podsepc文件.png
3.3 提交Pod到远程
git add .
git commit -m "初始化"
git pull origin master
git push -u origin master

git tag -m "v0.1.0" -a 0.1.0
git push --tags
3.4 使用
pod 'KKFlutterPod', :git => 'https://github.com/yuyangkk/KKFlutterPod.git'

4. 脚本化

每次我们修改了flutter代码,都要重新打包出来Framework,然后打上tag推送到远程,这个过程虽然简单,但是重复性很强,所以考虑写成脚本实现,以免有漏掉某些步骤!
ps:脚本有点不太规范,是一边看语法,一遍写的,所以,有问题还请指出来

4.1. 编译Framework并导出到指定位置
#cd ~/Desktop/remotepod/flutter_module
#获取当前脚本目录
projectURL=$(cd $(dirname $0); pwd)

#echo $projectURL

cd ${projectURL}

#out是指将编译号的文件copy到指定的位置的路径
if [ -z $out ]; then
    out='../KKFlutterPod/KKFlutterPod/ios_frameworks'
fi

echo "准备输出所有文件到目录: $out"

echo "清除所有已编译文件"
#find . -d -name build | xargs rm -rf
flutter clean
rm -rf $out
rm -rf build

flutter packages get

echo "编译flutter"
flutter build ios --debug --no-codesign
#如果是release包,将debug改为release
#flutter build ios --release --no-codesign
echo "编译flutter完成"
mkdir $out

cp -r build/ios/Debug-iphoneos/*/*.framework $out
cp -r .ios/Flutter/App.framework $out
cp -r .ios/Flutter/engine/Flutter.framework $out

#本地Pod库中提交代码,并修改version,打上标签,标签和version保持一致,自增
#上传到pod,请执行脚本push_pod_spec.sh

4.2. 将导出的Framework上传到远程pod仓库
projectURL=$(cd $(dirname $0); pwd)

#echo $projectURL

cd ${projectURL}

cd ../KKFlutterPod

echo "准备更新本地仓库"
git pull

if [ $? -eq 0 ]; then
    echo "拉取远程代码成功"
else
    echo "拉取远程代码失败"
    exit 1
fi

cd ${projectURL}

#修改KKFlutterPod.podspec中s.version          = '0.1.0'

# 读取KKFlutterPod.podspec的第11行
# a=`cat KKFlutterPod.podspec |head -ne12`
# echo $a
a=`sed -n 11p KKFlutterPod.podspec `
# echo $a #s.version = '0.1.4'
# echo "删除最右边.开始向及其左边的数据"
vs=${a##*.}
# echo $vs
oldNum=${vs%%\'*}
# echo '当前版本:'$oldNum
newNum=$((oldNum+1))
# echo '新版本:'$newNum

# echo "替换版本号"
v=0.1.$newNum
version="  s.version          = '$v'"
echo $version
sed -i '' "s/$a/$version/" KKFlutterPod.podspec

# echo "add 并且commit"

# git status
git rm --cached
git add .
git commit -m "修改版本$v"

# echo "添加tag"
git tag -a $v -m "$v"

# echo "连同tag推送到远程"
git push
git push --tags

自此,差不多应该可以跑起来,run一下试试,如果遇见build错误,请查看一下Xcode的bitcode是否打开了,如果打开请关闭。

5. 问题

5.1 undefined symbol:OBJC_CLASS$_GeneratedPluginRegistrant
flutter插件编译错误.png

这个问题,是因为导出的包是不支持模拟器的,因为通过flutter开发环境导出的包,是可以支持模拟器的,所以猜测是我写的脚本有问题,等待后续优化下,目前是只支持真机。

5.2 有关Framework包的大小

通过flutter build ios-framework --output=导出包路径,获取到debug、profile、release三种情况下的包,其中包含的Flutter.framework的包大小分别是95MB、66.8MB、369.8MB,如果用release的包,推送到远程pod库的时候,会超过git的100MB限制,可能会失败,所以我们暂时只用了debug模式下的包,推送到远程。
当然也有可能是我使用的命令有缺陷,如果有什么可以解决release环境下,包过大的问题,请务必留言给我,感谢~~~

错误待续。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容