まさかのバグ!SwiftUIプレビューでハマった国際化対応の落とし穴
by
Sato Takeshi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
まさかのバグ! SwiftUIプレビューで ハマった国際化対応の落とし穴 2025 年 1 月 28 日 potatotips #90 iOS/Android開発Tips共有会
Slide 2
Slide 2 text
Who am I ● Name ● 佐藤剛士(さとうたけし) ● Company ● Merpay, Inc.(2019/01 ~) ● Role ● Software Engineer (iOS) ● Account ● Twitter: @hatakenokakashi ● Facebook: 佐藤剛士 ● GitHub: SatoTakeshiX
Slide 3
Slide 3 text
XcodeのPreview
Slide 4
Slide 4 text
Previewのバグ 別モジュールが国際化対応している場合、 コード上でlocale指定をしても、必ず英語?で表示される Xcode 15.4, 16.0, 16.2で確認
Slide 5
Slide 5 text
個人アプリを 開発してます 風水による 部屋の運勢を判定します
Slide 6
Slide 6 text
アプリ構成 ● UIKit ● RxSwift ● XcodeGen ● Swift Package Manager ● Firebase Crashlytics ● 2018年7月リリース ● iPhone/iPad対応 ● 国際化対応(日本語・英語)
Slide 7
Slide 7 text
画面一新 UIKitベースのレイアウトから SwiftUIのFormを使った画面に変更 Previewを使う。 Appモジュールで新規画面を作ったとこ ろ、ビルドがタイムアウトを起こした。 モジュールを分けることにする。
Slide 8
Slide 8 text
モジュールを分ける Tenun StoreService App アプリモジュール 天運画面 UserDefault 天運モデル ● 国際化対応
Slide 9
Slide 9 text
モジュールごとのリソースの読み込み
Slide 10
Slide 10 text
モジュールごとのリソースの読み込み
Slide 11
Slide 11 text
問題発生 Previewで .environment(\.locale, .init(identifier: "ja"))を指定するも 英語しか表示されない 英語の翻訳が出てしまう
Slide 12
Slide 12 text
新規プロジェクトでも再現 ● Targetを分けて、分けた方のモジュールでString Catalogを設定 ● アプリモジュールから分けたほうのモジュールの文字列を読み込む ● 英語しか表示されない ● アプリモジュールの文字列は国際化対応される .environment(\.locale, .init(identifier: "ja")) を指定しているのに、 別モジュールの文字列は英語 アプリの文字列(こんにちわ)は日本語
Slide 13
Slide 13 text
Xcode Previewのバグが確定
Slide 14
Slide 14 text
フィードバックアシスタント にバグレポート を出す
Slide 15
Slide 15 text
問題が対応されるまで、 スキームの言語をプレ ビューしたい言語に変更 することでこの問題を回 避できます。 レポートを出してから一ヶ月後
Slide 16
Slide 16 text
アプリ側のスキーマの設定を App Language: Japaneseにする 別モジュール側の文字列が日本語になった
Slide 17
Slide 17 text
まとめ ● モジュールを分けるとプレビューの国際化文字列がスキームの設定に従うバグ がある ● Xcode 16.2 現在でも再現する ● アプリモジュールのスキームで言語設定をするしか現状は解決方法がない ● フィードバックアシスタントは積極的に活用する ○ 日本語でOK ○ Appleの人は必ず目を通すそう ○ 運が良ければ今回のように返信来るはず ● Appleさん早く直して!
Slide 18
Slide 18 text
リンク ● ロゴ画像:https://icons8.com/icon/30659/apple-logo