Привилегированный помощник в рамках проекта Swift

Я создал проект Xcode с использованием Swift и привилегированного инструмента Helper с помощью Objective-C. Вспомогательный инструмент прекрасно работает в рамках проекта, который также был создан в Objective-C, но он не работает в проекте, созданном с помощью Swift.

Установка самого сервиса. Я могу видеть вспомогательную двоичную информацию в каталоге /Library/PrivilegedHelperTools, и ее разрешения выглядят нормально (а также пользователь: root). Удаление помощника с помощью launchctl приводит к повторной установке инструмента, когда мой проект выполняется (работает как ожидалось), но я не могу вызвать какой-либо метод вспомогательного инструмента.

Никакое исключение не возникает и не возникает какая-либо другая ошибка (по крайней мере, похоже, что нет ошибки, поскольку консоль тоже ничего не показывает).

Кто-нибудь знает, может ли это быть проблемой для Swift? Поскольку работает тот же вспомогательный инструмент в другом проекте (написанный в Objective-C), хорошо работает.

1 ответ

Я мог бы выяснить, в чем проблема. Вспомогательный инструмент имеет main.m, содержащий метод main(). Я просто забыл заполнить его кодом, который создает экземпляр моего вспомогательного класса и запускает его слушатель:

#import <foundation foundation.h="">
#import "Helper.h"
int main(int argc, const char * argv[])
{
 @autoreleasepool
 {
 Helper *helper = [[Helper alloc] init];
 [helper run];
 }
 return EXIT_FAILURE;
}
</foundation>

Этот код заставляет экземпляр Helper запускаться в бесконечном цикле, ожидающем входящих соединений (от Helper.h):

- (void)run
{
 [_listener resume];
 [[NSRunLoop currentRunLoop] run];
}

_listener является экземпляром NSXPCListener.

licensed under cc by-sa 3.0 with attribution.