ОК, этому вопросу 6 месяцев, поэтому вы, вероятно, уже решили свою проблему, но в случае, если это полезно ...
Я решил похожую проблему с приложением, над которым я работаю, наблюдая за деактивацией приложения через NSWorkspace.
Вы можете иметь свойство:
NSRunningApplication* _previousRunningApplication;
И обновите это свойство, наблюдая за NSWorkspaceDidDeactivateApplicationNotification
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(anyApplicationDeactivated:)
name:NSWorkspaceDidDeactivateApplicationNotification
object:nil];
// Called when any running application deactivates
-(void)anyApplicationDeactivated:(NSNotification*) notification {
NSRunningApplication* app = [notification.userInfo valueForKey:NSWorkspaceApplicationKey];
_previousRunningApplication = app;
}
Затем, когда ваше приложение завершит работу, просто активируйте ранее активное приложение, используя:
// Activate the previously active application (if available)
[_previousRunningApplication activateWithOptions:0];
Если есть вероятность, что последняя строка может быть вызвана, пока ваше приложение не активно, то сначала следует проверить, использует ли оно [NSApp isActive]
(или вы можете вызвать какое-то неожиданное и раздражающее поведение для пользователей ...)
Если бы вы нашли более простое решение, мне было бы интересно узнать об этом.
На случай, если этот код кому-нибудь пригодится, я создал отдельный класс для обработки всего этого и проверил его в Github:
http://github.com/mjrit/MJRAppReactivation