Flutter build ios产物分析

本文分析了Flutter构建iOS应用的产物,包括Flutter工程结构、.iOS/Config、.iOS/Flutter目录下的文件以及.pods目录的组件。主要内容涉及Flutter.xcconfig、App.framework、podhelper.rb等关键文件的作用,阐述了Flutter插件的依赖管理和集成方式。
摘要由CSDN通过智能技术生成

人总要爱着什么,活着才有意义。

前言

如果你是Android转iOS,或者是想开发Flutter插件,可以看看我的文章:iOS 入门开发踩坑实录。我就是一个Android开发,由于开发插件需要,学了部分的iOS开发的东西。

  • Flutter提供的官方接入方案:Add Flutter to existing apps,值得一提的是官方在Flutter 1.12上提供了Android Studio直接接入Flutter的方案。

踩坑的本机环境

注意对比下我的环境和你的环境是否一样,有些问题在Flutter的新版本中已经被修复了。

➜  app git:(master) ✗ flutter --version
Flutter 1.9.1+hotfix.6 • channel stable • https://github.com/flutter/flutter.git
Framework • revision cc949a8e8b (3 weeks ago) • 2019-09-27 15:04:59 -0700
Engine • revision b863200c37
Tools • Dart 2.5.0

Flutter doctor -v

➜  app git:(master) ✗ flutter doctor -v                  
[] Flutter (Channel stable, v1.9.1+hotfix.4, on Mac OS X 10.15 19A583, locale en-CN)
    • Flutter version 1.9.1+hotfix.4 at /Users/.../flutter
    • Framework revision cc949a8e8b (3 weeks ago), 2019-09-27 15:04:59 -0700
    • Engine revision b863200c37
    • Dart version 2.5.0

 
[] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at /Users/notzuonotdied/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 29.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
    • All Android licenses accepted.

[] Xcode - develop for iOS and macOS (Xcode 11.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.1, Build version 11A1027
    • CocoaPods version 1.8.3

[] Android Studio (version 3.5)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 40.1.2
    • Dart plugin version 191.8423
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[!] IntelliJ IDEA Ultimate Edition (version 2019.2.3)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
    • For information about installing plugins, see
      https://flutter.dev/intellij-setup/#installing-the-plugins

[] VS Code (version 1.39.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.5.1

[] Connected device (1 available)
    • iPhone 11 Pro Max • 61AA9D21-B994-4FC5-9164-757EABF90190 • ios • com.apple.CoreSimulator.SimRuntime.iOS-13-1 (simulator)

! Doctor found issues in 1 category.

分析Flutter工程

本章节用于探讨Flutter编译产物以及其集成方式。

工程结构

首先,先看看混编Flutter的目录结构,主要包含了三个部分:

  • android:Android Native工程
  • iOS:iOS Native工程
  • flutter_module:Flutter Module工程

在这里插入图片描述

➜  temp tree -L 2
.
├── Android								# Android工程
├── flutter_module
│   ├── README.md
│   ├── flutter_module.iml
│   ├── flutter_module_android.iml
│   ├── lib								# Flutter源码目录
│   ├── pubspec.yaml					# Flutter依赖
│   └── test
└── iOS									# iOS工程
    ├── Podfile
    ├── Podfile.lock
    ├── Pods
    ├── iOS
    ├── iOS.xcodeproj
    └── iOS.xcworkspace

9 directories, 9 files

Flutter build ios

看看编译之后会生成什么产物?

先看看flutter_module目录的层级结构:

➜  flutter_module tree
.
├── README.md
├── flutter_module.iml
├── flutter_module_android.iml
├── lib									# Flutter源码
│   └── main.dart	
├── pubspec.lock
├── pubspec.yaml						# 依赖
└── test
    └── widget_test.dart

2 directories, 10 files

当我们执行Flutter build ios会发生什么?

➜  flutter_module flutter build ios
Building com.wtfexample.flutterModule for device (ios-release)...
Found saved certificate choice "Apple Development: xxxxxxxx@gmail.com (xxxxxxxx)". To clear, use
"flutter config".
Signing iOS app for device deployment using developer identity: "Apple Development:
xxxxxxxx@gmail.com (xxxxxxxx)"
Running Xcode build...

 ├─Building Dart code...                                    20.0s
 ├─Generating dSYM file...                                   0.3s
 ├─Stripping debug symbols...                                0.0s
 ├─Assembling Flutter resources...                           0.7s
 └─Compiling, linking and signing...                         3.9s
Xcode build done.                                           29.6s
Built /Users/.../flutter_module/build/ios/iphoneos/Runner.app.

让我们来看看目录结构:

➜  flutter_module tree -da -L 2
.
├── .android				# Android编译产物
│   ├── Flutter
│   ├── app
│   └── gradle
├── .idea
│   └── libraries
├── .ios					# iOS编译产物
│   ├── Config
│   ├── Flutter
│   ├── Frameworks
│   ├── Pods
│   ├── Runner
│   ├── Runner.xcodeproj
│   └── Runner.xcworkspace
├── build
│   ├── aot
│   ├── dSYMs.noindex
│   └── ios
├── lib
└── test

- 主要是多了以下的部分:

​```shell
.
├── .android				# Android编译产物
├── .ios					# iOS编译产物
├── build
│   ├── aot
│   ├── dSYMs.noindex
│   └── ios

这些也是我们要分析的内容啦,╮(╯▽╰)╭

.iOS/Config

➜  .ios tree Config
Config
├── Debug.xcconfig
├── Flutter.xcconfig
└── Release.xcconfig

0 directories, 3 files

➜  Config cat Debug.xcconfig
#include "Flutter.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
➜  Config cat Release.xcconfig
#include "Flutter.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
➜  Config cat Flutter.xcconfig
#include "../Flutter/Generated.xcconfig"
ENABLE_BITCODE=NO				# 目前Flutter不支持BitCode模式,默认关闭

Flutter.xcconfig

值得一提的是Flutter.xcconfig依赖了Flutter/Generated.xcconfig,这个文件详见下面章节的分析。Flutter/Generated.xcconfig配置了一些Flutter Module工程的关键环境变量。

.iOS/Flutter

➜  Flutter tree -da -L 2
.
├── .symlinks # 这是Flutter Module依赖的插件的路径,都是使用了Soft Link
│   ├── amap_location -> /Users/.../amap_location-0.2.0
│   ├── flutter_alipay -> /Users/.../flutter_alipay-0.1.2
│   ├── flutter_amap -> /Users/.../flutter_amap-0.0.1
│   ├── flutter_easy_nfc -> /Users/.../flutter_easy_nfc-0.0.1
│   ├── flutter_statusbar -> /Users/.../flutter_statusbar-0.0.1
│   ├── flutter_wechat_ble -> /Users/.../flutter_wechat_ble-0.1.4
│   ├── linker -> /Users/.../linker-0.0.2
│   └── mmkv_flutter -> /Users/.../mmkv_flutter-1.0.10
├── App.framework		# Flutter业务代码
│   └── flutter_assets 	# Flutter依赖的静态资源,如字体、图片等。
├── FlutterPluginRegistrant
│   └── Classes
└── engine # Flutter引擎,默认从$FlutterHome/bin/cache/artifacts复制一份。
    └── Flutter.framework

15 directories

Flutter/.symlinks

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值