Xcode11 で iOS 12 以前をターゲッドにしてビルドする方法
2019年9月にリリースされた Xcode11 では、新しい iOS 13 に対応しています。
新しい環境向けにアプリケーションを開発するときには新機能満載で実装するのも良いですが、ときには以前のバージョンの iOS 向けにもアプリケーションを開発する必要がある場合もあるでしょう。
ここでは Xcode11 で iOS12.x 以前の環境向けにアプリケーションを開発するときの初期設定について説明します。
プロジェクトを作成してすぐ後にする作業として説明しています。既に記述したコードがある場合は、単純に当てはまりません。 書いたコードを誤って消さないように注意してください。
Xcode11 でターゲットを 12.x にするとビルドできない!
Xcode11 で iOS プロジェクトを作成すると、デフォルトの開発ターゲットは iOS13 になっています。
開発ターゲットを確認するには、プロジェクト・ナビゲータを開き、プロジェクトツリーの一番上のプロジェクトを選択しします。 右側のペインで General の中の Develoyment Info 内の Target から確認できます。
iOS 13 より前のバージョン、例えば iOS 12.4 の環境にインストール可能な (デプロイ可能な) アプリケーションを作成するには、ここで 12.4 を選択します。
iPhone 6 以前のバージョンの iPhone は iOS 13 に対応していません。
このままビルドしようとしても、たくさんエラーがでてしまい、ビルドは失敗します。
iOS 12.4 に対応するにはどうしたらよいでしょうか。
ターゲットの変更とビルド方法
2-1. ビルドの前提 - Storyboard を使う
まず iOS 12 以前のバージョン向けにビルドするための前提は、SwiftUI を使わないということです。
Xcode 11 から UI の開発に SwiftUI が利用できるようになりましたが、そもそも SwiftUI 自体が iOS13+ 向けとなっています。 このため、SwiftUI ではなく Storyboard を使います。
Xcode の新規プロジェクトの作成ウィザードでは、User Interface の設定は Storyboard を選択しましょう。
プロジェクトの設定の Deployment Info にて、Target の設定で 12.4 を選択します。
2-2. @available 属性の設定による方法
この状態でビルドすると、たくさんエラーが発生してしまいビルドできません。
ここでよく見ると、ワーニング中に @available 属性を設定するように促されています。このサジェッションに従って、@available 属性を設定しましょう。
イシュー・ナビゲータ内のエラー項目をクリックすると、エラー発生箇所にナビゲートされます。
ポップアップ内に表示されている
をクリックすると、自動的に @available 属性が設定されます。もしポップアップが表示されていない場合は、赤い丸のアイコンをクリックすると、ポップアップが開きます。
これで iOS 13 以降の場合に使える機能であることがマークされます。
この作業を、イシュー・ナビゲータに表示されたエラー項目それぞれに対して行います。ひたすら
を押していくだけなので簡単です。さて、エラーがなくなったところで、アプリケーションを起動してみましょう。実はこの状態ではまだ、実行時にエラーが発生してしまいます。
ファイル AppDelegate.swift を開いて、次の行を追加します。
var window: UIWindow?
これで正常にビルドでき起動するはずです。
2-3. コードの削除による方法
上の方法は Xcode のサジェッション通りなので、お行儀が良いようにみえます。
しかし、特に iOS13 向けの機能を実装しているわけでもないのなら、無駄に新しい OS 向けのコードを残しておく必要はありません。
そこで、新しく導入された部分を削除して、iOS12 以前に対応する方法も書いておきます。
まず Info.plist から Application Scene Manifest のエントリーを削除 します。
次に SceneDelegate.swift を削除 します。
次に AppDelegate.swift の // MARK: UISceneSession Lifecycleのファンクションを削除 します。
最後に、同じくAppDelegate.swiftに window を追加 します。
AppDelegate.swift は次のようになります。
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } }
これで iOS 12 の環境で実行できるはずです。
以上、ここでは Xcode 11 で iOS 13 より前のバージョン向けに、アプリケーションを開発するときのプロジェクトの初期設定方法について説明しました。