以下のエラー(警告)が発生した時の対応について解説します。
App Delegate does not conform to UIApplicationDelegate protocol.SfiftUIライフサイクルの中でFirebaseを利用しています。
◆動作検証環境
・XCode:12.1
・SwiftUI:2.0
・iOS:14.0
・Life Cycle:SwiftUI App
警告【App Delegate does not conform to UIApplicationDelegate protocol.】が出る状況
アプリを立ち上げる際に以下の警告が出ます。
2021-05-30 11:41:11.617765+0900 MyApp[96022:5515426] 6.34.0 – [GoogleUtilities/AppDelegateSwizzler][I-SWZ001014] App Delegate does not conform to UIApplicationDelegate protocol.2021-05-30 11:41:11.618517+0900 MyApp[96022:5515426] 6.34.0 – [Firebase/Analytics][I-ACS023007] Analytics v.60900000 started2021-05-30 11:41:11.665476+0900 MyApp[96022:5515426] 6.34.0 – [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument:
-FIRAnalyticsDebugEnabled (see http://goo.gl/RfcEEE)
2行目は、Firebase/AnalyticsのAnalyticsを開始しましたとの説明。
3行目は、デバッグログを有効にするには、次のアプリケーション引数を設定するとの説明ですが、
1行目の警告は、
AppDelegateはUIApplicationDelegateプロトコルに準拠していません。
と説明しています。
この状態でも、初期化は行えてコードも動作しますが、警告が気になるので対応します。
警告【App Delegate does not conform to UIApplicationDelegate protocol.】が出る原因
この警告が出る原因は、firebaseを初期する際に以下の方法を利用していた事でした。
1 2 3 4 5 | init(){ FirebaseApp.configure() } |
コード全文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import SwiftUI import Firebase @main struct SampleApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { RootView() } } init(){ // Init Firebase FirebaseApp.configure() } |
警告【App Delegate does not conform to UIApplicationDelegate protocol.】の対応
UIApplicationDelegateプロトコルに準拠させるために以下のコードを追加し、初期化と宣言をします。
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
1 2 3 4 5 6 7 8 9 | class AppDelegate:NSObject,UIApplicationDelegate{ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { FirebaseApp.configure() return true } } |
コード全文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import SwiftUI import Firebase @main struct SampleApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { RootView() } } class AppDelegate:NSObject,UIApplicationDelegate{ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { FirebaseApp.configure() return true } } } |
このようにコードを修正し、アプリを立ち上げると、
2021-05-30 11:41:11.617765+0900 MyApp[96022:5515426] 6.34.0 – [GoogleUtilities/AppDelegateSwizzler][I-SWZ001014] App Delegate does not conform to UIApplicationDelegate protocol.
の警告が消えます。
以上、【App Delegate does not conform to UIApplicationDelegate protocol.】警告の対応方法について解説しました。