Al fine di risparmiare sui costi della larghezza di banda lato server associati alla mia applicazione iOS, ho confezionato una serie di risorse che altrimenti sarebbero scaricabili in fase di runtime nel mio pacchetto di applicazioni iOS. Nel contesto dell'applicazione come scritto, sarebbe ideale per me se potessi accedere ai file da una delle directory scrivibili dall'utente (es. [App Dir]/Library/Application Support/My Custom Subfolder/
) senza dover copiare i file direttamente in fase di esecuzione (ad esempio all'avvio, prima esecuzione, qualunque cosa).È possibile creare collegamenti fisici ai file in un pacchetto di applicazioni iOS?
Mentre io sono stato in grado di creare con successo i collegamenti simbolici in .../My Custom Subfolder/
ai file nel fascio utilizzando l'API NSFileManager
createSymbolicLinkAtURL:withDestinationURL:error:
, alcune delle API quadro Ho quindi utilizzare per accedere al contenuto più tardi ottenere preso una cantonata e ridammi attributi e dati relativi ai collegamenti simbolici anziché al file sottostante. Probabilmente potrei mitigare tali problemi utilizzando alcune altre API di framework, ma potrebbe finire per lavorare molto a seconda dell'ambito degli usi errati.
Sul simulatore sono stato in grado di ovviare con successo a questo problema creando collegamenti rigidi al contenuto del bundle utilizzando l'API NSFileManager
linkItemAtURL:toURL:error:
. Gli hard link funzionavano alla grande per tutte le API di accesso ai file utilizzate in tutta l'app e tutto era peachy. Tuttavia, su DEVICE (testato su iPhone 5c con iOS 7.0.2 e iPad con iOS 7.1), ricevo un NSCocoaErrorDomain 513 error (Operation could not be completed. Operation not permitted.)
. Potrei creare un file di test in .../My Custom Subfolder/
e creare un collegamento hard a quello nella stessa cartella, ma se provo a collegarmi a qualcosa nel pacchetto di applicazioni di sola lettura, ottengo l'errore 513.
Qualcuno sa se c'è un modo per aggirare l'errore delle autorizzazioni al fine di realizzare ciò che sto cercando di fare?
In questo modo: https://gist.github.com/albertodebortoli/2204433 – danh
@danh, grazie per la risposta. Tuttavia, lo snippet di codice copia semplicemente i file nella directory scrivibile dall'utente, raddoppiando efficacemente la quantità di spazio che la risorsa occupa sul disco. La mia intenzione era quella di evitare di copiare il file e utilizzare invece un "hard link" al file che si comporterebbe come il file senza consumare ulteriore spazio su disco. – zemelenda
Perché hai bisogno di collegamenti fisici ai file nel pacchetto di app invece di copiarli? Sembra che tu stia cercando di aggirare il divieto di modificare il pacchetto di applicazioni. Se fosse permesso, creerebbe un enorme buco di sicurezza. – Caleb