# xcode26
iOSアプリにおけるSceneDelegate対応の調査 Qiita記事のポイント
Sceneベースのライフサイクルを採用していないアプリは起動しない – WWDC 2025のUIKitセッションでは、従来のUIApplication依存APIが非推奨となり、今後はsceneベースのライフサイクルを必須とする方針が発表された qiita.com iOS 26では単なる警告ログが出るが、次のメジャーリリース(iOS 27予定)からはScene Delegateを採用していないアプリが起動しなくなるという破壊的変更である qiita.com
Info.plistでApplication Scene Manifestを追加 – Info.plistにUIApplicationSceneManifestキーを追加し、UISceneConfigurationName、UISceneDelegateClassName、UISceneStoryboardFileなどを定義する qiita.com これによりアプリがシーンを認識し、scene delegateのクラスが読み込まれる
ライフサイクルメソッドの移行 – AppDelegateにあったapplicationDidBecomeActive、applicationWillResignActive、applicationDidEnterBackground、applicationWillEnterForegroundといったメソッドは、SceneDelegateのsceneDidBecomeActive、sceneWillResignActive、sceneDidEnterBackground、sceneWillEnterForegroundに移行する qiita.com
古いAPIの置き換え – UIAlertViewはiOS 9.0で非推奨となっていたが、App Delegateではまだ使用できたscene移行に伴いUIAlertControllerに置き換えなければクラッシュする事例があった qiita.com
移行完了の確認 – アプリ起動時に「This process does not adopt UIScene lifecycle」「UIScene lifecycle will soon be required」といったログが出なくなれば移行完了と判断できる qiita.com
WWDC 2025 UIKitセッションの内容
WWDC 2025のUIKitセッション「UIKitの新機能」では、Scene Delegateの必須化について明確に触れられている特に21:57付近のスライドでは次の点が強調されていた:
Scenesは柔軟なアプリの基盤 – シーンはアプリのユーザーインターフェースを管理する単位であり、複数ウィンドウやマルチタスクに対応できる柔軟性を提供する従来のUIApplication中心のAPIは非推奨となりつつある developer.apple.com
iOS 26以降はUISceneライフサイクルが必須 – スライドでは「UIScene life cycle will be required after iOS 26」と明言されており、最新SDKでビルドしたUIKitアプリではscene delegate採用が必須になることが示された developer.apple.com
Apple Technical Note TN3187の概要
Appleのテクニカルノート TN3187「Migrating to the UIKit scene‑based life cycle」は、sceneライフサイクルへの移行手順と理由を詳しく解説している
必須化の背景とタイムライン
iOS 18.4/iPadOS 18.4/Mac Catalyst 18.4/tvOS 18.4/visionOS 2.4では、sceneを採用していないアプリで次のログが出力される:「This process does not adopt UIScene lifecycle. This will become an assert in a future version」 developer.apple.com
iOS 26/iPadOS 26/Mac Catalyst 26/tvOS 26/visionOS 26ではこのメッセージが「UIScene lifecycle will soon be required. Failure to adopt will result in an assert in the future」に更新され、近い将来の断言(app assertion)を予告している developer.apple.com
iOS 26の次のメジャーリリースでは、最新SDKでビルドしたアプリがscene life‑cycleを採用していなければ起動しない複数シーンのサポートは必須ではないものの、sceneライフサイクル自体の導入は必須と明言されている developer.apple.com
Sceneの概念とライフサイクル
SceneはアプリのUIのインスタンスであり、ドキュメントベースのアプリでは各ドキュメントを独立したsceneとして表示できる developer.apple.com Sceneベースのライフサイクルはアプリ全体のライフサイクル(プロセスの起動など)と、UIが画面に表示されている期間のライフサイクルを分離する developer.apple.com
Sceneベースのライフサイクルを採用する最も簡単な方法は、Info.plistにUIApplicationSceneManifestキーを追加し、scene構成を定義すること developer.apple.com キーにはsceneの名称(UISceneConfigurationName)、delegateクラス名(UISceneDelegateClassName)、Storyboardファイル名などを設定する developer.apple.com
複数シーンをサポートすることは任意であるUIApplicationSupportsMultipleScenesキーをtrueにすると複数のシーンを同時に表示できるが、データモデルをsceneごとに分ける必要があるため慎重に検討する developer.apple.com
移行時の具体的な手順
Scene構成の追加 – Info.plistにUIApplicationSceneManifestを追加し、UISceneConfigurationNameやUISceneDelegateClassNameを設定する developer.apple.com
動的構成が必要な場合の実装 – application(_:configurationForConnecting:options:)メソッドをAppDelegateに実装して、ユーザーアクティビティに応じたUISceneConfigurationを返す developer.apple.com
ライフサイクルメソッドの移動 – UIApplicationDelegateのapplicationDidBecomeActive(_: )などのメソッドはUISceneDelegateの対応するメソッドに移行する developer.apple.com これにより、アプリの状態遷移をscene単位で処理できるようになる
移行判断の指針
TN3187では、アプリが以下の条件に該当する場合はsceneベースライフサイクルへの移行が必要だと述べている:
Info.plistにUIApplicationSceneManifestキーがない、または構成が定義されていない developer.apple.com
AppDelegateにapplication(_:configurationForConnecting:options:)メソッドを実装していない developer.apple.com
まとめ
iOS 26以降はUISceneが必須 – WWDC 2025とTN3187の両方で、iOS 26の次のメジャーリリースではSceneベースライフサイクルを採用していないアプリが起動しなくなると明言されている developer.apple.com developer.apple.com 既存アプリは早急に対応が必要である
Info.plistへのSceneマニフェスト追加 – UIApplicationSceneManifestキーを追加し、scene構成(名前・delegateクラス名・Storyboardなど)を定義することでsceneサポートが有効になる developer.apple.com 複数シーンのサポートは任意だが、シーンライフサイクル自体は必須である developer.apple.com
AppDelegateからSceneDelegateへのライフサイクル移行 – applicationDidBecomeActiveなどのメソッドはsceneDidBecomeActiveなどに移行し、UIAlertViewのような古いAPIはUIAlertControllerに置き換える必要がある qiita.com
動的シーン構成 – 特定のユーザーアクティビティに応じて異なるシーンを生成する場合は、application(_:configurationForConnecting:options:)を実装してUISceneConfigurationを返す developer.apple.com
これらの手順を踏むことで、今後のiOSリリースにおいてアプリが起動しなくなることを防ぎ、UIKitの最新機能を利用した柔軟なアプリケーション設計が可能になる