Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
まさかのバグ!SwiftUIプレビューでハマった国際化対応の落とし穴
Search
Sato Takeshi
January 27, 2025
0
270
まさかのバグ!SwiftUIプレビューでハマった国際化対応の落とし穴
potatotips #90 iOS/Android開発Tips共有会
https://potatotips.connpass.com/event/341264/
Sato Takeshi
January 27, 2025
Tweet
Share
More Decks by Sato Takeshi
See All by Sato Takeshi
Swift愛好会 の 思い出
satotakeshi
0
83
Xcode 15, Swift 5.9で変わる開発体験
satotakeshi
3
2.9k
Meet passkeys
satotakeshi
2
340
What's new in Vision
satotakeshi
0
1.6k
Swift Concurrency入門
satotakeshi
11
5.1k
複数端末のつらさを乗り越えてiOS UITestを実行
satotakeshi
1
390
Xcodegenを個人アプリに導入
satotakeshi
3
760
SwiftUIで作る開閉式メニュー
satotakeshi
2
3k
swift-snapshot-testingでVisual Testingを効率化
satotakeshi
0
1.2k
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
Optimizing for Happiness
mojombo
377
70k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Typedesign – Prime Four
hannesfritz
41
2.6k
A Tale of Four Properties
chriscoyier
158
23k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
A better future with KSS
kneath
239
17k
Automating Front-end Workflow
addyosmani
1369
200k
Designing for humans not robots
tammielis
251
25k
Why Our Code Smells
bkeepers
PRO
336
57k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
Transcript
まさかのバグ! SwiftUIプレビューで ハマった国際化対応の落とし穴 2025 年 1 月 28 日 potatotips
#90 iOS/Android開発Tips共有会
Who am I • Name • 佐藤剛士(さとうたけし) • Company •
Merpay, Inc.(2019/01 ~) • Role • Software Engineer (iOS) • Account • Twitter: @hatakenokakashi • Facebook: 佐藤剛士 • GitHub: SatoTakeshiX
XcodeのPreview
Previewのバグ 別モジュールが国際化対応している場合、 コード上でlocale指定をしても、必ず英語?で表示される Xcode 15.4, 16.0, 16.2で確認
個人アプリを 開発してます 風水による 部屋の運勢を判定します
アプリ構成 • UIKit • RxSwift • XcodeGen • Swift Package
Manager • Firebase Crashlytics • 2018年7月リリース • iPhone/iPad対応 • 国際化対応(日本語・英語)
画面一新 UIKitベースのレイアウトから SwiftUIのFormを使った画面に変更 Previewを使う。 Appモジュールで新規画面を作ったとこ ろ、ビルドがタイムアウトを起こした。 モジュールを分けることにする。
モジュールを分ける Tenun StoreService App アプリモジュール 天運画面 UserDefault 天運モデル • 国際化対応
モジュールごとのリソースの読み込み
モジュールごとのリソースの読み込み
問題発生 Previewで .environment(\.locale, .init(identifier: "ja"))を指定するも 英語しか表示されない 英語の翻訳が出てしまう
新規プロジェクトでも再現 • Targetを分けて、分けた方のモジュールでString Catalogを設定 • アプリモジュールから分けたほうのモジュールの文字列を読み込む • 英語しか表示されない • アプリモジュールの文字列は国際化対応される
.environment(\.locale, .init(identifier: "ja")) を指定しているのに、 別モジュールの文字列は英語 アプリの文字列(こんにちわ)は日本語
Xcode Previewのバグが確定
フィードバックアシスタント にバグレポート を出す
問題が対応されるまで、 スキームの言語をプレ ビューしたい言語に変更 することでこの問題を回 避できます。 レポートを出してから一ヶ月後
アプリ側のスキーマの設定を App Language: Japaneseにする 別モジュール側の文字列が日本語になった
まとめ • モジュールを分けるとプレビューの国際化文字列がスキームの設定に従うバグ がある • Xcode 16.2 現在でも再現する • アプリモジュールのスキームで言語設定をするしか現状は解決方法がない
• フィードバックアシスタントは積極的に活用する ◦ 日本語でOK ◦ Appleの人は必ず目を通すそう ◦ 運が良ければ今回のように返信来るはず • Appleさん早く直して!
リンク • ロゴ画像:https://icons8.com/icon/30659/apple-logo