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
320
まさかのバグ!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
92
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
800
SwiftUIで作る開閉式メニュー
satotakeshi
2
3k
swift-snapshot-testingでVisual Testingを効率化
satotakeshi
0
1.3k
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Thoughts on Productivity
jonyablonski
69
4.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
370
A better future with KSS
kneath
238
17k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
Designing for Performance
lara
610
69k
RailsConf 2023
tenderlove
30
1.2k
The Cult of Friendly URLs
andyhume
79
6.5k
Code Reviewing Like a Champion
maltzj
524
40k
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