【问题标题】:Design Preamble Mac OS X Mas设计序言 Mac OS X Mas
【发布时间】:2018-05-21 00:37:29
【问题描述】:

我最近为 MAC Store 打包了我的应用,但被拒绝了。以下是审核组发给我的消息。当我使用开发模式进行测试时,一切正常,但我无法想象我哪里出错了。任何想法将不胜感激。 应用是使用 Electron 构建的。

设计序言

您的应用程序的用户界面与 macOS Human 不一致 界面指南。

具体来说,我们发现当用户关闭主应用程序时 窗口没有重新打开它的菜单项。

后续步骤

应用程序实现一个窗口菜单是合适的 列出主窗口,以便可以重新打开它,或提供类似的 另一个菜单项中的功能。 macOS 人机界面指南 声明“菜单栏 [a] 始终包含 [a] 窗口菜单”。

或者,如果应用程序是单窗口应用程序,它可能是 适合在主窗口打开时保存数据并退出应用程序 关闭。

有关在 macOS 中管理窗口的信息,请查看 Apple 人机界面指南中的以下部分:

菜单栏及其菜单
窗口菜单
文件菜单
在 Dock 中单击
窗口行为
请评估您的能力 实施适当的更改,然后重新提交您的应用以供审核。

【问题讨论】:

  • 我通过在单击 x 按钮时调用 app.quit() 解决了这个问题。当点击 x 按钮时,Apple 不希望我们将应用程序保留在 Dock 上。

标签: macos app-store electron single-page-application appstore-approval


【解决方案1】:

问题是应用程序通过按x button 最小化后,用户无法从停靠栏中再次打开它。

解决此问题的一种方法是在单击x button 时仅terminate 应用程序。

我遇到了同样的问题,并通过在AppDelegate 中添加此函数来修复它。此解决方案适用于Swift 4.2

func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
    return true
}

现在应用程序终止,当点击 x button 时。

【讨论】:

  • 按下窗口菜单项时如何重新启动 ViewController?会更符合 MacOSX 上应用程序的一般行为
【解决方案2】:

如果您使用 Xamarin,请编辑您的 AppDelegate.cs 以创建一个菜单以重新打开主窗口:

    public class AppDelegate : FormsApplicationDelegate
    {
        NSWindow window;

        public override NSWindow MainWindow
        {
            get
            {
                return window;
            }
        }

        public AppDelegate()
        {
            var style = NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled;
            var rect = new CoreGraphics.CGRect(100, 100, 1024, 768);

            window = new NSWindow(rect, style, NSBackingStore.Buffered, false);
            window.TitleVisibility = NSWindowTitleVisibility.Hidden;
        }

        private NSMenu MakeMainMenu()
        {
            // top bar app menu
            NSMenu menubar = new NSMenu();
            NSMenuItem appMenuItem = new NSMenuItem();
            menubar.AddItem(appMenuItem);

            NSMenu appMenu = new NSMenu();
            appMenuItem.Submenu = appMenu;

            // add separator
            NSMenuItem separator = NSMenuItem.SeparatorItem;
            appMenu.AddItem(separator);

            // add open menu item
            string openTitle = String.Format("Open {0}", "MyApp");
            var openMenuItem = new NSMenuItem(openTitle, "o", delegate
            {
                // Get new window
                window.MakeKeyAndOrderFront(this);
            });
            appMenu.AddItem(openMenuItem);

            // add quit menu item
            string quitTitle = String.Format("Quit {0}", "MyApp");
            var quitMenuItem = new NSMenuItem(quitTitle, "q", delegate
            {
                NSApplication.SharedApplication.Terminate(menubar);
            });
            appMenu.AddItem(quitMenuItem);
            return menubar;
        }

        public override void DidFinishLaunching(NSNotification notification)
        {
            // finally add menu
            NSApplication.SharedApplication.MainMenu = MakeMainMenu();
            // Insert code here to initialize your application
            Forms.Init();
            //Load Application
            LoadApplication(new App());
            //Did Finish Launching
            base.DidFinishLaunching(notification);
        }

        public override void WillTerminate(NSNotification notification)
        {
            // Insert code here to tear down your application
        }
    }

如果您正在使用 Cocoa,请执行相同操作,但使用特定语言。

使用此指令重新打开窗口:

[window makeKeyAndOrderFront:self];

【讨论】:

    【解决方案3】:

    对于电子应用程序,您可以将此代码添加到您的 index.jsmain.js 以解决问题:

    app.on('window-all-closed', () => {
      app.quit();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 2021-02-09
      • 1970-01-01
      • 2015-05-18
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多