2011-09-29 24 views
5

Non riesco a trovare alcuna documentazione su questo, quindi spero che qualcuno possa confermare il comportamento che sto vedendo con il codice campione SMJobBless di Apple.SMJobBless - documentazione su quando richiede la password dell'amministratore

Avevo l'impressione che avrebbe richiesto una password di amministratore solo se fosse stato rilevato che era necessaria l'installazione di una nuova versione dello strumento di supporto.

Tuttavia, questa impressione è apparentemente errata.

Il comportamento visualizzato sotto 10.6 è che se lancio l'app per la prima volta, richiederà la password. Se lancio quasi immediatamente, non lo farò. Tuttavia, se aspetto un tempo sufficientemente lungo, chiederà di nuovo la password. Durante tutto questo, lo strumento di aiuto non cambia.

Qualcuno può puntare alla documentazione che definisce questo comportamento corretto?

risposta

12

Se qualcuno è interessato, questo (probabilmente) si è rivelato un bug e uno è stato archiviato. rdar: // 10280469

Il modo in cui il sistema attualmente funziona è che richiederà sempre una password di amministratore indipendentemente dal fatto che la funzione SMJobBless debba o meno installare lo strumento helper o meno. Il bug è (probabilmente) che una richiesta di password amministratore non dovrebbe essere eseguita se non è necessario installare lo strumento helper (ad esempio, è già installato e ha la stessa versione di quello nel pacchetto app).

Quindi, ciò significa che è necessario stabilire se lo strumento di supporto deve essere installato o meno prima che venga chiamata una chiamata a SMJobBless e SMJobBless solo se è già noto che lo strumento di supporto deve essere installato.

Nel mio caso, ho solo bisogno di controllare se lo strumento è installato (SMJobCopyDictionary gestisce questo) e, se lo strumento è installato, se la sua versione è precedente o meno la versione dello strumento nel mio pacchetto di app.

Alcuni (incompleti) codici per verificare se lo strumento è installato e quali sono le versioni riportate di seguito.

C'è un'altra alternativa per fare un controllo di versione dello strumento di supporto che è per lo strumento di supporto per ricevere una richiesta per la sua versione e per poter inviare una risposta di risposta. Personalmente, mi piace il metodo qui sotto, ma volevo menzionare questa alternativa in quanto potrebbe essere il percorso migliore in alcune situazioni.

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); 
+0

Grazie - la SM * doco è un po 'difficile da guadare, questo è stato molto utile. –

+1

Vedere anche questo thread di posta (della stessa domanda dello stesso autore) che in aggiunta a quanto sopra contiene un'app di esempio che include i controlli sopra più un controllo della firma del codice per lo strumento helper installato (per evitare che si fida di un helper sostituito con il stesso nome/versione): http://www.cocoabuilder.com/archive/cocoa/309298-question-about-smjobbless.html –

Problemi correlati