SMJobBless — документация о том, когда он запрашивает пароль администратора

Кажется, я не могу найти какую-либо документацию по этому поводу, поэтому, надеюсь, кто-то может подтвердить поведение, которое я вижу, с образцом Apple SMJobBless код.

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

Однако это впечатление, по-видимому, неверно.

Поведение, которое я вижу в версии 10.6, заключается в том, что если я запускаю приложение в первый раз, оно запросит пароль. Если я запущу почти сразу, этого не произойдет. Однако, если я подожду достаточно долго, он снова запросит пароль. При этом вспомогательный инструмент не меняется.

Может ли кто-нибудь указать на документацию, которая определяет это как правильное поведение?


person ericg    schedule 29.09.2011    source источник


Ответы (1)


Если кому интересно, то это (вероятно) оказалось багом и один запилен. рдар://10280469

В настоящее время система работает так, что она будет запрашивать пароль администратора каждый раз, независимо от того, требуется ли функция SMJobBless для установки вспомогательного инструмента или нет. Ошибка (вероятно) в том, что запрос пароля администратора не следует делать, если вспомогательный инструмент не нужно устанавливать (например, он уже установлен и имеет ту же версию, что и в комплекте приложения).

Итак, это означает, что определение необходимости установки вспомогательного инструмента должно быть выполнено до вызова SMJobBless, а SMJobBless следует вызывать только в том случае, если уже известно, что вспомогательный инструмент необходимо установить.

В моем случае мне нужно только проверить, установлен ли инструмент (с этим справляется SMJobCopyDictionary) и, если инструмент установлен, старше ли его версия, чем версия инструмента в моем комплекте приложений.

Некоторый (неполный) код для проверки того, установлен ли инструмент и какие у него версии, приведен ниже.

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

NSDictionary* installedHelperJobData;

installedHelperJobData  = (NSDictionary*)SMJobCopyDictionary( kSMDomainSystemLaunchd, (CFStringRef)@"com.apple.bsd.SMJobBlessHelper" );

NSString*       installedPath           = [[installedHelperJobData objectForKey:@"ProgramArguments"] objectAtIndex:0];
NSURL*          installedPathURL        = [NSURL fileURLWithPath:installedPath];

NSDictionary*   installedInfoPlist      = (NSDictionary*)CFBundleCopyInfoDictionaryForURL( (CFURLRef)installedPathURL );
NSString*       installedBundleVersion  = [installedInfoPlist objectForKey:@"CFBundleVersion"];
NSInteger       installedVersion        = [installedBundleVersion integerValue];

NSLog( @"installedVersion: %ld", (long)installedVersion );

NSBundle*       appBundle       = [NSBundle mainBundle];
NSURL*          appBundleURL    = [appBundle bundleURL];

NSURL*          currentHelperToolURL    = [appBundleURL URLByAppendingPathComponent:@"Contents/Library/LaunchServices/com.apple.bsd.SMJobBlessHelper"];
NSDictionary*   currentInfoPlist        = (NSDictionary*)CFBundleCopyInfoDictionaryForURL( (CFURLRef)currentHelperToolURL );
NSString*       currentBundleVersion    = [currentInfoPlist objectForKey:@"CFBundleVersion"];
NSInteger       currentVersion          = [currentBundleVersion integerValue];

NSLog( @"currentVersion: %ld", (long)currentVersion );
person ericg    schedule 13.10.2011
comment
Спасибо - документ SM * немного сложно пройти, это было очень полезно. - person Mark Aufflick; 29.03.2012
comment
Также см. эту почтовую ветку (тот же вопрос от того же автора), которая в дополнение к вышеизложенному содержит пример приложения, включая вышеуказанные проверки, а также проверку подписи кода для установленного вспомогательного инструмента (чтобы вы не доверяли замененному помощнику с тем же имя/версия): cocoabuilder.com/archive/cocoa/< /а> - person Mark Aufflick; 29.03.2012