Macos 在命令行xcodebuild调用后分发.app文件

Macos 在命令行xcodebuild调用后分发.app文件,macos,command-line,xcode4,build,build-process,Macos,Command Line,Xcode4,Build,Build Process,我正在构建/归档我的Mac应用程序,以便在安装了Xcode 4.3的情况下通过命令行调用(如下)进行分发。要明确的是,在Xcode 4.3之前,我还没有一个有效的解决方案来解决这个问题,所以对于早期Xcode版本的建议仍然是有效的。这是电话: /usr/bin/xcodebuild -project "ProjectPath/Project.pbxproj" -scheme "Project" -sdk macosx10.7 archive 这将成功运行,并生成一个.xarchive文件,位于

我正在构建/归档我的Mac应用程序,以便在安装了Xcode 4.3的情况下通过命令行调用(如下)进行分发。要明确的是,在Xcode 4.3之前,我还没有一个有效的解决方案来解决这个问题,所以对于早期Xcode版本的建议仍然是有效的。这是电话:

/usr/bin/xcodebuild -project "ProjectPath/Project.pbxproj" -scheme "Project" -sdk macosx10.7 archive
这将成功运行,并生成一个
.xarchive
文件,位于我的
~/Library/Developer/Xcode/Archives/
文件夹中。获取生成的存档文件路径的正确方法是什么?我正在寻找一种方法来获取其中包含的
.app
文件的路径,以便分发它


我查看了
xcodebuild
(并在网上进行了大量搜索)的手册页,但没有找到任何线索。

您可以使用一点shell,在归档目录中获取最新的文件夹(或使用当前日期),然后在该目录中获取最新的归档。

在,我提出了一个令人满意的多部分解决方案。关键是使用Xcode在构建过程中创建的环境变量

首先,我在构建方案的归档阶段有一个post操作(粘贴到Xcode项目的UI中)。它调用我编写的一个Python脚本(在下一节中提供),将我要提取的环境变量的名称和文本文件的路径传递给它:

#导出归档完成后要使用的归档路径
“${PROJECT_DIR}/Script/grab_env_vars.py”“${PROJECT_DIR}/build/archive env.txt”
“存档路径”“存档产品路径”“存档系统路径”
“安装路径”“包装器名称”
然后,该脚本将它们成对写入文本文件:

导入系统 导入操作系统 def主(args): 如果len(args)<2: 打印('没有传递到grab_env_vars'的文件路径) 返回 如果len(args)<3: print('没有传递给grab\u env\u vars'的环境变量名称) 输出文件=args[1] 输出路径=os.path.dirname(输出文件) 如果操作系统路径不存在(输出路径): os.makedirs(输出路径) 打开(输出_文件“w”)作为f: 对于范围(2,len(args))中的i: arg_name=args[i] arg_value=os.environ[arg_name] #打印('env{}:{}'。格式(arg_名称,arg_值)) f、 写入('{}={}\n'.格式(arg_名称,arg_值)) def get_archive_vars(路径): 返回dict((line.strip().split('='),用于文件(路径)中的行) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 主(系统argv) 最后,在我的构建脚本(也是Python)中,我解析出这些值,并可以找到归档文件的路径以及其中的应用程序包:

env_vars=grab_env_vars.get_archive_vars(env_文件)
存档路径=环境变量['archive\u PRODUCTS\u path']
install_path=env_vars['install_path'][1:][1://切掉下面连接的前导“/”
包装器名称=环境变量['wrapper\u name']
存档的应用程序=os.path.join(存档路径、安装路径、包装器名称)

这就是我解决它的方法,它应该很容易适应其他脚本环境。这对于我的限制是有意义的:我希望项目中的代码尽可能少,我更喜欢Python脚本而不是Bash,并且该脚本很容易在其他项目中重用,也可以用于其他目的。

有一种更简单的方法,只需指定要归档的archivePath:

xcodebuild -archivePath GoTray -scheme GoTray archive
然后,您将在当前目录中的
GoTray.xccharve
处获得xccharve文件

接下来,再次运行xcodebuild以从xcarchive文件导出应用程序:

xcodebuild -exportArchive -exportFormat APP -archivePath GoTray.xcarchive -exportPath GoTray