博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios自动打包脚本,融合xctool、xcodebuild、xcrun
阅读量:6941 次
发布时间:2019-06-27

本文共 3841 字,大约阅读时间需要 12 分钟。

hot3.png

在少数需求下,需要能够自动打包,将app发布到不同的平台,那么下面给出本人使用的自动打包脚本:

# 以下内容到分割线是,需要针对每个项目进行配置的部分

buildDay=$(date +%Y%m%d)

buildTime=$(date +%Y%m%d%H%M)

#签名证书

CODE_SIGN_IDENTITY="证书"

# 描述文件名

PROVISIONING_PROFILE="描述文件" 

# 打包版本类型

CONFIGURATION="Release"

# sdk类型设置

SDKType="iphoneos"

TARGET="项目的target(一般情况下,target和scheme相同,故下面scheme使用也是此处的target)"

packPath="archive/${buildDay}"

#0:仅使用xcodebuild打包

#1:使用xcodebuild、xctool进行打包 

#2:使用xcodebuild、xrun进行打包

styleType=0

# 使用plist进行打包

Export_Plist_Path="ExportOptions.plist"

# 需要将ipa文件上传到蒲公英需要配置

# 蒲公英官网用户Key

USER_KEY="key"

# 蒲公英官网API Key

API_KEY="api key"

# xcarchive文件的路径

archivePathName="${packPath}/${TARGET}_${buildTime}.xcarchive"

# app文件的路径

appPathName="${packPath}/${TARGET}_${buildTime}"

# ipa文件的路径

ipaPathName="${packPath}/${TARGET}_${buildTime}"

# 使用xcrun方式打包时,ipa文件的路径

xcrunIpaPathName="$(pwd)/$ipaPathName.ipa"

# 分割线

# --------------------------------------------------------

projectName="${TARGET}.xcodeproj"

workspaceName="${TARGET}.xcworkspace" 

# if [[ -d "$projectName" ]]; then

if [[ ! -d "$workspaceName" ]]; then

echo "project exist"

xcodebuild -project $projectName  -target ${TARGET} CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" clean

else

echo "workspace exist"

xcodebuild -workspace $workspaceName  -scheme ${TARGET} CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" clean

fi

if [ $styleType -lt 2 ]; then

echo "by using xcodebuild、xctool"

if [ $styleType -eq 0 ]; then

if [[ ! -d "$workspaceName" ]]; then

echo "project exist"

xcodebuild -project $projectName  -scheme ${TARGET} -archivePath $archivePathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" -configuration $TARGET archive

else

echo "workspace exist"

xcodebuild -workspace $workspaceName  -scheme ${TARGET} -archivePath $archivePathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" -configuration $TARGET archive

fi

else

    # //clean下工程

# xctool -scheme ${TARGET} -configuration $TARGET clean   

# //对项目进行Archive, 将xcarchive文件导出到指定目录

xctool -scheme ${TARGET} -configuration $TARGET archive -archivePath $archivePathName

fi

#使用下面一行命令生成ipa文件时,文件可以正常生成,但是不能安装到设备上

# 可能是因为xcodebuild最新版本的原因,因为在最新版本xcodebuild -exportArchive -exportFormat IPA 在xcodebuild -h查看文档的时候已经没有

# xcodebuild -exportArchive -exportFormat IPA -archivePath $archivePathName -exportPath $ipaPathName -configuration $CONFIGURATION CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}"

#使用下面一行命令可以生成ipa文件时,文件可以生成,

#之前ExportOptions因为添加了teamID和method,两条属性,导致出现如下错误

# Error Domain=IDEDistributionErrorDomain Code=1 "The operation couldn’t be completed. (IDEDistributionErrorDomain error 1.)"

# google找到这个 http://stackoverflow.com/questions/32841300/xcodebuild-exportarchive-exportoptionsplist-error-for-key-method-expected-o

# 照这个问题解答,删除teamID,可以顺利完成打包

xcodebuild -exportArchive -exportOptionsPlist $Export_Plist_Path -archivePath $archivePathName -exportPath $ipaPathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}"

else

echo "by using xcodebuild、xrun"

if [[ ! -d "$workspaceName" ]]; then

echo "project exist"

# 此处由于一直设置CONFIGURATION_BUILD_DIR=$appPathName,

# 把CoreAnimation、.app.dSYM文件设置放在一个文件夹

# 并且将这个文件夹命名为.app文件, 根据这个.app文件进行打包

# 导致生成了ipa文件,但是无法安装,

xcodebuild -project $projectName  -scheme ${TARGET}  CONFIGURATION_BUILD_DIR=$appPathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" -configuration $TARGET 

else

echo "workspace exist"

xcodebuild -workspace $workspaceName  -scheme ${TARGET}  CONFIGURATION_BUILD_DIR=$appPathName CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" -configuration $TARGET

fi

# 此处使用xcrun进行打包

xcrun --sdk $SDKType -v PackageApplication "$appPathName/$TARGET.app" -o $xcrunIpaPathName

fi

# 将ipa文件上传到蒲公英官网

# curl -F "file=@${ipaPathName}" -F "uKey=${USER_KEY}" -F "_api_key=${API_KEY}" http://www.pgyer.com/apiv1/app/upload

echo "\n all action done"

转载于:https://my.oschina.net/u/1432769/blog/603037

你可能感兴趣的文章
[转载] 晓说——第28期:“看美国”系列之《枪口下的美国》
查看>>
OS X 10.11安装Thrift
查看>>
洛谷 P1064 金明的预算方案
查看>>
Java基础学习总结(24)——Java单元测试之JUnit4详解
查看>>
Java基础学习总结(13)——流IO
查看>>
使用screen后台运行python(基于centOS7.2)
查看>>
Myeclipse常用快捷键
查看>>
进程与线程的一个简单解释
查看>>
SVN学习总结(1)——SVN简介及入门使用
查看>>
Linux实用工具
查看>>
Java基础学习总结(39)——Log4j 1使用教程
查看>>
"Hello world" for Nginx
查看>>
我的友情链接
查看>>
mdadm软RAID的删除方法和注意事项
查看>>
Excel 中使用SQL 语句查询数据(五)
查看>>
Struts2——学习(2):Struts2.xml
查看>>
企业级 oracle11G r2 DataGuard 安装配置
查看>>
笔试题-单词反转
查看>>
【MySQL】【ProxySQL】浅析mysql_users表
查看>>
Linux下java开发环境搭建
查看>>