Slide 1

Slide 1 text

Xcode 15, Swift 5.9で変わる 開発体験 2023 年 6 月 30 日 Recap of WWDC23 Mercari

Slide 2

Slide 2 text

Who am I ● Name ● 佐藤剛士(さとうたけし) ● Company ● Merpay, Inc.(2019/01 ~) ● Role ● Software Engineer (iOS) ● Account ● Twitter: @hatakenokakashi ● Facebook: 佐藤剛士 ● GitHub: SatoTakeshiX

Slide 3

Slide 3 text

WWDC 2023

Slide 4

Slide 4 text

開発体験が大きく変わる 新機能が たくさん発表されました

Slide 5

Slide 5 text

個人的に注目新機能 ● Observation ● Asset Catalogs ● String Catalogs ● Xcode 15 新機能 ○ preview ○ UITest テスト結果

Slide 6

Slide 6 text

Observation

Slide 7

Slide 7 text

Observation ● 値変更を監視する新しい仕組み ● Swift macroで実現 ● KVOやCombineの悪いところが払拭されている ● SwiftUIにもスムーズに導入できる ● デフォルト値が必要

Slide 8

Slide 8 text

既存の仕組み ● KVO ○ 値オブジェクトもオブザーバーもNSObjectを継承しないといけない ○ つまりObjective-Cのランタイムが必要 ○ key pathがあるけどイベントは文字列で指定が必要 ● Combine: ObservableObject ○ CombineはDarwinプラットフォームしか使えない。Linux環境利用不可 ○ SwiftUI以外で使いにくい ○ 監視するプロパティにはそれぞれ@Publishedを付ける必要あり。これは退屈な 作業 ○ Computed propertyの監視は直接監視できない https://github.com/apple/swift-evolution/blob/main/proposals/0395-observability.md

Slide 9

Slide 9 text

Observation

Slide 10

Slide 10 text

SwiftUIで使える新しいproperty wrapper ● @State ● @Environment ● @Bindable

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

使い分け

Slide 15

Slide 15 text

従来のデータ管理のフロー

Slide 16

Slide 16 text

Observationの印象 ● たくさんあったデータ管理のProperty Wrapperがすっきりした ● Combineの依存がなくなってよさそう ● Appleプラットフォーム以外にも利用する布石になりそう? ○ Server Side Swiftなど

Slide 17

Slide 17 text

参考資料 ● Swift evolution: Observation  ○ https://github.com/apple/swift-evolution/blob/main/proposals/0395-observabi lity.md ● Discover Observation in SwiftUI ○ https://developer.apple.com/videos/play/wwdc2023/10149/ ● SwiftUIのデータ管理 Property Wrapper編 ○ https://blog.personal-factory.com/2021/01/23/how-to-use-propertywrapper-in- swiftui/

Slide 18

Slide 18 text

Asset Catalog

Slide 19

Slide 19 text

Asset Catalogs ● Xcode 15からAssetにいれた画像は型安全でコードからアクセスできる ● SwiftGenいらなくなるかも

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

String Catalogs

Slide 22

Slide 22 text

Xcode 15で 公式にローカライズ ツールが誕生

Slide 23

Slide 23 text

String Catalogs ● StringsファイルStringsdictファイルString Catalogsファイルにまとまった ● BuildごとにXcodeがビルドターゲットのコードのLocalizable stringsを集めて String Catalogファイルに集約する ○ 文字列が追加されるとString Catalogsも自動で追加 ○ 文字列が削除されるとString Catalogs上で削除された旨のバッチがつく ● 翻訳状況が一目でわかる ● Stringsdictできた複数形、単数形の場合分けができる ● 変数表示も簡単に表現可能 ● デバイスごとの場合分けも可能。iPhoneとmac💻で出し分け可能

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

String Catalogs ● xliffファイルに出力、入力できる ○ 外部に翻訳依頼をするときに便利 ● String CatalogsはJSON形式。変更差分が見やすい ● コンパイル時にはXcodeがString CatalogsファイルをStrings/Stringsdictファイル に変換 ○ 古いOSでもString Catalogsファイルが利用できる ● SwiftPMでモジュール分けててもカタログ使える ○ defaultlocalizationに言語指定する ○ swift toolを5.9にする ○ パッケージにString Catalogsファイルを追加。localizedという名前にする

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

String Catalogsの印象 ● ビルドごとにXcodeが文字列をリスト化してくれるところがよい ○ Stringsファイルの問題点、翻訳されているかがrun timeじゃないとわからない 問題は解決された ● 翻訳状況が一覧で見れる。言語の追加や変数展開も簡単。よい ● 型安全にはならない ○ VideoではView指定のテキストは直接英語文章を文字列リテラルで渡していた ● SwiftGenを導入するかはチームしだい ○ 両立はできそう(SwiftGenが対応されれば)

Slide 37

Slide 37 text

参考資料 ● Discover String Catalogs ○ https://developer.apple.com/videos/play/wwdc2023/10155/

Slide 38

Slide 38 text

Xcode 15 新機能

Slide 39

Slide 39 text

preview ● macroの力で、SwiftUI, UIKit, AppKitでもpreviewが出せるようになった ● Widgetのタイムラインも表示してくれる

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Testのレポート画面が刷新 ● カバレッジや失敗したテストの結果を一覧でみれるようになった ● UITestの結果がXcode上で確認でき、UITestの実行結果が動画で見れるように なった ○ テストのステップごとに動画で何が起こったか確認ができる

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

参考資料 ● What's new in Xcode ○ https://developer.apple.com/videos/play/wwdc2022/110427/

Slide 47

Slide 47 text

まとめ ● Observation ● Asset Catalogs ● String Catalogs ● Xcode 15 新機能 ○ preview ○ UITest テスト結果