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