Asociación de types de file con mi aplicación

Mi aplicación puede exportar e importar files txt. CFBundleDocumentTypes y UTExportedTypeDeclarations en mi .plist son los siguientes:

 <key>CFBundleDocumentTypes</key> <array> <dict> <key>CFBundleTypeIconFiles</key> <array> <string>Icon60@2x</string> </array> <key>CFBundleTypeName</key> <string>CSV</string> <key>CFBundleTypeRole</key> <string>Default</string> <key>LSHandlerRank</key> <string>Default</string> <key>LSItemContentTypes</key> <array> <string>public.text</string> </array> </dict> </array> <key>UTExportedTypeDeclarations</key> <array> <dict> <key>UTTypeConformsTo</key> <array> <string>public.text</string> </array> <key>UTTypeDescription</key> <string>CSV</string> <key>UTTypeIdentifier</key> <string>public.text</string> <key>UTTypeTagSpecification</key> <dict> <key>public.filename-extension</key> <string>csv</string> <key>public.mime-type</key> <string>application/myApp</string> </dict> </dict> </array> 

Exportación funciona como se esperaba, sin problemas. La import también funciona bien, pero solo con files que se almacenan fuera de my app iCloud folder de my app iCloud folder , es decir, cuando toco un file .txt desde el correo o la carpeta genérica de iCloud, puedo ver mi aplicación en el menu "Import with ..." lado de otro aplicaciones Pero cuando toco exactamente el mismo file de my app folder on iCloud de my app folder on iCloud , mi aplicación no figura en el menu "Import with ..." .

Para aclarar lo que quiero decir al decir my app folder on iCloud . La aplicación tiene una funcionalidad para exportar y save ciertos datos en iCloud con la siguiente function:

 func autoExportToIcloudDrive(_ localFileURL:URL, fileNameST:String) { let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents").appendingPathComponent("\(fileNameST).csv"); if iCloudDocumentsURL != nil { let olderFileURL = iCloudDocumentsURL?.appendingPathComponent(fileNameST); if FileManager.default.fileExists(atPath: olderFileURL!.path) { self.uniFunc.deleteFileAtPath(pathUrl: olderFileURL!); } do { try FileManager.default.copyItem(at: localFileURL, to: iCloudDocumentsURL!); } catch { let nserror = error as NSError; fatalError("\(nserror), \(nserror.userInfo)"); } } } 

Esto crea una carpeta de aplicaciones en iCloud y almacena mi file allí. Y cuando toco en este file, no puedo ver mi aplicación en el menu "Import with ..." . Cuando muevo el file fuera de la carpeta de la aplicación, mi aplicación aparece en el menu "Import with ..." .

¿Es este un layout previsto y no se espera que las aplicaciones "vean" los files en sus propias carpetas de la unidad iCloud o me falte algún tipo de asociación de files adicional en el file .plist?

Este es el comportamiento previsto, ya que "importar" es diferente de "abrir". Al importar un file, puede hacer que su contenido forme parte de sus datos de aplicaciones. Los files en sus aplicaciones El contenedor iCloud ya es (parte de) los datos de sus aplicaciones, por lo que no tiene sentido importarlos a sus aplicaciones.

ACTUALIZAR

Las siguientes properties bajo CFBundleDocumentTypes tendrán efecto sobre si y cómo su aplicación se presenta en el context de un file:

  • El valor de CFBundleTypeRole : "Editor" vs. "Visor": las ediciones persistentes requieren importar el file a los datos de las aplicaciones ("Valor pnetworkingeterminado" no es un valor válido aquí)
  • Asignado LSHandlerRank : "Propietario", "Pnetworkingeterminado", "Alternativo": declarar que es la aplicación principal (propietario) para un tipo de file podría llevar a que se "caiga la parte Importar".
  • Registro para los types correctos LSItemContentTypes : los files ".csv" serán reconocidos como "public.comma-separated-values-text" (kUTTypeCommaSeparatedText)