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.
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>/).
.app ma assenti nei path accessibili in runtime.TFile.Exists(...) restituisce false anche per file apparentemente deployati.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);
Startup/Documents.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