前言
iOS 项目打包通常都是通过 Xcode -> Product -> Archive
去给项目打包,这是常用的方式,还有一种方式就是 shell脚本自动化打包
,可以用一行代码解决打包问题,
实现
- 项目下创建
ZJ_Shell.sh
脚本文件,可以将该文件放在一个文件夹 Shell
下,也可以放在项目根目录下,具体看你设计实现方式
- 在
ZJ_Shell.sh
文件中编写脚本
1 2 3 4 5 6 7 8
| #!/bin/sh
#--------使用方法 开始-------- # 1、将该脚本放在工程的根目录下(xcworkspace 或 xcodeproj 文件同级目录)或新建一个Shell文件夹下 # 2、请根据自己项目的情况选择使用 xcworkspace 还是 xcodeproj 形式,目前默认为 xcworkspace 形式 # 3、打开终端、执行脚本(输入 sh,将脚本文件拉倒终端,会生成文件路径,然后enter就可) # 这个脚本主要介绍放在Shell文件夹下 #--------使用方法 结束--------
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| echo "************************************" echo "==========项目自定义配置 开始==========" ## 自定义好下列参数后再执行该脚本
# 工程Project名称 PROJECT_NAME="UBR" # Scheme名 SCHEME_NAME="UBR" # 打包编译的方式 Debug/Release,一般用Release BUILD_CONFIGURATION="Debug" # 打包的方式method:development/ad-hoc/app-store/nterprise METHOD="ad-hoc" # compileBitcode选项配置,默认YES,要设置成NO COMPILEBITCODE="NO" # SDK SDK_NAME=iphoneos # # 和method对应的mobileprovision文件名,手动管理时必填 # MOBILEPROVISION_NAME="" # # 项目的bundleID,手动管理时必填 # BUNDLE_IDENTIFIER=""
echo "项目自定义配置 打印:" echo "PROJECT_NAME=${PROJECT_NAME}" echo "SCHEME_NAME=${SCHEME_NAME}" echo "BUILD_CONFIGURATION=${BUILD_CONFIGURATION}" echo "METHOD=${METHOD}" echo "COMPILEBITCODE=${COMPILEBITCODE}" echo "SDK_NAME=${SDK_NAME}" # echo "MOBILEPROVISION_NAME=${MOBILEPROVISION_NAME}" # echo "BUNDLE_IDENTIFIER=${BUNDLE_IDENTIFIER}"
echo "==========项目自定义配置 结束=========="
echo '//////////////////////////////////////////' echo '//////////////////////////////////////////'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| echo "==========项目固定参数配置 开始==========" ##无特殊情况不用修改
# 获取当前脚本所在的目录 $(cd `dirname $0`; pwd) ,脚本上一层目录 $(cd ..; pwd) PROJECT_ROOT_PATH=$(cd ..; pwd)
# ExportOptions.plist 文件的存放路径,该文件描述了导出ipa文件所需要的配置 # 如果不知道如何配置该plist,可直接使用xcode打包ipa结果文件夹的 ExportOptions.plist 文件 # ExportOptions.plist 文件路径 EXPORTOPTIONS_PLIST_PATH=${PROJECT_ROOT_PATH}/ExportOptionsPlist/AdhocExportOptions.plist
# xcodeproject路径 PROJECT_PATH=${PROJECT_ROOT_PATH}/${PROJECT_NAME}.xcodeproj
# xcworkspace路径 WORKSPACE_PATH=${PROJECT_ROOT_PATH}/${PROJECT_NAME}.xcworkspace
echo "项目固定参数配置 打印:" echo "PROJECT_ROOT_PATH=${PROJECT_ROOT_PATH}" echo "EXPORTOPTIONSP_LIST_PATH=${EXPORTOPTIONS_PLIST_PATH}" echo "PROJECT_PATH=${PROJECT_PATH}" echo "WORKSPACE_PATH=${WORKSPACE_PATH}"
echo "==========项目固定参数配置 结束=========="
# echo '//////////////////////////////////////////' # echo '//////////////////////////////////////////'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # echo "==========项目版本号配置 开始==========" # # 获取当前版本号 # GET_BUILD_VERSION=`xcodebuild -showBuildSettings -target ${PROJECT_NAME} | grep CURRENT_PROJECT_VERSION | tr -d 'CURRENT_PROJECT_VERSION = '` # # 当前版本号 # CURRENT_BUILD_VERSION=${GET_BUILD_VERSION}
# # 版本号增加 根据需求配置 # # agvtool new-version $((${OLD_BUILD_VERSION}+1))
# echo "项目版本号配置 打印:" # echo "CURRENT_BUILD_VERSION=${CURRENT_BUILD_VERSION}"
# echo "==========项目版本号配置 结束=========="
echo '//////////////////////////////////////////' echo '//////////////////////////////////////////'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| echo "==========IPA包路径配置 开始==========" ## IPA包 # 时间 DATE=`date '+%Y%m%d_%H%M%S'` # IPA名称 EXPORT_IPA_NAME=iOS_${SCHEME_NAME}_${DATE}_${BUILD_CONFIGURATION} # IPA文件夹路径 EXPORT_IPA_PATH=${PROJECT_ROOT_PATH}/IPA/${EXPORT_IPA_NAME}
# IPA归档文件路径 EXPORT_ARCHIVE_PATH=${EXPORT_IPA_PATH}/${SCHEME_NAME}.xcarchive
echo "IPA包路径配置 打印:" echo "DATE=${DATE}" echo "EXPORT_IPA_NAME=${EXPORT_IPA_NAME}" echo "EXPORT_IPA_PATH=${EXPORT_IPA_PATH}" echo "EXPORT_ARCHIVE_PATH=${EXPORT_ARCHIVE_PATH}"
# ${PROJECT_ROOT_PATH}:获取当前脚本目录,这个配置主要看脚本放在哪里 # 进入项目工程目录 cd .. # IPA文件目录存在 if [ -d "${EXPORT_IPA_PATH}" ] ; then echo "IPA文件路径已存在" else # IPA文件目录不存在,则创建 mkdir -p ${EXPORT_IPA_PATH} fi
echo "==========IPA包路径配置 结束=========="
echo '//////////////////////////////////////////' echo '//////////////////////////////////////////'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| echo "==========Build Clean Begin==========" ## 编译前清理工程
# project形式 # xcodebuild clean -project ${PROJECT_ROOT_PATH}/${PROJECT_NAME}.xcworkspace \ # -scheme ${SCHEME_NAME} \ # -configuration ${BUILD_CONFIGURATION} \ # -quiet || exit
# workspace xcodebuild clean -workspace ${PROJECT_ROOT_PATH}/${PROJECT_NAME}.xcworkspace \ -scheme ${SCHEME_NAME} \ -configuration ${BUILD_CONFIGURATION} \ -quiet || exit
echo "==========Build Clean End=========="
echo '//////////////////////////////////////////' echo '//////////////////////////////////////////'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| echo "==========Build Archive Begin==========" ## 开始编译Archive工程
# 解锁钥匙串 -p 后面跟电脑密码 根据需要设置 XXX security unlock-keychain -p "1127"
# project # xcodebuild archive -project ${PROJECT_ROOT_PATH}/${PROJECT_NAME}.xcodeproj \ # -scheme ${SCHEME_NAME} \ # -configuration ${BUILD_CONFIGURATION} \ # -sdk ${SDK_NAME} \ # -archivePath ${EXPORT_ARCHIVE_PATH} \ # -quiet || exit
# workspace xcodebuild archive -workspace ${PROJECT_ROOT_PATH}/${PROJECT_NAME}.xcworkspace \ -scheme ${SCHEME_NAME} \ -configuration ${BUILD_CONFIGURATION} \ -sdk ${SDK_NAME} \ -archivePath ${EXPORT_ARCHIVE_PATH} \ -quiet || exit
echo "==========Build Archive Success=========="
echo '//////////////////////////////////////////' echo '//////////////////////////////////////////'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # echo "==========Delete ExportOptions Begin==========" ## 先删除ExportOptions文件 # if [ -f "${EXPORTOPTIONS_PLIST_PATH}" ] ; then # rm -f ${EXPORTOPTIONS_PLIST_PATH} # fi # # 根据参数生成ExportOptions文件 # /usr/libexec/PlistBuddy -c "Add :compileBitcode bool ${COMPILEBITCODE}" ${EXPORTOPTIONS_PLIST_PATH} # /usr/libexec/PlistBuddy -c "Add :method string ${METHOD}" ${EXPORTOPTIONS_PLIST_PATH} # /usr/libexec/PlistBuddy -c "Add :provisioningProfiles:" ${EXPORTOPTIONS_PLIST_PATH} # /usr/libexec/PlistBuddy -c "Add :provisioningProfiles:${BUNDLE_IDENTIFIER} string ${MOBILEPROVISION_NAME}" ${EXPORTOPTIONS_PLIST_PATH}
# echo "==========Delete ExportOptions End=========="
echo '//////////////////////////////////////////' echo '//////////////////////////////////////////'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| echo "==========Export IPA Begin==========" # 导出ipa包 xcodebuild -exportArchive \ -archivePath ${EXPORT_ARCHIVE_PATH} \ -exportPath ${EXPORT_IPA_PATH} \ -exportOptionsPlist ${EXPORTOPTIONS_PLIST_PATH} \ -quiet || exit
# 检查ipa包是否存在 if [ -e ${EXPORT_IPA_PATH}/${SCHEME_NAME}.ipa ]; then echo "导出ipa包成功 😃 😃 😃" # 打开IPA包的目录 open ${EXPORT_IPA_PATH} else echo "导出ipa包失败 😢 😢 😢" fi echo "==========Export IPA End=========="
echo '//////////////////////////////////////////' echo '//////////////////////////////////////////'
echo "==========Delete Archive Start==========" # 删除编译的.xcarchive文件,可根据各自情况选择是否保留 if [ -d "${EXPORT_ARCHIVE_PATH}" ]; then rm -rf ${EXPORT_ARCHIVE_PATH} echo "删除xcarchive文件夹成功 😃 😃 😃" fi echo "==========Delete Archive End=========="
echo '//////////////////////////////////////////' echo '//////////////////////////////////////////'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| # echo "============Upload Pgyer Begin============" # ## 上传蒲公英 https://www.pgyer.com/doc/view/upload_one_command
# # {$filePath}是应用安装包文件的路径 # # {$uKey}是开发者的用户 Key,在应用管理-API中查看 # # {$apiKey}是开发者的 API Key,在应用管理-API中查看
# # U_KEY # U_KEY="eb7e409601493709e587b1b30206e27b" # # API_KEY # API_KEY="26f45bbd98549c89a14753329e234372" # # 上传到蒲公英 # if [ -e "${EXPORT_IPA_PATH}/${SCHEME_NAME}.ipa" ]; then # echo "开始上传ipa到蒲公英" # curl -F "file=@${EXPORT_IPA_PATH}/${SCHEME_NAME}.ipa" \ # -F "uKey=4a5bc52e6763795e18b69bd82dd23a9e" \ # -F "_api_key=${API_KEY}" \ # "https://www.pgyer.com/apiv1/app/upload" # echo "上传ipa到蒲公英成功" # else # echo "上传ipa到蒲公英失败" # fi
# echo "============Upload Pgyer End============"
echo '//////////////////////////////////////////' echo '//////////////////////////////////////////'
|
1 2 3 4 5 6 7 8 9 10 11
| # echo "============Uploading App Store Begin============" # 上传App Store # ALTOOL_PATH="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
# 将-u 后面的XXX替换成自己的AppID账号,-p后面的XXX替换成自己的密码 # "$ALTOOL_PATH" --validate-app -f ${EXPORT_IPA_PATH}/${SCHEME_NAME}.ipa -u 13718004742@163.com -p ZJzj5425541 -t ios --output-format xml # "$ALTOOL_PATH" --upload-app -f ${EXPORT_IPA_PATH}/${SCHEME_NAME}.ipa -u 13718004742@163.com -p ZJzj5425541 -t ios --output-format xml
# echo "============Uploading App Store End============"
exit 0
|
注:
上面的一些配置可用可不用,具体根据项目和需求去添加