Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从命令行部署OSX或IOS Delphi项目?_Delphi_Delphi Xe4 - Fatal编程技术网

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

如何从命令行部署OSX或IOS Delphi项目?,delphi,delphi-xe4,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项目了?首先,这不是关于Delphi的问题,它更多地与windows中的脚本有关 因此,如果您可以

我正在使用脚本构建我的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的问题,它更多地与windows中的脚本有关

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


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

要将应用程序部署到远程位置,必须使用该工具

为了获得传递的参数,请从RAD Studio生成并运行项目,然后检查IDE消息窗口的
Build
选项卡

使用名为
Local

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

  • 删除主机中以前的文件(存在)
c:\ProgramFiles(x86)\embarcadero\rad studio\11.0\bin\paclient.exe --Clean=“Project7.app,C:\Users\RRUZ\Desktop\Test Deploy@emb\uz.tmp”

\uu@emb\utmp文件是由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 Info.app,如使用的图标和版本)文件复制到主机
c:\ProgramFiles(x86)\embarcadero\rad studio\11.0\bin\paclient.exe --put=“OSX32\Debug\Project7.info.plist,Project7.app\Contents\,1,info.plist”本地

  • libcgind.1.0.dylib
    文件(库)复制到主机
c:\ProgramFiles(x86)\embarcadero\rad studio\11.0\bin\paclient.exe --put=“c:\program files(x86)\embarcadero\rad studio\11.0\Redist\osx32\libcUnwind.1.0.dylib,Project7.app\Contents\MacOS\,1,libcUnwind.1.0.dylib” 本地的

  • 将捆绑程序复制到主机
c:\ProgramFiles(x86)\embarcadero\rad studio\11.0\bin\paclient.exe --put=“OSX32\Debug\Project7,Project7.app\Contents\MacOS\,1,Project7”本地

  • 将远程调试符号文件复制到主机
c:\ProgramFiles(x86)\embarcadero\rad studio\11.0\bin\paclient.exe --put=“OSX32\Debug\Project7.rsm,Project7.app\Contents\MacOS\,1,Project7.rsm” 本地的

  • 将项目图标复制到主机
c:\ProgramFiles(x86)\embarcadero\rad studio\11.0\bin\paclient.exe --put=“c:\program files(x86)\embarcadero\rad studio\11.0\bin\delphi\u projectcns.icns,Project7.app\Contents\Resources\,1,Project7.icns” 本地的

  • 将authentications.plist文件复制到主机
c:\ProgramFiles(x86)\embarcadero\rad studio\11.0\bin\paclient.exe --put=“OSX32\Debug\Project7.authentications,Project7.app\Contents\,1,authentications.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部署的文件。

这个答案很晚,但我认为它对其他人可能仍然有用。 作为构建脚本的一部分,我还希望将项目自动部署到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
使用paclient.exe再次执行此操作。Embarcadero工具提供了一个选项,可以部署脚本文件,执行它,然后删除它。我用它来执行我自己的命令,方法是用命令生成一个临时shell文件,部署它并执行它。
这样我就可以使用“chmod”、“productbuild”和我需要的任何东西


该工具有点基本,目前还没有优化,因为我写它是为了满足我的迫切需要,但我计划用更多的功能来扩展它。例如,在Windows上制作OSX应用程序包的ZIP文件。

用于构建项目;您是否尝试过类似于
msbuild Project.dproj/p:Config=Release;Platform=OSX32
?但这只会更改建筑设置,不会在目标中部署应用程序。-1。您显然不熟悉Delphi XE4,它直接在Windows上编译OSX和iOS应用程序(尽管它需要运行这些操作系统之一的系统才能进行测试/调试/部署)。是的,它直接编译iOS应用程序。:-)有关更多信息,请参阅。(为了清楚起见,我与EMBT或Delphi没有任何关联。我只是反对人们发表完全不正确的言论,尤其是在面向专业人士的技术网站上。)很棒的工具!我发现有人根据你的回答写了一篇博客:
embdeploy.exe -cmd "chmod +x myproject.app/Contents/MacOS/somebinary" myproject.dproj
embdeploy.exe -cmd "codesign .... myproject.app/Contents/MacOS/somebinary" myproject.dproj