Possibile Bug Delphi 12.3 – Deployment nella cartella Startup/Documents non funziona correttamente con iOS
Durante lo sviluppo mobile con Delphi 12.3 su piattaforma iOS, è emerso un bug che impedisce il corretto deploy dei file destinati alla cartella Startup/Documents
.
Descrizione del problema
Nel progetto è configurata una risorsa da copiare nella directory:
Startup/Documents/xtumble.gdb
Ma al momento del deploy, Delphi copia correttamente il file nell’IPA solo nella directory dell’applicazione (.app/Startup/Documents/
), non nella sandbox dell’utente (ovvero TPath.GetHomePath
→ data/Containers/Data/Application/<UUID>/
).
Sintomi
- File presenti nel pacchetto
.app
ma assenti nei path accessibili in runtime. TFile.Exists(...)
restituiscefalse
anche per file apparentemente deployati.- FireDAC o altri moduli segnalano file mancante durante il tentativo di apertura del database.
Soluzione temporanea (workaround)
Durante il primo avvio dell’applicazione, è necessario eseguire una copia manuale dei file dalla directory .app
(bundle) alla sandbox del runtime. Questo può essere fatto in Delphi utilizzando il framework iOS Foundation:
uses
iOSapi.Foundation;
function GetBundleResourcePath: string;
var
Bundle: NSBundle;
begin
Bundle := TNSBundle.Wrap(TNSBundle.OCClass.mainBundle);
Result := UTF8ToString(Bundle.resourcePath.UTF8String); // ottiene la path del .app
end;
Da qui puoi copiare i file desiderati nella cartella TPath.GetDocumentsPath
o TPath.GetHomePath
per l’utilizzo runtime:
var
SrcFile := TPath.Combine(GetBundleResourcePath, 'Startup/Documents/xtumble.gdb');
DstFile := TPath.Combine(TPath.GetDocumentsPath, 'xtumble.gdb');
TFile.Copy(SrcFile, DstFile);
Note importanti
- Questo bug si verifica solo su iOS (incluso simulatore) e solo con percorsi annidati come
Startup/Documents
. - Il problema non riguarda il contenuto del file, ma solo la destinazione errata durante il deploy.
- Al momento Embarcadero non ha documentato ufficialmente questo comportamento.
✅ Conclusione
In attesa di una correzione ufficiale da parte di Embarcadero, il workaround proposto consente di mantenere operativa l’applicazione assicurandosi che le risorse necessarie vengano copiate correttamente nella sandbox di runtime.
Suggerimento: Valuta di automatizzare la copia dei file con una classe helper come TStartupFileManager
.
Ultimo aggiornamento: Luglio 2025 – Ivan Revelli