iOS 一键自动化打包脚本 normal armv7 arm64

首先,主要技术来自
博客: https://www.jianshu.com/p/4281908243a3
膜拜大神,
感谢大神提供资源,顺便是自己记录及学习一下,抄一下作者的一些知识点,方便自己学习记忆
首先提供一下脚本:在作者的基础上有一点细节的修改,否则报错如下图
报错: normal armv7 normal arm64

image.png

其中大概步骤整理如下:

  1. 进入工程所在目录,创建xcodebuild.sh的脚本(名字自己自定义)
  2. 自己没使用自动打包的时候,之前使用手动打包的方式成功之后,会有一个ExportOptions.plist,(不同的方式打包产生的plist不同,比如 appStore.ac-hoc,enterprise的方式都不同,如下图,最简单的就是直接复制一份)


    最简单

其中企业版的内容为:


image.png

其他的类型自己去看

3.然后自己copy下面的脚本内容到xcodebuild.sh里面,根据自己的需求去修改下面的脚本,如果是workspace的工程就直接可以用,上面的脚本都有原作者的注释,需要填的信息,挨个填一下就ok了,然后进入当前目录,直接输入 . xcodebuild.sh 就可以运行脚本,如果提示没有权限的话 可以直接给chomd + 777 sh文件地址,就可以了


image.png

选择完之后,就可以坐等结果了

#author by heyujia (感谢原作者,我是小僧,修改了一丁点)
#脚本所在的目录必须和WorkSpace或者说工程主目录所在的目录在同一个目录层级中

#配置参数

#workspace的名字,如果没有则不需要这段话,我测试工程是一个工作空间所以就没用,如果需不需要要用的话,还需要在编译阶段的脚本代码里去掉  -workspace ${Project_Name}.xcworkspace
Workspace_Name="你的workSpace名字"


#工程名字
Project_Name="你的工程名字"


#配置打包方式Release或者Debug
Configuration="Release"



#基础主路径
BUILD_PATH=./build


#不同版本的基础子路径
#adHoc
ADHOC_PATH=${BUILD_PATH}/adHoc
#appStore
APPSTORE_PATH=${BUILD_PATH}/appStore
#enterprise
ENTERPRISE_PATH=${BUILD_PATH}/enterprise

#配置编译文件的存放地址
#ps: 空空小僧修改的  否则报上面的错误  下面企业的路径是绝对路径,其他的是相对路径
 #******************这里要特别注意 必须写绝对路径,写相对路径会报错. 错误为: normal armv7   normal arm64的错误
#adHoc
CONFIGURATION_BUILD_PATH_ADHOC=${ADHOC_PATH}/${Configuration}-iphoneos
#appStore
CONFIGURATION_BUILD_PATH_APPSTORE=${APPSTORE_PATH}/${Configuration}-iphoneos
#企业
#CONFIGURATION_BUILD_PATH_ENTERPRISE=${ENTERPRISE_PATH}/${Configuration}-iphoneos
CONFIGURATION_BUILD_PATH_ENTERPRISE=/Users/Apple/Desktop/oneshare-client-ios/build/enterprise/Release-iphoneos


#下面是获取上传到第三方统计崩溃日志的文件,如果没有用到可以删除该部分
#adHoc
DSYM_PATH_ADHOC=${CONFIGURATION_BUILD_PATH_ADHOC}/${Project_Name}.app.dSYM
DSYM_ZIP_PATH_ADHOC=${ADHOC_PATH}/${Project_Name}.app.dSYM.zip
DSYM_COPY_PATH_ADHOC=${ADHOC_PATH}/copy
#appStore
DSYM_PATH_APPSTORE=${CONFIGURATION_BUILD_PATH_APPSTORE}/${Project_Name}.app.dSYM
DSYM_ZIP_PATH_APPSTORE=${APPSTORE_PATH}/${Project_Name}.app.dSYM.zip
DSYM_COPY_PATH_APPSTORE=${APPSTORE_PATH}/copy
#企业
#appStore
DSYM_PATH_ENTERPRISE=${CONFIGURATION_BUILD_PATH_ENTERPRISE}/${Project_Name}.app.dSYM
DSYM_ZIP_PATH_ENTERPRISE=${ENTERPRISE_PATH}/${Project_Name}.app.dSYM.zip
DSYM_COPY_PATH_ENTERPRISE=${ENTERPRISE_PATH}/copy



#配置打包结果输出的路径
#AdHoc版本
AdHocPrijectOutPath=${ADHOC_PATH}/adHocOut
#AppStore版本
AppStorePrijectOutPath=${APPSTORE_PATH}/appStoreOut
#企业版本
EnterprisePrijectOutPath=${ENTERPRISE_PATH}/enterpriseOut


#如果工程中配置了Automatically manage signing,那么就不需要证书名和描述文件名,请确保工程中配置的证书名和描述文件是你打包想要用的
#ADHOC证书名#描述文件
ADHOCCODE_SIGN_IDENTITY="iPhone Distribution: xxxxx 可以去mac钥匙串获取"
ADHOCPROVISIONING_PROFILE_NAME="xxxxxx.mobileprovision"

#AppStore证书名#描述文件
APPSTORECODE_SIGN_IDENTITY="iPhone Distribution: xxxxx"
APPSTOREROVISIONING_PROFILE_NAME="xxxxx-xxxx-xxxx-xxxx-xxxxxx"

#企业(enterprise)证书名#描述文件
ENTERPRISECODE_SIGN_IDENTITY="iPhone Distribution: x'x'x'x'x"x
ENTERPRISEROVISIONING_PROFILE_NAME="xxxx.mobileprovision"





#加载各个版本的plist文件,为了实现一个脚本打包所有版本,这里对不同对版本创建了不同的plist配置文件。等号后面是文件路径,一般把plist文件放在与脚本同一级别的文件层中。我这里测试用所以plist文件都一样,实际使用是请分开配置为不同文件
ADHOCExportOptionsPlist="./ExportOptions.plist"
AppStoreExportOptionsPlist="./ExportOptions.plist"
EnterpriseExportOptionsPlist="./ExportOptions.plist"


#在终端中提示 根据输入的序号不同,打包成不同版本的ipa
echo "~~~~~~~~~~~~选择打包方式(输入序号)~~~~~~~~~~~~~~~"
echo "  1 adHoc"
echo "  2 AppStore"
echo "  3 Enterprise"

# 读取用户在终端中输入并存到变量里
read parameter
sleep 0.5
method="$parameter"

# 判读用户是否有输入
if [ -n "$method" ]
then
if [ "$method" = "1" ]
then
#这里都执行命令中是在xcworkspace工程中执行的,如果工程不是xcworkspace,可以把-workspace的内容删掉,加入了证书和描述文件,如果不需要请删除
#如果用户选择的是1,就执行adhoc脚本
#首先清除原来的文件夹
rm -rf ${BUILD_PATH}
#创建文件夹,路径需要一层一层创建,不然会创建失败
mkdir ${BUILD_PATH}
mkdir ${ADHOC_PATH}
#编译文件
mkdir ${CONFIGURATION_BUILD_PATH_ADHOC}
#打包输出的文件
mkdir ${AdHocPrijectOutPath}
#copy
mkdir ${DSYM_COPY_PATH_ADHOC}
#编译
xcodebuild archive -scheme $Project_Name -configuration $Configuration -archivePath ${ADHOC_PATH}/$Project_Name-adhoc.xcarchive CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH_ADHOC}
#如果需要单独设置证书和描述文件需要在编译时加入下面这句话
#CODE_SIGN_IDENTITY="${ADHOCCODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${ADHOCPROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER="${AdHocBundleID}"
#打包
xcodebuild  -exportArchive -archivePath ${ADHOC_PATH}/$Project_Name-adhoc.xcarchive -exportOptionsPlist $ADHOCExportOptionsPlist -exportPath ${AdHocPrijectOutPath}
# 选择是压缩还是复制,复制的方法可以用于上传文件到指定服务器,比如上传到git
# zip -r 目标路径  源文件路径 ,开始压缩dSYM文件
zip -r ${DSYM_ZIP_PATH_ADHOC} ${DSYM_PATH_ADHOC}
# cp -r 源文件路径 目标路径 , 把压缩包拷贝到指定地方
cp -r ${DSYM_ZIP_PATH_ADHOC} ${DSYM_COPY_PATH_ADHOC}
# 复制 dSYM 包里的 XXX 文件 上传到指定的地方
#TARGET_PATH=${DSYM_COPY_PATH}/${TARGET}.app.dSYM/Contents/Resources/DWARF/${TARGET}
#cp ${TARGET_PATH} ${EXPORT_DIR}
elif [ "$method" = "2" ]
then
#如果用户选择的是2,就执行appstore脚本
#首先清除原来的文件夹
rm -rf ${BUILD_PATH}
#创建文件夹,路径需要一层一层创建,不然会创建失败
mkdir ${BUILD_PATH}
mkdir ${APPSTORE_PATH}
#编译文件
mkdir ${CONFIGURATION_BUILD_PATH_APPSTORE}
#打包输出的文件
mkdir ${AppStorePrijectOutPath}
#copy
mkdir ${DSYM_COPY_PATH_APPSTORE}
xcodebuild archive -scheme $Project_Name -configuration $Configuration -archivePath ${APPSTORE_PATH}/$Project_Name-appstore.xcarchive CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH_APPSTORE}
xcodebuild  -exportArchive -archivePath ${APPSTORE_PATH}/$Project_Name-appstore.xcarchive -exportOptionsPlist $AppStoreExportOptionsPlist -exportPath ${AppStorePrijectOutPath}
#创建copy文件夹
mkdir ${DSYM_COPY_PATH_APPSTORE}
# 选择是压缩还是复制,复制的方法可以用于上传文件到指定服务器,比如上传到git
# zip -r 目标路径  源文件路径 ,开始压缩dSYM文件
zip -r ${DSYM_ZIP_PATH_APPSTORE} ${DSYM_PATH_APPSTORE}
# cp -r 源文件路径 目标路径 , 把压缩包拷贝到指定地方
cp -r ${DSYM_ZIP_PATH_APPSTORE} ${DSYM_COPY_PATH_APPSTORE}
#验证ipa是否打包成功
if [ -e $AppStorePrijectOutPath/$Project_Name.ipa ]; then
echo '----ipa包已生成----'
open $AppStorePrijectOutPath
echo '----打包ipa完成----'
echo '**---------------**'
echo '****开始发布ipa包****'
echo '**---------------**'
#验证后上传到App Store
# 将-u 后面的XXX替换成自己的AppleID的账号,-p后面的XXX替换成自己的密码
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u  XXX -p XXX -t ios --output-format xml
else
echo '----ipa包导出失败----'
fi


elif [ "$method" = "3" ]
then
#如果用户选择的是3,就执行企业脚本
#首先清除原来的文件夹
rm -rf ${BUILD_PATH}
#创建文件夹,路径需要一层一层创建,不然会创建失败
mkdir ${BUILD_PATH}
mkdir ${ENTERPRISE_PATH}
#编译文件
mkdir ${CONFIGURATION_BUILD_PATH_ENTERPRISE}
#打包输出的文件
mkdir ${EnterprisePrijectOutPath}
#copy
mkdir ${DSYM_COPY_PATH_ENTERPRISE}
xcodebuild archive   -workspace ${Project_Name}.xcworkspace  -scheme $Project_Name -configuration $Configuration -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH_ENTERPRISE}
echo "archive结束...."

xcodebuild  -exportArchive -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive -exportOptionsPlist $EnterpriseExportOptionsPlist -exportPath ${EnterprisePrijectOutPath}
echo "exportArchive结束...."
#创建copy文件夹
mkdir ${DSYM_COPY_PATH_ENTERPRISE}
# 选择是压缩还是复制,复制的方法可以用于上传文件到指定服务器,比如上传到git
# zip -r 目标路径  源文件路径 ,开始压缩dSYM文件
zip -r ${DSYM_ZIP_PATH_ENTERPRISE} ${DSYM_PATH_ENTERPRISE}
# cp -r 源文件路径 目标路径 , 把压缩包拷贝到指定地方
cp -r ${DSYM_ZIP_PATH_ENTERPRISE} ${DSYM_COPY_PATH_ENTERPRISE}
# 将 dSYM 包里的 demo 文件 上传到指定地点
TARGET_PATH=${DSYM_COPY_PATH}/${Project_Name}.app.dSYM/Contents/Resources/DWARF/${Project_Name} cp ${TARGET_PATH} ${EXPORT_DIR}
else
#如果是其他输入,则在终端中提示参数无效并退出
echo "参数无效...."
exit 1
fi
fi

再次感谢原作者

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342