先日、自社アプリのサポートOSを10.0 -> 11.0に変更する対応をしました。
実装するうえで参考になる記事が少なく、手探りでやっていったので、そのときの手順・ハマった点などをメモしておきます
iOS10を切ることにした経緯
もともとチーム内に「管理面や新しい機能を取り入れていくことなどを考えると、古いバージョンを切りたいね」という話がありました。
さくっと調べてみたところ、2019年8月末時点で色々なアプリがiOS10を切り始めていることがわかりました。
【iOS10のサポート切ってるアプリ】
— orimomo / engineer📱 (@orimomo_147cm) August 31, 2019
* Slack
* Yahoo系列アプリ(ヤフオク、Yahoo!カーナビ、Yahoo! MAPなど)
* Kyash
* bitFlyer
* Eight
* SHOWROOM
* Airレジ
* テラー
意外と多いな?🤔
iOS10のサポートを切ると、iPhone5以前のユーザーがアプデできなくなってしまうので、
iPhone5以前を使っているユーザーがどれくらいいるのかを調べたところ、全ユーザーの1%程度でした。
「これはいけそうだね」という話になり、プロジェクトが立ち上がったのがつい3ヶ月くらい前のことです。
実際にやったこと
Xcode11.0使用。
最低動作バージョンの変更
まずはわかりやすいところから。
PROJECTの変更
PROJECTからiOS Deployment Target
を11.0に変更します。
TARGETSの変更
合わせてTARGETSのDeployment Info
のTargetを変更します。
(TARGETSが一つだけのときはPROJECTのバージョンを変えるとTARGETSも合わせて変わってくれるけど、複数あるときは自分でポチポチする必要があるっぽい。)
Extensionなどがある場合は、それらも同じように変更します。
PROJECTとTARGETSのバージョンが揃っていないと、意図しないところでエラーになったりするので注意。
ちなみに、2つの設定の関係性がわからず調べたところ、優先度はTARGETS > PROJECTのようでした。
- 個々のTARGETSの設定は、PROJECTの設定を上書きする
- TARGETSに設定がされていないときには、PROJECTの設定が有効になる
Xcode Overview: Working with Targets
iPhone - Xcode 4 target deployment target vs. project deployment target - Stack Overflow
Podsプロジェクトの変更
もしCocoaPodを使っているなら、Podsプロジェクトにも変更を加える必要があります。
上の項目と同じようにPodsのPROJECTとTARGETSを手動でぽちぽちしていくこともできるとは思いますが、
このStack Overflowのコメントにあるように、Podsプロジェクトは自動生成されるもので、将来上書きされる可能性があるのに手動で編集するのは良くないということで、Podfileの変更だけで完結させるようにしました。
プラットフォーム指定を変更
プラットフォームをiOS11以上として指定します。
platform :ios, '11.0'
こうすることでPROJECTのiOS Deployment Target
が書き換わります。
ビルド設定の追加
次にインストール後の後処理(post_install
フック)の中でTargetを指定します。
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
end
end
end
参考:iOS - Set deployment target for CocoaPods’s pod - Stack Overflow
こうすることでTARGETSのDeployment Info
のTargetが書き換わります。
最後にpod install
してあげればPodsプロジェクトにバージョンの変更が反映されるはずです。
コードの変更
もし下記のようにiOS10.0やiOS11.0を判定して処理している箇所があったら、今後は不要なので削除します。
if #available(iOS 10.0, *) {
// なにかの処理
}
その他ハマったこと
他にもバージョンを変更しないといけない箇所があった
(あまり多くはないケースかもしれませんが)自社アプリにはsubtreeの形で共用リポジトリを組み込んでおり、そちらについてもPROJECTとTARGETSのバージョンを変更する必要がありました。
自分は完全に忘れていて、アーカイブするときに怒られるなどしました…。
App Iconが無いと言われた
Bitriseが下記エラーでFailedしました。
[Transporter Error Output]: ERROR ITMS-90704: “Missing App Icon.
iOS Apps must include a 1024x1024px App Store I con in ONG format. Witchout providing the icon in the Asset Catalog or via iTunes Connect, apps cannot be submitted for App Review or Beta App Review. “
アイコンなんていじってないんだけどな〜と思いつつ、念のためAssetCatalogを見に行くと、たしかにStagingビルド用の1024x1024pxのAppIconが設定されていませんでした。
これまでは[Transporter Warning Output]
で通っていたところなので、今回から[Transporter Error Output]
で失敗するようになったのは、やっぱりサポートOSを11.0に変更したから…?
(こんな感じで予想外のエラーが出たりするので、時間に余裕をもって対応することをおすすめします。)
さいごに
以上の対応で無事リリースをし、大きな混乱もなくプロジェクトを終えることができました
致命的なミスはないかと思う(そう信じたい!)のですが、もし対応漏れなどあれば今後修正していくつもりです。
ここに書いた作業とは別に、会社の上の人の承認を得たり、ユーザーに事前告知しなければいけなかったりして、開発チームだけでなく全社を巻き込む必要があるのは少し大変ではあります。
が、うまく行けば会社にとっても、ユーザーにとっても、エンジニアにとってもメリットがあり、
実際、弊社ではAssetCatalogで色を一元管理できるようになりました(サポートOS11.0以上でないと使えない)!
iOS 11Xcode 9新機能 Asset Catalogで色を定義できるようになりました | Developers.IO
ヤッタネ!
以上、この記事が、古いOSを切りたいと考えている方のお役に立てば幸いです