앱간 이미지 객체 공유 방법

카메라롤의 URL을 사용하지 않고 직접 이미지 path를 통해 공유하는 방법이다.


[호출자]

버튼등을 통해 보내기 이벤트가 발생될 경우 아래의 코드로 전송할 파일을 저장하고 path를 지정해 준다.

생성된 path를 UIDocumentInteractionController를 통해 해당 패스에 맞는 앱의 리스트를 출력시켜준다.

NSData * data = UIImageJPEGRepresentation(self.importedImage.image, 1);

    

    NSArray * pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString * docDirectory = [pathArray objectAtIndex:0];

    NSString * resultPath = [NSString stringWithFormat:@"%@/%@", docDirectory, @"test.jpg"];

    

    [[NSFileManager defaultManager] createFileAtPath:resultPath contents:data attributes:nil];

    NSURL* tempURL = [NSURL fileURLWithPath:resultPath];    

    UIDocumentInteractionController * docu = [UIDocumentInteractionController interactionControllerWithURL:tempURL];

    self.document = docu;

    self.document.delegate = self;

    [self.document presentPreviewAnimated:YES];


위 객체를 통해 호출할 경우 델리게이트를 지정해주어야 한다. (개발문서 참조)


[수신자]

수신하는 앱에서는 plist에 아래의 항목을 추가시킨다. 

(아래 항목들이 dictionary인데도 불구하고 순서가 일치해야만 앱에서 노출된다.)

    <key>CFBundleDocumentTypes</key>

    <array>

        <dict>

            <key>CFBundleTypeIconFiles</key>

            <array>

                <string></string>

            </array>

            <key>CFBundleTypeName</key>

            <string>JPG</string>

            <key>LSHandlerRank</key>

            <string>Default</string>

            <key>LSItemContentTypes</key>

            <array>

                <string>public.jpeg</string>

            </array>

        </dict>

    </array>


마지막으로 해당 앱의 앱델리게이트 내에서 전달받은 URL을 처리하는 내용을 추가하면 된다.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

{

    SALog(@"URL:%@ \n", url);

    

    return [self handleURLScheme:url];   

}


- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

    SALog(@"URL:%@ \n App:%@\n Anno:%@\n", url, sourceApplication, annotation);


    return [self handleURLScheme:url];

}


+ Recent posts