2013-07-23 11 views
5

La mia app scriverà alcuni file sul file system ed è installata in/Applicazione non in/var/mobile/Application, Sul mio sviluppo iPhone, ogni cosa va bene.Ma quando si distribuiscono ad altri, Hanno ottenuto "Errore di Cocoa 513" . I file sono scritti in/var/mydir/files, qual è il problema? Dov'è il posto giusto dove scrivere con pieno permesso? Grazie.Perché compare "Errore Cocoa 513" quando si scrivono i file su "/ var/mydir/files" su un iPhone jailbroken?

Codice:

NSString *dir = @"/var/mydir/docs/"; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
if(![fileManager fileExistsAtPath:dir]) { 
    NSError *error = nil; 
    BOOL createdDir = [fileManager createDirectoryAtPath:dir withIntermediateDirectories:YES attributes:nil error:&error]; 
    if (!createdDir) { 
     UIAlertView *errorAlertView = [[UIAlertView alloc] initWithTitle:@"Attention" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [errorAlertView show]; 
    } 
} 

Errore:

The operation couldn't be completed. (Cocoa error 513). 
+0

possibile duplicato del [NSFileManager creazione della cartella (errore di cacao 513.)] (Http: //stackoverflow.com/questions/3439408/nsfilemanager-creating-folder-cocoa-error-513) –

+0

Vedere: http://stackoverflow.com/a/3439986/19410 per una risposta precedente a questa domanda –

+0

@AlexReynolds, I non pensare che la domanda/risposta debba essere considerata un duplicato, in questo caso. Questa domanda riguarda un'applicazione di jailbreak, installata in '/ Applicazioni /'. Tale app avrà una directory di documenti diversa e dovrà utilizzare API diverse per crearla. – Nate

risposta

2

Come ha detto @cahn, l'app viene rifiutata a causa di un problema di autorizzazione. Anche se installato in /Applications/, le app normalmente vengono eseguite come utente mobile. Come si può vedere da questa sessione di login:

$ ssh [email protected] 
[email protected]'s password: 
iPhone5:~ mobile$ cd /var 
iPhone5:/var mobile$ mkdir mydir 
mkdir: cannot create directory `mydir': Permission denied 

l'utente mobile non ha i permessi di scrittura direttamente sotto /var/.

Se si dà un'occhiata at this document on building Cydia apps on thebigboss.org, vedrai che essi raccomandano che applicazioni jailbreak creare documenti directory in /var/mobile/Library/YOURAPPNAME:

1) Appstore app runs in a sandbox at /var/mobile/Applications/GUID/folder. Jailbroken app runs in /Applications

2) Appstore app has a Documents folder that is created by the installation process. Jailbroken app does not. It is up to the app to create its own folder. Should you need this type of folder, you must create this with a simple mkdir command in your applicationDidFinishLaunching function. Just add a simple function: mkdir(“/var/mobile/Library/YOURAPPNAME”, 0755); If the folder already exists, no harm done. You want to do this because the install process runs as user root and the app runs as user mobile. If Cydia does this for you then the folder will have the incorrect permissions.

+0

@ Nate, grazie mille, sei così gentile! – Suge

+0

Prego, Bob! – Nate

+0

@ Nate, ho incontrato un altro problema, perché dovrei collegare UIResponder di ogni app include SpringBoard e qualsiasi altro.Nell'aggancio, scriverò qualcosa nel file specificato.Se imposto il percorso in/var/mobile/Library/MyApp , Ho scoperto che solo SpringBoard e MyApp potevano scrivere correttamente. Quindi c'è un posto in cui ogni app può scrivere e leggere? – Suge

3

errore di cacao 513 è NSFileWriteNoPermissionError. Puoi trovarlo in Foundation Constants Reference. Forse non hai i permessi di scrittura per /var.

+0

Grazie, ma dov'è il posto giusto per le app come la mia per scrivere file con autorizzazioni in modo nativo? – Suge

+0

Non so quale sia la norma per le app jailbroken. Per le app dell'appstager '[fileManager URLSerDirectory: NSDocumentDirectory inDomains: NSUserDomainMask]' è il luogo. – cahn

+0

@Bob, come ho detto nella mia risposta, la posizione raccomandata sarebbe '/ var/mobile/Library/YOURAPPNAME'. – Nate