【问题标题】:How deploy a OSX or IOS Delphi project from the Command line?如何从命令行部署 OSX 或 IOS Delphi 项目?
【发布时间】:2013-08-19 19:40:18
【问题描述】:

我正在使用类似

的脚本构建我的 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 项目?

【问题讨论】:

  • 用于构建项目;你试过像msbuild Project.dproj /p:Config=Release;Platform=OSX32这样的东西吗?
  • 但这只会改变构建设置,并不会在目标中部署应用程序。

标签: delphi delphi-xe4


【解决方案1】:

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

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

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

从这里你可以提取所有传递给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" 本地

  • 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" 本地

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

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 用于清理以前部署的文件。

【讨论】:

    【解决方案2】:

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

    我编写了一个名为 Embdeploy 的辅助命令行工具来自动执行该任务。 sourcecompiled binary 可在 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 文件。

    【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • -1。您显然不熟悉 Delphi XE4,它直接在 Windows 上编译 OSX 和 iOS 应用程序(尽管它需要运行这些操作系统之一的系统才能测试/调试/部署)。是的,它直接编译 iOS 应用程序。 :-) 请参阅XE4 product page 了解更多信息。 (为了清楚起见,我与 EMBT 或 Delphi 没有任何关系。我只是反对人们发表完全不正确的陈述,尤其是在面向专业人士的技术网站上。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多