LoginSignup
9
3

More than 5 years have passed since last update.

AppDelegateをSwift化の話

Last updated at Posted at 2018-01-24

どうも、しゅです。(コメントで日本語に対して違和感がある箇所をご指摘いただければ嬉しいです。

昨日やっとAppDelegate.mをAppDelegate.swift化しました🎉 🎉 🎉 。コードの量はそんなに変わらないけど、全体が900行から700行になりました、AppDelegate.swiftはたった200行です。自分がAppDelegateを再構築する時、昔のAppDelegateを書きにくくなる原因がわかりました。

AppDelegateの多重役割

AppDelegateがiOSプロジェクトを作った時点で自動に生成されました。Objective-C時代では、AppDelegateとともにmain.mのファイルもあります。そこでAppDelegateを初期化して、アプリを立ち上がります。

AppDelegateの役割を大きく分けると三つになります。

1. UIApplicationDelegateの実装

アプリがバックグラウンドからフォアグランドに入る時の行動、アプリが終了する前の行動、プッシュ通知が来たらどう処理するなどのことです。詳しくはこちらです。

2. ライブラリーとSDKの設定

基本的にはライブラリー、SDKなどのシングルトンインスタンスに変数を設定すること。ライブラリーはデファクトの値、SDKはアプリのキーなどの情報を設定します。

3. URL遷移の処理

ウェブライトのリンク、プッシュ通知、他のアプリなどから、自分のアプリにどのViewControllerに遷移することです。

複数の役を持ってるクラスのコード量が増えると、どんどん読みにくくなる。

解決策

AppDelegateを機能によって三つの部分に分けて、各クラスが単一の役しか持ってません。

//url遷移の処理
enum URLSchemeType: String {
    case google = "google"
}

enum URLLinkType: String {
    case home = "h"
}

class AppDelegateURLHandler {
    func handleURL(url: URL) {
        //urlに対して、遷移先を決める
    }
}
//SDKとかライブラリーの設定
enum ConfigType {
    case debug
    case release
}

class AppDelegateConfig {
    let config: ConfigType
    let xKey: String //DebugとRelease時が違う
    init() {
        #if DEBUG
        config = .debug
        #else
        config = .release
        #endif
        switch config {
        case .debug:
        xKey = "debugKey"
        case .release:
        xKey = "releaseKey"
        }
    }

    //AppDelegateからこれを呼び出す、大体SDKの設定がDidFinishLaunch関数で。
    func setupDidFinishLaunch() {
        setupXSDK()
    }

    private func setupXSDK() {
        XSDK.shared.setKey(xKey)
    }
}
//詳しくは書かないけど、大体こんな感じです。
class AppDelegate {
    private let config = AppDelegateConfig() 
    private let urlHandler = AppDelegateURLHandler()
    /*
    UIApplicationDelegaetの実装
    */
}

これではAppDelegateの仕事を他のクラスに任せることができました。コードも前より読みやすくなりました。🐒🐒🐒(ある程度Swiftのおかけです。) 

9
3
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
9
3