Как вы ограничиваете управление окнами macOS от восстановления определенного окна?

У меня есть приложение, в котором есть несколько окон, определенных как группа окон в структуре, соответствующей приложению в основной сцене:

            WindowGroup("StandingsView") {

        StandingsView()
          .environmentObject(appServices)
      }
      .handlesExternalEvents(matching: Set(arrayLiteral: "StandingsView"))

Для настройки appServices требуется некоторое время, поэтому я не хочу автоматически восстанавливать окна при запуске. Я создаю окна после того, как выбор пользователя действителен, службы полностью настроены и пользователь нажимает кнопку «Пуск» SwiftUI:

             if let standingsURL = URL(string: "raceStratLiteApp://StandingsView") {
            NSWorkspace.shared.open(standingsURL)
       }

Я пытался закрыть окна в appDelegate applicationShouldTerminate(). Я также попытался установить для isRestorable значение false в applicationShouldTerminate:

        func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {

    for window in NSApplication.shared.windows {
      window.isRestorable = false
    }
    return .terminateNow
  }

Есть ли другие способы не восстанавливать окно? или еще лучше, чтобы иметь возможность программно восстановить его с предыдущим размером и т. д., но запускать только по указанию пользователя для «запуска»

ТИА

2 ответа

Решение кода, как предлагает @Asperi в более позднем комментарии:

        func applicationDidFinishLaunching(_ notification: Notification) {
    UserDefaults.standard.register(defaults: ["NSQuitAlwaysKeepsWindows" : false])
  }

Из подсказки, предоставленной @Asperi, запись следующего в значения по умолчанию прекратит запись состояний окна:

$ defaults write <bundleid> NSQuitAlwaysKeepsWindows -bool false

Так что это не изменение кода приложения, а скорее конфигурация среды, которая будет выполняться при установке.

Я также удалил каталог saveState, расположенный по адресудля архивных сборок и вдля отладочных сборок. Не уверен, что это имело значение, но после выполнения этих шагов проблема была решена. Спасибо @Аспери

Другие вопросы по тегам