2012-10-07 25 views
8

Estoy tratando de crear/exportar un tipo exclusivo de UTI para mi aplicación iOS (muy similar a cómo maneja Instagram exclusivamente el UTI com.instagram.exclusivegram).iOS exclusivo UTI

Básicamente, quiero que com.photoapp.photo sea lo que una aplicación puede usar si quiere poder abrir la foto en cualquier aplicación registrada para tomar fotos (similar a com.instagram.photo de Instagram). Luego quiero que com.photoapp.exclusive solo se abra en mi aplicación (similar a com.instagram.exclusivegram).

Lo que me encuentro en mi dispositivo es que incluso cuando se utiliza com.photoapp.exclusive, el UIDocumentController me pide que lo abra en PhotoApp o DropBox donde debería ser solo PhotoApp.

Tengo mi aplicación que registra la UTI, así como una aplicación de ejemplo que estoy usando para verificar la capacidad de apertura. El código que estoy usando en el ejemplo de aplicación es el siguiente:

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"photoapp://"]]) { 
     NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"derp.png"], 1.0); 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *fullPathToFile = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"photoapp.pae"]; 
     [imageData writeToFile:fullPathToFile atomically:NO]; 

     interactionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"file://%@", fullPathToFile]]]; 
     interactionController.UTI = @"com.photoapp.exclusive"; 
     interactionController.delegate = self; 

     [interactionController presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES]; 
    } 

Y aquí es lo que tengo en mi archivo plist para mi aplicación:

<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeDescription</key> 
     <string>Exclusive PhotoApp Photo</string> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>com.photoapp.photo</string> 
     </array> 
     <key>UTTypeIdentifier</key> 
     <string>com.photoapp.exclusive</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>pae</string> 
     </dict> 
    </dict> 
    <dict> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>pa</string> 
     </dict> 
     <key>UTTypeIdentifier</key> 
     <string>com.photoapp.photo</string> 
     <key>UTTypeDescription</key> 
     <string>PhotoApp Photo</string> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.png</string> 
      <string>public.jpeg</string> 
     </array> 
    </dict> 
</array> 
<key>UIFileSharingEnabled</key> 
<true/> 
<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>com.photoapp.exclusive</string> 
      <string>com.photoapp.photo</string> 
     </array> 
     <key>CFBundleTypeName</key> 
     <string>Photo</string> 
     <key>LSHandlerRank</key> 
     <string>Default</string> 
    </dict> 
</array> 
+1

Tan pronto como especifique que su formato de archivo se ajusta a 'public.png' o' public.jpeg' o similar, todas las aplicaciones que especifiquen que pueden abrir archivos de estas UTI podrán abrirlos. Si elimina su matriz 'UTTypeConformsTo', eso debería resolver su problema. – Greg

+1

En otras palabras, no especifique que su 'com.photoapp.exclusive' se ajusta a' com.photoapp.photo'. Deje 'com.photoapp.photo' como está, y simplemente no especifique ninguna conformidad para' com.photoapp.exclusive'. – Greg

+0

¡Gracias! ¿Quieres hacer un comentario para que pueda aceptar tu respuesta? – joshholat

Respuesta

5

Tan pronto como se especifica una infección del tracto urinario tales como public.png o public.jpeg, todas las aplicaciones que especifiquen que pueden abrir archivos de estos tipos podrán abrir su archivo. Por lo tanto, si no especifica ningún tipo de conformidad en su U12 com.photoapp.exclusive, no parece que las aplicaciones lo admitan.

Cuestiones relacionadas