原有iOS项目集成Flutter及遇到的问题

集成

  • 首先我们需要新建一个文件夹比如Prometheum、然后将我们原有的iOS项目也叫Prometheum拖动到Prometheum文件夹下,然后cd到Prometheum文件夹下执行flutter create -t module flutter_prometheum执行完命令会帮我们创建一个flutter_prometheum文件夹,这个文件夹下就存放着flutter相关的东西。创建好之后Prometheumflutter_prometheum文件中的内容如下:注意.git.gitignore文件是后来添加的
    Prometheum.png
  • 然后我们需要修改podfile文件,在podfile中添配置路径flutter_application_path = '../flutter_prometheum/' load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')install_all_flutter_pods(flutter_application_path)
    完全的podfile文件如下:
source 'https://github.com/CocoaPods/Specs.git'

flutter_application_path = '../flutter_prometheum/'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')

platform :ios, '9.0'
use_frameworks!
target 'Prometheum' do
  use_frameworks!

  install_all_flutter_pods(flutter_application_path)

  pod 'Masonry', '1.1.0'
  ...
  pod 'KVOController', '1.2.0'
end
  • 配置好pod文件之后,就可以cd到podfile所在目录下执行pod install了,执行完pod install 之后会在Prometheum/flutter_prometheum/.ios/Flutter/下帮我们生成一个podhelper.rb文件,这是一个ruby文件,主要作用是确保 pluginsFlutter.frameworkApp.framework嵌入到项目中。

  • 然后我们需要在xcode中设置bitcodeNo,因为flutter还不支持bitCode

    image.png

  • 接下来我们还需要添加两行脚本代码,在我们执行完pod install 后,会在我们的build Phases中帮我们新加一个脚本叫Run Flutter Build Script,我们需要将这个脚本挪动到Dependencies下,也就是第二的位置,然后脚本中增加。9月3日我重新创建的工程不加"$FLUTTER_ROOT"/packages/flutter_tools/bin/xcode_backend.sh embed这行脚本也可以,不把脚本放到第二的位置也行,flutter越来越省事了,

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

以上做完,我们原有的iOS项目的flutter环境就配置好了。

遇到的问题

  • 按照以上步骤集成后,我们自己本地是可以运行项目了,但是在上传到远程仓库之后,其他同事拉下来之后运行就报错了。这里是因为我们在使用flutter create -t module集成flutter环境的时候该命令帮我们创建.gitignore文件,但是这个.gitigonre文件当中的内容是不对的,按着这个ignore文件的配置,同事拉下来后很多文件都会找不到,所以需要我们自己去官网获取最新的ignore文件,然后针对ios和android编译产生的.ios目录和.android目录分别添加**/.ios/ 和 **/.android/
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# Visual Studio Code related
.classpath
.project
.settings/
.vscode/

# Flutter repo-specific
/bin/cache/
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/devicelab/ABresults*.json
/dev/docs/doc/
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version
analysis_benchmark.json

# packages file containing multi-root paths
.packages.generated

# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
**/generated_plugin_registrant.dart
.packages
.pub-cache/
.pub/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds

# Android related
# 下面这句是我添加的
**/.android/
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks

# iOS/XCode related
# 下面这句是我添加的
**/.ios/ 
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*

# macOS
**/macos/Flutter/GeneratedPluginRegistrant.swift
**/macos/Flutter/Flutter-Debug.xcconfig
**/macos/Flutter/Flutter-Release.xcconfig
**/macos/Flutter/Flutter-Profile.xcconfig

# Coverage
coverage/

# Symbols
app.*.symbols

# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock

修改好gitignore文件后,我们再更新代码到远程,同事拉下来就可以了。

  • 本以为解决完上面的问题后,同事更新下来就可以用了,结果还是报错,这里我首先让同事执行了一下pod install 然后关闭了bitcode,再在build Phases中添加了脚本,然后还是报错。这里我就奇怪了,报错说是/Users/***/flutter/packages/flutter_tools/bin/xcode_backend.sh: No such file or directory 这里我搞不懂为什么同事报的错为什么是我的绝对路径,我猜想应该是哪里的配置写死了我这边的路径,然后我就在xcode中搜索,但是没有结果。然后我让同事把xcode_backend.sh这个脚本的路径写成他自己本地的路径,结果可以了。但遗憾的是又报了另外一个错误,报错内容显示如下:
    image.png

    这里有显示在执行Run Flutter Build Script时,有个路径还是我的路径,这里我就奇怪了,脚本就三行代码,两行都已经写成同事自己的绝对路径了,难道是source "${SRCROOT}/../flutter_prometheum/.ios/Flutter/flutter_export_environment.sh" 这句脚本也有问题,带着疑惑我,找到了这个文件,打开了它,果然,这个文件里写死了我的路径
    image.png

    然后我让同事把这里的路径写成他自己的,问题得到解决。
    但是我又有个疑问,这个文件配置的每个人的路径都不一样,那以后每个人拉下来代码之后都需要修改一下这里的配置吗?我不知道怎么解决,目前想法是,人员固定后,我就把这个文件配置到ignore文件中去,每个人在自己本地的这个文件中配置自己的路径

这里也把官网的集成注意点记录下来

  • 官方文档
  • 最低支持版本ios 8.0
  • flutter module 和 native 工程可以不在同一个目录下,但是这样多人开发就不方便,因为podfile指定的路径是固定的,不能每个人都分别指定
  • 可以不适用pod方式集成,如果不适用pod集成,每次改动都需要将flutter.framework、 app.framework等手动导入
  • flutter 依赖的第三方库有修改时,native工程需要重新pod install
  • .ios是个隐藏文件有可以能被覆盖
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342