Программа rejected после review, есть вопрос. Update программа ready for sale!


#1

Наконец добрался до submission в mac app store. Прислали первые замечания что исправить.

Одно касалось лишних entitlements для sandbox. Убрал лишнее.

Но одно замечание я не совсем понимаю. Текст с претензиями следующий.

Design Preamble
The user interface of your app is not consistent with the macOS Human Interface Guidelines.

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. macOS Human Interface Guidelines state that “The menu bar [a]lways contains [a] Window menu”.

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.

For information on managing windows in macOS, please review the following sections in Apple Human Interface Guidelines:

  • The Menu Bar and Its Menus
  • The Window Menu
  • The File Menu
  • Clicking in the Dock
  • Window Behavior

Please evaluate how you can implement the appropriate changes, and resubmit your app for review.

В программе не было Window menu в Main menu. На мой взгляд лишнее в моей программе, но если хотят нет проблем, вернул Window menu в Main menu. Но в Window menu нет item для reopen window если окно закрыто. В других программах тоже этой опции нет.

Для открытия программы из Dock использую следующий код, и у меня из дока программа открывается после закрытия.

Если вопрос был только чтобы вернуть Window menu в Main menu то все ясно, но если вопрос еще о том чтобы reopen после закрытия программы то не понимаю где проблема, из док у меня открывается а из Window menu такой опции для reopen нет - после minimise есть но после close нет.

@IBOutlet weak var myWindow: NSWindow!

// function to reopen from Dock
    func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool
        {
        if flag == false
        {
            myWindow!.orderFront(self)
        }
        else
        {
            myWindow!.makeKeyAndOrderFront(self)
         }
        return true
    }

#2

Поискал ответ. Толком ничего нет. Но такой же вопрос уже возникал. Точного ответа не нашел, но какой то намек есть - https://forums.developer.apple.com/thread/96725

“You need to strongly reference the NSWindow/Controller somewhere for the lifetime of the window. macOS 10.13 introduced a behavior where NSWindow will retain itself for as long as it is “open”, but previous versions of the OS didn’t have this behavior. As a result, if you aren’t retaining the window, it’ll be deallocated and removed from the screen.”

Хотя у меня и работает открытие программы из дока в Mojave, в других версиях macOS это возможно не работает из-за того что есть weak var а не strong reference для NSWindow ? -

@IBOutlet weak var myWindow: NSWindow! 

Можно использовать взамен var windows из NSApplication. У меня в программе одно window поэтому из array - NSApplication.windows проверяем первое window. Можно было бы использовать for loop чтобы реоткрыть все возможные окна из windows array, но если я так делаю то открытые popover Views после закрытия и открытия основного окна не закрываются. Если только первое окно - sender.windows[0], тогда popover Views ведут себя нормально.

// function to reopen from Dock 
 func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool
{
    if flag == true
    {
        return false
    }
    else
    {
        sender.windows[0].makeKeyAndOrderFront(self)
    }
    return true
}

#3

Все, все вопросы решил и программа ready for sale !!! и поскольку выбрал автоматический релиз, то программа уже фактически в mac App Store. Хотя, пока ее не вижу (прошло около часа после получения статуса ready for sale) если перейти по ссылке в App Store из App Store connect, по-видимому это вопрос времени. Программа для молекулярных биологов.

Всем кто помогал найти ответы на мои вопросы огромное спасибо, особенно haymob !!! Конечно, спасибо создателям этого форума! Хотя моя программа для мака, и в основном здесь вопросы по iOS, тем не мене ценные советы для старого доброго мака здесь тоже можно получить!


#4

Поздравляю! Рад за вас :+1:


#5

Программа теперь видна в mac App Store - https://apps.apple.com/us/app/biolabdonkey/id1470827582?ls=1&mt=12

Помню как то админу обещал рассказать о чем программа. Сделал сайт с подробностями о программе - https://molbiolinfo.home.blog

Советы/замечания всегда welcome.


#6

Так а в чем была причина? Как решили?

Сейчас с той же проблемой столкнулся, из дока подымается окно, а приложение не проходит ревью по причине:

The user is unable to restore main window.

Спасибо.


#7

Где то нашел что Apple не любит когда программа после нажатия close сохраняется открытой, т.е. может быть поднята из дока в том состояние в котором была. Нужно действительно закрыть программу, выйти из нее при нажатии close. Т.е. restore main window означает для Apple заново открыть программу.

Поэтому убрал applicationShouldHandleReopen и вставил следующий код в AppDelegate

var yesButton = false

func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply
{
    if yesButton == false
    {
        let alert = NSAlert()
        alert.messageText = "Do you want to quit BioLabDonkey?"
        alert.informativeText = "Have you saved your data?"
        alert.addButton(withTitle: "Cancel")
        alert.addButton(withTitle: "Yes")
        
        if alert.runModal() == NSApplication.ModalResponse.alertFirstButtonReturn
        {
            return .terminateCancel
        }
        else
        {
            return .terminateNow
        }
    }else
    {
        return .terminateNow
    }
}

    
func windowShouldClose(_ sender: NSWindow) -> Bool
{
    let alert = NSAlert()
    alert.messageText = "Do you want to quit BioLabDonkey?"
    alert.informativeText = "Have you saved your data?"
    alert.addButton(withTitle: "Cancel")
    alert.addButton(withTitle: "Yes")

    
    if alert.runModal() == NSApplication.ModalResponse.alertSecondButtonReturn
    {
        yesButton = true
        NSApplication.shared.terminate(self)
        return true
    }
    else
    {
        return false
    }
}

#8

Загрузил update программы. Получил Metadata Rejected и причина в отсутствии demo account. Все бы хорошо, но у меня в программе не было и нет никого login и соответственно понятия не имею почему возник вопрос про demo account. Когда прошлый раз программа была одобрена никаких таких вопросов не было. В update я толко исправил незначительные баги и ничего нового не добавлял. Это простое недоразумение или что то есть ?

Я пока ответил в resolution center, что программа не имеет login и я не могу provide demo account.


#9

Может случайно поставили галочку в пункте, что нужна авторизация?


#10

Все уладил. Update уже в App Store.
Но что это было не совсем понятно. Исходно как и написал мне нужно было им предоставить demo account or file и ничего более конкретного не написали. Можно было понять что файл это альтернатива demo account. После того как сообщил им что нет никакого login в программе, они попросили прислать sample file с одним из расширений которые упомянуты в описании программы. Послал файл и через минут пять программа была ready for sale. Если им нужен был только файл, то почему сразу не написать то что они написали в ответе на мое сообщение.

А где такая галочка может быть ? Если в ApStroe Connect то сделал off опцию где спрашивали имя и пароль.


#11

Индусы - такие индусы. Не обращайте внимания что разные ревью проходят по разному. Там не всегда адекватные люди сидят.
У меня одно приложение спустя 2 года реджектнули, ссылаясь на использование платежного шлюза как скрытого функционала, при этом в сторе приложение уже 2 года. А обновление было не касаясь платежного шлюза. Т.е. они проверяют как горазды.