文档章节

ios自动打包脚本,融合xctool、xcodebuild、xcrun

H
 HillYoung
发布于 2016/01/15 11:01
字数 778
阅读 1466
收藏 1


在少数需求下,需要能够自动打包,将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"


© 著作权归作者所有

H
粉丝 14
博文 99
码字总数 26972
作品 0
南京
程序员
私信 提问
加载中

评论(2)

H
HillYoung

引用来自“南溟之巅”的评论

ExportOptions.plist 这个可以贴出来吗?
http://git.oschina.net/yanghaha/UsefulFile/blob/master/ExportOptions.plist?dir=0&filepath=ExportOptions.plist&oid=bae4b85a21da8b704800e54ca7fe47d6f7be139a&sha=5cc48cf13bddca98425fa6c9a110f3d5cc39cb3b
南溟之巅
ExportOptions.plist 这个可以贴出来吗?
使用mac进行ios几种命令行打包方式

随着ios平台的发展以及发布要求的多样性,测试的需求,自动打包可一定程度上提高效率。 自动打包的方式有如下几种: 一、使用xcodebuild进行打包 参考apple文档:https://developer.apple.com...

HillYoung
2015/07/29
0
0
IOS自动化打包介绍

摘要 随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱越来越多的app 的渠道也不断增多,为各个渠道打包成了一件费时费力的工作,本文提供一种比较智能的打包方式来...

华宰
2012/01/05
4.9K
1
IOS自动化打包介绍

来自: 百度搜索研发部 http://stblog.baidu-tech.com/?p=1295 摘要 随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱越来越多的app 的渠道也不断增多,为各个渠道...

长平狐
2012/08/13
189
0
IOS 使用xcodebuild xrun 编译 打包app 小结分享

我做了差不多10年的开发,从以前学vfp,c,vb,java,然后玩了3个月c#就不自量力地去应聘.net程序员了,后面怀着拼一拼的心态转去玩symbian,又搞了几年的IOS,这两年又转行做项目管理,再到今...

肖XX
2016/02/24
914
1
xctool —— 来自Facebook的iOS项目构建工具

xctool 用以替换苹果公司的 xcodebuild 工具来简化 iOS 和 Mac 项目的构建和测试。要使用该工具必须安装 Xcode 命令行工具:From Xcode, install via Xcode → Preferences → Downloads....

oschina
2013/12/21
7
0

没有更多内容

加载失败,请刷新页面

加载更多

group by分组后获得每组中时间最大的那条记录

用途: GROUP BY 语句用于 对一个或多个列对结果集进行分组。 例子: 原表: 现在,我们希望根据USER_ID 字段进行分组,那么,可使用 GROUP BY 语句。 我们使用下列 SQL 语句: SELECT ID,US...

豆花饭烧土豆
52分钟前
2
0
android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
今天
4
0
java 序列化和反序列化

1. 概述 序列恢复为Java对象的过程。 对象的序列化主要有两 首先我们介绍下序列化和反序列化的概念: 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。...

edison_kwok
今天
2
0
分布式数据一致性

狼王黄师傅
今天
2
0
经验

相信每位开发者在自己开发的过程中,都会反思一些问题,比如怎样提高编程能力、如何保持心态不砍产品经理、996 之后怎样恢复精力……最近开发者 Tomasz Łakomy 将他 7 年的开发生涯中学习到...

WinkJie
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部