2013-08-19 7 views
5

Sto costruendo il mio Delphi Apps utilizzando uno script comeCome distribuire un progetto OSX o IOS Delphi dalla riga di comando?

call "C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\bin\rsvars.bat" 
msbuild.exe "C:\Projects\Foo\Bar.dproj" 

e ora voglio aggiungere un'opzione per distribuire l'applicazione di un sistema OSX (o IOS) modifing tale script, quindi è possibile distribuire un OSX o Progetto IOS Delphi dalla riga di comando?

+0

Per la costruzione del progetto; hai provato qualcosa come 'msbuild Project.dproj/p: Config = Release; Platform = OSX32'? – TLama

+0

Ma questo modifica solo le impostazioni di costruzione e non distribuisce l'applicazione nella destinazione. – Salvador

risposta

6

Per distribuire l'applicazione in una posizione remota, è necessario utilizzare lo strumento paclient.exe (Platform Assistant Client Application).

Per ottenere i parametri passati, compilare ed eseguire il progetto da RAD Studio e quindi controllare la scheda delle finestre di messaggio dell'IDE.

Controllare l'immagine successiva per un'applicazione OSX utilizzando un profilo chiamato Local

enter image description here

Da qui è possibile estrarre tutti i parametri passati al paclient.exe

  • Eliminare nell'ospite i file precedenti (esiste)

c: \ programmi (x86) \ embarcadero \ rad studio \ 11.0 \ bin \ paclient.exe --Clean = "Project7.app, C: \ Users \ RRUZ \ Desktop \ Test [email protected]_.tmp"

il file [email protected]_.tmp è un file temporaneo creato dal ide che contiene tutti i file da distribuire in questo caso il contenuto è in questo modo

Project7.app\Contents\MacOS\Project7.rsm 
Project7.app\Contents\Entitlements.plist 
Project7.app\Contents\MacOS\libcgunwind.1.0.dylib 
Project7.app\Contents\MacOS\Project7 
Project7.app\Contents\Resources\Project7.icns 
  • Copiare l'Info.plist (contiene informazioni settup la il file .app come l'icona utilizzata e la versione) sull'host

c: \ program files (x86) \ Embarcadero \ RAD Studio \ 11.0 \ bin \ paclient.exe --put = "OSX32 \ Debug \ Project7.info.plist, Project7.app \ Contents \, 1 , Info.plist" Local

  • Copiare il file di libcgunwind.1.0.dylib (libreria) per l'host

c: \ program files (x86) \ Embarcadero \ RAD Studio \ 11.0 \ bin \ paclient.exe --put = "c: \ program files (x86) \ embarc adero \ rad studio \ 11.0 \ Redist \ osx32 \ libcgunwind.1.0.dylib, Project7.app \ Contents \ MacOS \, 1, libcgunwind.1.0.dylib" locale

  • Copia Bundler all'host

c: \ program files (x86) \ Embarcadero \ RAD Studio \ 11.0 \ bin \ paclient.exe --put = "OSX32 \ Debug \ project7, Project7.app \ Contents \ MacOS \, 1, project7" Local

  • Copiare il file dei simboli di debug remoto al Host

c: \ program files (x86) \ Embarcadero \ monolocale rad \ 11.0 \ bin \ paclient.exe --put = "OSX32 \ Debug \ project7 .rsm, Project7.app \ Contents \ MacOS \, 1, Project7.rsm" locale

  • Copia sull'icona del progetto all'Host

c: \ programmi (x86) \ embarcadero \ rad studio \ 11.0 \ bin \ paclient.exe --put = "c: \ programmi (x86) \ embarcadero \ rad studio \ 11.0 \ bin \ delphi_PROJECTICNS.icns , Project7.app \ Contents \ Resources \, 1, Project7.icns" locale

  • Copiare il file Entitlements.plist all'Host

c: \ program files (x86) \ embarcadero \ rad studio \ 11.0 \ bin \ paclient.exe --put = "OSX32 \ Debug \ Project7.entitlements, Project7.app \ Contents \, 1, Entit lements.plist" locale

finale del copione

Infine si può mettere tutto questo in un file di script in questo modo

call "C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\bin\rsvars.bat" 
MSBuild Project7.dproj 
"c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe" --Clean="Project7.app,C:\Users\RRUZ\Desktop\Test Deploy\files.txt" 
"c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe" --put="OSX32\Debug\Project7.info.plist,Project7.app\Contents\,1,Info.plist" Local 
"c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe" --put="c:\program files (x86)\embarcadero\rad studio\11.0\Redist\osx32\libcgunwind.1.0.dylib,Project7.app\Contents\MacOS\,1,libcgunwind.1.0.dylib" Local 
"c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe" --put="OSX32\Debug\Project7,Project7.app\Contents\MacOS\,1,Project7" Local 
"c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe" --put="OSX32\Debug\Project7.rsm,Project7.app\Contents\MacOS\,1,Project7.rsm" Local 
"c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe" --put="c:\program files (x86)\embarcadero\rad studio\11.0\bin\delphi_PROJECTICNS.icns,Project7.app\Contents\Resources\,1,Project7.icns" Local 
"c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe" --put="OSX32\Debug\Project7.entitlements,Project7.app\Contents\,1,Entitlements.plist" Local 

Nota: Ricordare creare un file con i nomi dei file di tutti i i file da distribuire, in questo esempio di script si chiama files.txt, questo file viene utilizzato da paclient per pulire i file distribuiti in precedenza.

+0

Grazie mille. – Salvador

-1

Prima di tutto questa non è una domanda riguardante Delphi, Ha più a che fare con Scripting in Windows.

Quindi, se è possibile accedere a OSX all'interno del sistema operativo, è probabile che sia necessario copiare solo i file richiesti direttamente nelle cartelle in cui devono risiedere nel sistema operativo di destinazione.

Per IOS probabilmente non sarà possibile compilare direttamente all'interno di Windows. Per quanto mi ricordo, hai esportato il tuo codice in un codice che potrebbe essere compilato in xCode con targeting IOS (requisito di Apple).

+6

-1. Ovviamente non hai familiarità con Delphi XE4, che compila direttamente applicazioni OSX e iOS su Windows (anche se richiede un sistema che esegue uno di quei sistemi operativi per testare/eseguire il debug/deploy). Sì, compila direttamente le applicazioni iOS. :-) Vedi la [XE4 product page] (http://www.embarcadero.com/delphi) per maggiori informazioni. (Non sono affiliato in alcun modo con EMBT o Delphi, per chiarezza. Mi oppongo solo a persone che fanno affermazioni del tutto scorrette, specialmente su siti tecnici orientati verso professionisti.) –

0

Questa risposta è in ritardo, ma ho pensato che potrebbe essere ancora utile per altre persone. Come parte di uno script di build volevo anche distribuire un progetto automaticamente su OSX, ma non è direttamente possibile con lo strumento paclient.exe di msbuild o di Embarcadero.

Ho scritto uno strumento da riga di comando Helper denominato Embdeploy per automatizzare l'attività. Il source e un compiled binary sono disponibili su GitHub.

Ecco alcuni esempio dell'uso:

embdeploy.exe -deploy myproject.dproj 
embdeploy.exe -platform OSX32 -config Release -deploy myproject.dproj 
embdeploy.exe -profile <remote profile> -platform OSX32 -deploy myproject.dproj 

Lo strumento analizza l'Embdeploy.file dproj, che è XML, e genera un elenco di file da copiare per la configurazione, la piattaforma, ecc. specificata. Rileva anche la piattaforma, il profilo e la configurazione predefiniti dal progetto se non vengono forniti nella riga di comando. È possibile definire le opzioni di implementazione nell'IDE di Delphi e quindi utilizzare lo strumento per eseguire automaticamente la distribuzione.
Per pulire la cartella del progetto remoto e eseguire la distribuzione effettiva, lo strumento utilizza paclient.exe ed esegue con i parametri appropriati. Paclient.exe viene rilevato dal percorso di installazione di Delphi.

C'è un altro problema che lo strumento risolve per me. Il mio progetto include binari bundled aggiuntivi, che vengono distribuiti con l'app, ma l'IDE Delphi non offre abbastanza controllo in questo caso. Per esempio. distribuisce i binari aggiuntivi, ma non imposta l'autorizzazione Execute su OSX, che deve essere impostata manualmente in seguito. Inoltre, non è possibile "codificare" quei file binari e questo è necessario per pubblicare l'app su Appstore.

Per risolvere il problema ho aggiunto la funzionalità per eseguire comandi personalizzati sulla macchina remota dopo aver distribuito il file.
Questo viene fatto in questo modo:

embdeploy.exe -cmd "chmod +x myproject.app/Contents/MacOS/somebinary" myproject.dproj 
embdeploy.exe -cmd "codesign .... myproject.app/Contents/MacOS/somebinary" myproject.dproj 

Questo è fatto di nuovo con paclient.exe. Lo strumento Embarcadero fornisce un'opzione per distribuire un file di script, eseguirlo e quindi cancellarlo. L'ho usato per eseguire i miei comandi creando un file shell temporaneo con il comando, distribuendolo ed eseguendolo.
In questo modo potrei usare "chmod", "productbuild" e qualsiasi altra cosa di cui avevo bisogno.

Lo strumento è un po 'di base e non ottimizzato attualmente come l'ho scritto per le mie esigenze immediate, ma ho intenzione di estenderlo con alcune altre funzionalità. Per esempio. creare un file ZIP del pacchetto di applicazioni OSX su Windows.

Problemi correlati