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
复制代码
ios 自动打包命令_iOS Xcode 自动打包,一键上传AppStore脚本相关推荐
- ios 自动打包命令_iOS自动打包上传脚本
自从将swift2.2升级到swift3.0, 每次使用Xcode8编译都很慢,很是不爽,于是有了研究下xcodebuild命令行打包的想法,起初不知道用shell,还是用python, 在网上大概搜 ...
- 【6】使用dockerfile打包/运行微服务项目,并上传到私服harbor
使用dockerfile打包/运行微服务项目,并上传到私服harbor 关键词 dockerfile自定义demodocker 镜像 把自定义镜像上传到私服harbor 一.环境准备 主机地址 部署 ...
- IOS上传AppStore
目录 一.注册AppleID(苹果开发者账号) 二.申请Bundle ID 三.申请发布证书 四.HBuilder ios 打包(打包的账号要和开发者账号一致) 五.专用密码 六.上传AppStore ...
- aws cli 上传文件到s3命令_使用 AWS CLI 分段上传到 Amazon S3
如何使用 AWS CLI 将文件分段上传到 Amazon S3? 上次更新时间:2020 年 11 月 10 日 我想将一个大文件作为多个部分或使用分段上传复制到 Amazon Simple Stor ...
- IOS开发基础之使用AFNetworking框架实现文件上传get和post请求
IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...
- ios开发日记-18上传appStore时,遇到错误,代码为ERROR ITMS-90049
上传appStore时,遇到错误,代码为ERROR ITMS-90049 解决问题方式: 1. 在xcode左下角搜索info.plist 找到第三方的info.plist文件,如友盟中腾讯Api文 ...
- iOS开发之结合asp.net webservice实现文件上传下载
iOS开发中会经常用到文件上传下载的功能,这篇文件将介绍一下使用asp.net webservice实现文件上传下载. 首先,让我们看下文件下载. 这里我们下载cnblogs上的一个zip文件.使用N ...
- ios 自动打包命令_iOS:使用jenkins实现xcode自动打包(最新)
参考各种教程实现Jenkins自动化打包遇到点坑,特此把自己成功安装的步骤记录一下. 一.安装jenkins 首先使用osx系统自带的homebrew来安装jenkins. 在终端中运行:$ brew ...
- 最强打包插件,支持fir,蒲公英上传, 360加固 ,自动生成二维码
文章目录 序言 说明 效果 使用 下载demo 导入文件 文件内容说明 配置gradle 配置gradle.properties 文件位置 内容 项目中配置 补充说明 1.360加固配置 2.curl ...
最新文章
- python中tensor与variable_NLP实战篇之tf2中tensor、variable、gradient、ops
- php acl控制,用PHP怎么实现一个ACL系统?
- Apache + Tomcat 负载均衡 session复制
- Android系统所有版本源码Kernel源码
- 学会这5种JS函数继承方式,前端面试你至少成功50%
- CSS垂直居中,你会多少种写法?
- Redis 和Memcache的区别
- 【整理】牛客网编程题-前端篇(入门难度)
- W3C小组宣布:HTML5标准制定完成
- [电路笔记]正弦稳态电路分析
- 三星S5P 6818开发板无线使用ADB功能方法
- 【B站弹幕游戏开发笔记02】Win10系统下给Python项目导入Protobuf
- 牛客竞赛:第三届超越杯程序设计团体赛题解
- 《观音心经》领悟后的空寂感,如何与现实世界有机结合
- 各类游戏对应的服务端架构
- 注水、占坑、瞎掰:起底机器学习学术圈的那些“伪科学”(附链接)
- 推荐 3 个非常好用的谷歌插件
- android 自动下一首,Android播播放完SD卡指定文件夹音乐之后,自动播放下一首
- 在腾讯云中配置服务器外网可以访问
- 微信小程序的疫情防控系统