Mac下用命令行打ipa包

来源:互联网 发布:褪黑素 知乎 编辑:程序博客网 时间:2024/06/09 14:36

随着ios平台的发展以及发布要求的多样性,测试的需求,自动打包可一定程度上提高效率。

自动打包的方式有如下几种:

一、使用xcodebuild进行打包

     参考apple文档:https://developer.apple.com/library/prerelease/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html

 xcodebuild -project "${TARGET}.xcodeproj"  -target ${TARGET} CODE_SIGN_IDENTITY="${IDENTITY}" clean        //将project clean下  xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyScheme archive    //进行archive,生成xcarchive文件
xcodebuild -exportArchive -exportFormat IPA -archivePath MyMobileApp.xcarchive -exportPath MyMobileApp.ipa -exportProvisioningProfile 'MyMobileApp Distribution Profile'

上述红色背景的命令行,确实是可以生成.ipa,但是可能会导致不能安装,https://developer.apple.com/library/prerelease/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html , 链接是apple的官方文档,文档大概的意思将  xcarchive文件作为.ipa方式进行导出,  为什么不能在ios设备上安装?

二、原生xcodebuildxcrun进行打包,需要详细了解,可以看下这个链接 http://www.jianshu.com/p/1229476fbce4

    具体打包指令和第一种方法区别不大,不同代码如下:

xcodebuild -scheme Zxh -configuration ${buildConfiguration} clean   //对代码进行clean

xcodebuild -project Zxh.xcodeproj -scheme Zxh -configuration ${buildConfiguration} -destination generic/platform=ios archive -archivePath ${buildPath}    //进行build,相当于在xcode里面进行command+b,生成.app文件

#xcrun -sdk iphoneos PackageApplication -v build/Release-iphoneos/Zxh.app -o ${ipaName}.ipa --sign "iPhone Distribution:(打包证书)"            //根据.app文件生成的ipa文件导出到指定目录

三、xctool进行自动打包

参考网页地址:http://www.tuicool.com/articles/uIZRZjy

    1、确保安装了xctool

            没有安装xctool,可以用brew安装,没有安装brew的,可以通过搜索安装brew,然后执行如下操作安装xctool

            安装命令:sudo brew install xctool                

介绍下xctool命令:

xctool 是FaceBook开源的一个命令行工具,用来替代苹果的xcodebuild工具。

    先附上打包用的参考代码,如下:    

#

cd AutoProject                    //进入项目目录

#

buildDay=$(date +%Y%m%d)            //获取当前日期

buildTime=$(date +%Y%m%d%H%M)     //获取当前时间 

profile=”xxxx”      //设置打包配置文件

#

buildConfiguration=”QA”     //build时用的证书

buildPath=”../ArchiveProduction/QA/${buildDay}/Auto_QA_${buildTime}.xcarchive”     //build后归档的文件目录

ipaName=”../ipa/QA/${buildDay}/Auto_QA_${buildTime}.ipa”     //打好包放置位置

#

xctool -scheme AutoProject -configuration ${buildConfiguration} clean     //clean下工程

xctool -scheme AutoProject -configuration ${buildConfiguration} archive -archivePath ${buildPath}        //对项目进行Archive, 将xcarchive文件导出到指定目录

xcodebuild -exportArchive -exportFormat IPA -archivePath ${buildPath} -exportPath ${ipaName} -            exportProvisioningProfile “$profile”                    //生成的ipa文件导出到指定目录, 此处依然使用的是xcodebuild进行打包, 待优化

以上代码是从参考文件copy过来的,只是进行了相应的注释, 具体进行打包,需要进行适当的调整命令

四 、使用xcodebuild 进行命令行打包,如果想了解更加详细的命令可使用 man  xcodebuild 在终端查看更详细的命令行命令

1.首先 清理工程

    schemeProduct 为你的工程名

      首先,进入工程所在的文件夹,比如我的工程放在桌面上的schemeProduct文件夹中,输入命令:cd /Users/a58/Desktop/schemeProduct 

      然后,清理工程,输入命令:xcodebuild clean -scheme schemeProduct

2 第二步, 生成xcarchive 文件

      xcarchive 为最后生成ipa包的中间文件,我这里使用的是workspace,命令为:xcodebuild  -workspace PublicModule.xcworkspace -schemeschemeProduct archive  -archivePath ../schemeProduct


温馨提示:这样生成的xcarchive文件默认的放到了工程所在的目录下,也可以用命令指定文件的路径,比如这样:

     xctool -workspace PublicModule.xcworkspace -scheme PublicModule archive -archivePath ./PublicModule ,这样是制定生产的xcarchive文件放在PublicModule中。“.” 在命令行中代表当前目前,“PublicModule”代表你给xcarchive文件的命名,这个是可以自己改的。如果你要讲生成的xcarchive 放在桌面,可以这样写命令:

    xctool -workspace PublicModule.xcworkspace -scheme PublicModule archive -archivePath ../PublicModule

    ".."代表当前目录的上一级目录。 


3.   命令为:xcodebuild -exportArchive -exportFormat ipa -archivePath ./schemeProduct.xcarchive -exportPath ./schemeProduct.ipa -exportProvisioningProfile "证书" -configuration "Release"

   或者如果本地工程中有证书就直接用

xcodebuild -exportArchive -exportFormat ipa -archivePath ./PublicModule.xcarchive -exportPath ./PublicModule.ipa -exportProvisioningProfile "publicDabao" -configuration "Release"

五、xcodebuild 命令打包命令详解

-project projectname
指定工程名,当同一目录下有多个工程时必须指定。 
-target tagrgetname
指定编译的target的名称。 
-alltargets
编译工程中的所有target 
-worksace workspacename
指定 workspace 的名称。 
-scheme schemename
指定 scheme 的名称,编译 workspace 时是必须的。 
-destination destinationspecifier
使用 destinationspecifier 指定的设备作为目标设备。默认与 scheme 中选择的兼容。 
-destination-timeout timeout
设置搜索目标设备的超时时间,默认是30秒。 
-configuration configurationname
当编译每个 target 时使用 configurationname 指定的配置。 
-arch architecture
当编译每个 target 时使用 architecture 指定的架构类型。 
-sdk [<sdkfullpath> | <sdkname>]
指定编译时所用的 SDK。参数可以是 SDK 的绝对路径,也可以是 SDK 的名称。 
-showsdks
列出所有 Xcode 可识别的可用的 SDK,这个参数不会启动编译。 
-list
列出工程中的所有 target  配置,或者 workspace  schemes。不会启动编译。 
-derivedDataPath path
覆盖编译 workspace  scheme 时的结果数据存放的路径。 
-resultBundlePath path
编译 workspace  scheme 时把一个 bunndle 写到指定的路径。 
-exportArchive
指定一个可以被导出的 archive 文件。需要 -exportFormat-archivePath-exportPath` 配合使用,不能在编译时单独使用。 
-exportFormat format
指定需要被导出的 archive 文件的格式。可行的格式是 IPAiOS 包文件),PKGMac 包文件)和 APP。如果未指定,则 xcodebuild 则会自动检测使用IPA  PKG 格式。 
-archivePath xcarchivepath
指定 archive 路径。 
-exportPath destinationpath
指定导出的目标文件路径。 
-exportProvisioningProfile profilename
指定导出 archive 文件时所使用的 provisioning pofile 
-exportSigningIdentity identityname
指定导出 archive 文件时所使用的应用签名 id。在可能的情况下,这个可以被 -exportProvisioningProfile自动推导出来。 
-exportInstallerIdentity identityname
指定导出 archive 文件时所使用的安装签名 id。如果可能,这个可以被 -exportSigningIdentity  -exportProvisioningProfile 自动推导出来。 
-exportWithOriginalSigningIdentity
指定创建可被导出的 archive 文件时所使用的签名文件。 
buildaction ...
指定一个或多个编译 target 时的编译行为。可行的编译行为有: build 编译根环境下(SYMROOT)的 target。默认行为。 
 analyze 编译并且分析根环境(SYMROOT)下的一个 target 或者 scheme。需要指定一个 scheme 

 archive Archive 根环境(SYMROOT)下的一个 scheme。需要指定一个 scheme 

 test 测试跟环境(SYMROOT)下的一个 scheme。需要指定一个scheme。需要指定一个 scheme 和一个可选的目标。 

 installsrc 拷贝工程代码到源代码根目录(SRCROOT)。 

 install 编译 target 并且安装到发布目录下的 target 安装目录。 

 clean 从编译根目录下(SYMROOT)移除编译产品和中间文件。 

-xcconfig filename
当编译所有 targets 的时候从指定的文件加载编译设置。这些设置会覆盖其他的编译设置,包括命令行中单独传递的设置。 
-dry-run, -n
打印本来要执行但是未执行的命令。 
-skipUnavailableActions
跳过不能执行的编译而不是失败。这个选项仅仅在 -scheme 参数使用了的时候有效。 
setting=value
设置编译设置的值为 value 
-userdefault=value
设置用户默认设置为 value 
-version
显示 Xcode 的版本信息。不会启动编译。当和 -sdk 一起使用的时候,将会显示指定的 SDK 的版本信息,或者-sdk 后面未指定 SDK 则会显示所有的 SDK 版本信息。另外,如果指定了 infoitem 参数则一个单行的版本信息将会显示。 
-usage

显示 xcodebuild 的使用信息。


1 0