🥶
Flutter FreezedでIconData定義した後に、flutter build ipa でエラー
概要
FreezedでIconDataを使えるよう対応(カスタムJsonConverter)し、シミュレータ起動して開発を続けていた。
TestFlight配布するため、ipa作成コマンド
flutter build ipa --verbose
を叩くと、エラーが発生。
"Failed to build iOS app" で、処理が止まってしまう状態になった。
Running Xcode build... (completed in 45.9s)
Xcode archive done.
...
...
Failed to build iOS app
その後、
flutter build ipa --verbose
を
flutter build ipa
で実行して、エラー原因のログを発見。
(※--verboseオプションをつけていたため、詳細ログで埋め尽くされ、「↓赤文字のエラーログ」が見つけられず、原因把握するまでに時間がかかった。。。)
Error (Xcode): This application cannot tree shake icons fonts. It has non-constant instances of IconData at the following locations:
Encountered error while archiving for device.
- AI回答
This application cannot tree shake icon fonts というエラーは、Flutterプロジェクト内で非定数のIconDataインスタンスが存在するため、Flutterのアイコンフォントツリーシェイク機能が正しく動作しないことを示しています。この問題がビルド失敗の原因となります。
対応
Freezedのモデル側でそもそも、IconDataを持つ必要がなかったため、Freezedの定義から「IconData」を削除して対応。
無事、TestFligthへのアップロード完了!
IconDataのJsonConverterの箇所
/// - HogeData
class HogeData with _$HogeData {
const factory HogeData({
required String hogeString,
// NOTE: IconDataを、Json変換するよう対応すると、シミュレータでは動くが、「flutter build ipa(ipa作成時)」で、エラーとなるため、コメントアウト
// @IconDataConverter() IconData? iconData,
}) = HogeData;
factory HogeData.fromJson(Map<String, dynamic> json) =>
_$HogeDataFromJson(json);
}
/// - Custom JsonConverter
class IconDataConverter implements JsonConverter<IconData, int> {
const IconDataConverter();
IconData fromJson(int json) => IconData(json, fontFamily: 'MaterialIcons');
int toJson(IconData icon) => icon.codePoint;
}
Discussion