Я заметил эту проблему в моих старых приложениях macOS, и, если я правильно помню, это было после первого тестирования в бета-версиях High Sierra, как вы только что обнаружили.
Большинству представлений пользовательского интерфейса необходим главный поток для рисования или получения пользовательского ввода. Но, похоже, что в более ранних версиях macOS Apple сделала что-то волшебное, чтобы NSProgressIndicator отображал и анимировал, даже если основной поток был занят другой работой. Затем в последних версиях macOS (10.13?) Эта магия, похоже, была удалена.
Никогда не было хорошей идеей выполнять длительную работу с основным потоком, поскольку это делает другие представления в вашем пользовательском интерфейсе, у которых никогда не было волшебства NSProgressIndicator, безразличным для пользователя. Я думаю, что Apple решила, что, поскольку мы все теперь являемся многопоточными с Dispatch (также называемым Grand Central Dispatch ), пришло время удалить магию, что, вероятно, было трудно поддерживать. Я всегда находил, что это несколько глючит и ненадежно.
Таким образом, ответ таков: вам нужно получить любую работу, которую индикатор прогресса отслеживает в основном потоке. Вероятно, вы будете использовать dispatch_async () и друзей, хотя NSOperation и NSOperationQueue все еще работают и будут выполнять эту работу.