はじめに
- iOS開発状況は年々変わってきています。SwiftUI、CombineなどApple純正のフレームワークも進化しています。まず現状の分析を踏まえて、今後の展望についても考えてみました。個人的な思いも入ると思うのでご了承ください
前提
Xcode 12.2
Swift 5.3.1
deployment target iOS13
ライブラリ管理
- Swift Packager Manager
- Cocoa pods
- Carthage
- ライブラリ管理では上記の3つが選択肢にあがります。今後の展望を考えるとApple純正の
Swift Packager Manager
を優先的に使いたいです。 -
Carthage
に関して、Xcode12Workaround、Apple Siliconの対応がうまくいっていないのが現状です。 -
Swift Packager Manager
> Cocoa pods > Carthageの優先度で使って、将来的にはSwift Packager Manager
を寄せていきたいです
- ライブラリ管理では上記の3つが選択肢にあがります。今後の展望を考えるとApple純正の
Architecture
- MVC
- MVVM
- Redux or Flux or TCA
- SwiftUIの実装が増えていくと思いますのでCombineとの組み合わせを考えると
MVVM
がメインのアーキテクチャになると思います。複雑な画面と状態管理が必要なのであれば、Reduxなどのアーキテクチャを採用するのもありだと思います。個人的には仕様に合わせて、画面ごとにアーキテクチャを変えて、メンテしやすくする方針にすることが多いです。
- SwiftUIの実装が増えていくと思いますのでCombineとの組み合わせを考えると
Network
- Alamofire
- URLSession
- 個人的にはAlamofireはオーバスペック感を感じて実装中にほとんどの機能を使わずにいることがほとんどです。さらに大きいライブラリなのでメンテコストが高くなります。個人的にはURLSessionを必要な部分だけ拡張する方が運用しやすいと思っています。
UI
- UIKit
-
SwiftUI
- メインでは
SwiftUI
を使うことになりますがまだ対応できないUIは無理をせずにUIKit
を使うことになると思います。 -
SwiftUI
とUIKit
の共存環境は2年ぐらい続くことを考えて、実装することを頭に入れておくといいと思います。
- メインでは
DataBinding
- Combine
-
RxSwift
- 今後はApple純正のCombineが主流になっていくと思うのでCombineで実装していくことをお勧めします
Image Cache
- kingfisher
-
Nuke
- 画像取得とキャッシュのライブラリとして、パフォーマンスとSwiftらしい設計で書かれたNukeを積極的に使いたいです。
Tracking
-
Firebase
- 様々な機能と連携を考えると
Firebase
一択になります。
- 様々な機能と連携を考えると
Resource
Lint
- SwiftLint
- SwiftFormat
- 追記 apple/swift-format
- Lintは長期的にメンテされている
SwiftLint
、SwiftFormat
が選択肢に入ります。 - Apple製の
swift-format
も注目です
- Lintは長期的にメンテされている
まとめ
- iOS開発状況は年々変わってきています。
- 状況に合わせて、柔軟に対応できる環境、アーキテクチャを選ぶことを個人的にお勧めします。