fastlane で Crashlytics に dSYM をアップロードしようとしたら invalid byte sequence in UTF-8 でハマった

  lane :upload_latest_dsyms do
    download_dsyms(version: "latest")
    upload_symbols_to_crashlytics
    clean_build_artifacts
  end

を実行したら、こんなエラーが出た

[22:29:22]: -------------------------------------------
[22:29:22]: --- Step: upload_symbols_to_crashlytics ---
[22:29:22]: -------------------------------------------
[22:29:23]: Extracting '/Users/hoge/hoge-1.0.0-201911121041.dSYM.zip'...
[22:29:23]: $ unzip -qo /Users/hoge/hoge-1.0.0-201911121041.dSYM.zip
+------------------+--------------------------------------------------------------------------------------+
|                                              Lane Context                                               |
+------------------+--------------------------------------------------------------------------------------+
| DEFAULT_PLATFORM | ios                                                                                  |
| PLATFORM_NAME    |                                                                                      |
| LANE_NAME        | upload_latest_dsyms                                                                  |
| DSYM_PATHS       | ["/Users/kensuke/hoge/hoge-1.0.0-201911121041  |
|                  | .dSYM.zip"]                                                                          |
+------------------+--------------------------------------------------------------------------------------+
[22:29:23]: invalid byte sequence in UTF-8

どうやら unzip が失敗しているようなので、手元で unzip してみると、確かに unzip でこけている。

$ unzip -qo /Users/kensuke/hoge/hoge-1.0.0-201911121041.dSYM.zip
error:  cannot create bf73f681-9f66-3e36-83e4-f79219bafdf6.dSYM/Contents/Resources/DWARF/��������+��޿����SS
        Illegal byte sequence

issue を探すと、ここに行き着いた。.app ファイル名が悪いらしい。

github.com

.app ファイルを見てみると、 ダメージ計算SS.app となっており、日本語ファイル名になっている。これを英語名に変える必要がある。

.app ファイル名を変える

Build Settings > Packaging > Product Name を確認すると確かに日本語になっている。

これに対処するためには、以下の順序で設定を変える。

  1. display name を英語のにする
    • f:id:star__hoshi:20191113231424p:plain
  2. Info.plist の Bundle display name をアプリ名に置き換える。
    • f:id:star__hoshi:20191113231024p:plain

そうすると、Product Name は英語で指定した Display Name になり、アプリ名は Bundle display name で指定したものにできる。そして Display Name は Bundle display name で指定したものになる。
めちゃくちゃややこしい。

注意

今度アプリ名を変える時、 Display Name を変えると Bundle display name が上書きされてしまうので、 Bundle display name だけを変えるようにしましょう。