首先呢,我是一个新手 只是初学,大神请不要笑啊。
可能和大家研究的方向有点不同,所以术业有专攻互相学习,共同进步。
介于网上我没找到一篇完整的教程 ,所以我就自己写了一篇,但是这教程里只有打包,未涉及到企业证书的有用部署,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
基本的打包教程就到这里过了
以下就是使用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名字相同的.xcodeproj的文件名,注意是不带扩展名的。这个scheme_name可以使用常量(我这里可以直接写GphoneBook,不需要扩展名)
还有当我们指定-workspace之后,一定要指定-scheme就是项目名称,也就是策略,你要打包哪个项目。并且需要指定输出目录CONFIGURATION_BUILD_DIR
不然会报错。
PS:我之前一直不知道-scheme是什么= =# 坑了好久的说。
这里我再分享一个坑:就是你的输出路径你的当前用户一定要有权限,或者你可以修改权限777
至于方法2,我觉得比较复杂,所以我就懒得研究了懒人一个的说。
好了 简单的教程 大家随便看啊 ,欢迎补充~