SMJobBless и друзья
Я сделал приложение, которое было отправлено в Mac AppStore. По некоторым причинам они отказались от этого, потому что он устанавливал вспомогательный инструмент, используя SMJobBless API.
Поскольку этот вспомогательный инструмент не требуется для большинства функций приложения, я удалил его, и мое приложение было принято.
Итак, прямо сейчас я упаковываю автономный установщик для вспомогательного инструмента, который можно было бы загрузить в Интернете.
Однако после того, как я установил файлы на месте, вспомогательный инструмент отказывается запускаться... Вспомогательный инструмент просто имеет plist, который входит в /Library/LaunchDaemons, и двоичный файл, который входит в /Library/PrivilegedHelperTools.
Теперь мне интересно, что именно SMJobBless делает больше, чем просто перемещает файлы? Это регистрация моего инструмента с launchctl? Я пробовал разные вещи, чтобы вручную добавить его в launchctl, но безуспешно: вспомогательный инструмент просто выходит из системы после запроса на регистрацию запроса.
Вспомогательный инструмент просто содержит следующее:
@autoreleasepool {
launch_data_t req = launch_data_new_string(LAUNCH_KEY_CHECKIN);
launch_data_t resp = launch_msg(req); // AT THIS POINT, RESP IS NULL. Why?
launch_data_t machData = launch_data_dict_lookup(resp, LAUNCH_JOBKEY_MACHSERVICES);
launch_data_t machPData = launch_data_dict_lookup(machData, [kHelperBundleName UTF8String]);
mach_port_t mp = launch_data_get_machport(machPData);
launch_data_free (resp);
launch_data_free (req);
// Prepare connexion.
NSMachPort *rp = [[NSMachPort alloc] initWithMachPort:mp];
PrivilegedHelperProxy
*phProxy = [[[PrivilegedHelperProxy alloc] init] autorelease];
NSConnection *con = [NSConnection connectionWithReceivePort:rp sendPort:nil];
[rp release];
[con setRootObject:phProxy];
[[NSRunLoop currentRunLoop] run];
}
return EXIT_SUCCESS;
Эта служба работала безупречно при установке через API SMJobBless, а корневой прокси был доступен из моего приложения...
Итак, каковы были бы необходимые шаги для моего установщика, чтобы этот вспомогательный инструмент работал должным образом, как это было бы при обращении к SMJobBless API?
Спасибо, Пьер.
1 ответ
Решаемые. Запись PList для вспомогательного инструмента не включала какие-либо ProgramArguments (похоже, это не проблема с SMJobBless API). После добавления их в PList вспомогательный инструмент может работать правильно, и установщик правильно его регистрирует.
В любом случае спасибо! Пьер.