Ошибка SMJobBless с кодом CFErrorDomainLaunchd 9

Кто-нибудь знает, что означает этот код ошибки? Я получаю ошибку SMJobBless с этим значением кода возврата.

Failed to bless helper: Error Domain=CFErrorDomainLaunchd Code=9 "The operation couldn’t be completed. (CFErrorDomainLaunchd error 9.)"

Я погуглил, посмотрел ответы в блогах, в Apple Docs, вот там и не смог найти ответ что это и как это исправить. Люди говорят (на каком-то форуме поддержки, что переустановка OS X помогла им).

Это произошло в моем текущем проекте уже пару недель назад, и единственное, что помогло мне исправить это, было изменение названия моего вспомогательного инструмента. Теперь это случилось снова.

В то же время мой код работает на других компьютерах, эта проблема затрагивает только мою рабочую станцию.

Обновление: после переименования снова работает. Теперь у меня есть два идентификатора набора вспомогательных инструментов, "заблокированных" в моей системе:-(

Обновление 2: это происходит и на других компьютерах:-(

2 ответа

Решение

В моем случае ошибка

Не удалось благословить помощника: Ошибка Domain=CFErrorDomainLaunchd Code=9 "Операция не может быть завершена. (CFErrorDomainLaunchd error 9.)"

означало, что вспомогательный инструмент был добавлен в список постоянно отключенных сервисов здесь:

/private/var/db/com.apple.xpc.launchd/disabled.plist

Я говорю для Yosemite, более старые / младшие версии ОС могут иметь их здесь (я не проверял):

/var/db/launchd.db/com.apple.launchd.peruser.*user_id*/overrides.plist

После прочтения справочной страницы launchctl я обнаружил, что аргумент подкоманды "unload" -w добавляет сервис к этому plist-файлу. Я использовал этот флаг в своем скрипте удаления, что привело к невозможности использования инструмента "благословение" в следующий раз.

Кажется, нет никакого способа удалить службу из этого файла disabled.plist. При каждой перезагрузке файл восстанавливается из кеша launchd, и очистка кеша, похоже, еще не реализована. Службу можно включить только навсегда, поэтому launchd не остановит ее запуск.

Вот несколько ссылок, которые могут быть полезны для тех, кто столкнется с подобной проблемой:

С High Sierra (и, вероятно, раньше, но я не знаю с тех пор, когда), есть несколько вспомогательных подкоманд для launchctl.

launchctl print-disabled system

перечислит явно отключенные сервисы. Обязательно проверьте false/true значение.

Чтобы включить отключенную службу

sudo launchctl enable system/com.example.service

Кроме того, для записей, в /System/Library/Frameworks/ServiceManagement.framework/Versions/A/Headers/SMErrors.h можно прочитать:

enum {
        kSMErrorInternalFailure = 2,
        kSMErrorInvalidSignature,
        kSMErrorAuthorizationFailure,
        kSMErrorToolNotValid,
        kSMErrorJobNotFound,
        kSMErrorServiceUnavailable,
        kSMErrorJobPlistNotFound,
        kSMErrorJobMustBeEnabled,
        kSMErrorInvalidPlist,
};

где код 9 (kSMErrorJobMustBeEnabled) имеет больше смысла, чем "Операция не может быть завершена".

Другие вопросы по тегам