🥶

Flutter FreezedでIconData定義した後に、flutter build ipa でエラー

2024/09/03に公開

概要

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