2015-05-21 19 views
10

La cartella di iCloud Drive non mostra la cartella della mia app.Perché la mia app non viene mostrata nella cartella di iCloud Drive

Questo è come io mando un file su iCloud Unità:

- (IBAction)btnStoreTapped:(id)sender { 
    // Let's get the root directory for storing the file on iCloud Drive 
    [self rootDirectoryForICloud:^(NSURL *ubiquityURL) { 
     NSLog(@"1. ubiquityURL = %@", ubiquityURL); 
     if (ubiquityURL) { 

      // We also need the 'local' URL to the file we want to store 
      //NSURL *localURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Photo" ofType:@"pdf"]]; 


      NSURL *localURL = [self localPathForResource:@"document" ofType:@"doc"]; 
      NSLog(@"2. localURL = %@", localURL); 

      // Now, append the local filename to the ubiquityURL 
      ubiquityURL = [ubiquityURL URLByAppendingPathComponent:localURL.lastPathComponent]; 
      NSLog(@"3. ubiquityURL = %@", ubiquityURL); 

      // And finish up the 'store' action 
      NSError *error; 
      if (![[NSFileManager defaultManager] setUbiquitous:YES itemAtURL:localURL destinationURL:ubiquityURL error:&error]) { 
       NSLog(@"Error occurred: %@", error); 
      }else{ 
       NSLog(@"Succeed"); 
      } 
     } 
     else { 
      NSLog(@"Could not retrieve a ubiquityURL"); 
     } 
    }]; 
} 

- (void)rootDirectoryForICloud:(void (^)(NSURL *))completionHandler { 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     NSURL *rootDirectory = [[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]URLByAppendingPathComponent:@"Documents"]; 

     if (rootDirectory) { 
      if (![[NSFileManager defaultManager] fileExistsAtPath:rootDirectory.path isDirectory:nil]) { 
       NSLog(@"Create directory"); 
       [[NSFileManager defaultManager] createDirectoryAtURL:rootDirectory withIntermediateDirectories:YES attributes:nil error:nil]; 
      } 
     } 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      completionHandler(rootDirectory); 
     }); 
    }); 
} 

- (NSURL *)localPathForResource:(NSString *)resource ofType:(NSString *)type { 
    NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 
    NSString *resourcePath = [[documentsDirectory stringByAppendingPathComponent:resource] stringByAppendingPathExtension:type]; 
    return [NSURL fileURLWithPath:resourcePath]; 
} 

In realtà ho fatto everyting spiegato in this post

Tutto sembra bene. Posso caricare i file con successo e posso mostrarli sul mio computer tramite terminale.

enter image description here

enter image description here

E posso vedere i file che ho appena caricato dal mio iPhone.

Ma nulla viene mostrato nella mia cartella iCloud Drive nel mio mac o icloud.com. Perché non stanno mostrando la cartella della mia app, anche se tutto sembra a posto e non ci sono errori?

risposta

1

Ma niente nella mia cartella iCloud Drive nel mio mac o icloud.com. Perché non stanno visualizzando la cartella della mia app, anche se tutto appare come e non ci sono errori?

È una nuova app o un nuovo contenitore iCloud? Quindi il motivo è: NSUbiquitousContainerIsDocumentScopePublic = true entra in vigore solo dopo che l'app (e il contenitore iCloud autorizzato) è stata sottoposta a revisione e approvazione.

Non riesco a ricordare dove ho letto quella "informazione mancante" (almeno non l'ho ricevuta dalla documentazione di Apple).

Un altro esempio della mia esperienza, che sembra dimostrarlo: in un'app esistente (con il contenitore iCloud "old style - TeamIdentifierPrefix") posso rendere visibile quel container sull'unità iCloud. Ma un nuovo contenitore non sarà visibile in iCloud Drive "al pubblico" (anche se posso vederlo usando Terminal.app sul mio Mac). Una volta che l'app (con il nuovo contenitore) è stata approvata ed è disponibile su AppStore, puoi giocare nuovamente con Info.plist (e rendere visibile/nascosto il nuovo contenitore, ...)

+2

Mi sembra di aver smentito la tua affermazione che "NSUbiquitousContainerIsDocumentScopePublic = true entra in vigore solo dopo che l'app (e il contenitore iCloud autorizzato) è stata sottoposta a revisione e approvazione". Con un'app di app store esistente, nessuna chiave NSUbiquitousContainers è presente nel plist. Ho aggiunto NSUbiquitousContainerIsDocumentScopePublic = true e ho eseguito il Bump di CFBundleVersion senza inviarlo all'app store e il contenitore dell'ubiquità diventa visibile nell'app iOS di iCloud Drive ** e ** il contenitore diventa visibile su un sistema OS X registrato nello stesso account iCloud (I non ha nemmeno sincronizzato un file). –

+2

Sono d'accordo @ Michael Rourke. Non ha nulla a che fare con App Store. Quello che per me è stato risolto è stato ottenere un nuovo ID app come http://stackoverflow.com/questions/25203697/exposing-an-apps-ubiquitous-container-to-icloud-drive-in-ios-8/32801479#32801479 . La mia app non è ancora in App Store. È necessario avere NSUbiquitousContainerIsDocumentScopePublic = true in Info.plist prima di eseguire l'app per la prima volta. – BillF

+1

Ho avuto questo stesso problema. La mia app è già attiva nell'app store, quindi non c'è nulla che possa fare per rendere visibile la cartella dell'app nell'unità iCloud. Ho anche disinstallato l'app e reinstallato, e non mostra. – gbotha

2

L'unica cosa che ha funzionato per me (ho avuto esattamente gli stessi problemi) in un'app esistente (quindi non posso modificare l'ID bundle) era quello di creare una sottocartella URLForUbiquityContainerIdentifier sotto la cartella URLForUbiquityContainerIdentifier e scrivere lì tutti i miei file.

Una volta eseguita l'operazione, sono apparsi in Finder sul mio Mac. Tuttavia non sono stati visualizzati in una sottocartella Documents della cartella della mia app in iCloud Drive, ma sono apparsi direttamente nella cartella dell'app.

+1

Lei signore è uno studioso :). Se si crea un contenitore non predefinito, è necessario creare una cartella Documenti al suo interno. quella cartella documenti non viene mostrata agli utenti finali, ma cosa fa all'interno di quella cartella. :) – bworby

+0

ha funzionato la scorsa notte. Ma oggi la cartella App non viene più visualizzata in iCloud Drive ... :( – bworby

2

Ho provato lo stesso codice in swift e ho avuto lo stesso problema.

Questo è ciò che ha funzionato per me:

1) Trovare le seguenti righe nel tuo info.plist codice sorgente

<key>CFBundleVersion</key> 
<string>1</string> 

2) Aumentare il numero di versione. Se è 1, aumentalo a 2. Fai lo stesso indipendentemente dal numero di versione.

3) Se necessario, disinstallare l'app dal dispositivo ed eseguire di esso dopo aver seguito i due passaggi precedenti

+0

Questo mi ha salvato la giornata, grazie! –

+0

Ha funzionato per me ma PERCHÉ ??? –

Problemi correlati