如何从命令行部署OSX或IOS Delphi项目?

时间:2013-08-19 19:40:19

标签: delphi delphi-xe4

我正在使用像

这样的脚本构建我的Delphi应用程序
call "C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\bin\rsvars.bat"
msbuild.exe "C:\Projects\Foo\Bar.dproj"

现在我想添加一个选项,将应用程序部署到修改此类脚本的OSX(或IOS)系统,那么是否可以从命令行部署OSX或IOS Delphi项目?

3 个答案:

答案 0 :(得分:6)

要将您的应用程序部署到远程位置,您必须使用paclient.exe (Platform Assistant Client Application)工具。

为了获取传递的参数,从RAD Studio中构建并运行项目,然后检查IDE的消息窗口的Build选项卡。

使用名为Local

的配置文件检查OSX应用程序的下一个图像

enter image description here

从这里你可以提取传递给paclient.exe的所有参数

  • 在主机中删除以前的文件(存在)
  

c:\ program files(x86)\ embarcadero \ rad studio \ 11.0 \ bin \ paclient.exe   --Clean =“Project7.app,C:\ Users \ RRUZ \ Desktop \ Test Deploy_@emb_.tmp”

_@emb_.tmp文件是由ide创建的临时文件,包含要部署的所有文件,在这种情况下内容就像这样

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
  • 将Info.plist(包含.app,如使用的图标和版本)文件复制到主机
  

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

  • libcgunwind.1.0.dylib文件(库)复制到主机
  

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”   本地

  • 将捆绑包复制到主机
  

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 \调试\ Project7.rsm,Project7.app \内容\的MacOS \,1,Project7.rsm”   本地

  • 将项目图标复制到主机
  

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”   本地

  • 将Entitlements.plist文件复制到主机
  

c:\ program files(x86)\ embarcadero \ rad studio \ 11.0 \ bin \ paclient.exe   --put = “OSX32 \调试\ Project7.entitlements,Project7.app \内容\,1,Entitlements.plist”   本地

最终脚本

最后,您可以将所有这些放在像这样的脚本文件中

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 

注意:请记住创建一个文件,其中包含要部署的所有文件的文件名,在此示例脚本中称为files.txt,此文件由paclient用于清除previus部署的文件。

答案 1 :(得分:1)

这个答案很晚,但我认为它可能对其他人有用。 作为构建脚本的一部分,我还想自动将项目部署到OSX,但使用msbuild或Embarcadero的paclient.exe工具无法直接实现。

我编写了一个名为Embdeploy的辅助命令行工具来自动完成任务。 GitHub上提供了sourcecompiled binary

以下是一些示例用法:

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

Embdeploy工具解析.dproj文件,该文件是XML,并生成要为指定配置,平台等复制的文件列表。它还检测项目中的默认平台,配置文件和配置(如果它们是没有在命令行中给出。您可以在Delphi IDE中定义部署选项,然后使用该工具自动执行部署 要清理远程项目文件夹并执行实际部署,该工具使用paclient.exe并使用适当的参数执行它。从Delphi的安装路径中检测到Paclient.exe。

该工具还有另一个问题。我的项目包括附加的捆绑二进制文件,它们与应用程序一起部署,但Delphi IDE在这种情况下没有提供足够的控制。例如。它部署了其他二进制文件,但它没有在OSX上设置执行权限,后者必须手动设置。也不可能对这些二进制文件进行“协同设计”,这是将应用程序发布到Appstore所必需的。

为了解决这个问题,我在部署文件后添加了在远程机器上执行自定义命令的功能 这是这样做的:

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

使用paclient.exe再次完成此操作。 Embarcadero工具提供了部署脚本文件,执行它然后删除它的选项。我使用它来执行我自己的命令,通过使用命令创建一个临时shell文件,部署它并执行它 这样我就可以使用“chmod”,“productbuild”以及我需要的任何其他东西。

该工具有点基础,目前尚未针对我的直接需求进行优化,但我计划使用更多功能进行扩展。例如。在Windows上制作OSX应用程序包的ZIP文件。

答案 2 :(得分:-1)

首先,这不是关于Delphi的问题,它更多地与Windows中的脚本有关。

因此,如果您可以在操作系统中访问OSX,那么您可能只需要将所需文件直接复制到它们应驻留在目标操作系统中的文件夹中。

对于IOS,您可能无法在Windows中直接编译。据我所知,您将代码导出到可以在xCode中针对IOS编译的代码(Apple的要求)。