autobuild.py打包单个ipa的Python文件,TestBuild.sh打包多个ipa的shell文件,将这两个文件放到工程根目录,就可在终端中用命令打包。
autobuild.py参数说明:
-p 工程project
-w 工作空间workspace
-t target
-s scheme
-c configuration,即Debug/Release/自定义configuration,如果不设置,默认使用Release
-d definitions,预编译宏,如果设置了这个,将覆盖掉Xcode工程build setting里的预编译宏
-o 输出的ipa文件路径
注意:
1.autobuild.py没有实现签名,需要保证Xcode工程中设置好了证书
2.如果打包workspace,需指定-w和-s;如果打包project,需指定-p和-t
3.-c和-d非必传
autobuild.py
from optparse import OptionParser
import subprocess
#configuration for iOS build setting
SDK = "iphoneos"
def cleanBuildDir(buildDir):
cleanCmd = "rm -r %s" %(buildDir)
process = subprocess.Popen(cleanCmd, shell = True)
process.wait()
print "cleaned buildDir: %s" %(buildDir)
def buildProject(project, target, configuration, definitions, output):
if definitions is None:
buildCmd = 'xcodebuild -project %s -target %s -sdk %s -configuration %s build' %(project, target, SDK, configuration)
else:
buildCmd = 'xcodebuild -project %s -target %s -sdk %s -configuration %s GCC_PREPROCESSOR_DEFINITIONS="%s" build' %(project, target, SDK, configuration, definitions)
process = subprocess.Popen(buildCmd, shell = True)
process.wait()
signApp = "./build/%s-iphoneos/%s.app" %(configuration, target)
signCmd = "xcrun -sdk %s -v PackageApplication %s -o %s" %(SDK, signApp, output)
process = subprocess.Popen(signCmd, shell=True)
(stdoutdata, stderrdata) = process.communicate()
cleanBuildDir("./build")
def buildWorkspace(workspace, scheme, configuration, definitions, output):
process = subprocess.Popen("pwd", stdout=subprocess.PIPE)
(stdoutdata, stderrdata) = process.communicate()
buildDir = stdoutdata.strip() + '/build'
print "buildDir: " + buildDir
if definitions is None:
buildCmd = 'xcodebuild -workspace %s -scheme %s -sdk %s -configuration %s build SYMROOT=%s' %(workspace, scheme, SDK, configuration, buildDir)
else:
buildCmd = 'xcodebuild -workspace %s -scheme %s -sdk %s -configuration %s GCC_PREPROCESSOR_DEFINITIONS="%s" build SYMROOT=%s' %(workspace, scheme, SDK, configuration, definitions, buildDir)
process = subprocess.Popen(buildCmd, shell = True)
process.wait()
signApp = "./build/%s-iphoneos/%s.app" %(configuration, scheme)
signCmd = "xcrun -sdk %s -v PackageApplication %s -o %s" %(SDK, signApp, output)
process = subprocess.Popen(signCmd, shell=True)
(stdoutdata, stderrdata) = process.communicate()
cleanBuildDir(buildDir)
def xcbuild(options):
project = options.project
workspace = options.workspace
target = options.target
scheme = options.scheme
output = options.output
configuration = options.configuration
definitions = options.definitions
if configuration is None:
configuration = "Release"
if project is None and workspace is None:
pass
elif project is not None:
buildProject(project, target, configuration, definitions, output)
elif workspace is not None:
buildWorkspace(workspace, scheme, configuration, definitions, output)
def main():
parser = OptionParser()
parser.add_option("-w", "--workspace", help="Build the workspace name.xcworkspace.", metavar="name.xcworkspace")
parser.add_option("-p", "--project", help="Build the project name.xcodeproj.", metavar="name.xcodeproj")
parser.add_option("-s", "--scheme", help="Build the scheme specified by schemename. Required if building a workspace.", metavar="schemename")
parser.add_option("-t", "--target", help="Build the target specified by targetname. Required if building a project.", metavar="targetname")
parser.add_option("-o", "--output", help="specify output filename", metavar="output_filename")
parser.add_option("-c", "--configuration", help="Build the configuration specified by configurationname", metavar="configurationname")
parser.add_option("-d", "--definitions", help="gcc preprocessor definitions", metavar="definitions")
(options, args) = parser.parse_args()
print "options: %s, args: %s" % (options, args)
xcbuild(options)
if __name__ == '__main__':
main()
TestBuild.sh
#!/bin/sh
#-p 工程project
#-w 工作空间workspace
#-t target
#-s scheme
#-c configuration
#-d definitions,预编译宏
#-o 输出文件
python autobuild.py -p TestBuild.xcodeproj -t TestBuild -o ~/Desktop/TestBuild_Release.ipa
python autobuild.py -p TestBuild.xcodeproj -t TestBuild -c Release_Test -o ~/Desktop/TestBuild_Release_Test.ipa
#预编译宏示例
python autobuild.py -p TestBuild.xcodeproj -t TestBuild -c Release -d "DEBUG_SERVER=0 CHANNEL=\\@\\\\\\\"channel1\\\\\\\"" -o ~/Desktop/TestBuild_Release_channel1.ipa
python autobuild.py -p TestBuild.xcodeproj -t TestBuild -c Release_Test -d "DEBUG_SERVER=1 CHANNEL=\\@\\\\\\\"channel1\\\\\\\"" -o ~/Desktop/TestBuild_Release_Test_channel1.ipa