Flutter build for iOS ~SDKは更新すべし~
はじめに
Cammelでは4月からFlutterを用いた新プロダクトを開発しています。 クロスプラットフォームでReactNativeかFlutterとなったときに、どちらとも誰も経験がなかったのでルーレットで決まりました。
コロナの影響でフルリモートです。
👨💻 ))))) (((((👨💻
私はMacユーザなので、今回はiOSビルドで困ったことについて書きます。
Simulatorと実機
Simulatorビルド後に実機ビルド(逆もしかり)をしようとすると、 以下のようなエラーが出ていました。
error: Building for iOS, but the linked and embedded framework 'App.framework' was built for iOS Simulator. (in target 'Runner' from project 'Runner')
先に結論からいいます。
SDKは更新しましょう!
以下のリンクにもあるように、v1.15.4以降のFlutterプロジェクトであれば、切り替えてビルドをしてもエラーは出なくなっています。 Xcode 11.4 Support - Flutter
何をしたか
ここからは、私が行った手順に沿って書いていきます。
前振り
私たちは開発スタート時Flutter SDKのv1.12.13.hotfix+9を使っていました。
Flutter SDKのアップグレード
flutter upgrade
でSDKを更新します。
Flutter is already up to date on channel stable Flutter 1.17.5 • channel stable • https://github.com/flutter/flutter.git Framework • revision 8af6b2f038 (11 days ago) • 2020-06-30 12:53:55 -0700 Engine • revision ee76268252 Tools • Dart 2.8.4
現在の最新は
でした。
エラーの確認
上記の公式のドキュメントや以下のIssueにもあるように、v1.15.4以前のFlutter SDKではSimulatorと実機を切り替えたとき私と同じようにエラーが出ていたようです。 https://github.com/flutter/flutter/issues/50568
App.framework、Flutter.frameworkを一度取り除く
公式ドキュメントの手順にそって、App.framework
とFlutter.framework
を削除します。
コマンドラインから
rm -rf ios/Flutter/App.framework rm -rf ios/Flutter/Flutter.framework
コマンドラインから削除した場合はios/Runner.xcworkspace
でもReferenceが消えているか確認
Xcodeから
ドキュメント通りの設定がされているか念のため確認
Simulatorにビルド
私はAndroid Studioを使っているので、Android Studioでビルドしました。
Embed Frameworksの確認
再度ios/Runner.xcworkspace
を開き以下のようにチェックをつける
実機にビルド->Simulatorにビルド-> and so on ...
この後、AndroidStudioに戻り、 iOS実機 -> Simulator -> iOS実機の順で3回ビルドしました。
これで実機からSimulator、Simulatorから実機での切り替えを確認できました。
まとめ
実は開発が始まって1ヶ月がたったぐらいでSDK更新の話は出ました。 (そのときはv1.17.1 or v1.12.13+hotfix.9でした)
しかし、そのときの最新(v1.17.1)ではなぜかiOSで画面遷移後にWidgetが一部表示されないという問題があり、最新SDKに合わせて実装し直すか、チームで統一した現在のバージョン(v1.12.13+hotfix.9)の実装のままでいくかで議論しました。
そのときは開発序盤だったので機能追加を優先して手戻りをせずにv1.12.13+hotfix.9で統一することとしました。
今回ビルドで問題が起きたことでSDKはあげることになりましたが、 v1.17.1時点でのチームの結論はそれはそれでよかったのかなと思います。
何はともあれ、スムーズにアップグレードに移行できてよかったです👍 (現在の実装ではv1.17.1時点でのWidgetのバグも解消されていた...!!)
やったこと
わかったこと
- SDKは積極的に更新していこう!!
次やりたいこと
- そろそろ右上のDebugラベル取りたい