Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#24

AW: Datenaustausch mit Mobilgeräten

  Alt 15. Nov 2013, 08:51
So, ich habe nun herausgefunden wie das mit der iCloud geht. Basis ist dieser Beitrag von Daniel.

Abweichend von den push-Notifications muß die entitlements wie folgt aussehen, wobei die XXXXXXXXXX mit der Developer-Program-ID und das com.domain.appname durch den CFBundleIdentifier ersetzt werden müssen:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
   <key>application-identifier</key>
   <string>XXXXXXXXXX.com.domain.appname</string>
  <key>com.apple.developer.ubiquity-container-identifiers</key>
  <array>
     <string>XXXXXXXXXX.com.domain.appname</string>
  </array>   
   <key>get-task-allow</key>
   <true/>
</dict>
</plist>
Die Cloud stellt sich dann als Verzeichnis dar, dessen Namen man so ermittelt:
Delphi-Quellcode:
function GetiCloudPath : string;
var
  nsFile: NSFileManager;
  URL: NSURL;
begin
  nsFile := TNSFileManager.Wrap(TNSFileManager.OCClass.defaultManager);
  URL := nsFile.URLForUbiquityContainerIdentifier(nil);
  if (URL <> nil) then
    Result := UTF8ToString(URL.path.UTF8String)
  else
    Result := '';
end;
Man kann Dateien in diesen Pfad einfach hineinkopieren:
Delphi-Quellcode:
procedure SaveToICloud(AFileName);
var
  ACloudPath : string;
begin
  ACloudPath := GetiCloudPath;
  if ACloudPath <> 'then
  begin
    TFile.Copy(AFileName, IncludeTrailingPathDelimiter(ACloudPath)+ExtractFileName(AFileName));
  end;
end;
Der Beweis, dass es funktioniert, kann man auf dem Mac in den iCloud-Einstellungen erbringen. Wenn man dort auf "Verwalten" geht, wird eine so kopierte Datei angezeigt. Auch in den iOS-Einstellungen auf dem Gerät zeigt sich das unter "Speicher & Backup > Speicher verwalten". Dort wird der vergebene app-name (aus dem Bundle-Identifier) angezeigt und der belegte Speicherplatz.

Nachteil, der das (jedenfalls zum Datenaustausch) ziemlich unbrauchbar macht: Ohne Tricks kann man auf diese Dateien nicht zugreifen, da sie app-spezifisch verwaltet werden.

Der Trick ist, eine app auf dem Mac zu starten, die iCloud-Zugriff hat. Dadurch wird ein Dienst gestartet, der den iCloud Ordner in der User-Library einbindet.

Die Daten findet man dann unter
Code:
~/Library/Mobile Documents/XXXXXXXXXX~com~domain~appname
wobei wieder die gleichen Ersetzungen gemacht werden müssen wie bei den Entitlements.

Ziemlich unbrauchbar das Ganze, vor allem für Nicht-Programmierer und Mac-Nutzer.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat