Delphi has a well developed command line build process (via MSBuild) for Windows projects. After the introduction of FireMonkey, MSBuild was altered to allow users to build non-Win projects. After you build a project, if you want to deploy it to platforms other than Win32 (or Win64), the compiler requires a deployment project file and the use of Deployment Manager.

According to the documentation, the only way to generate a deployment file and deploy the project is via the IDE. This means that you have to, manually, generate the file in the IDE first and then, manually again, deploy the project. This limitation may present a problem for those who have an automated processes after the development of the code (unit tests, builds, deployment, etc.).

Vladimir Georgiev has written a very nice tool (EmbDeploy) to allow the deployment of a Delphi project via the PAClient. If you want to check the details of the solution, see this post and get the source code from here.

You use EmbDeploy with the following command-line arguments:

embdeploy [-delphiver "ver"] -deploy|(-cmd "command")|(-bundle "zip") [-platform|-profile|-config|-proot "name"] [-ignore] ProjectName

The arguments are here:

 ProjectName      Name (relative or absolute) of the project file (.dproj)
-delphiver "ver" Delphi version to use the paclient from. It is the number from the HKCU/Software/Emb...'
-deploy Deploy the project to the remote profile
-platform "name" Platform to deploy (Win32, OSX32, iOSDevice, etc). If not specified the default one from the project is used
-profile "name" Name of the remote profile to use. If not specified the default one for the platform is used
-config "name" Release or Debug configuration. If not specified the default one from the project file is used
-proot "name" Remote project root folder. If not specified a default one is generated from the project name
-cmd "command" Execute an arbitrary command line on the remote server. The command is anything that can be executed from a terminal or command line prompt.
It is executed from above the remote project folder. The command can contain the $PROOT parameter, which is replaced with the project
root folder, e.g. $PROOT/Contents/... becomes myproject.app/Contents/...
-ignore Ignore errors reported by paclient.exe and continue deploying
-bundle "zipname" Produce a ZIP archive of the files to be deployed. Useful for making a ZIP of an OSX project APP bundle

So, if you want to build for OSX32 and use the Release configuration in Delphi, you call the following command from the project folder:

embdeploy.exe -platform OSX32 -config Release -deploy myproject.dproj

This will generate the .app bundle in the scratch-dir on your Mac machine.

EmbDeploy requires an open channel to the Mac machine; i.e., if I want to build my OSX project from the command line, I have to keep PAClient open and give constant access of my Delphi machine to the Mac machine. This is because EmbDeploy uses a pipe channel to the Mac machine in order to generate the .app bundle with all its resources and the rest of the files. Although this is not the end of the world, I wanted to keep my build server as a separate machine isolated from my Mac.

I modified Vladimir’s work and added a few more command line switches to meet my needs.

-registerPAClient Uses the PAClient to deploy the project
-registerFolder "folder"'
OSX only: Creates the APP folder structure on Windows. Useful for building OSX without the need to use the paclient on OSX
-verbose Produces detailed debugging messages
-logExceptions Logs any exceptions and quits instead of raising them
-binaryFolder "folder"
The folder for the binary files. If not provided, the default location is assumed

I have introduced the idea of “build channels” and, for now, you can have a channel that uses the PAClient (registerPAClient), as before, and/or a channel which creates the .app bundle as a folder on windows (registerFolder). The improvement here is that you don’t need the PAClient to be open and linked to your Delphi machine, as EmbDeploy creates the bundle (executable on Mac) independently. Of course, you need the PAClient if you use the registerPAClient switch. Then, if you wish, you can copy the .app folder to a Mac machine and execute it without any modifications.

I have,also, introduced a couple of other switches to help debugging the deployment process (verboselogExceptions) and a parameter (binaryFolder) which defines the directory with the build binaries.

The usage of the new parameters is as follows:

embdeploy.exe -registerFolder "....\Desktop" -binaryFolder "\OSX32" -platform OSX32 -config Release -deploy myproject.dproj

The above command will create the myproject.app folder on Desktop. The paths indicate that the command is executed in the same folder as myproject.dproj. As a test, if you have Windows on a virtual machine, you can reveal the myproject.app folder in Mac and execute it directly.

You can get the modified version of EmbDeploy from here, until Vladimir responds to the pull request on github.

Update (24/09/2016): Vladimir has, now, merged the pull request so you can download the updated version of EmbDeploy, directly, from his repository. Thanks Vladimir!

http://www.kouraklis.com/2016/09/how-to-build-and-deploy-a-delphi-osx-project-from-the-command-line/

How to deploy a Delphi OSX project from the command line的更多相关文章

  1. IAR project build with command line

    The simple way is  that using iarbuild.exe project.eww -build Release/Debug Release/Debug is the con ...

  2. Getting command line access to PHP and MySQL running MAMP on OSX

    建立自己profile路径应该在/Users/yourname/,最后要运行. ./.profile使文件生效,和windows中给添加环境变量是一个道理,还可以看出linux和UNIX默认运行路径为 ...

  3. Happening in delphi world

    Happy New Year! Delphi XE5 Update 2 Recent VCL enhancements New product features for old product use ...

  4. 错误异常 (1)Android Studio错误提示:Gradle project sync failed. Basic functionality (eg. editing, debugging) will not work properly

    [已解决]Android Studio错误提示:Gradle project sync failed. Basic functionality (eg. editing, debugging) wil ...

  5. Android Studio错误提示:Gradle project sync failed. Basic functionality (eg. editing, debugging) will not work properly

    Android Studio中出现提示: Gradle project sync failed. Basic functionality (eg. editing, debugging) will n ...

  6. 【1】按照Django官网,编写一个web app 创建project/配置数据库

    1. Creating a project From the command line, cd into a directory where you'd like to store your code ...

  7. maven tomcat 插件实现热部署

    tomcat 的maven插件有助于提高开发效率,原因是: --可以直接把项目发布到远程的服务器上. --能够实现项目的热部署,在开发过程中修改了Java类,不需要重启tomcat 首先配置一个tom ...

  8. Delphi10.2 VCL Forms Application 的构成

    Delphi10.2 项目的构成(File Extensions of Files Generated by RAD Studio) Step1.打开 Delphi10.2,选择[File | New ...

  9. Developing on Windows Phone 8 Devices

    Developing on Windows Phone 8 Deviceshttp://docs.madewithmarmalade.com/native/platformguides/wp8guid ...

随机推荐

  1. 【MFC】禁用鼠标拖拽标题栏移动窗口

    解决方案:重载WM_NCLBUTTONDOWN消息 (1) .h 文件 afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point); (2) . ...

  2. AC日记——Housewife Wind poj 2763

    Language: Default Housewife Wind Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 10525 ...

  3. IE使用多彩文档上传数据库报错

    使用多彩文档,用IE浏览器提交表单,双引号里面包含单引号,导致数据库插入不了,而用chrome浏览器不会报错,自动过滤单引号, 解决:content.replace("'", &q ...

  4. HDU4372 Buildings

    @(HDU)[Stirling數, 排列組合] Problem Description There are N buildings standing in a straight line in the ...

  5. spring事务详细理解

    数据并发的问题 一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库.数据库中的相同数据可能同时被多个事务访问,如果没有采取必要的隔离措施,就会导致各种并发问题,破坏数据的完整性.这些 ...

  6. Android-->状态栏高度,导航栏高度,Window高度,DecorView高度,heightPixels

    1:DecorView的高度 DecorView的高度代表的是: 整个装饰窗口的高度, 这个高度包括:状态烂的高度和导航栏的高度.(状态栏和导航栏通常叫做装饰窗口, 而ActionBar不属于装饰窗口 ...

  7. JSP/SERVLET新手教程--Servlet 使用入门

    如今的JSP书籍有的是直接讲述JSP的使用,然后再解说SERVERLET的使用;也有书籍是先讲述SERVERLET的使用,然后解说JSP使用.个人觉得另外一种相对好一些,至于原因大家能够在学习体会到! ...

  8. SilverLight:布局(3)StackPanel 对象

    ylbtech-SilverLight-Layout: 布局(3)StackPanel 对象 A, Nesting Layout Containers(内嵌布局容器) B, StackPanel(队列 ...

  9. [反汇编练习] 160个CrackMe之034

    [反汇编练习] 160个CrackMe之034. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  10. Cookie学习笔记二:Cookie实例

    今天说说刚刚学到的两个Cookie的最经典应用:自己主动登录和购物车设置 一:自己主动登录 须要两个页面:login.jsp与index.jsp,login.jsp用来输出登录信息,index.jsp ...