Как приложение Какао может добавить себя в качестве глобального элемента входа? - PullRequest
5 голосов
/ 27 марта 2011

Я пытался

LSSharedFileListRef globalLoginItems = LSSharedFileListCreate(NULL, kLSSharedFileListGlobalLoginItems, NULL);
if (globalLoginItems) {
    LSSharedFileListItemRef ourLoginItem = LSSharedFileListInsertItemURL(globalLoginItems,
                                                                         kLSSharedFileListItemLast,
                                                                         NULL, NULL,
                                                                         (CFURLRef)[[NSBundle mainBundle] bundleURL], 
                                                                         NULL, NULL);
    if (ourLoginItem) {
        CFRelease(ourLoginItem);
    } else {
        NSLog(@"Could not insert ourselves as a global login item");
    }

    CFRelease(globalLoginItems);
} else {
    NSLog(@"Could not get the global login items");
}

LSSharedFileListInsertItemURL () только что возвратил NULL, когда я собрал и запустил приложение.Есть ли что-то еще, что мне нужно сделать?Какой-то тип авторизации?

ПРИМЕЧАНИЕ. Вариант использования здесь для глобальных элементов входа в систему, который использует kLSSharedFileListGlobalLoginItems, а не kLSSharedFileListSessionLoginItems.

Ответы [ 3 ]

5 голосов
/ 28 марта 2011

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

AuthorizationRef auth = NULL; 
AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &auth);
LSSharedFileListSetAuthorization(globalLoginItems, auth);

Документы для LSSharedFileListSetAuthorization говорят, что мы должны получить право system.global-login-items для этого, но этовсе же сработало!

Но это не получится, если пользователь не является администратором.Для того, чтобы это работало тогда, вам придется сделать следующее:

AuthorizationItem right[1] = {{"system.global-login-items.", 0, NULL, 0}};
AuthorizationRights setOfRights = {1, right};
AuthorizationRef auth = NULL; 
AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &auth);


AuthorizationCopyRights(auth, &setOfRights, kAuthorizationEmptyEnvironment,
                              (kAuthorizationFlagDefaults
                               | kAuthorizationFlagInteractionAllowed
                               | kAuthorizationFlagExtendRights), NULL);

Также рекомендуется обратиться к документам для подробностей.

1 голос
/ 27 марта 2011

Это работает для меня:

NSString * appPath = [[NSBundle mainBundle] bundlePath];

// This will retrieve the path for the application
CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:appPath]; 

// Create a reference to the shared file list.
// We are adding it to the current user only.
// If we want to add it all users, use
// kLSSharedFileListGlobalLoginItems instead of
//kLSSharedFileListSessionLoginItems
LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);
if (loginItems) {
    //Insert an item to the list.
    LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(loginItems,kLSSharedFileListItemLast, NULL, NULL,url, NULL, NULL);
    if (item){
        CFRelease(item);
    }
}   

CFRelease(loginItems);
0 голосов
/ 27 марта 2011
NSString * appPath = [[NSBundle mainBundle] bundlePath];

        // This will retrieve the path for the application
        CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:appPath]; 

        LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListGlobalLoginItems, NULL);
        if (loginItems) {
            //Insert an item to the list.
            LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(loginItems,kLSSharedFileListItemLast, NULL, NULL,url, NULL, NULL);
            if (item){
                CFRelease(item);
            }
        }   

        CFRelease(loginItems);

Не работает этот код?Я заменил элементы kLSSharedFileListSessionLogin на элементы kLSSharedFileListGlobalLoginItems

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...