2013-07-23 71 views
5

Ứng dụng của tôi sẽ viết một số tệp vào hệ thống tệp và được cài đặt trong/Ứng dụng không có trong/var/mobile/Application, Trên iPhone phát triển của tôi, mọi thứ đều đúng. Nhưng khi phân phối cho người khác, họ nhận được "Lỗi Cocoa 513" Các tập tin được viết tại/var/mydir/files, vấn đề đó là gì? Đâu là nơi thích hợp để tôi viết với sự cho phép đầy đủ? Cảm ơn bạn.Tại sao tôi nhận được "lỗi Cocoa 513" khi ghi tệp vào "/ var/mydir/files" trên iPhone đã bị bẻ khóa?

Code:

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

Lỗi:

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

thể trùng lặp của [NSFileManager tạo thư mục (Cocoa lỗi 513).] (Http: //stackoverflow.com/questions/3439408/nsfilemanager-creating-folder-cocoa-error-513) –

+0

Xem: http://stackoverflow.com/a/3439986/19410 cho câu trả lời trước cho câu hỏi này –

+0

@AlexReynolds, tôi đừng nghĩ rằng câu hỏi/câu trả lời đó nên được coi là một bản sao, trong trường hợp này. Câu hỏi này là về một ứng dụng jailbreak, được cài đặt trong '/ Applications /'. Một ứng dụng như vậy sẽ có một thư mục tài liệu khác và phải sử dụng các API khác nhau để tạo ra nó. – Nate

Trả lời

2

Như @cahn cho biết, ứng dụng của bạn đang bị từ chối do sự cố về quyền. Ngay cả khi được cài đặt trong /Applications/, các ứng dụng thường chạy như người dùng mobile. Như bạn có thể thấy từ phiên đăng nhập này:

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

người dùng thiết bị di động không có quyền ghi trực tiếp dưới /var/.

Nếu bạn có một cái nhìn at this document on building Cydia apps on thebigboss.org, bạn sẽ thấy rằng họ khuyên rằng các ứng dụng Jailbreak tạo các tài liệu thư mục tại /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, cảm ơn bạn rất nhiều, bạn thật tốt bụng! – Suge

+0

Bạn được chào đón, Bob! – Nate

+0

@ Nate, tôi gặp một vấn đề khác, vì tôi nên móc UIResponder của mọi ứng dụng bao gồm SpringBoard và bất kỳ ứng dụng nào khác. Trong hooking, sẽ viết một cái gì đó vào tệp đã chỉ định.Nếu tôi đặt đường dẫn đến/var/mobile/Library/MyApp , Tôi thấy rằng chỉ có SpringBoard và MyApp mới có thể viết thành công. Vì vậy, có một nơi mà mỗi ứng dụng có thể viết và đọc? – Suge

3

lỗi Cocoa 513 là NSFileWriteNoPermissionError. Bạn có thể tìm thấy nó trong Foundation Constants Reference. Có thể bạn không có quyền ghi cho /var.

+0

Cảm ơn bạn, nhưng đâu là nơi thích hợp cho các ứng dụng như tôi viết các tập tin với quyền truy cập tự nhiên? – Suge

+0

Tôi không biết chuẩn mực cho các ứng dụng được bẻ khóa là gì. Đối với ứng dụng appstore '[fileManager URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask]' là vị trí. – cahn

+0

@Bob, như tôi nói trong câu trả lời của tôi, vị trí được đề xuất sẽ là '/ var/mobile/Library/YOURAPPNAME'. – Nate