2013-07-23 15 views
5

Moja aplikacja napisze niektóre pliki do systemu plików i jest zainstalowana w/aplikacji nie w/var/mobile/aplikacji, na moim iPhone rozwijać, wszystko idzie dobrze.Ale gdy rozpowszechniać do innych, dostali "błąd kakao 513" . Pliki są zapisywane w/var/mydir/files, co to jest problem? Gdzie jest właściwe miejsce do napisania z pełnym zezwoleniem? Dziękuję.Dlaczego pojawia się komunikat "Błąd kakao 513" podczas zapisywania plików "/ var/mojir/files" na jailbreak iPhone?

Kod:

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]; 
    } 
} 

Błąd:

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

możliwe duplikat [NSFileManager tworzenia folderu (błąd kakao 513)]. (Http: //stackoverflow.com/questions/3439408/nsfilemanager-creating-folder-cocoa-error-513) –

+0

Zobacz: http://stackoverflow.com/a/3439986/19410 po wcześniejszą odpowiedź na to pytanie. –

+0

@AlexReynolds, I nie sądzę, aby pytanie/odpowiedź należało uznać za duplikat w tym przypadku. To pytanie dotyczy aplikacji jailbreak, zainstalowanej w '/ Applications /'. Taka aplikacja będzie miała inny katalog dokumentów i będzie musiała korzystać z różnych interfejsów API w celu jej utworzenia. – Nate

Odpowiedz

2

Jak powiedział @cahn, Twoja aplikacja jest odrzucana z powodu problemu z uprawnieniami. Nawet jeśli jest zainstalowany w /Applications/, aplikacje zwykle działają jako użytkownik mobile. Jak widać z tej sesji logowania:

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

mobilny użytkownik nie ma uprawnień do zapisu bezpośrednio pod /var/.

Jeśli spojrzeć at this document on building Cydia apps on thebigboss.org, zobaczysz, że oni zalecają aplikacje jailbreak tworzyć dokumenty katalogów na /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, dziękuję bardzo, jesteś taki miły! – Suge

+0

Nie ma za co, Bob! – Nate

+0

@ Nate, spotkałem się z innym problemem, ponieważ powinienem podłączyć UIResponder każdej aplikacji obejmują SpringBoard i wszelkie inne. W przypadku zahaczenia, napiszę coś do określonego pliku. Jeśli ustawię ścieżkę do/var/mobile/Library/MyApp , Stwierdziłem, że tylko SpringBoard i MyApp mogą pisać z powodzeniem. Czy jest tam miejsce, gdzie każda aplikacja może pisać i czytać? – Suge

3

błąd kakao 513 jest NSFileWriteNoPermissionError. Możesz go znaleźć w Foundation Constants Reference. Być może nie masz uprawnień do zapisu dla /var.

+0

Dziękuję, ale gdzie jest odpowiednie miejsce dla takich aplikacji jak moja, aby pisać pliki z uprawnieniami natywnie? – Suge

+0

Nie wiem, co jest normą dla aplikacji jailbroken. Dla aplikacji typu appstore: '[fileManager URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask]' jest miejscem. – cahn

+0

@ Bob, jak mówię w mojej odpowiedzi, zalecana lokalizacja to '/ var/mobile/Library/YOURAPPNAME'. – Nate

Powiązane problemy