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
430
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
まさかのバグ!SwiftUIプレビューでハマった国際化対応の落とし穴
potatotips #90 iOS/Android開発Tips共有会
https://potatotips.connpass.com/event/341264/
Sato Takeshi
January 27, 2025
More Decks by Sato Takeshi
See All by Sato Takeshi
Swift愛好会 の 思い出
satotakeshi
0
140
Xcode 15, Swift 5.9で変わる開発体験
satotakeshi
3
3.1k
Meet passkeys
satotakeshi
2
430
What's new in Vision
satotakeshi
0
2.4k
Swift Concurrency入門
satotakeshi
11
5.6k
複数端末のつらさを乗り越えてiOS UITestを実行
satotakeshi
1
480
Xcodegenを個人アプリに導入
satotakeshi
3
930
SwiftUIで作る開閉式メニュー
satotakeshi
2
3.3k
swift-snapshot-testingでVisual Testingを効率化
satotakeshi
0
1.6k
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
390
Accessibility Awareness
sabderemane
1
150
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Unsuck your backbone
ammeep
672
58k
For a Future-Friendly Web
brad_frost
183
10k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
What's in a price? How to price your products and services
michaelherold
247
13k
Documentation Writing (for coders)
carmenintech
77
5.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Building the Perfect Custom Keyboard
takai
2
810
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