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.