2015-05-21 14 views
10

Folder na iCloud nie pokazuje folderu mojej aplikacji.Dlaczego moja aplikacja nie jest wyświetlana w folderze folderu iCloud

ten sposób mogę wysłać plik do iCloud Dysk:

- (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]; 
} 

Właściwie zrobiłem everyting wyjaśnił in this post

Wszystko wygląda grzywny. Mogę przesyłać pliki z powodzeniem i mogę je pokazać w moim komputerze za pośrednictwem terminala.

enter image description here

enter image description here

I widzę pliki Właśnie przesłanych z moim iPhone.

Ale nic nie jest wyświetlane w moim folderze iCloud Drive na moim komputerze mac lub icloud.com. Dlaczego nie wyświetlają folderu mojej aplikacji, nawet jeśli wszystko wygląda dobrze i nie ma błędu?

Odpowiedz

1

Ale nic nie jest wyświetlane w moim folderze iCloud Drive na moim komputerze mac lub icloud.com. Dlaczego nie wyświetlają się foldery mojej aplikacji, nawet jeśli wszystko wygląda jak dobrze i nie ma błędu?

Czy to jest nowa aplikacja, czy nowo utworzony kontener iCloud? Powód jest następujący: NSUbiquitousContainerIsDocumentScopePublic = true wchodzi w życie tylko wtedy, gdy aplikacja (i uprawniony kontener iCloud) nie została sprawdzona i zatwierdzona.

Nie pamiętam, gdzie przeczytałem tę "brakującą informację" (przynajmniej nie dostałem tego z dokumentacji Apple).

Kolejny przykład z mojego doświadczenia, który zdaje się to potwierdzać: w istniejącej aplikacji (z "starym stylem - TeamIdentifierPrefix" kontener iCloud) mogę uczynić ten kontener widocznym na dysku iCloud. Ale nowy kontener nie będzie widoczny w iCloud Drive "publicznie" (nawet mocno widzę go za pomocą Terminal.app na moim Macu). Gdy aplikacja (z nowym kontenerem) została zatwierdzona i jest dostępna w AppStore, możesz zagrać ponownie z Info.plist (i uczynić nowy kontener widocznym/ukrytym, ...).

+2

Wydaje mi się, że obaliłem twoje oświadczenie, że "NSUbiququousContainerIsDocumentScopePublic = true wchodzi w życie tylko wtedy, gdy aplikacja (i uprawniony kontener iCloud) nie została sprawdzona i zatwierdzona". W istniejącej aplikacji sklepu aplikacji nie ma kluczy NSUbiquitousContainers w pliku plist. Dodałem NSUbiquitousContainerIsDocumentScopePublic = true, i zderzyłem się z CFBundleVersion bez przesyłania do sklepu z aplikacjami - a pojemnik wszechobecny staje się widoczny w aplikacji iCloud Drive na iOS ** i ** kontener staje się widoczny w systemie OS X zalogowanym do tego samego konta iCloud (I nawet nie zsynchronizował pliku). –

+2

Zgadzam się z Michaelem Rourke. To nie ma nic wspólnego z App Store. Naprawiono dla mnie nowy identyfikator aplikacji na http://stackoverflow.com/questions/25203697/exposing-an-apps-ubiquitous-container-to-icloud-drive-in-ios-8/32801479#32801479 . Moja aplikacja nie jest jeszcze w App Store. Musisz mieć NSUbiquitousContainerIsDocumentScopePublic = true w Info.plist przed uruchomieniem aplikacji po raz pierwszy. – BillF

+1

Mam ten sam problem. Moja aplikacja jest już dostępna w sklepie z aplikacjami, więc nic nie mogę zrobić, aby folder aplikacji stał się widoczny na dysku iCloud. Nawet odinstalowałem aplikację i ponownie ją zainstalowałem, ale ona się nie wyświetla. – gbotha

2

Jedyne, co pracował dla mnie (miałem dokładnie te same problemy) w istniejącej aplikacji (więc nie mogę zmienić identyfikatora pakunku) było stworzenie podfolderu Documents pod folderem i zapisanie tam wszystkich moich plików.

Kiedy to zrobiłem, pojawiły się w Finderze na moim Macu. Jednak nie pojawiły się w podfolderze folderu mojej aplikacji na iCloud Drive w folderze aplikacji. Pojawiły się bezpośrednio w folderze aplikacji.

+1

Ty jesteś uczonym :). Jeśli tworzysz inny niż domyślny kontener, musisz utworzyć wewnątrz niego folder Dokumenty. folder dokumentów nie jest wyświetlany użytkownikom końcowym, ale to, co znajduje się w tym folderze. :) – bworby

+0

to działało ostatniej nocy. Ale teraz dzisiaj folder aplikacji nie jest już wyświetlany na iCloud Drive ... :( – bworby

2

Próbowałem tego samego kodu w szybki i dostałem ten sam problem.

To co pracował dla mnie:

1) znajdują się następujące linie w kodzie źródłowym Info.plist

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

2) zwiększenie numeru wersji. Jeśli jest 1, zwiększ ją do 2. Zrób to samo, niezależnie od numeru wersji.

3) W razie potrzeby, należy odinstalować aplikację z urządzenia i ponownie go uruchomić po wykonaniu powyższych dwóch etapów

+0

To właśnie uratowało mój dzień, dziękuję! –

+0

Pracował dla mnie ale DLACZEGO ??? –

Powiązane problemy