[iOSアプリ開発] プロジェクト新規作成をしたらはじめにやってること(1) SceneDelegateを取り除く
プロジェクト新規作成をしたらはじめにやってること
こんにちは。今回これが初投稿になります。
iOSアプリ開発のちょっとしたTipsなどを書いていければと思います。
今回は、iOSアプリ(主にiPhone用)の開発を新しく始めたときに、いつもやってるなぁと思うことを短くまとめようと思います。
最初にやってるのは SceneDelegate
を消すことです。
SceneDelegate
は、1画面に複数の画面を表示するようなiOS13からの仕組みですが、iPhoneアプリだと今のところシーンが活躍するようなアプリを作っておらず、必要な時がくればその時に追加する方針でもいいかなと思い、まずは消しています。
その手順をまとめます。
AppDelegateからSceneの記述を消す
プロジェクト作成時のデフォルトのAppDelegateのソースコードから
-
// MARK: UISceneSession Lifecycle
以降はバッと消してしまう -
didFinishLaunchingWithOptions
のメソッド内のコメントも消してしまう - 無駄な空行も消してしまう
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
-
-
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
- // Override point for customization after application launch.
return true
}
-
- // MARK: UISceneSession Lifecycle
-
- func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
- // Called when a new scene session is being created.
- // Use this method to select a configuration to create the new scene with.
- return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
- }
-
- func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
- // Called when the user discards a scene session.
- // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
- // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
- }
-
-
}
すると、ソースコードはこんな感じになります。
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
return true
}
}
AppDelegateにwindowプロパティを足す
デフォルトのソースコードではSceneDelegate
に置かれていた UIWindow型のプロパティであるwindow
プロパティはAppDelegate
に移してしまいます。
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
+ var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
return true
}
}
Info.plist から UIApplicationSceneManifest をすべて消す
Info.plist
をソースコード表示(Open As > Source Code)をして、UIApplicationSceneManifest
の項目を消してしまいます。
もちろん、プロパティリスト表示(Open As > Property List)でも大丈夫です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
:
(省略)
:
- <key>UIApplicationSceneManifest</key>
- <dict>
- <key>UIApplicationSupportsMultipleScenes</key>
- <false/>
- <key>UISceneConfigurations</key>
- <dict>
- <key>UIWindowSceneSessionRoleApplication</key>
- <array>
- <dict>
- <key>UISceneConfigurationName</key>
- <string>Default Configuration</string>
- <key>UISceneDelegateClassName</key>
- <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
- <key>UISceneStoryboardFile</key>
- <string>Main</string>
- </dict>
- </array>
- </dict>
- </dict>
:
(省略)
:
</dict>
</plist>
SceneDelegate.swift ファイルを削除する
左ペインのツリーから普通にファイル削除をしてしまいます。
まとめ
プロジェクトを作成したら
- AppDelegateからSceneの記述を消す
- AppDelegateにwindowプロパティを足す
- Info.plist から UIApplicationSceneManifest をすべて消す
- SceneDelegate.swift ファイルを削除する
という感じで Scene関係のものをプロジェクトから外してやります。
ここまででビルドが通ってアプリが起動すればOKかと思います。
※もちろん、SceneはiPadアプリ開発やアプリの要件によっては必要になってくると思います。必ず消そうと推奨しているものではありません。
他にも色々やることがあるのですが、それはまた別の機会に。
それではまた。
Discussion