2015-10-14 25 views
5

Ho sviluppato una funzione di esportazione di unità iCloud per la mia app iOS e funziona. Riesco a vedere i documenti esportati nel nostro AppContainerFolder pubblico nella cartella di iCloud Drive su Mac OS X 10.11.Perché il mio iCloud Drive AppFolder è visibile su MacOS, ma disabilitato nell'app iCloud Drive su iOS?

Ma su iOS, posso solo vedere AppContainerFolder nell'app iCloud Drive. È disabilitato e non riesco ad aprire quella cartella o vedere i documenti all'interno.

Image of the disable folder in the iOS iCloud Drive App

Dalle impostazioni di iCloud Drive, vedo che i file ho esportati sono in quella AppContainerFolder in iCloud Drive.

Image of the AppContainerFolder inside the iCloud settings

qualcuno ha avuto un tale problema con iCloud Drive?

Sto utilizzando due contenitori di app nella mia app, uno con l'identificatore "iCloud.com ..." per le esportazioni e un altro con l'identificativo "TeamIdentifier.com ..." per la sincronizzazione Ensembles-CoreData. Io uso esplicitamente gli URL per i contenitori con il metodo:

[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:@"iCloud.com..."] 

Ho già provato di utilizzare solo il TeamIdentifier-Container, ma non c'è stato alcun cambiamento nella visibilità del AppContainerFolder.

Ho provato a urtare il BundleVersion, ho giocato con le impostazioni di Info.plist NSUbiquitousContainers. Ho anche reso disponibile Builds tramite TestFlight a tester esterni, per vedere se ha qualcosa a che fare con i dispositivi di sviluppo.

L'unica cosa, non avevo ancora fatto, di rilasciare una nuova versione all'App Store con una nuova versione di Bundle, per vedere se ha qualcosa a che fare con un'app produttiva rispetto a un'app in fase di sviluppo.

Eventuali suggerimenti e suggerimenti sono benvenuti.

+0

Avete impostare l'accesso al pubblico in applicazioni info.plist? (NSUbiquitousContainerIsDocumentScopePublic = Si) –

+0

NSUbiquitousContainers \t \t \t iCloud.au.com.ossh.NomeApp \t \t \t \t \t NSUbiquitousContainerIsDocumentScopePublic \t \t \t \t \t \t NSUbiquitousContainerSupportedFolderLevels \t \t \t Nessuno \t \t \t

+1

Ciao Duncan, grazie per il suggerimento, ma sì, l'ho fatto: iCloud.com ... \t \t \t \t \t NSUbiquitousContainerIsDocumentScopePublic \t \t \t \t \t \t NSUbiquitousContainerName \t \t \t TaptileApps \t \t \t NSUbiquitousContainerSupportedFolderLevels \t \t \t Uno \t \t Bernd

risposta

6

Dopo aver chiarito con il supporto tecnico per gli sviluppatori Apple, ora ero in grado di risolvere il problema.

La mia app dichiara due UTI esportati (propri file di backup), in modo che il contenitore iCloud non venga abilitato (o disabilitato), quando altri file oltre a queste UTI vengono salvati in tale cartella. La nostra app è in grado di creare PDF e CSV, ma questi tipi di file NON sono stati dichiarati come "Tipi di documento" in info.plist, perché la nostra app non è in grado di visualizzarli.

Quando si aggiungono i tipi di documento PDF e CSV a info.plist, il contenitore iCloud diventa immediatamente visibile nell'app iCloud Drive.

Per riferimento, ecco un estratto del info.plist:

... 
<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeIconFiles</key> 
     <array/> 
     <key>CFBundleTypeName</key> 
     <string>Adobe PDF</string> 
     <key>CFBundleTypeRole</key> 
     <string>Viewer</string> 
     <key>LSHandlerRank</key> 
     <string>Alternative</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>com.adobe.pdf</string> 
     </array> 
    </dict> 
    <dict> 
     <key>CFBundleTypeIconFiles</key> 
     <array/> 
     <key>CFBundleTypeName</key> 
     <string>CSV</string> 
     <key>CFBundleTypeRole</key> 
     <string>Viewer</string> 
     <key>LSHandlerRank</key> 
     <string>Alternative</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>public.comma-separated-values-text</string> 
     </array> 
    </dict> 
</array> 
... 
+0

Sembra fastidioso. La mia app inserisce un paio di file .txt nel contenitore cloud. Questi sono i file di configurazione che voglio condividere su tutti i dispositivi.Lo fa * non * significa che voglio dire che la mia app in generale può aprire file .txt. Immagino che una possibile soluzione sia inventare la mia estensione per questi e aggiungerla alle mie UTI esportate. Comunque, grazie per l'informazione. – btschumy

+0

@btschumy I miei file di esportazione hanno la loro propria estensione e li ho aggiunti alle UTI esportate (anche se ho avuto un errore anche lì), ma come ho capito, devo aggiungere anche i DocumentTypes, anche se la mia app non può apri i PDF esportati. E sì, è fastidioso ... meglio SBAGLIARLO, perché ora la nostra app viene visualizzata nell'elenco delle app in grado di aprire i PDF. Dovrò aggiornare il bug di Apple, ma sono troppo occupato per quello. Forse Apple ne cambia l'implementazione. Comunque .. prova prima senza i DocumentTypes, ma ora sai cosa provare dopo, se non funziona. – Bernd

+0

Grazie per i suggerimenti qui. Ho seguito quello che hai fatto, ma ho trovato una soluzione leggermente diversa. Ho solo un tipo di documento nel mio contenitore onnipresente - il mio tipo di documento. Quindi non ho aggiunto CSV o PDF - poiché la mia app non fa niente con loro. Ho trovato che avevo bisogno di avere l'array CFBundleDocumentTypes (con una voce per il mio tipo di documento), anche il dict NSUbiquitousContainers e l'array UTExportedTypeDeclarations. Dopo aver eseguito la mia app sul mio iPad ho notato che la mia cartella era ancora disabilitata all'interno dell'app iCloud Drive. Ho riavviato l'app iCloud Drive e la mia cartella è stata abilitata in –

0

Il post Why my app is not shown in iCloud Drive Folder sembra indicare che l'app deve essere approvata e rilasciata prima che una cartella pubblica di iCloud funzioni completamente.

+0

Non così, ho app in beta testing e i loro contenitori sono visibili. –

+0

Grazie @DuncanGroenewald - hai perfettamente ragione. Ho appena provato questo. ID del contenitore vecchio stile preesistente - cambiato NSUbiquitousContainerIsDocumentScopePublic da falso a vero, e il contenitore appare nell'app iCloud Drive ei file sono accessibili. La sincronizzazione di NSUbiquitousContainerName e NSUbiquitousContainerIsDocumentScopePublic tra iOS e OS X sembra abbastanza veloce. Bumping CFBundleVersion ogni volta. –

+0

@Michael Grazie per il tuo suggerimento, avevo già visto questa domanda e ho anche rilasciato la prima versione con la funzione Esporta unità iCloud. Ma sembra, che non doveva fare nulla con questo. Sembra che dovrò aprire una richiesta tecnica con Apple per vedere se è un altro tipo di "magia" con iCloud sui server Apple. – Bernd