はじめに
想定読者: SwiftUI / Combine を メイン にしたネイティブアプリ開発を行っている(予定な)方
執筆環境:Xcode 12.4 / macOS Big Sur 11.2.3
この記事は 寄付を身近にする dim. の開発を行う中での学びを共有する目的で執筆しております。
TechCrunch さんにも取り上げていただきましたので御覧ください。
前提
- SwiftUI がメインで UIKit は極力使わない
- デザイナーさんのデザインが実現できていること
- Combine を利用し、 RxSwift などは利用しない
1. FirebaseSDK を Combine で制御
rever-ai/CombineFirebase が非常に参考になります。
主観にはなりますが、 非常にシンプルなライブラリ になっておりますので、ライブラリとして導入するのではなく必要な部分を参考に 独自実装 する方法でも良いかと思います。
Combine とは直接的な関係のないものになりますが、追加でご紹介するのが alickbass/CodableFirebase です。
レスポンスを Codable で扱いたい場合に便利です。
2. UIKit の要素にアクセスしたいと思ったら
SwiftUI はこの記事執筆段階でまだ未熟です。
例えば「UIKit.UITableView.separatorStyle を .none にするみたいなことが SwiftUI.List でもしたいなぁ」などと1度は思って検索したことがあるはずです。そんな希望を叶えてくれるのが SwiftUI-Introspect/SwiftUI-Introspect です。
先程の例であれば以下のように実装可能になります。
List {
Text("Item 1")
Text("Item 2")
}
.introspectTableView { tableView in
tableView.separatorStyle = .none
}
SwiftUI から利用できる UIKit 風 UI ライブラリなどを都度導入するよりも汎用的な SwiftUI-Introspect を利用するほうが 依存が1つで済む ので 外部依存の最小化 の点でもオススメできるのではと考えています。
また、処理が分散しにくいので、将来的に SwiftUI が成長したとき にも対応スピードが高まるのではないかと考えています。
3. Alamofire を Combine で制御(近い未来)
Alamofire に依存する形で作成された Moya をご存知でしょうか。
このライブラリが遂に Combine に対応しようとしています。 Combine 発表後、 issue で多くの議論がされていましたが、 Alpha 段階まで来ているようです。正式リリースが楽しみですね!
さいごに
最後までご覧いただきありがとうございます。
外部ライブラリとの依存は最小限にするためにも 慎重な判断 が必要です。参考にしていただけますと幸いです。
SwiftUI で FirebaseSDK を利用する場合、まだ未対応な機能も多く存在します。
こちらも参考にどうぞ
SwiftUI ベースのプロジェクトでの FCM 実装注意点