我正在使用类似的脚本构建我的 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 项目?
我正在使用类似的脚本构建我的 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 项目?
要将应用程序部署到远程位置,您必须使用paclient.exe(平台助手客户端应用程序)工具。
为了从 RAD Studio 中获取传递的参数 Build and Run 您的项目,然后检查Build
IDE 消息窗口的选项卡。
使用名为的配置文件检查 OSX 应用程序的下一个图像Local
从这里您可以提取所有传递给 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
c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe --put="OSX32\Debug\Project7.info.plist,Project7.app\Contents\,1,Info.plist" 本地
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" 本地
c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe --put="OSX32\Debug\Project7.rsm,Project7.app\Contents\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" 本地
c:\program files (x86)\embarcadero\rad studio\11.0\bin\paclient.exe --put="OSX32\Debug\Project7.entitlements,Project7.app\Contents\,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 用于清理以前部署的文件。
这个答案很晚,但我认为它对其他人可能仍然有用。作为构建脚本的一部分,我还想将项目自动部署到 OSX,但不能直接使用 msbuild 或 Embarcadero 的 paclient.exe 工具。
我编写了一个名为 Embdeploy 的辅助命令行工具来自动执行该任务。GitHub 上提供了源代码和编译后的二进制文件。
这是一些示例用法:
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 文件。
首先,这不是关于 Delphi 的问题,它更多地与 Windows 中的脚本有关。
因此,如果您可以在操作系统中访问 OSX,那么您可能只需将所需文件直接复制到它们应该驻留在目标操作系统中的文件夹中。
对于 IOS,您可能无法在 windows 中直接编译。据我记得,您将代码导出为可以在针对 IOS 的 xCode 中编译的代码(Apple 的要求)。