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
300
まさかのバグ!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
91
Xcode 15, Swift 5.9で変わる開発体験
satotakeshi
3
3k
Meet passkeys
satotakeshi
2
360
What's new in Vision
satotakeshi
0
1.7k
Swift Concurrency入門
satotakeshi
11
5.2k
複数端末のつらさを乗り越えてiOS UITestを実行
satotakeshi
1
410
Xcodegenを個人アプリに導入
satotakeshi
3
790
SwiftUIで作る開閉式メニュー
satotakeshi
2
3k
swift-snapshot-testingでVisual Testingを効率化
satotakeshi
0
1.3k
Featured
See All Featured
Facilitating Awesome Meetings
lara
54
6.4k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Embracing the Ebb and Flow
colly
86
4.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
GraphQLとの向き合い方2022年版
quramy
49
14k
We Have a Design System, Now What?
morganepeng
53
7.7k
Navigating Team Friction
lara
187
15k
Being A Developer After 40
akosma
90
590k
4 Signs Your Business is Dying
shpigford
184
22k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Into the Great Unknown - MozCon
thekraken
40
1.9k
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