65
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

iOS10のサポートを切るときにやったこと

Last updated at Posted at 2019-11-06

先日、自社アプリのサポートOSを10.0 -> 11.0に変更する対応をしました。
実装するうえで参考になる記事が少なく、手探りでやっていったので、そのときの手順・ハマった点などをメモしておきます:pencil:

iOS10を切ることにした経緯

もともとチーム内に「管理面や新しい機能を取り入れていくことなどを考えると、古いバージョンを切りたいね」という話がありました。
さくっと調べてみたところ、2019年8月末時点で色々なアプリがiOS10を切り始めていることがわかりました。

iOS10のサポートを切ると、iPhone5以前のユーザーがアプデできなくなってしまうので、
iPhone5以前を使っているユーザーがどれくらいいるのかを調べたところ、全ユーザーの1%程度でした。
「これはいけそうだね:thumbsup:」という話になり、プロジェクトが立ち上がったのがつい3ヶ月くらい前のことです。

実際にやったこと

Xcode11.0使用。

最低動作バージョンの変更

まずはわかりやすいところから。

PROJECTの変更

PROJECTからiOS Deployment Targetを11.0に変更します。
スクリーンショット 2019-11-04 0.20.21.png

TARGETSの変更

合わせてTARGETSのDeployment InfoのTargetを変更します。
(TARGETSが一つだけのときはPROJECTのバージョンを変えるとTARGETSも合わせて変わってくれるけど、複数あるときは自分でポチポチする必要があるっぽい。)
Extensionなどがある場合は、それらも同じように変更します。
PROJECTとTARGETSのバージョンが揃っていないと、意図しないところでエラーになったりするので注意。
スクリーンショット 2019-11-04 0.20.37.png
ちなみに、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プロジェクトにも変更を加える必要があります。
スクリーンショット 2019-11-05 20.05.10.png
上の項目と同じように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に変更したから…?:thinking:

(こんな感じで予想外のエラーが出たりするので、時間に余裕をもって対応することをおすすめします。)

さいごに

以上の対応で無事リリースをし、大きな混乱もなくプロジェクトを終えることができました:tada:
致命的なミスはないかと思う(そう信じたい!)のですが、もし対応漏れなどあれば今後修正していくつもりです。

ここに書いた作業とは別に、会社の上の人の承認を得たり、ユーザーに事前告知しなければいけなかったりして、開発チームだけでなく全社を巻き込む必要があるのは少し大変ではあります。
が、うまく行けば会社にとっても、ユーザーにとっても、エンジニアにとってもメリットがあり、
実際、弊社ではAssetCatalogで色を一元管理できるようになりました(サポートOS11.0以上でないと使えない)!
iOS 11Xcode 9新機能 Asset Catalogで色を定義できるようになりました | Developers.IO

ヤッタネ!
以上、この記事が、古いOSを切りたいと考えている方のお役に立てば幸いです:grin:

65
45
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?