ios Xcode 自动化打包 多targets打包

首先呢,我是一个新手  只是初学,大神请不要笑啊。

可能和大家研究的方向有点不同,所以术业有专攻互相学习,共同进步。


介于网上我没找到一篇完整的教程 ,所以我就自己写了一篇,但是这教程里只有打包,未涉及到企业证书的有用部署,plist生成,等等操作。


先说下背景,前端事件我们公司有一个项目,然后有7个targets,然后我们是$299的证书,打包好是可以直接安装的那种,所以我每次需要手动点Archive 7次,点签名7次。

这还好 主要是等待的时间太久了,所以比较坑。


再说下应用场景和优点吧:

         应用场景:企业证书,或者需要给越狱用户打包ipa的时候。

         优点:方便一键式生成ipa。

         缺点:$99证书只能生成出让越狱用户安装的ipa包。



于是乎我就开始搜索有没有自动打包的方法,然后我找到很多大神们的脚本。

总结了两个方法:

方法1:xcodebuild编译代码,使用xcrun进行签名。

方法2:转换成zip然后转换成ipa的方法。

我对比了下两种脚本的代码量,于是我选择了第一种。

简单的介绍下xcodebuild

-----------------------------------------------------------此部分转自网络----------------------------------------------------------------

xcodebuild[-project][-activetarget][-alltargets][-target]...[-parallelizeTargets][-activeconfiguration][-configuration][-sdk |][=]...[]...  
xcodebuild[-version[-sdk |]]  
xcodebuild[-showsdks]  
xcodebuild[-find ][-sdk |]  
xcodebuild[-list] 

也可以在终端输入:xcodebuild –help 或 –h查看具体的选项

显示xcodebuildversion:xcodebuild –version

显示当前系统安装的sdk:xcodebuild –showsdks

显示当前目录下project Information:xcodebuild –list

-----------------------------------------------------------此部分转自网络----------------------------------------------------------------

简单的介绍下xcrun

-----------------------------------------------------------此部分转自网络----------------------------------------------------------------

此工具主要用于将app文件打包成ipa格式的程序包。(主要用于已越狱手机)。

补充:当证书是$99的时候签名的ipa确实是只能在越狱手机上安装 当证书$299的时候前面的证书是直接可以在未越狱的手机上安装的
具体用法如下:

xcrun -sdk iphoneos PackageApplication –v [{TARGET}.app] -o [{TARGET}.ipa] --sign [{Iphone Distribution:xxx}] –embed [{xxx.mobileprovision}]  
所有的参数大家可以-h去查看

-----------------------------------------------------------此部分转自网络----------------------------------------------------------------


以上是简单的介绍

我先上一段我的shell打包代码,再说下我在打包过程中碰到的问题

我也是初次使用shell,见笑见笑。

#!/bin/sh
#这个是我的项目存放目录,也就是.xcodeproj所在的目录
projectPath="/Users/zhag/Documents/srouce/GphoneBook1/"  
 
#产生的ipa目录,签名完之后将ipa保存到哪里
releasePath="/Users/zhag/Documents/release/"     

#执行完xcodebuild编译之后,会自动产生一个build目录,这里指定.app目录所在位置        
releaseDir="build/Release-iphoneos/"            

#cd就不用我解释了吧          
cd ${projectPath}                                   

#这个数组是我所有的targets,我这里就举例两个     
targetArray=([0]="GphoneBook" [1]="GphoneBookC2")         

#签名完之后的.ipa叫什么名字
productArray=([0]="ylcc" [1]="C2" ) 

#clean项目 
xcodebuild clean -configuration Distribution              

i=0
#循环编译
for x in ${targetArray[@]}                                
do
	#组合.APP文件路径
	appPath="${projectPath}${releaseDir}${x}.app"

	#组合.APP文件路径
	ipaPath="${releasePath}${productArray[${i}]}.ipa"

	#组合.ipa文件路径
	#调用xcodebuild 进行打包
	#-sdk 表示调用什么版本的SDK打包  -showsdk可以看到你当前所有的已安装的
        # 这里我说下我碰到的一个问题,我安装了xcode4.6 xcode5.0 所以sdk有时候会显示只有7.0,所以我需要选择xcode4.6
        # sudo xcode-select -switch /Applications/Xcode.app  用于选择不同的xocde
	#-target 打包哪个target
	#-configuration  用于标识你是发布还是测试 在-help里面可以看到可选值
	xcodebuild -sdk iphoneos -target ${x} -configuration Distribution

	#签名
	#-sdk同理
	#packapplication 里面也有很多参数可以用help去查看
        #--sign –embed 我解释下这两个吧,我在这里碰到过个问题,大家可以看到我这里是没有这两个参数的,这个时候我们就可以在项目里配置好 (看图1)这样就不需要设置了
	xcrun -sdk iphoneos6.1 PackageApplication  -v ${appPath} -o ${ipaPath}  #-v是.app文件的路径  ,-o 就是output路径 也就是.ipa的路径
	let i++
done



图1

ios Xcode 自动化打包 多targets打包_第1张图片

基本的打包教程就到这里过了

以下就是使用cocoapods的朋友们需要注意的了。

如果使用cocoapods之后,你打开项目就不是.xcodeproj这个文件了,而是.xcworkspace。

所以我们用上面的打包语句会出错,所以我们需要修改xcodebuild这句。这里我也坑了好几个小时,我也把我过程中碰到的问题给大家分享下。

先看下我补充的代码

scheme_name=$(echo $(basename ./*.xcodeproj) | awk -F. '{print $1}')
xcodebuild -workspace test.xcworkspace -scheme ${scheme_name}  -configuration Distribution CONFIGURATION_BUILD_DIR=~/Desktop/build/ 


大家注意到,我多了scheme_name,-workspace,还有-scheme,以及CONFIGURATION_BUILD_DIR

这里需要解释的就是scheme_name 这句的效果,这句是获得和workspace名字相同的.xcodeproj的文件名,注意是不带扩展名的。这个scheme_name可以使用常量(我这里可以直接写GphoneBook,不需要扩展名)


还有当我们指定-workspace之后,一定要指定-scheme就是项目名称,也就是策略,你要打包哪个项目。并且需要指定输出目录CONFIGURATION_BUILD_DIR

不然会报错。

PS:我之前一直不知道-scheme是什么= =# 坑了好久的说。

这里我再分享一个坑:就是你的输出路径你的当前用户一定要有权限,或者你可以修改权限777



至于方法2,我觉得比较复杂,所以我就懒得研究了懒人一个的说。

好了 简单的教程 大家随便看啊 ,欢迎补充~






你可能感兴趣的:(IOS技术)