はじめに
SwiftUIでmacアプリを作成すると、デフォルトではウィンドウを複数開けるようになっています。
ウィンドウを複数開けないようにするには、@main
がついたApp
構造体に.commands
をつけて、CommandGroup(replacing: .newItem) {}
を追加します。
.commands {
// ウィンドウグループにこれをつけるとウィンドウを複数開けなくなる
CommandGroup(replacing: .newItem) {}
}
これでウィンドウを複数開けなくなります。
しかし、このままApp Storeの審査に出すとリジェクトされてしまいます。
リジェクト内容
リジェクトされた内容は以下の通りです。
原文
Guideline 4.0 - Design
We noticed an issue with your app's user interface that contributes to a lower-quality user experience than App Store users expect.
Specifically, we found that when the user closes the main application window there is no menu item to re-open it.
Next Steps
It would be appropriate for the app to implement a Window menu that lists the main window so it can be reopened, or provide similar functionality in another menu item.
Alternatively, if the application is a single-window app, it might be appropriate to save data and quit the app when the main window is closed.
和訳(DeepL翻訳)
ガイドライン4.0 - デザイン
あなたのアプリのユーザーインターフェイスに、App Storeのユーザーが期待するよりも質の低いユーザーエクスペリエンスにつながる問題があることに気づきました。
具体的には、ユーザーがアプリケーションのメインウィンドウを閉じたときに、それを再び開くためのメニュー項目がないことがわかりました。
次のステップ
このアプリは、メイン・ウィンドウを一覧表示し、再度開くことができるウィンドウ・メニューを実装するか、別のメニュー項目で同様の機能を提供するのが適切でしょう。
あるいは、アプリケーションがシングルウィンドウアプリの場合、メインウィンドウが閉じられたときにデータを保存してアプリを終了するのが適切かもしれません。
対応方法
リジェクトを回避するために、ウィンドウを閉じたときにアプリを終了するようにします。
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.onDisappear {
// ウィンドウが閉じられたらアプリを終了する
NSApplication.shared.terminate(self)
}
}
.commands {
CommandGroup(replacing: .newItem) {}
}
}
}
こうすることで、ウィンドウを閉じたときにアプリが終了できます。
これでリジェクトを回避できます。
まとめ
macアプリのリジェクト事例と対応方法を紹介しました。この記事が参考になったという方は、いいねとフォローしていただけると嬉しいです😊