Instagram abrir UTI directamente

Recientemente tropecé con la siguiente característica interesante: ganchos para iPhone de Instagram

Me preguntaba si se puede abrir una aplicación a través del documentinteractioncontroller inmediatamente, SIN tener que mostrar una vista previa (- presentPreviewAnimated 🙂 o una hoja de acción (- presentOpenInMenuFromRect: inView: animated :). Me parece que es la única manera, pero podría estar perdiendo algo.

-(void) saveToInstagram { NSURL *url; UIDocumentInteractionController *dic; CGRect rect = CGRectMake(0 ,0 , 0, 0); UIImage *i = imageView.image; CGRect cropRect = CGRectMake(i.size.width - 306 ,i.size.height - 306 , 612, 612); NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.ig"]; CGImageRef imageRef = CGImageCreateWithImageInRect([imageView.image CGImage], cropRect); UIImage *img = [[UIImage alloc] initWithCGImage:imageRef]; CGImageRelease(imageRef); [UIImageJPEGRepresentation(img, 1.0) writeToFile:jpgPath atomically:YES]; url = [[NSURL alloc] initFileURLWithPath:jpgPath]; dic = [self setupControllerWithURL:url usingDelegate:self]; [dic presentOpenInMenuFromRect:rect inView:self.view animated:YES]; [dic retain]; [img release]; [url release]; } - (UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate { UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL]; interactionController.delegate = interactionDelegate; return interactionController; } - (void)documentInteractionControllerWillPresentOpenInMenu:(UIDocumentInteractionController *)controller { } 

Primero guarde su JPEG con una extensión .ig o .igo en lugar de .jpg o .jpeg y luego cree un NSURL con una directiva file: //. También utilicé la extensión .igo y el com.instagram.exclusivegram UTI para la exclusividad de Instagram, pero puedes usar la extensión .ig y la UTI com.instagram.gram

Por ejemplo:

 // URL TO THE IMAGE FOR THE DOCUMENT INTERACTION NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", jpgPath]]; docInteractionController.UTI = @"com.instagram.exclusivegram"; [self setupDocumentControllerWithURL:igImageHookFile]; // OPEN THE HOOK [docInteractionController presentOpenInMenuFromRect:self.frame inView:self animated:YES]; 

La única forma de hacerlo sería si Instagram registra un gestor de URL personalizado (por ejemplo, igram: //) y puede aceptar datos como parte de esa URL (por ejemplo, base64 codificada) o a través de la table de trabajo.

Básicamente, las limitaciones que UIDocumentInteractionController (y esta técnica) son:

  1. Las aplicaciones no pueden consultar ni ejecutar directamente otras aplicaciones.
  2. Por lo general, las aplicaciones no pueden abrir files desde el directory de usuarios de Sandboxed de otras aplicaciones.