[iOS] サポートOSをiOS 14以上に変更する作業の内容まとめ

サポートOSをiOS 14以上に変更する作業を実施したので、その内容を紹介します。
2022.11.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。CX事業本部の平屋です。

最近、サポートOSをiOS 14以上に変更する作業を実施したので、その内容を紹介します。

検証環境

  • macOS Monterey 12.6
  • Xcode Version 13.4

(1) サポートOSを14以上にする対応

まずは、サポートOSを14以上に変更しました。

(1-1) アプリ本体

Xcodeプロジェクトの設定(またはターゲットの設定) > 「Build Settings」 > 「iOS Deployment Taeget」の値を「iOS 14.0」に変更します。(キーワードIPHONEOS_DEPLOYMENT_TARGETでフィルタリングすると見つけやすいです)

(1-2) CocoaPods管理下のライブラリ

CocoaPodsを使っている場合は、各ライブラリのサポートOSも変更します。Podfileに以下のスクリプトを追加し、pod installを実行しました。

platform :ios, '14.0'

# ...

post_install do | installer |
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
        end
    end
end

(2) サポートOSを14以上にしたことで発生したwarningの解消

次に、サポートOS変更によって発生したwarningを解消しました。今回の作業で発生したwarningは以下の4件でした。

(2-1) CLLocationManagerの非推奨クラスメソッドを使わないように修正

authorizationStatus()が非推奨になっていたのでauthorizationStatusを使うように修正しました。

// 修正前
let status = CLLocationManager.authorizationStatus()

// 修正後
let status = CLLocationManager().authorizationStatus

(2-2) CLLocationManagerDelegateの非推奨メソッドを使わないように修正

locationManager(_:didChangeAuthorization:)が非推奨になっていたのでlocationManagerDidChangeAuthorization(_:)を使うように修正しました。

// 修正前
extension MOPLocationTrackingUseCase: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        // statusを使う処理
        switch status {
            //...
        }
    }
}

// 修正後
extension MOPLocationTrackingUseCase: CLLocationManagerDelegate {
    func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
        // statusを使う処理
        switch manager.authorizationStatus {
            // ...
        }
    }
}

(2-3) UNNotificationPresentationOptionsの非推奨プロパティを使わないように修正

alertが非推奨になっていたので、list及びbannerを使うように修正しました。

// 修正前
func userNotificationCenter(_ center: UNUserNotificationCenter,
                            willPresent notification: UNNotification,
                            withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler([.sound, .alert])
}

// 修正後
func userNotificationCenter(_ center: UNUserNotificationCenter,
                            willPresent notification: UNNotification,
                            withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    // list及びbannerを使うように修正
    completionHandler([.sound, .banner, .list])
}

(2-4) SKStoreReviewControllerの非推奨クラスメソッドを使わないように修正

以下の記事を参考にして対応しました。

(3) iOS 14以上/未満の条件分岐を削除

最後に、iOS 14以上/未満の条件分岐があれば削除します。

// 修正前
if #available(iOS 14.0, *) {
    // iOS 14以上の場合の処理
    // ...
} else {
    // Fallback on earlier versions
}

// 修正後
// iOS 14以上の場合の処理
// ...