新規に開発する iOS アプリで対応すべき OS のバージョンを検討した結果

# はじめに

今後、新規に開発する iOS アプリで対応すべき OS のバージョンを検討する機会があったので、その結果を共有します。


# 結論

- **現在の最新の OS バージョンとそれの一つ前のメジャーバージョンを対応までを対応するのがコスパがいい（カバー率 90 ％ 以上が見込まれる）**
- **iOS 13,14 以上を対象とするアプリであったとしても iPhone SE（第一世代） の考慮は必要**
- **SwiftUI を採用するならば iOS 13 以上が必要（使う機能によっては iOS 14 以上が必要**


# 検討するのに用いた情報

以下の情報を用いました。

- iOS/Android のシェア率
- iOS（Android）の中 OS のシェア率
- iOS（Android）の中のデバイスのシェア率
- デバイスと対応する iOS の対応表
- デバイスと解像度の対応表

それぞれの情報の引用元は、以下の表の参照先のサイトになります。

| 必要な情報                             | 参照先                                                                     | 
| -------------------------------------- | -------------------------------------------------------------------------- | 
| iOS/Android のシェア率                 | [StatCounter](https://gs.statcounter.com/os-market-share/mobile/japan/)    | 
| iOS（Android）の中 OS のシェア率       | [スマタブ info](http://smatabinfo.jp/os/ios/)                              | 
| iOS（Android）の中のデバイスのシェア率 | [DeviceAtlas](https://deviceatlas.com/blog/most-popular-smartphones#japan)、[mixpanel](https://mixpanel.com/trends/#report/iphone_models/from_date:-365,report_unit:month,to_date:0)| 
| デバイスと対応する iOS の対応表        | [iOSデバイス一覧表](https://qiita.com/takkyun/items/814aa45beee422a5f0c6)  | 
| デバイスと解像度の対応表               | [iOSデバイス一覧表](https://qiita.com/takkyun/items/814aa45beee422a5f0c6)  | 

※ この記事を書いた後に発見したのですが、[mixpanel](https://mixpanel.com/trends/#report/iphone_models/from_date:-365,report_unit:month,to_date:0) というサイトではかなり詳しく、OS、デバイスのシェア率について調査されていました。

また、存在するデータがあるのかはわかりませんが、作るアプリによっては以下のような情報もあると対応するOS/デバイスの選定に役に立つかもしれません。

- 年代別のOS/デバイスのシェア率
- 男女別のOS/デバイスのシェア率

# デバイスと対応する iOS の対応表

あとで考察するのに使用します。

【参照元】
・[iOSデバイス一覧表](https://qiita.com/takkyun/items/814aa45beee422a5f0c6)

| 対応可能な iOS | デバイス                                        | 備考                                                        | 
| -------- | ----------------------------------------------- | ----------------------------------------------------------- | 
| 〜10     | iPhone 5、iPhone 5c                             | -                                                           | 
| 〜11,12  | iPhone 5s、iPhone 6、iPhone 6 Plus              | iOS 11 に対応しているデバイスはすべて iOS 12 に対応している | 
| 〜13,14  | **iPhone SE（第一世代）**、iPhone 6s 以降のデバイス | iOS 13 に対応しているデバイスはすべて iOS 14 に対応している | 

**【悲報】iPhone SE（第一世代）が iOS 14 に対応している件**

# 解像度 と デバイス の対応表

あとで考察するのに使用します。

【参照元】
・[iOSデバイス一覧表](https://qiita.com/takkyun/items/814aa45beee422a5f0c6)

| 解像度      | デバイス                                            | 
| ----------- | --------------------------------------------------- | 
| 640 x 1136  | iPhone SE（第一世代）                               | 
| 750 x 1334  | iPhone 6s、iPhone 7、iPhone 8、iPhone SE (第二世代) | 
| 828 x 1792  | iPhone XR、iPhone 11                                | 
| 1080×2340   | iPhone 12 mini                                      | 
| 1125 x 2436 | iPhone X、iPhone XS、iPhone 11 Pro                  | 
| 1170 x 2532 | iPhone 12、iPhone 12 Pro                            | 
| 1242 x 2208 | iPhone 6s Plus、iPhone 7 Plus、iPhone 8 Plus        | 
| 1242 x 2688 | iPhone XS Max、iPhone 11 Pro Max                    | 
| 1284 x 2778 | iPhone 12 Pro Max                                   | 


# どのバージョンまで対応するべき？

## すでにリリースされているアプリの調査

まず、2020年11月現在、リリースされているアプリの対応しているアプリを調べてみました。

iPhone で「App Store」>「適当なアプリ選択」>「情報」>「互換性 - この iPhone に対応」から対応している OS を確認できます。

（YouTube アプリの例）
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259125/c49e40f4-c0e3-6278-fb8c-b37e8f3ed1a4.jpeg width=40%>

10 分ほど個人的によく使っているアプリの対応されているバージョンを調べてみた結果が以下になります。（2020年11月調べ）
※感覚のデータになります

| バージョン      | 対応されているアプリ           | 
| --------------- | ------------------------------ | 
| iOS 9 以上対応  | 超安定思考のアプリ（金融系）   | 
| iOS 10 以上対応 | 安定思考のアプリ（クーポン系） | 
| iOS 11 以上対応 | 普通のアプリ（一般系）         | 
| iOS 12 以上対応 | 攻めてるアプリ（SNS系）        | 
| iOS 13 以上対応 | 見つかりませんでした。         | 

数の多い順にならべると `iOS 11 以上対応` > `iOS 10 以上対応` > `iOS 12 以上対応` = `iOS 9 以上対応` という感覚でした。

初期リリースの時期によるのでしょうけど、思ったより `iOS 12 以上対応` というアプリはリリースされていないみたいです。


## iPhone SE （第一世代） について

iPhone SE（第一世代）が iOS 13,14 まで対応していることが確定しており、iOS 13,14 対応のアプリでは解像度 640 x 1136 のデバイスサイズでの動きを考慮しなければなりません。

解像度の低い端末では1行に入りきる文字数が少ないため、iPhone SE（第一世代） だけで文字が入りきらない場合、(1) 文末を「...」にする or (2) 改行をする or (3) 文字サイズを変更する など、開発時に考慮が必要になります。

ちなみに解像度 640 x 1136 で iOS 13,14 に対応しているのは iPhone SE（第一世代）のみです。

[DeviceAtlas調べ](https://deviceatlas.com/blog/most-popular-smartphones#japan)では日本での 2019 年の iPhone SE（第一世代）のシェア率は 3.54%（前年比 -0.73%）であり、2020 年ではこれよりも低いことが予想されます。
（※ このシェア率は Android 含めた全端末のシェア率）

**もし、今後、iPhone SE（第一世代）のシェア率が極端に低くなれば、iOS 14 対応のアプリでも iPhone SE（第一世代）での挙動をどこまで保証するのかは検討する必要があると思います。**

iPhone SE（第一世代）のデバイスシェア率に今後も注意が必要ですね。

## 今後、新規に開発するアプリで対応すべきバージョンは？

結局のところ、新規に開発するアプリで対応すべきバージョンは多くの場合では目指すべきカバー率に依存すると思われます。

おおよそ、目指すべきカバー率と OS のバージョンの対応は以下のようになります。


| カバー率 | 対応する OS バージョン         | 
| -------- | ------------------------------ | 
| 90％以上 | 1つ前のメジャーバージョン以上 | 
| 95％以上 | 2つ前のメジャーバージョン以上 | 
| 99％以上 | それ以上                       | 

例えば iOS14 がリリース（2020年9月17日）されて約 2 ヶ月立った時点で、iOS 13 以上に対応すれば約 93 %、iOS 12 以上では約 98 % のユーザーに対応できます。([2020/09/30 時点でのスマタブ info 調べ](http://smatabinfo.jp/os/ios/) )

ちなみに、iOS 11 以上対応しても救えるユーザーは 1.2% ほどしかいないようです。

また、iOS も1年に1度のペースでアップデートするので、早めに低いバージョンの OS を切っておかないと、どんどん開発対象の OS が増えていき、開発・運用の負荷がどんどん増えていきます。

古い OS 依存のバグの対応や、古い OS のテスト用の端末の維持や、古い OS でのテストのコストは馬鹿にならないです。

極端なイメージですが、対応する OS バージョンが1つ増えると、テストと開発のメンバーがそれぞれ 0.5〜1 人増えるイメージです。

**もろもろ考えると、現在の最新のOSバージョンとそれの一つ前のメジャーバージョンを対応するのがコスパがいいのではないかと思います。**

意外にも、日本のユーザーは頻繁に iOS のアップデートをしているみたいです。

# 技術的な観点

**iOS 13 以上対応であれば SwiftUI というあたらしい iOS アプリ開発のフレームワークが使用できます。**

従来の UIKit でのフレームワークより少ないコード量でアプリを開発できるため、iOS 13 以上を対象としたアプリであるならば、SwiftUI を採用することをお勧めします。

また、iOS、SwiftUI も日々進化しており、グリッドデザインを簡単に実装できる LazyVGrid / LazyHGrid が新たに追加され、それは iOS 14 以上でしか使えなかったりするので、アプリのコアとなる機能がその OS のバージョンでの SwiftUI で実装できるかどうかはあらかじめ調べた方がいいかもしれません。

# まとめ

- **現在の最新の OS バージョンとそれの一つ前のメジャーバージョンを対応までを対応するのがコスパがいい**
- **iOS 13,14 以上を対象とするアプリであったとしても iPhone SE（第一世代） の考慮は必要**
- **SwiftUI を採用するならば iOS 13 以上**