ここ 1 年ほどバックエンド側の開発に浮気していたら、たった 1 年で iOS アプリ事情がまたいろいろと変わっていました。

そこでその点も含めて、改めて従来の UIKit (Storyboard) を使った開発(2年前くらい?)で時間が止まってる人向けに、現在 (iOS14) の iOS アプリ開発事情を紹介していきたいと思います。

 

Level 1 SwiftUI

これは最近開発をしていない人でも、iOS エンジニアであれば知っていると思います。

MVVM をベースにしており、全体的にコード量が減るので新規開発のアプリは基本的に SwiftUI で開発していっても良いと思います。

個人的には tableView.reloadData() から解放されるだけで使うメリットあると思います。

SwiftUI については以前まとめた記事があるので、そちらもご覧ください。

SwiftUIのすすめ – 1.メリットとデメリット –

SwiftUIのすすめ – 2. リスト表示 –

 

Level 2 SwiftPM

開発歴が長いエンジニアは iOS アプリのパッケージ管理ツールと言ったら CocoaPods や Carthage が思い浮かぶと思いますが、導入が楽でワークスペースを汚すこともない公式のツールである SwiftPM を使うのがおすすめです。

少し前だと対応するライブラリが少なかったこともありますが、最近だと Firebase も SwiftPM 対応 しているので今後はこちらが主流になってくると思われます。

こちらも詳しくは以前に書いた記事があるので、ご覧ください。

Xcodeの新たなパッケージ管理ツールSwiftPM

 

Level 3 AppDelegate の消失

これが最近私が驚いた部分です。

SceneDelegate すらもありませんでした。

Xcode で新規 iOS プロジェクトを作成するときに「Life Cycle」のところで「SwiftUI App」を選択すると、おなじみの AppDelegate が無いプロジェクトが作成されます。

※「UIKit App Delegate」を選ぶと、今まで通りのライフサイクル管理になります

代わりに、「[プロジェクト名]App」というクラスが作成されます。

詳細な説明はここでは行いませんが、こちらのクラスにライフサイクルに関わる処理を書いていきます。

ちなみに、従来の AppDelegate を使いたい場合も手段が用意されています。

import SwiftUI

@main
struct sampleApp: App {
    @UIApplicationDelegateAdaptor var delegate: AppDelegate
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }

    class AppDelegate: NSObject, UIApplicationDelegate {
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
            // do something...
            return true
        }
    }
}

@UIApplicationDelegateAdaptor var delegate: AppDelegate を定義して AppDelegate を実装します。

 

Level 4 Xcode Cloud

画像は Xcode cloud 公式ページ より

これも驚きました。

Apple が公式に提供するサービスで、ビルドやテストなどを統合的に行うことができるようになるようです。

こちらはまだベータ版のようで、申し込みが必要なようです。

申し込んで一足早く使ってみようかと思うので、なにかわかればまた記事にまとめようかと思います。

 

まとめ

最近の iOS アプリの開発事情についてまとめました。

特にアプリの分野は変化が激しいので、取り残されないようにしていきたいです。