Подтвердить что ты не робот

Как добавить изолированное приложение к элементам входа в систему

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

Я знаю, что мне нужно создать помощника для достижения этого? Есть ли простой учебник с примером кода для этого?

Я нашел этот учебник, но он не работает для меня: http://www.delitestudio.com/2011/10/25/start-dockless-apps-at-login-with-app-sandbox-enabled/

Это довольно стандартная вещь, я не понимаю, почему нет доступного проекта.

UPDATE:

Я загрузил образец проекта: http://ge.tt/6DntY4K/v/0?c

4b9b3361

Ответ 1

Вам следует воспользоваться этим (отказ от ответственности: my) учебник, включая образец проекта.

Обновление:. Я протестировал тестовый проект, который вы загрузили: он отлично работает со мной, без каких-либо изменений, и запуск при успешном входе в систему. Единственный трюк заключается в том, что файл AutoStart.app должен быть помещен в папку /Applications или ~/Applications, которая будет успешно запущена при входе в систему. Это необходимо независимо от того, изолировано ли приложение или нет. Однако, боюсь, официальной документации на это нет.

Ответ 2

Я только что переделал около 100 проб на Тим учебник. Наконец, я сделал это. Хотя я клянусь, что это сработало, когда я впервые попробовал это. В моей ситуации, когда я переключаю "Запуск при входе" в "Вкл.", Я вижу только приложение-помощник, запущенное всего на одну секунду сразу после входа в систему. Потом он исчез. Вручную запустив приложение, я увидел, что переключатель выключен.

Вот что я нашел:

  • идентификатор моего пакета уже был в списке NSArray *running = [[NSWorkspace sharedWorkspace] runningApplications]
  • статус NSRunningApplication *app (bundle name equal to my app): [app isActive] == NO, [app isHidden] == NO, [app isTerminated] = NO

Итак, я внесла некоторые изменения в код, например:

BOOL alreadyRunning = NO;
BOOL isActive = NO; // my modification
NSArray *running = [[NSWorkspace sharedWorkspace] runningApplications];
for (NSRunningApplication *app in running) {

    if ([[app bundleIdentifier] isEqualToString:@"com.mybundleidentifier"]) {
        alreadyRunning = YES;
        isActive = [app isActive]; // my modification
    }
}

if (!alreadyRunning || !isActive) { // my modification
  ....

Ответ 3

Вы можете попробовать использовать Service Management Framework

http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLoginItems.html#//apple_ref/doc/uid/10000172i-SW5-SW1

Как указано из http://developer.apple.com/library/mac/#documentation/Security/Conceptual/AppSandboxDesignGuide/DesigningYourSandbox/DesigningYourSandbox.html...

Чтобы создать элемент входа для вашего изолированного приложения, используйте функцию SMLoginItemSetEnabled (объявленную в ServiceManagement/SMLoginItem.h), как описано в Adding Login Items Using the Service Management Framework в "Демоны" и Services Programming Guide.

(С помощью приложения Sandbox вы не можете создать элемент входа, используя функции в заголовочном файле LSSharedFileList.h. Например, вы не можете использовать функцию LSSharedFileListInsertItemURL. Вы также не можете манипулировать состоянием служб запуска, например, используя функция LSRegisterURL).