Я использовал для передачи NSError в CFErrorRef, как это, и используя его в SMJobBless
NSError *error
BOOL removed = SMJobRemove(kSMDomainSystemLaunchd,
(CFStringRef) daemonBundleID,
auth,
true,
(CFErrorRef*) &error);
if (!removed) {
NSLog(@"Failed to remove existing PacketTool");
[NSApp presentError: error];
}
Поскольку у меня были ошибки с ARC, "Приведение косвенного указателя на указатель Obj-C на" CFErrorRef "не разрешено с помощью ARC", я изменил и решил сделать противоположное
CFErrorRef *cfError = nil;
BOOL blessed = SMJobBless(kSMDomainSystemLaunchd, (__bridge CFStringRef)daemonBundleID,
auth,
cfError);
if (!blessed) {
NSError *error = (__bridge NSError *)cfError;
NSLog(@"Failed to bless PacketTool: %@", error);
[NSApp presentError: error];
return FALSE;
}
Теперь у меня есть "Несовместимые типы, накладывающие" CFErrorRef "на NSError *" с помощью __bridge cast
Что я могу сделать?
Обновление: благодаря Грегу, теперь правильный код:
CFErrorRef cfError = nil;
BOOL blessed = SMJobBless(kSMDomainSystemLaunchd,
(__bridge CFStringRef) daemonBundleID,
auth,
&cfError);
if (!blessed) {
NSError *error = (__bridge NSError *)cfError;
NSLog(@"Failed to bless PacketTool: %@", error);
[NSApp presentError: error];
return FALSE;
}