最近読んだもの9 - SwiftUI Localization、StateObject、EnvironmentObject など
- Check localizable strings with the accented pseudolanguage in Xcode
- SwiftUI での文言ローカライズについて
- SwiftUI ではいくつかローカライズ文言用のキー定義の方法がある
- まず
Text()
に渡す string literal は 暗黙的にLocalizedStringKey
になっているのでローカライズされる - また String も String(localized:) で initialize すればそのローカライズされる
- Xcode の scheme 設定で App Language に
Accented PseudoLanguage
という選択肢がある- これを設定するとローカライズされていない文言が分かりやすくなる(ローカライズされている文言は架空の文字列になる)
- まず
- Should we manually call @StateObject initializer
@StateObject
を初期値ではなく、StateObject(wrappedValue:)
を使って初期化するのは大丈夫なのか?という記事- 例えば初期化時に何かパラメータが必要なものなど動的にしたいなど
- 結論 initializer の中でなら問題ないが副作用に注意らしい
- Animated Launch Screen in SwiftUI
- Splash screen と TOP 画面でどのように画面遷移を自動(通信完了と同時に dimiss)させるか
@EnvironmentObject
を使って app top で持っている@StateObject
を inject しているのが勉強になった
- When does a SwiftUI Environment get retained?
- SwiftUI の EnvironmentObject がどのようにメモリ上で持たれているかの記事
- leak している view に
.environmentObject()
するとそれに引きずられて leak するという話
- Running Code Only Once in SwiftUI
- 画面表示時など、一度だけ実行させたいコードがある状況は良く出てくる
- 例えば
.onAppear
だと画面が push/pop すると再度呼ばれてしまう - この記事では
.onFirstAppear
という extension を作って、その内部でFirstAppear
というViewModifier
を用意しそこで flag 管理することで解決していた
- How to check for network connection and present an alert in SwiftUI
NWPathMonitor
を使ったObservableObject
を作り、それを@EnvironmentObject
として application の最上位から inject する方法- 子 View に関しては
@EnvironmentObject
すれば該当のオブジェクトを取得できるので便利
- Share files between your iOS app, Widget and WatchKit extensions
- iOS の sandboxed な環境下で App Extension 間でどのようにファイルを共有するか
- WatchKit Extension だと session という概念を通じてやりとりするのは知らなかった
- Improve App Launch Time 2022 Edition
- 環境変数
DYLD_PRINT_STATISTICS
は動かなくなった - 代わりに Instruments の App Launch テンプレートで計測できるようになった
- Debug ではなく Release ターゲットで計測するようにする
- Test 用の Target テンプレートである
UI Testing Bundle
を使うと起動時間を計測するテストが予め含まれている - Xcode Organizer にある Launch Time metrics も有効
- 環境変数