Info.plist configuration “(no name)” for UIWindowSceneSessionRoleApplication contained UISceneClassName key, but could not load class with name “”.でアプリがクラッシュする問題

はじめに

Xcode14で久々に過去のプロジェクトを開いてビルドした際に以下のエラーが出てクラッシュするようになっていました

Info.plist configuration "(no name)" for UIWindowSceneSessionRoleApplication contained UISceneClassName key, but could not load class with name "".

原因

Info.plistに名前が指定されていないとあったのでplistの中身を確認してみると以下のような状態になっていました。

UIWindowSceneSessionRoleApplicationの中身のDictionaryが2つ生成されてしまっていて片方に情報が入ってない状態でした。

<?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>NSCameraUsageDescription</key>
    <string>ビデオ撮影のためにカメラを使用します。</string>
	<key>UIApplicationSceneManifest</key>
	<dict>
		<key>UIApplicationSupportsMultipleScenes</key>
		<false/>
		<key>UISceneConfigurations</key>
		<dict>
			<key>UIWindowSceneSessionRoleApplication</key>
			<array>
				<dict>
					<key>UISceneClassName</key>
					<string></string>
					<key>UISceneDelegateClassName</key>
					<string></string>
					<key>UISceneConfigurationName</key>
					<string></string>
					<key>UISceneStoryboardFile</key>
					<string></string>
				</dict>
				<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>

値がからの方は不要なのでこちらを削除して以下の形に直したところ問題なく動くようになりました。

<?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>NSCameraUsageDescription</key>
    <string>ビデオ撮影のためにカメラを使用します。</string>
	<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>

当時Xcode13系でプロジェクトを進めていたのですが当時は2つ定義されていても問題なく動いていたようです。
Xcode14になってからdictの参照方法が何かしら変わったのかもしれません🤔