2013-08-19 42 views
5

我建设用我的Delphi应用程序的脚本一样如何从命令行部署OSX或IOS 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项目?

+0

用于构建项目;你有没有尝试过像'msbuild Project.dproj/p:Config = Release; Platform = OSX32'? – TLama

+0

但是,这只会更改建筑物设置,并且不会将应用程序部署到目标中。 – Salvador

回答

6

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

为了从RAD Studio中获得传递的参数Build and Run你的项目,然后检查IDE消息窗口的Build选项卡。

检查下一个图像,使用一个名为Local

enter image description here

的个人资料在这里,您可以提取传递给paclient.exe的所有参数OSX应用

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

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

[email protected]_.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(包含settup信息的.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)\ embarc adero \ rad studio \ 11.0 \ Redist \ osx32 \ libcgunwind.1.0。dylib,Project7.app \目录\ MacOS的\,1,libcgunwind.1.0.dylib” 本地

  • 复制捆绑到主机

C:\ Program Files文件(86 )\ Embarcadero的\拉德工作室\ 11.0 \ BIN \ paclient.exe --put = “OSX32 \调试\ Project7,Project7.app \内容\的MacOS \,1,Project7” 本地

  • 将远程调试符号文件复制到主机

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 \目录\资源\,1,Project7.icns” 本地

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

C:\ Program Files文件(86 )\ embarcadero \ rad studio \ 11.0 \ bin \ paclient.exe --put =“OSX32 \ Debug \ Project7.entitlements,Project7.app \ Contents \,1,Entit lements.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部署的文件。

+0

非常感谢。 – Salvador

-1

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

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

对于IOS可能你不能直接在Windows内编译。据我记得,你的代码导出到一个代码,可以编译在xCode目标IOS(苹果的要求)。

+6

-1。您显然不熟悉Delphi XE4,它直接在Windows上编译OSX和iOS应用程序(尽管它需要运行其中一个操作系统以测试/调试/部署的系统)。是的,它直接编译iOS应用程序。 :-)有关更多信息,请参阅[XE4产品页面](http://www.embarcadero.com/delphi)。 (为了清楚起见,我与EMBT或Delphi没有任何关系,我只是反对发表完全不正确的陈述,尤其是在面向专业人士的技术网站上)。 –

0

这个答案很晚,但我认为它可能对其他人有用。 作为构建脚本的一部分,我也想将一个项目自动部署到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文件。

相关问题