Mac OS X: открывать приложение при входе в систему, не показывая главного окна

#cocoa #macos #login

#cocoa #macos #аутентификация

Вопрос:

Я разрабатываю приложение, которое хочу запускать автоматически при входе пользователя в систему. Есть несколько ответов о том, как это сделать, в частности, я использую код из этого репозитория GitHub, и он отлично работает.

Чего я хочу сейчас, и не смог найти, как это сделать, так это запустить приложение, но без отображения главного окна. Это происходит только тогда, когда приложение запускается при входе в систему, если приложение закрыто и пользователь открывает его щелчком мыши в Dock (или чем угодно еще), я хочу, чтобы оно показывало окно.

Возможно ли это? Есть идеи о том, как это сделать?

В системных настройках учетных записей, где вы устанавливаете приложения, которые запускаются при входе в систему, есть флажок «скрыть», который выполняет то, что я хочу, но я хочу сделать это программно.

Ответ №1:

Что ж, я нашел, как это сделать… Это сообщение об ошибке Open Radar помогло, я использовал неправильное свойство.

Вот код:

 - (void)enableLoginItemWithLoginItemsReference:(LSSharedFileListRef )theLoginItemsRefs ForPath:(NSString *)appPath {
// We call LSSharedFileListInsertItemURL to insert the item at the bottom of Login Items list.
CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:appPath];

CFMutableDictionaryRef inPropertiesToSet = CFDictionaryCreateMutable(NULL, 1, NULL, NULL);
CFDictionaryAddValue(inPropertiesToSet, kLSSharedFileListLoginItemHidden, kCFBooleanTrue);

LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(theLoginItemsRefs, kLSSharedFileListItemLast, NULL, NULL, url, inPropertiesToSet, NULL);       
if (item) {
    CFRelease(item);
}
}
  

Решением было создать словарь с ключом kLSSharedFileListLoginItemHidden и значением true и передать его функции LSSharedFileListInsertItemURL.

Комментарии:

1. Привет, Маркос, у меня такая же проблема в моем приложении Mac OS X. Я попробовал ваш код, он установлен как скрытый (галочка включена) в User amp; Groups-> LoginItems для моего приложения после того, как я установил свое приложение на Mac OS X Lion. Но, когда я перезагружаю свой компьютер, открывается окно моего приложения, которое я хотел скрыть UIWindow вместо автоматического отображения. Не могли бы вы, пожалуйста, посоветовать мне, как я могу это точно исправить?

2. Спасибо за этот ответ, но как мне узнать, было ли приложение запущено автоматически или пользователем независимо от того, отображалось главное окно или нет? Спасибо!!

3. @marcos-crispino Не могли бы вы, пожалуйста, опубликовать код, в котором вы проверяете , было ли приложение открыто при входе в систему или открыто вручную?