2013-10-05 2 views
3

우리는 두 응용 프로그램에 응용 프로그램 간 통신을 사용하고 하나의 응용 프로그램에서 다른 응용 프로그램으로 파일 경로를 보내려고합니다. 문제는 보낸 사람 응용 프로그램을 통해 어떤 텍스트를 수신기로 전달하면 제대로 작동한다는 것입니다. 그렇지 수신기 측에서 보낸다른 앱의 문서 폴더에 앱이 액세스 할 수없는 이유는 무엇입니까?

-(IBAction) openReceiverApp:(id)sender { 
// Opens the Receiver app if installed, otherwise displays an error 

UIApplication *ourApplication = [UIApplication sharedApplication]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"ads.rtf"]; 
NSLog(@"filePath %@", filePath); 
// NSString *URLEncodedText = [self.textBox.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString *URLEncodedText = [filePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString *ourPath = [@"readtext://" stringByAppendingString:URLEncodedText]; 

NSLog(@"%@",ourPath); 

NSURL *ourURL = [NSURL URLWithString:ourPath]; 
if ([ourApplication canOpenURL:ourURL]) { 
    [ourApplication openURL:ourURL]; 
} 
else { 
    //Display error 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Receiver Not Found" message:@"The Receiver App is not installed. It must be installed to send text." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alertView show]; 
} 

내 코드는 내가이 코드

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
// Display text 
UIAlertView *alertView; 
NSString *text = [[url host]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
alertView = [[UIAlertView alloc] initWithTitle:@"Text" message:text delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[alertView show]; 

return YES; 

를 작성했습니다 여기 작동 않는 한 다음 파일 문서 경로를 통과 나는 내가 잘못 아무데도 ?? 미리 감사드립니다 ....

+0

샌드 박스. 각 앱은 자체 컨테이너 폴더에 독점적으로 액세스 할 수 있습니다. – trojanfoe

+0

다른 응용 프로그램 파일에 액세스하고 싶지 않습니다. 내 응용 프로그램에서 다른 응용 프로그램으로 파일 하나만 전송하려고합니다. –

+0

코드는 한 응용 프로그램에서 다른 응용 프로그램으로 파일 이름을 전달하려고하는 것을 보여줍니다. 그건 효과가 없으며 다른 기술을 사용해야 할 것입니다. – trojanfoe

답변

3

키워드는 Sandboxing입니다. iOS에서는 모든 앱이 샌드 박스 처리되어 자체 컨테이너에서 실행되며 앱에 저장된 모든 데이터가 다른 앱의 조작 (읽기 및 쓰기)으로부터 보호되어야합니다.

장치가 jailbroken되지 않으면 다른 응용 프로그램 Documents 폴더에 액세스 할 수 없습니다.

+0

하지만 Genius Scan 응용 프로그램이 Genius 팩스로 문서를 열 수 있는지 확인했습니다 다른 응용 프로그램에 액세스 할 수없는 경우 문서 폴더가 장치가 jailbroken이 아닐 때 어떻게 할 수 있습니까? –

+0

@ Kal 's 아마도 맞춤 URL 스키마를 등록 하시겠습니까? –

+0

@JasperBlues 사용자 정의 URl 스키마 –

0

나는 당신이 원하는 것을하는 키 체인 접근 그룹이라고 생각합니다. 나는 결코 그것을 사용하지 않았기 때문에 나는 그것에 대해 확실하지 않다. 그것에 대해 읽고 그것이 당신을 위해 작동하는지 결정하십시오. 필자가 보았던 몇 가지 의견은 안정적으로 설정하고 테스트하기가 어렵다는 것을 시사합니다.

두 개의 앱을 설치 한 후 키 체인 액세스를 사용자 기기에서 갱신해야하는 경우 걱정할 필요가 있습니다. 갱신 할 수있는 방법은 서로의 파일에 대한 액세스를 계속 공유하는 것입니다.

1

잘 해결했는지 확신 할 수 없습니다. 그러나 나는이 정보를 공유하는 것이 유용 할 것이라고 생각했습니다. Apple은 iOS8에 새로운 api를 출시하여 앱의 샌드 박스 외부 문서에 액세스합니다.

문서 선택 도구 문서 선택기보기 컨트롤러 (UIDocumentPickerViewController)는 응용 프로그램의 샌드 박스 외부에있는 파일에 대한 액세스 권한을 사용자에게 부여합니다. 그것은 애플 리케이션간에 문서를 공유하기위한 간단한 메커니즘입니다. 또한 사용자가 여러 응용 프로그램으로 단일 문서를 편집 할 수 있기 때문에보다 복잡한 워크 플로가 가능합니다.

문서 선택 도구를 사용하면 여러 문서 제공 업체의 파일에 액세스 할 수 있습니다. 예를 들어, iCloud 문서 공급자는 다른 응용 프로그램의 iCloud 컨테이너에 저장된 문서에 대한 액세스 권한을 부여합니다. 타사 개발자는 저장소 공급자 확장을 사용하여 추가 문서 공급자를 제공 할 수 있습니다.

자세한 내용은 문서 선택 프로그램 프로그래밍 가이드를 참조하십시오. (https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/DocumentPickerProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40014451)

관련 문제