Domanda

Sto cercando di creare una cartella all'interno della cartella dei suoni / della mia app.

-(void)productPurchased:(UAProduct*) product {
    NSLog(@"[StoreFrontDelegate] Purchased: %@ -- %@", product.productIdentifier, product.title);

    NSFileManager *manager = [NSFileManager defaultManager];
    NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];

    NSError *error;

    NSString *dataPath = [NSString stringWithFormat:@"%@/sounds/%@", bundleRoot, product.title];

    if (![manager fileExistsAtPath:dataPath isDirectory:YES]) {
        [manager createDirectoryAtPath:dataPath withIntermediateDirectories:YES attributes:nil error:&error];
        NSLog(@"Creating folder");
    }

    NSLog(@"%@", error);
}

Ma ottengo questo errore:

Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn’t be completed. (Cocoa error 513.)" UserInfo=0x175120 {NSFilePath=/var/mobile/Applications/D83FDFF9-2600-4056-9047-05F82633A2E4/App.app/sounds/Test Tones, NSUnderlyingError=0x117520 "The operation couldn’t be completed. Operation not permitted"}

Che cosa sto facendo di sbagliato? Grazie.

È stato utile?

Soluzione

Se si esegue una ricerca Google sul dominio di errore NSCocoaErrorDomain si scopre che il codice 513 traduce l'errore NSFileWriteNoPermissionError .

Questo vi dà l'indizio fondamentale per risolvere questo problema:

  

Questa è la directory pacco contenente l'applicazione stessa. Perché la domanda deve essere firmata, non si deve modificare il contenuto di questa directory in fase di esecuzione. In questo modo può impedire l'applicazione da lanciare in seguito.

In particolare, non è possibile modificare il contenuto della cartella fascio di un'applicazione compilata. Questo perché il fascio è l'applicazione compilata.

Quando finalmente distribuire l'applicazione tramite iTunes App Store, l'applicazione dispone di una firma digitale che convalida il contenuto del app. Questa firma viene generata in fase di compilazione.

Se si tenta di modificare il pacchetto dopo la compilazione, i cambiamenti app e la firma digitale non è più valido. Questa invalida l'applicazione - che sa quale codice è in là, giusto? - e gli utenti finali non saranno in grado di farlo funzionare. Così Apple ha istituito iOS per lanciare un errore se si tenta di modificare il pacchetto.

Invece di scrivere al fascio, la vostra applicazione può scrivere a una delle tre cartelle app-specifico accettato : Documents, Temp e Cache. Molto probabilmente, si vuole in scrittura alla cartella Documents.

Queste cartelle sono accessibili solo per la vostra applicazione. Nessun altra applicazione può accedere ai contenuti di queste cartelle. (Allo stesso modo, la vostra applicazione non può accedere alle cartelle di un altro app.)

È possibile impostare la vostra applicazione per consentire all'utente finale di gestire l'accesso ai dati dei file tramite iTunes, tramite file sul desktop il supporto condivisione .

Altri suggerimenti

Questo è perché non si dovrebbe mai modificare il fascio della vostra applicazione in fase di esecuzione. Invece, si dovrebbe avere una cartella altrove in cui è possibile aggiungere risorse.

EDIT:
L'errore che state vedendo è più probabile perché non è possibile scrivere al pacchetto.

ho incontrato lo stesso problema, quando si utilizza un Accedi biblioteca. Infine, il suo percorso problema di formato. Controllare il formato dataPath. Se è Case 1, è valido. Nel mio caso, è Case 2, così sono riuscito a creare la directory.

// Case 1
/var/mobile/Containers/Data/Application/5FB2CD2D-91DC-4FB2-8D6F-06369C70BB4A/Library/Caches/AppLogs

// Case 2, invalid format
file://var/mobile/Containers/Data/Application/5FB2CD2D-91DC-4FB2-8D6F-06369C70BB4A/Library/Caches/AppLogs

Se il dataPath ha un prefisso, ad esempio:. file://, è non valida


Per quanto riguarda un'istanza di NSURL, path restituirà la stringa del tipo case 1, e absolutePath restituirà la stringa come case 2.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top