AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi iOS: Dateien in iCloud Drive speichern
Thema durchsuchen
Ansicht
Themen-Optionen

iOS: Dateien in iCloud Drive speichern

Ein Thema von philipp.hofmann · begonnen am 10. Sep 2020 · letzter Beitrag vom 14. Sep 2020
Antwort Antwort
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
893 Beiträge
 
Delphi 10.4 Sydney
 
#1

iOS: Dateien in iCloud Drive speichern

  Alt 10. Sep 2020, 13:48
Hi,

ich habe es dank
https://www.delphipraxis.net/199998-...d-lesen-3.html
geschafft, dass meine App jetzt Dateien in der iCloud speichert. Diese sind aber ja noch App-spezifisch abgelegt. Ich möchte aber von einem Browser auf diese Dateien zugreifen.
Daher muss ich die Dateien im iCloud Drive abspeichern, da man nur dort mit mehreren Apps an der gleichen Datei arbeiten kann (https://support.apple.com/de-de/HT201104).

Wie funktioniert dies? Muss man dazu "nur" den Pfad anders ermitteln?
Dies mache ich aktuell folgendermaßen:

Delphi-Quellcode:
class function TFileUtils.getAppSharedDownloadsPath():String;
{$IFDEF IOS}
  var
    nsFile: NSFileManager;
    URL: NSURL;
{$ENDIF}
begin
  {$IFDEF IOS}
    nsFile := TNSFileManager.Wrap(TNSFileManager.OCClass.defaultManager);
    URL := nsFile.URLForUbiquityContainerIdentifier(nil);
    if (URL <> nil) then
      Result := UTF8ToString(URL.path.UTF8String)
    else
      Result := '';
  {$ELSE}
    {$IFDEF MSWINDOWS}
      result:=GetEnvironmentVariable('USERPROFILE')+'\Downloads';
    {$ENDIF}
    {$IFDEF MACOS}
      result:=System.IOUtils.TPath.getDownloadsPath();
    {$ENDIF}
    {$IFDEF ANDROID}
      result:=System.IOUtils.TPath.getSharedDownloadsPath();
    {$ENDIF}
  {$ENDIF}
end;
Grüße, Philipp
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.096 Beiträge
 
Delphi 12 Athens
 
#2

AW: iOS: Dateien in iCloud Drive speichern

  Alt 10. Sep 2020, 15:46
Vielleicht hilft Dir das weiter ?
https://dev.to/nemecek_f/ios-saving-...lemanager-4kpm
https://medium.com/ios-os-x-developm...s-1a46b5706fe1

Geändert von Rollo62 (10. Sep 2020 um 15:49 Uhr)
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
893 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: iOS: Dateien in iCloud Drive speichern

  Alt 10. Sep 2020, 17:10
Das mit der Erweiterung der info.plist hatte ich auch schon an anderer Stelle gefunden, dass ich den Pfadnamen um /Documents verlängern muss, noch nicht.
Ich sehe die Dateien aber weiterhin nur in der App-iCloud und nicht in iCloud Drive.

Wobei ich zugeben muss, dass ich auch den Pfad etwas hemdsärmlig um /Documents verlängert habe und nicht per

Zitat:
The appendingPathComponent("Documents") is very important bit and without it your folder will not show inside iCloud Drive (which you can quickly verify via Files app in iOS).
Zitat:
if let iCloudDocumentsURL = NSFileManager.defaultManager().URLForUbiquityConta inerIdentifier(nil)?.URLByAppendingPathComponent(" Documents") {
if (!NSFileManager.defaultManager().fileExistsAtPath( iCloudDocumentsURL.path!, isDirectory: nil)) {
NSFileManager.defaultManager().createDirectoryAtUR L(iCloudDocumentsURL, withIntermediateDirectories: true, attributes: nil, error: nil)
}
}
Diese Methode steht bei NSURL leider so einfach nicht zur Verfügung. Ich weiß jetzt nicht, ob dies den Unterschied ausmacht.
Genauso weiß ich nicht, ob der Part von "Adding capability" von Delphi via XCode korrekt erledigt wird.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.096 Beiträge
 
Delphi 12 Athens
 
#4

AW: iOS: Dateien in iCloud Drive speichern

  Alt 10. Sep 2020, 17:15
Zitat:
if let iCloudDocumentsURL = NSFileManager.defaultManager().URLForUbiquityConta inerIdentifier(nil)?.URLByAppendingPathComponent(" Documents") {
if (!NSFileManager.defaultManager().fileExistsAtPath( iCloudDocumentsURL.path!, isDirectory: nil)) {
NSFileManager.defaultManager().createDirectoryAtUR L(iCloudDocumentsURL, withIntermediateDirectories: true, attributes: nil, error: nil)
}
}
Diese Methode steht bei NSURL leider so einfach nicht zur Verfügung.
Genauso weiß ich nicht, ob der Part von "Adding capability" von Delphi via XCode korrekt erledigt wird.
Ich denke dafür ist der NSFileManager zuständig, dort wird die URL vom Container erzeugt.
Deshalb soll man auch asynnchron Warten bis es wirklich erzeugt ist, weil beim 1. Mal das wohl länger dauern kann.

Die Capabilities muss mman vielleicht im iTines Connect (oder wie das jetzt heisst) einstellen, und sich da womöglich wieder ein Zertifikat holen.
Ich denke das ist ähnlich wie bei PushNotifications.
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
893 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: iOS: Dateien in iCloud Drive speichern

  Alt 10. Sep 2020, 18:23
Ich habe mal alles deinstalliert und gelöscht und von vorne begonnen und den Code gerade gezogen.
Leider bleibt es noch dabei, in der iCloud sind die Daten, aber nicht in iCloud Drive.
Da werde ich noch ein wenig Jugend forscht betreiben müssen:

Delphi-Quellcode:
class function TFileUtils.getAppSharedDownloadsPath():String;
{$IFDEF IOS}
  var
    nsFile: NSFileManager;
    URL: NSURL;
{$ENDIF}
begin
  {$IFDEF IOS}
    nsFile := TNSFileManager.Wrap(TNSFileManager.OCClass.defaultManager);

    URL:=nsFile.URLForUbiquityContainerIdentifier(nil);
    if (URL <> nil) then
    begin
      URL:=URL.URLByAppendingPathComponent(StrToNSStr('Documents'));
      Result := UTF8ToString(URL.path.UTF8String);
      if (not nsFile.fileExistsAtPath(URL.path,nil)) then
      begin
        mlog.info('create new iCloud directory: '+result);
        if (nsFile.createDirectoryAtURL(URL,true,nil,nil)) then
          mlog.info('Created new iCloud directory '+result)
        else
          mlog.info('Can´t creat new iCloud directory '+result);
      end else
        mlog.info('iCloud directory exists yet '+result);
    end else
      Result := '';
  {$ELSE}
    {$IFDEF MSWINDOWS}
      result:=GetEnvironmentVariable('USERPROFILE')+'\Downloads';
    {$ENDIF}
    {$IFDEF MACOS}
      result:=System.IOUtils.TPath.getDownloadsPath();
    {$ENDIF}
    {$IFDEF ANDROID}
      result:=System.IOUtils.TPath.getSharedDownloadsPath();
    {$ENDIF}
  {$ENDIF}
end;
und das neue Zertifikat ist für die iCloud an sich schon notwendig. Das sollte eigentlich alles passen.

Geändert von philipp.hofmann (10. Sep 2020 um 18:30 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.096 Beiträge
 
Delphi 12 Athens
 
#6

AW: iOS: Dateien in iCloud Drive speichern

  Alt 10. Sep 2020, 18:30
Ich hatte ja irgendwo gelesen das in dem iCloud Drive die App dann einen Folder mit dem Namen der App anlegt, wo die Daten dann drinstehen sollten.
Kann man sowas im iCloud Driver erkennen ?

Vielleicht macht es auch Sinn einfach mal ein kleines XCode Projekt anzulegen und nach den Anleitungen aufzubauen, um zu sehen was da Alles gesetzt wird.

Ja die Jugend soll meinetwegen forschen, ich bin da langsam zu alt für
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
893 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: iOS: Dateien in iCloud Drive speichern

  Alt 10. Sep 2020, 18:43
Nein, leider sehe ich meine App im iCloud Drive noch überhaupt nicht und ja, dies würde ich laut den Beschreibungen eigentlich erwarten. Vielleicht hat es noch etwas damit zu tun, dass die App natürlich im Entwickler-Modus läuft. Daher werde ich es mal so hochladen und in der "echten" Version anschauen.

Ich sehe zumindest in iExplorer auf meinem Mac ausgeführt, dass meine Cloud auf dem iPad unter
/Users/philipp/Library/Mobile Documents/icTrainer
liegt und in der App wird
/private/var/mobile/Library/Mobile Documents/iCloud~de~ictrainer/Documents
ausgegeben.

Geändert von philipp.hofmann (10. Sep 2020 um 18:48 Uhr)
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
893 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: iOS: Dateien in iCloud Drive speichern

  Alt 14. Sep 2020, 10:21
So, ich bin eine Runde weiter. Jetzt sehe ich sowohl bei der über den AppStore installierten, als auch über Delphi installierten Version die Dateien in iCloud Drive. Ich vermute dies geht jetzt, weil die neue Version mit dem iCloud-Zugriff erstmalig über AppStoreConnect hochgeladen wurde.

Wermutstropfen am Morgen: Die Dateien sind im Browser ausgegraut, d.h. nicht auswählbar. Dann muss ich mir dies noch anschauen.
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
893 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: iOS: Dateien in iCloud Drive speichern

  Alt 14. Sep 2020, 12:22
Ok, das ausgegraute scheint ein Problem der Garmin-Website unter iOS zu sein. Auf der Strava-Website kann ich das File auswählen. Also doch alles gut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz