2017-11-22 6 views
1

iOS 11 파일 앱에서 로컬 앱 샌드 박스로 파일을 복사하고 싶습니다. 테스트 목적으로 파일은 iCloud에서 로컬 스토리지로 다운로드 한 파일 앱에서 로컬로 사용할 수 있다고 가정합니다. 파일 확장자는 내 응용 프로그램에 등록하고 파일이 파일의 응용 프로그램에 눌렀을 때 다음 내 응용 프로그램 파일 앱에서 파일의 URL을 받는다 :iOS 11에서 파일 복사 sandbox에 파일 앱

NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; 

NSURL *nsUrl; // comes from Files app. For instance "file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/test.rar" 
NSURL *targetUrl; // file in my app's document directory 

NSError *coordinatorError = nil; 
[fileCoordinator coordinateReadingItemAtURL:nsUrl options:NSFileCoordinatorReadingWithoutChanges error:&coordinatorError byAccessor:^(NSURL *newURL) 
{ 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    //if ([fileManager fileExistsAtPath: [nsUrl path]]) 
    { 
     NSLog(@"Copy from %@ to %@", newURL, targetUrl); 

     NSError *copyError = nil; 
     [fileManager copyItemAtURL:newURL toURL:targetUrl error:&copyError]; 
     if (!copyError) 
     { 
      // OK 
     } 
     else 
     { 
      NSLog(@"Files app error: %@", copyError); 
     } 
    } 
}]; 

그러나 작업이 출력 실패

2017-11-22 09:30:28.685127+0100 test[434:40101] Copy from file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/test.rar 
to file:///var/mobile/Containers/Data/Application/01BB33E6-2790-0FD0-8270-000/Documents/test.rar 
2017-11-22 09:30:28.687174+0100 test[434:40101] Files app error: Error Domain=NSCocoaErrorDomain Code=257 "The file “test.rar” couldn’t be 
opened because you don’t have permission to view it." 
UserInfo={NSFilePath=/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/test.rar, 
NSUnderlyingError=0x1c084abf0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}} 

외부 파일에 대한 읽기 액세스 권한이 필요합니까?

감사합니다,

답변

0

솔루션 :

[nsUrl startAccessingSecurityScopedResource] 

및 [NSURL stopAccessingSecurityScopedResource]를

+0

이전 코드에서이 배치해야합니까? – Matt

+1

''coordinateReadingItemAtURL'' 블록 안에 넣을 수 있습니다. 작업이 끝나면 'stopAccessingSecurityScopedResource'를 호출하는 것을 잊지 마십시오. – Hyndrix

+0

답을 더 분명하게하십시오. – Matt