Я создаю приложение MacOS Catalyst с поддержкой нескольких windows, которое реализовано с новым набором API UISceneDelegate
, представленным в iOS 13.
Согласно Apple В документации при создании нового окна делегату сцены необходимо подключиться к UISceneSession
, что позволяет передавать информацию в этот сеанс через его свойство userInfo
. Один из способов установить userInfo
перед подключением делегата сцены заключается в использовании этой функции: UISceneDelegate
:
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.
connectingSceneSession.userInfo?["foo"] = "bar"
return UISceneConfiguration(
name: "Default Configuration",
sessionRole: connectingSceneSession.role
)
}
Глядя на Справочную страницу разработчика для этой функции, кажется, должен всегда вызываться при запуске приложения до того, как будет настроена сцена основного приложения. К сожалению, похоже, что с macOS Catalyst это не так, но я не могу найти какую-либо документацию или лог c, почему эта функция не всегда вызывается. В моем приложении, которое повторно использует простой пример кода для UISceneDelegate
, эта функция вызывается случайным образом примерно в 50% случаев при запуске приложения. Это не очень хорошо, так как это означает, что случайно 50% времени приложения windows не настроены должным образом, так как необходимая информация не передается в свойстве userInfo
UISceneSession
.
Что такое точный логин c для звонков на application(_:configurationForConnecting:options:)
или как добиться, чтобы он вызывался детерминистически при запуске приложения для сцены первого приложения с macOS Catalyst?