Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

Possibile Bug Delphi 12.3 – Deployment nella cartella Startup/Documents non funziona correttamente con iOS

Digital Innovation Partner

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.GetHomePathdata/Containers/Data/Application/<UUID>/).

Sintomi

  • File presenti nel pacchetto .app ma assenti nei path accessibili in runtime.
  • TFile.Exists(...) restituisce false 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