iOS側の問題
複数バージョンをサポートしているアプリにおいて、
最新機能を実装する場合、以下の問題が常々発生します。
- APIの仕様が新バージョンでは異なる
- 旧バージョンのデバイスでは、最新バージョンの機能を呼び出せない
従ってiOS開発では、バージョン毎にコード分けをする必要が度々発生します。
if #available(iOS 15, *) {
print("このコードはiOSバージョンが15以降のデバイスのみ動作する")
}
Androidにおける複数バージョン対応方法
Androidでは、大きく2つのライブラリーに別れます。
- 標準SDK - Android OSにアクセスするためのライブラリー
- Jetpack - 外部ライブラリーとして用意
実は現在主要な機能は、Android OS側ではなく、Jetpack(外部ライブラリー) として配布されています。
つまり最新機能は、アプリ側に組み込んで開発する といったことが可能になります。
この主要な機能には、Androidの根幹を成す Activity
や Fragment
だけでなく、以下のような最新のUIコンポーネントが用意されています。
- Navigation - UINavigationControllerに相当
- Toolbar - マテリアル対応されたツールバー
- RecyclerView - UICollectionViewに相当
- ViewPager2 - UIPageViewController
さらに、iOSのCoreDataに相当するライブラリーも外部ライブラリー(room)として用意されています。
そしてこの Jetpack の大きな特徴の一つとして、低いバージョンでも動作するといった 下位互換性 があります。
(これは前身のSupportライブラリーがその役割であったため)
従ってAndroidでは、アプリが対応する全てのバージョンにおいて、最新機能を提供できるということが可能になっています。
外部ライブラリーは、開発中にも常に更新されるため、不具合などは、OSのアップデートを待たなくても良いというメリットもあります。
まとめ
Androidにおける複数バージョン対応方法
- 最新機能は外部ライブラリーとして用意
- 下位互換性を持っている
- 不具合はOSのアップデートを待つ必要なく、外部ライブラリーのバージョンを上げることで可能
- アプリの容量が大きくなる