使用Python和shell脚本打包ipa

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值