#!/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脚本相关推荐

  1. ios 自动打包命令_iOS自动打包上传脚本

    自从将swift2.2升级到swift3.0, 每次使用Xcode8编译都很慢,很是不爽,于是有了研究下xcodebuild命令行打包的想法,起初不知道用shell,还是用python, 在网上大概搜 ...

  2. 【6】使用dockerfile打包/运行微服务项目,并上传到私服harbor

    使用dockerfile打包/运行微服务项目,并上传到私服harbor 关键词 dockerfile自定义demodocker 镜像 把自定义镜像上传到私服harbor 一.环境准备 主机地址 部署 ...

  3. IOS上传AppStore

    目录 一.注册AppleID(苹果开发者账号) 二.申请Bundle ID 三.申请发布证书 四.HBuilder ios 打包(打包的账号要和开发者账号一致) 五.专用密码 六.上传AppStore ...

  4. aws cli 上传文件到s3命令_使用 AWS CLI 分段上传到 Amazon S3

    如何使用 AWS CLI 将文件分段上传到 Amazon S3? 上次更新时间:2020 年 11 月 10 日 我想将一个大文件作为多个部分或使用分段上传复制到 Amazon Simple Stor ...

  5. IOS开发基础之使用AFNetworking框架实现文件上传get和post请求

    IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...

  6. ios开发日记-18上传appStore时,遇到错误,代码为ERROR ITMS-90049

    上传appStore时,遇到错误,代码为ERROR ITMS-90049 解决问题方式:  1. 在xcode左下角搜索info.plist 找到第三方的info.plist文件,如友盟中腾讯Api文 ...

  7. iOS开发之结合asp.net webservice实现文件上传下载

    iOS开发中会经常用到文件上传下载的功能,这篇文件将介绍一下使用asp.net webservice实现文件上传下载. 首先,让我们看下文件下载. 这里我们下载cnblogs上的一个zip文件.使用N ...

  8. ios 自动打包命令_iOS:使用jenkins实现xcode自动打包(最新)

    参考各种教程实现Jenkins自动化打包遇到点坑,特此把自己成功安装的步骤记录一下. 一.安装jenkins 首先使用osx系统自带的homebrew来安装jenkins. 在终端中运行:$ brew ...

  9. 最强打包插件,支持fir,蒲公英上传, 360加固 ,自动生成二维码

    文章目录 序言 说明 效果 使用 下载demo 导入文件 文件内容说明 配置gradle 配置gradle.properties 文件位置 内容 项目中配置 补充说明 1.360加固配置 2.curl ...

最新文章

  1. python中tensor与variable_NLP实战篇之tf2中tensor、variable、gradient、ops
  2. php acl控制,用PHP怎么实现一个ACL系统?
  3. Apache + Tomcat 负载均衡 session复制
  4. Android系统所有版本源码Kernel源码
  5. 学会这5种JS函数继承方式,前端面试你至少成功50%
  6. CSS垂直居中,你会多少种写法?
  7. Redis 和Memcache的区别
  8. 【整理】牛客网编程题-前端篇(入门难度)
  9. W3C小组宣布:HTML5标准制定完成
  10. [电路笔记]正弦稳态电路分析
  11. 三星S5P 6818开发板无线使用ADB功能方法
  12. 【B站弹幕游戏开发笔记02】Win10系统下给Python项目导入Protobuf
  13. 牛客竞赛:第三届超越杯程序设计团体赛题解
  14. 《观音心经》领悟后的空寂感,如何与现实世界有机结合
  15. 各类游戏对应的服务端架构
  16. 注水、占坑、瞎掰:起底机器学习学术圈的那些“伪科学”(附链接)
  17. 推荐 3 个非常好用的谷歌插件
  18. android 自动下一首,Android播播放完SD卡指定文件夹音乐之后,自动播放下一首
  19. 在腾讯云中配置服务器外网可以访问
  20. 微信小程序的疫情防控系统

热门文章

  1. vue-cli 添加顶部导航栏及点击导航菜单,左侧菜单栏切换
  2. O2O优惠券使用预测项目总结
  3. 影像测量—摄影测量和RTK原理
  4. gpu-z中的几个上限
  5. matlab英文文献及翻译,外文文献及翻译MATLAB 介绍_蚂蚁文库
  6. Android端实现多人音视频聊天应用(一)
  7. 安装卡巴斯基提示360 safety guard,360 antivirus,360 safe defender
  8. 【故事】P2P、BT、ED2k、FTP、磁力链接下载到底是什么鬼?
  9. 三十六 我在软件园的那些日子里
  10. 正则表达式校验邮箱号、手机号、身份证号码等等