最近読んだもの9 - SwiftUI Localization、StateObject、EnvironmentObject など
• 2 min read
- 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 も有効
- 環境変数