Flutterのtfliteを組み込んだサンプル（iOS）を動かす

# はじめに

Flutterを一年ぶりくらいに触ってほぼ初心者がmobilenetを使った学習データをつかうために利用した[tflite](https://pub.dev/packages/tflite)の[サンプル](https://github.com/shaqian/flutter_tflite/tree/master/example)を動かす履歴です。
ハマりどころを覚えている限り残しており、抜けがあったらすみません。

# 環境
- Mac(Mojave)
- VSCode(1.43.1)
- Xcode(11.3.1)

iOS開発者プログラムに無料版、有料版での登録が必要です。

## VSCodeで新規プロジェクトをつくる前に

VSCodeでFlutterのプラグインで作る場合
<img width="713" alt="スクリーンショット 2020-03-21 8.01.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/1e0d4e34-4665-5379-1075-0124c831022a.png">

Objective-Cを指定します。swiftを指定だとエラーがでて、動作もおかしいアプリになりました。

そのため設定を変更し、`ユーザー`タブで設定変更してますが、他でswiftを使う場合は`ワークスペース`タブで指定して

<img width="699" alt="スクリーンショット 2020-03-21 8.07.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/bebe861d-d88b-2abd-4e24-f03c02f52b16.png">

## VSCodeで新規プロジェクト

https://github.com/shaqian/flutter_tflite#usage
より

### assetsフォルダを作成
<img width="328" alt="スクリーンショット 2020-03-21 8.22.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/c2e18c7a-b4f7-a211-e52a-6e1ee5252800.png">

### サンプルにあるassetsのファイルを追加
<img width="281" alt="スクリーンショット 2020-03-21 8.25.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/b97a218d-d0df-c2cb-5396-2bcf401e1067.png">

### pubspec.yamlにassets,tfliteの記述を追加

<img width="275" alt="スクリーンショット 2020-03-21 8.27.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/810432c7-276f-49ad-329b-e07ba03e2611.png">
<img width="542" alt="スクリーンショット 2020-03-21 8.27.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/3c50deaa-d29d-b9b8-ddf2-61ad2ed8fcf5.png">

### lib/main.dart

丸コピーです
<img width="726" alt="スクリーンショット 2020-03-21 8.30.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/1c35226b-b3c4-4cf5-0bb0-99e25ca8c7d5.png">

## Xcodeで修正

> flutter build ios

などでpodまわりでのエラーが多発し、その対処をした結果次の手順になりました。

<img width="516" alt="スクリーンショット 2020-03-21 8.42.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/65a03ea1-90a9-1e42-1d7d-b365f981a1ab.png">

Runner.xcworkspaceから起動します。

### Signing & Capabilities

Teamには有料版でも無料版でもiOS開発者プログラムで発行されているものを指定します。
今回は無料版を設定しています（Personal Team）

<img width="697" alt="スクリーンショット 2020-03-21 8.47.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/9fe06996-9003-e737-1816-a07ead801aa9.png">

### General

- Bundle Identifier（任意）
- Deployment target（iOS9以上に変更）

<img width="679" alt="スクリーンショット 2020-03-21 8.47.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12362/c1f01770-fb1f-fe2e-e74f-300ee6243326.png">

# 出力されたエラー

- DEPLOYMENT_TARGETが設定されていない気がして、iOS9に
- Podfileのことを示唆されているとしてUncomment

```
# Uncomment this line to define a global platform for your project
 platform :ios, '9.0'
```

## 1

```
    Resolving dependencies of `Podfile`
      CDN: trunk Relative path: CocoaPods-version.yml exists! Returning local because checking
      is only perfomed in repo update
    [!] CocoaPods could not find compatible versions for pod "tflite":
      In Podfile:
        tflite (from `.symlinks/plugins/tflite/ios`)

    Specs satisfying the `tflite (from `.symlinks/plugins/tflite/ios`)` dependency were found,
    but they required a higher minimum deployment target.
```

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

## 2

```
warning: The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 4.3, but the
    range of supported deployment target versions is 8.0 to 13.2.99. (in target
    'image_picker' from project 'Pods')
```
## その他

https://github.com/shaqian/flutter_tflite#ios
より

> 'tensorflow/lite/kernels/register.h' file not found

CONTRIB_PATHのコメント、アンコメント。これが一番格闘する相手になりました。

# さいごに

サンプルは設定済みのiOSプロジェクトが入っているので、概ねMacでの環境設定ができればうまく行くのですが、VSCodeから作成されたプロジェクトはどうしてもうまく行きませんでした。

VSCodeでProject作成時にポップアップでflutterコマンドのオプションが表示されているのをみてswiftで作成されていることに気づきました。
あとはサンプルの中のプロジェクトとの差分を確認する作業がほとんどです。

自分のコードを書くのはこれからです。