2012-03-04 2 views

risposta

30

Se si desidera che il percorso alla directory home reale dell'utente è possibile utilizzare:

char *realHome = getpwuid(getuid())->pw_dir; 

esempio completa:

#include <unistd.h> 
#include <sys/types.h> 
#include <pwd.h> 
#include <assert.h> 

NSString *RealHomeDirectory() { 
    struct passwd *pw = getpwuid(getuid()); 
    assert(pw); 
    return [NSString stringWithUTF8String:pw->pw_dir]; 
} 

Questo vi dà la percorso alla home dell'utente , ma non ti dà automaticamente accesso a quella cartella.Come notato nei commenti, è possibile utilizzare questo percorso per:

  • fornendo una cartella predefinita sano di mente per l'Open/Save dialogs
  • rilevare se ci si trova in una sandbox, confrontando il risultato NSHomeDirectory()
+1

L'unica cosa che fa davvero bene è impostare un default corretto per le finestre di dialogo di apertura/salvataggio dei file. In questo momento, se impostato su NSHomeDirectory() non è molto facile da usare. La maggior parte delle persone non sa nemmeno cosa sia la cartella Libreria. – Justin808

+1

Questo è un buon uso, un altro è quello di verificare se sei nella sandbox confrontandolo con quello che 'NSHomeDirectory()' ritorna, e sono sicuro che ce ne sono altri ... – CRD

+0

E ancora un altro è quello di accedere ad un file tramite il 'com.apple.security.temporary-exception.files.home-relative-path. *' autorizzazioni temporanee – Dov

10

Dalla mela documentation:

Accesso ai dati utente

Mac OS X percorso conoscitiva API, sopra lo strato POSIX, tornare percorsi rispetto al contenitore, invece di relativa alla casa dell'utente directory. Se la vostra applicazione, prima di sandbox che, accede a posizioni in home directory effettiva dell'utente (~) e si utilizza cacao o Core API Fondazione, poi, dopo aver attivato sandboxing, il codice di percorso conoscitiva utilizza automaticamente il contenitore della tua app anziché.

Per il primo avvio della tua app sandbox, Mac OS X automaticamente migra il file delle preferenze principali dell'app. Se la tua applicazione utilizza ulteriori file di supporto, eseguire una migrazione di una volta di quei file al contenitore , come descritto in “Migrazione di un App per una sandbox.”

Se si utilizza un comando POSIX, come getpwuid per ottenere il percorso nella directory home effettiva dell'utente, prendere in considerazione l'uso di un simbolo Cocoa o come la funzione NSHomeDirectory. Utilizzando la fondazione Cocoa o Core , si supporta la limitazione App Sandbox rispetto all'accesso diretto alla home directory dell'utente.

Se la vostra applicazione richiede l'accesso alla directory home dell'utente al fine di funzione, lasciate Mela conoscere le vostre esigenze utilizzando il Apple bug reporting system.

+7

che è ridicolo ... ma informativo. Grazie. – Dakine83

0

Utilizzando Swift, è possibile accedere al percorso della directory utenti a casa da un'applicazione sandbox come questo:

var userHomeDirectoryPath : String { 
    let pw = getpwuid(getuid()) 
    let home = pw?.pointee.pw_dir 
    let homePath = FileManager.default.string(withFileSystemRepresentation: home!, length: Int(strlen(home))) 

    return homePath 
} 


ho creato questo modo lution basato su uno snippet in questo post del blog: http://zpasternack.org/accessing-the-real-home-folder-from-a-sandboxed-app/