Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
まさかのバグ!SwiftUIプレビューでハマった国際化対応の落とし穴
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Sato Takeshi
January 27, 2025
460
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
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
590
Swift愛好会 の 思い出
satotakeshi
0
150
Xcode 15, Swift 5.9で変わる開発体験
satotakeshi
3
3.1k
Meet passkeys
satotakeshi
2
450
What's new in Vision
satotakeshi
0
2.5k
Swift Concurrency入門
satotakeshi
11
5.7k
複数端末のつらさを乗り越えてiOS UITestを実行
satotakeshi
1
490
Xcodegenを個人アプリに導入
satotakeshi
3
960
SwiftUIで作る開閉式メニュー
satotakeshi
2
3.3k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Facilitating Awesome Meetings
lara
57
7.2k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
500
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Un-Boring Meetings
codingconduct
0
460
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
How to Talk to Developers About Accessibility
jct
2
590
New Earth Scene 8
popppiees
4
2.7k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.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