У меня практически нет опыта программирования, кроме сценариев оболочки, но я нахожусь в ситуации, когда мне нужно вызвать двоичный файл с launchd и из-за изменений безопасности в Catilina выглядит так, как будто это не может быть AppleScript .app, Automator .app, или Утконос .app. Все три из них вызывают какой-то элемент GUI, и ни один из них не будет работать, как при запуске.
Я собрал фрагмент кода, который компилируется и работает для вызова скрипта, который мне нужен. Я связал это .app, подписал это, и это работает. Но я бы очень хотел назвать скрипт относительно бинарного.
Как я могу назвать эквивалент
[task setArguments:@[ @"../Resources/script" ]];
вместо
[task setArguments:@[ @"/Full/Path/To/script" ]];
Ниже приведен общий объем main.m
#import <Foundation/Foundation.h>
enter code here
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/bin/zsh"];
[task setArguments:@[ @"/Full/Path/To/script" ]];
[task launch];
}
return 0;
}
Кроме того, я знаю, что есть гораздо лучшие способы сделать это, но моя цель не в том, чтобы иметь удостоенное наград приложение, а просто в решении конкретной проблемы c. Большое спасибо.