これはなに
iOS 13 環境で ReplayKit & UIScene の相性が悪いため、泣く泣く UISceneDelegate を消して UIApplicationDelegate だけにしたときのメモです。
If you must use RPSystemBroadcastPickerView then you should consider not using UIScene, and going back to UIApplicationDelegate.
やったこと
SceneDelegate をバッサリ削除
Info.plist から UIApplicationSceneManifest
をバッサリ削除します。
その後、SceneDelegate.swift
も不要になるので削除します。(SceneDelegate でやっていたことがある場合は AppDelegate に移行する必要がある)
AppDelegate から UIHostingController経由で SwiftUI の View を開く
AppDelegate.swift を次のように書き換えます。
import UIKit
import SwiftUI
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window!.rootViewController = UIHostingController(rootView: ContentView)
window!.makeKeyAndVisible()
return true
}
}
このとき、 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
のような UISceneSession Lifecycle が残っているとうまくアプリが動かないので注意です。
これで一応アプリが起動するようになりますが、動作を保証するものではありません。あくまで自己責任で!