ios 自动打包命令_iOS Xcode 自动打包,一键上传AppStore脚本

#!/bin/sh

# 使用方法

# 1.将autoarchive.sh和附件中的plist,放在一起,新建文件夹为Shell,将这几文件复制进去,然后复制Shell文件夹到工程的根目录

# 2.终端cd到Shell下,执行脚本 格式为 sh 脚本名字.sh

# 配置信息

#工程名字

target_name="xxx"

echo "\033[32m****************\n开始自动打包\n****************\033[0m\n"

# ==========自动打包配置信息部分========== #

#工程中Target对应的配置plist文件名称, Xcode默认的配置文件为Info.plist

info_plist_name="Info"

#返回上一级目录,进入项目工程目录

cd ..

#获取项目名称

project_name=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'`

#获取工程plist配置文件

info_plist_path="$project_name/$info_plist_name.plist"

#获取版本号

bundle_version=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $info_plist_path`

#设置build版本号(可以不进行设置)

date=`date +"%Y%m%d%H%M"`

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $date" "$info_plist_path"

#获取build版本号

bundle_build_version=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $info_plist_path`

#强制删除旧的文件夹

rm -rf ./$target_name-IPA

#指定输出ipa路径

export_path=./$target_name-IPA

#指定输出归档文件地址

export_archive_path="$export_path/$target_name.xcarchive"

#指定输出ipa地址

export_ipa_path="$export_path"

#指定输出ipa名称 : target_name + bundle_version + bundle_build_version

ipa_name="$target_name-V$bundle_version($bundle_build_version)"

echo "\033[32m****************\n自动打包选择配置部分\n****************\033[0m\n"

# ==========自动打包可选择信息部分========== #

# 输入是否为工作空间

archiveRun () {

#是否是工作空间

echo "\033[36;1m是否是工作空间(输入序号, 按回车即可) \033[0m"

echo "\033[33;1m1. 是 \033[0m"

echo "\033[33;1m2. 否 \033[0m"

#读取用户输入

read is_workspace_parame

sleep 0.5

if [ "$is_workspace_parame" == "1" ]

then

echo "\033[32m****************\n您选择了是工作空间 将采用:xcworkspace\n****************\033[0m\n"

elif [ "$is_workspace_parame" == "2" ]

then

echo "\033[32m****************\n您选择了不是工作空间 将采用:xcodeproj\n****************\033[0m\n"

else

echo "\n\033[31;1m**************** 您输入的参数,无效请重新输入!!! ****************\033[0m\n"

archiveRun

fi

}

archiveRun

# 输入打包模式

configurationRun () {

echo "\033[36;1m请选择打包模式(输入序号, 按回车即可) \033[0m"

echo "\033[33;1m1. Release \033[0m"

echo "\033[33;1m2. Debug \033[0m"

#读取用户输入

read build_configuration_param

sleep 0.5

if [ "$build_configuration_param" == "1" ]; then

build_configuration="Release"

elif [ "$build_configuration_param" == "2" ]; then

build_configuration="Debug"

else

echo "\n\033[31;1m**************** 您输入的参数,无效请重新输入!!! ****************\033[0m\n"

configurationRun

fi

}

configurationRun

echo "\033[32m****************\n您选择了 $build_configuration 模式\n****************\033[0m\n"

# 输入打包类型

methodRun () {

# 输入打包类型

echo "\033[36;1m请选择打包方式(输入序号, 按回车即可) \033[0m"

echo "\033[33;1m1. AdHoc \033[0m"

echo "\033[33;1m2. AppStore \033[0m"

echo "\033[33;1m3. Enterprise \033[0m"

echo "\033[33;1m4. Development \033[0m\n"

#读取用户输入

read method_param

sleep 0.5

if [ "$method_param" == "1" ]; then

exportOptionsPlistPath="AdHocExportOptions"

echo "\033[32m****************\n您选择了 AdHoc 打包类型\n****************\033[0m\n"

elif [ "$method_param" == "2" ]; then

exportOptionsPlistPath="AppStoreExportOptions"

echo "\033[32m****************\n您选择了 AppStore 打包类型\n****************\033[0m\n"

elif [ "$method_param" == "3" ]; then

exportOptionsPlistPath="EnterpriseExportOptions"

echo "\033[32m****************\n您选择了 Enterprise 打包类型\n****************\033[0m\n"

elif [ "$method_param" == "4" ]; then

exportOptionsPlistPath="DevelopmentExportOptions"

echo "\033[32m****************\n您选择了 Development 打包类型\n****************\033[0m\n"

else

echo "\n\033[31;1m**************** 您输入的参数,无效请重新输入!!! ****************\033[0m\n"

methodRun

fi

}

methodRun

# 输入上传类型

publishRun () {

# 输入打包类型

echo "\033[36;1m请选择上传类型(输入序号, 按回车即可) \033[0m"

echo "\033[33;1m1. 不上传 \033[0m"

echo "\033[33;1m2. AppStore \033[0m"

#读取用户输入

read publish_param

sleep 0.5

if [ "$publish_param" == "1" ]; then

echo "\033[32m****************\n您选择了不上传\n****************\033[0m\n"

elif [ "$publish_param" == "2" ]; then

echo "\033[32m****************\n您选择了上传 AppStore\n****************\033[0m\n"

else

echo "\n\033[31;1m**************** 您输入的参数,无效请重新输入!!! ****************\033[0m\n"

publishRun

fi

}

publishRun

#选择了2、Release、AppStore

if [ "$method_param" == "2" -a "$build_configuration" == "Release" -a "$publish_param" == "2" ]

then

#上传App Store

echo "请输入开发者账号:"

read username_param

sleep 0.5

echo "请输入开发者账号密码:"

read password_param

sleep 0.5

fi

echo "\033[32m****************\n打包信息配置完毕,输入回车开始进行打包\n****************\033[0m\n"

read start

sleep 0.5

echo "\033[32m****************\n开始清理工程\n****************\033[0m\n"

# 删除旧的文件

rm -rf "$export_path"

# 指定输出文件目录不存在则创建

if test -d "$export_path" ; then

echo $export_path

else

mkdir -pv $export_path

fi

# 清理工程

xcodebuild clean -configuration "$build_configuration" -alltargets

echo "\033[32m****************\n开始编译项目 ${build_configuration} ${exportOptionsPlistPath}\n****************\033[0m\n"

# 开始编译

if [ "$is_workspace_parame" == "1" ]

then

#工作空间

xcodebuild archive \

-workspace ${project_name}.xcworkspace \

-scheme ${target_name} \

-configuration ${build_configuration} \

-destination generic/platform=ios \

-archivePath ${export_archive_path}

else

#不是工作空间

xcodebuild archive \

-project ${project_name}.xcodeproj \

-scheme ${target_name} \

-configuration ${build_configuration} \

-archivePath ${export_archive_path}

fi

# 检查是否构建成功

# xcarchive 实际是一个文件夹不是一个文件所以使用 -d 判断

if test -d "$export_archive_path" ; then

echo "\033[32m****************\n项目编译成功\n****************\033[0m\n"

else

echo "\033[32m****************\n项目编译失败\n****************\033[0m\n"

exit 1

fi

echo "\033[32m****************\n开始导出ipa文件\n****************\033[0m\n"

#1、打包命令

#2、归档文件地址

#3、ipa输出地址

#4、ipa打包设置文件地址

xcodebuild -exportArchive \

-archivePath ${export_archive_path} \

-configuration ${build_configuration} \

-exportPath ${export_ipa_path} \

-exportOptionsPlist "./Shell/${exportOptionsPlistPath}.plist"

# 修改ipa文件名称

mv $export_ipa_path/$target_name.ipa $export_ipa_path/$ipa_name.ipa

# 检查文件是否存在

if test -f "$export_ipa_path/$ipa_name.ipa" ; then

echo "\033[32m****************\n导出 $ipa_name.ipa 包成功\n****************\033[0m\n"

else

echo "\033[32m****************\n导出 $ipa_name.ipa 包失败\n****************\033[0m\n"

exit 1

fi

# 打开打包文件目录

open $export_path

# 输出

echo "\033[32m****************\n使用Shell脚本打包完毕\n****************\033[0m\n"

#上传 AppStore

if [ -n "$username_param" -a -n "$password_param" -a "$method_param" == "2" -a "$build_configuration" == "Release" -a "$publish_param" == "2" ]

then

echo "\033[32m****************\n开始上传AppStore\n****************\033[0m\n"

#验证APP

altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"

"${altoolPath}" --validate-app \

-f "${export_ipa_path}/${ipa_name}.ipa" \

-u "$username_param" \

-p "$password_param" \

--output-format xml

#上传APP

"${altoolPath}" --upload-app \

-f "${export_ipa_path}/${ipa_name}.ipa" \

-u "$username_param" \

-p "$password_param" \

--output-format xml

echo "\033[32m****************\n上传AppStore完毕\n****************\033[0m\n"

fi

复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值