AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

Ein Thema von Jef · begonnen am 26. Feb 2016 · letzter Beitrag vom 7. Mai 2016
Antwort Antwort
Jef

Registriert seit: 8. Sep 2013
Ort: München
40 Beiträge
 
Delphi 10.3 Rio
 
#1

iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

  Alt 26. Feb 2016, 02:25
Delphi-Version: 10 Seattle
Hallo Forum,

meine App wurde leider von Apple abgelehnt, weil zu viel content in der iCloud abgelegt wird. Es sind (Audio-)Dateien, die nicht in die iCloud sollen. Sie sollen aber auf jeden Fall offline verfügbar sein.
Das ist die Lösung von Apple: iOS Developer Library - Technical Q&A QA1719

Diese Funktion sollte die "do not back up" Markierung für ausgewählte Dateien ermöglichen (da gibt es einen Delphi Praxis Beitrag zu):
Code:
function SetBackupFlag (AFileName: string; ABackup: boolean): boolean;
var
  URL: NSURL;
  Err: PPointer;
begin
  URL:= TNSURL.Wrap (TNSURL.OCClass.fileURLWithPath (StrToNSStr (AFileName)));
  result:= URL.setResourceValue (TNSNumber.OCClass.numberWithBool(not ABackup),
           StrToNSStr('NSURLIsExcludedFromBackupKey'), err) and (err = nil);
end;
Wie rufe ich diese Funktion korrekt auf? Setze ich die ins Hauptformular und könnte ich die Dateien dann einfach einzeln über FormCreate markieren?
z.B. so:
Code:
SetBackupFlag ( GetHomePath+PathDelim +'Documents'+PathDelim+'dateien'+PathDelim+'audio'+PathDelim + 'Fuss_01.mp3', False );
SetBackupFlag ( GetHomePath+PathDelim +'Documents'+PathDelim+'dateien'+PathDelim+'audio'+PathDelim + 'Fuss_02.mp3', False );
SetBackupFlag ( GetHomePath+PathDelim +'Documents'+PathDelim+'dateien'+PathDelim+'audio'+PathDelim + 'Fuss_03.mp3', False );
...
Würde das schon reichen?

Im oben genannten Beitrag steht
You can call the function at any time - peferereably within the HandleAppEvent procedure (aeFinishedLaunching).
Wie würde das denn ausschauen?

Jef
Sebastian
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

  Alt 26. Feb 2016, 13:51
Hi,
setze ich die ins Hauptformular und könnte ich die Dateien dann einfach einzeln über FormCreate markieren?
Eigentlich sollte der Flag nur einmal gesetzt werden und nicht jedesmal wenn die App gestartet wird.
Ich würde den Flag setzen sobald die Daten vom Server in die App geladen werden. Wenn Du die Daten nicht von einem Server nachlädst, würde die App aus einem Backup heraus nicht funktionieren, da die Daten ja nicht gesichert worden sind...

Ich gehe davon aus, dass Du die Daten über die Bereitstellung mitlieferst.
Daher

Zitat:
Important: Apps should avoid mingling app data and user data in the same file. Doing so will unnecessarily increase backup sizes and can be considered a violation of the iOS Data Storage Guidelines.
Quelle Vielleicht einfach nicht ins Documents-Dir rein, sondern in einen schreibgeschützten Bereich darüber.
Ich würde die Files nur in Documents-Dir mit "do not back up" Flag legen wenn Du diese austauschen können möchtest, ohne dass Du Deine App im Store aktualisieren möchtest...

Gruß

Philip
Philip
  Mit Zitat antworten Zitat
Jef

Registriert seit: 8. Sep 2013
Ort: München
40 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

  Alt 26. Feb 2016, 14:46
Hi,

danke für die Antwort.
ja, ich liefere die Dateien über die Bereitstellung mit.
Vielleicht einfach nicht ins Documents-Dir rein, sondern in einen schreibgeschützten Bereich darüber.
Ich dachte das Documents-Dir ist der Projektordner, daher weiß ich nicht, was mit einem schreibgeschützten Bereich darüber gemeint ist. Ich dachte das ist die oberste Ebene.
Gerade steht dieser Remote-Pfad in der Bereitstellung: .\StartUp\Documents\dateien\audio - der ganze audio-Ordner soll nicht in die iCloud.
Wo lege ich den neuen Ordner dann an? Und nutze ich dann immer noch die SetBackupFlag Funktion im FormCreate?

Jef
Sebastian
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

  Alt 26. Feb 2016, 15:29
Soweit ich die Logik verstehe liegen im Documents-Ordner die Userdaten mit Schreibrecht. Die MP3s sind ja Ressourcen und somit Programmdaten. Und Programmdate sollen wie ich das verstehe nicht in das Dokuments-Verzeichnis. Wahrscheinlich wird dieses als Userdaten in der Cloud gesichert. Wenn die MP3s als Programmdaten abgelegt sind ist es Apple doch egal wie groß die App ist... Gibt ja auch Apps mit paar Hundert MB...
Philip
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

  Alt 26. Feb 2016, 16:13
https://developer.apple.com/library/...mOverview.html

und

https://developer.apple.com/library/...010672-CH2-SW1

und

https://developer.apple.com/library/.../uid/10000051i
Philip

Geändert von Darlo (26. Feb 2016 um 16:45 Uhr)
  Mit Zitat antworten Zitat
Jef

Registriert seit: 8. Sep 2013
Ort: München
40 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

  Alt 26. Feb 2016, 16:31
Ich habe eine Lösung für dieses Problem von Marco Cantu gefunden. Folgendes Video ab Minute 18:00 bis 19:20.
The Life of an Object Pascal Public Store App

So wie ich das verstanden habe, gibt man den Remote-Pfad in der Bereitstellung als .\ an und damit wird die Datei direkt ins App-Bundle gesetzt. Sie ist also weit weg von den Userdaten.
Und so kann man die Datei dann laden:
Code:
MediaPlayer1.FileName := (ExtractFilePath(paramstr(0)) + 'Test_01.mp3')
Das Abspielen funktioniert jedenfalls so.
Das scheint mir jetzt die einfachste Lösung zu sein. Sehe ich das richtig so?
Sebastian

Geändert von Jef (26. Feb 2016 um 16:36 Uhr) Grund: falsches Sonderzeichen
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

  Alt 26. Feb 2016, 16:40
Den ersten Link von mir (https://developer.apple.com/library/...mOverview.html) hast Du Dir aber schon durchgelesen, oder? Erster Eintrag in der Tabelle 1-1:
AppName.app (=Root-Directory = \) : The contents of this directory are not backed up by iTunes
Documents : The contents of this directory are backed up by iTunes
Philip
  Mit Zitat antworten Zitat
Jef

Registriert seit: 8. Sep 2013
Ort: München
40 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

  Alt 26. Feb 2016, 16:56
Den ersten Link von mir (https://developer.apple.com/library/...mOverview.html) hast Du Dir aber schon durchgelesen, oder? Erster Eintrag in der Tabelle 1-1:
AppName.app (=Root-Directory = \) : The contents of this directory are not backed up by iTunes
Documents : The contents of this directory are backed up by iTunes
Schön, dass es in Deinem erstem Link bestätigt wird. Vielen Dank, dass Du es rausgesucht hast. Ich hab Cantus Lösung jetzt trotzdem mal gepostet. Vielleicht gibt es ja noch andere wie mich, die öfters mal auf dem Schlauch stehen und sich daher über eine direkte Antwort mehr freuen als über den Link zur Gebrauchsanweisung.
Sebastian
  Mit Zitat antworten Zitat
CHackbart

Registriert seit: 22. Okt 2012
260 Beiträge
 
#9

AW: iOS / iCloud - Dateien aus der Bereitstellung mit "do not back up" markieren

  Alt 7. Mai 2016, 10:11
Ich wollte gerade ein älteres Projekt, aktualisiert mit 10.1, in den Store stellen und die App wurde wegen obigen Problem auch zurückgewiesen.
Ich habe in dem Projekt mehrere Dateien (vornehmlich Bilder bzw. eine 5mb große Datenbank) die ich als Resource gelinked habe. Die werden ja automatisch unter iOS im Documents Pfad gespeichert und das wird in die Cloud gestellt. Das ist ziemlich blöde, da ich Bilder ungern in den Formularen hinterlege, sondern lieber als Resource speichere und dann dynamisch einlese. Reicht es, wenn ich SetBackupFlag für die besagten Ressourcen beim Start ausführe - oder gibt es eine andere Methode das zu verhindern?

Christian

Geändert von CHackbart ( 7. Mai 2016 um 10:29 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:30 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