2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Flutter】プラグイン作成時にiOSローカルのライブラリを参照する方法

Last updated at Posted at 2021-11-08

概要

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())
  }
}

⑥ ビルド

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?