概要
Flutterプラグイン作成時に、プラグイン側でiOS向けローカルライブラリを抱きこむ際の設定方法を整理します。
ユースケースとしては、プラグイン利用者が公開済のpodを利用するのではなく会社独自のiOSライブラリ等をプラグインを通してFlutterで利用することを想定しています。
環境
$ flutter --version
Flutter 2.5.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 18116933e7 (3 weeks ago) • 2021-10-15 10:46:35 -0700
Engine • revision d3ea636dc5
Tools • Dart 2.14.4
実施内容
① Frameworkの取り込み
a. iOSプロジェクト直下に利用したいライブラリのframeworkをコピーアンドペースト
- ※frameworkは、exampleのiosプロジェクトを配置しないように注意する。
b. iOSディレクトリ直下の【podspecファイル(上図の場合、plugin_test2.podspec)】を下記の通り修正
- 本記事はこちらを参考にしました。
# Flutter.framework does not contain a i386 slice.
# 【重要】以下xxxの部分は適宜変更してください
s.preserve_paths = 'xxx.framework'
s.xcconfig = { 'OTHER_LDFLAGS' => '-framework xxx' }
s.vendored_frameworks = 'xxx.framework'
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
s.swift_version = '5.0'
s.public_header_files = 'Classes/**/*.h'
② 【SKIP可】必要に応じて、Universal LinksやKeychain Sharingの設定。
③ flutter pub getを実行して、Podディレクトリを生成する
④ example/iosディレクトリへ遷移して、【pod install】を実行する。
- ③④をコマンドとして整理すると下記のようになる
- 既にインストール時はpod updateを実行
$ flutter pub get
$ cd example/ios
$ pod install
⑤ Classes/SwiftPlugin【あなたのプロジェクト名】Plugin.swiftでimportしてライブラリを利用する
import Flutter
import UIKit
import xxx
// 【重要】上や下のxxxの部分やプロジェクト名は適宜変更してください
public class SwiftPluginxxx: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "plugin_test2", binaryMessenger: registrar.messenger())
let instance = SwiftPluginTest2Plugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
// 例としてライブラリのインスタンス生成し、バージョンを取得するメソッドをコールを仮に書くとしたら以下となります。
result(xxx().getVersion())
}
}
⑥ ビルド