前言:

除了unity自带一套命令行工具外,xcode 也自带一套xcodebuild的命令行工具,可以自动化打包和分发,如果我们写好工具,可以为以后节省很多的打包时间。

1.iOS打包方式

正常情况下,我们如果时真机测试的话,有一下三个途径

​ 1.手机通过usb连接电脑,然后xcode,build到手机上,这种方法最简单实用,但是缺点就是无法异地安装

​ 2.开发通过xcode.archive出来一个包,上传到tf,然后只要在后台添加过测试邮箱,手机就可以直接下载tf包。优点是支持异地安装。缺点就是速度太慢,archive速度慢+上传速度也慢,tf还要审核10-15分钟左右。

​ 3.通过archive出ipa的包,然后上传到托管网站(如蒲公英或者fir),然后可以直接扫码下载。速度快,且支持异地安装。

通过分析上诉三种方式,我们不难看出,通过ipa是非常方便的。


2.打包+分发流程

首先先来了解下iOS的App的打包和分发流程,这里主要有两个步骤:

​ 1.Build:Unity3D通过Build打包出xcode工程。

​ 2.Archive:对 Target 进行编译、归档,生成 .xcarchive 文件。

​ 3.Export:对 .xcarchive 归档文件进一步处理,生成不同渠道的 .ipa 包。

​ 4.上传ipa到托管平台(蒲公英或者fir)


3.XcodeBuild工具

xcodebuild 是苹果发布自动构建的工具。一般持续集成的时候都需要用到它。可以在终端输入man xcodebuild查看用法及介绍。也可以在官方文档中查看。

官方文档 Workspace、Project、Scheme、Target 了解

Xcode打包原理: 点击 buildCommand + R 实际执行 xcodebuild 命令 ; 编译好后, 生成 ipa 包 实际执行的 xcrun 命令。

自动打包脚本主要使用的 是 xcodebuildarchive命令 和 -exportArchive命令 ,

先说明下几个

下面详细说下这两个命令

​ 1.xcodebuild archive 命令可以 把工程给编译出来一 个 .archive 文件:

​ 公共参数的意义:

  • project_name 项目名 :就是xcode工程名,unity导出工程一般都叫:Unity-iPhone
  • scheme_name 项目的scheme:xcode编译的scheme名称,可以自己打开xcode查看,unity导出工程默认scheme一般也是:Unity-iPhone
  • build_configuration 工程配置:工程配置plist,是一个包含导出包的证书等配置的文件,可以手动导出ipa后,再ipa统计目录下找到:ExportOptionPlist.plist文件。而且这个文件有三种类型,分别是develop,distribute,hoc。分别是由我们手动导出时选择的不同证书类型决定的。
  • export_archive_path 导出路径:导出文件路径时自定义的,可以时桌面任意文件夹。如:~/Desktop/XXXX/scheme_name.xcarchive
shell  // Cocopods管理的.xcworkspace项目xcodebuild archive -workspace ${project_name}.xcworkspace \-scheme ${scheme_name} \-configuration ${build_configuration} \-archivePath ${export_archive_path}// 用Xcode默认创建的.xcodeprojxcodebuild archive -project ${project_name}.xcodeproj \-scheme ${scheme_name} \-configuration ${build_configuration} \-archivePath ${export_archive_path}

​ 2.xcodebuild -exportArchive 命令可以通过 .archive 件导出 个 .ipa 文件:

​ 公共参数的意义:

* export_archive_path 导出archive的路径:也就是上面步骤1中的到户archive文件的archivePath:~/Desktop/XXXX/scheme_name.xcarchive
* export_ipa_path 导出ipa路径:自定义的导出ipa的文件夹路径,可以放到和archive统一目录或者自定义,如:~/Desktop/XXXX/
* ExportOptionsPlistPath 导出plist配置文件路径:即上面步骤1中的工程配置plist,我们可以自己准备3个分别是develop,distribute,hoc,然后,我们选择不同类型的plist配置,就可以导出不同类型的ipa包。
  xcodebuild  -exportArchive \-archivePath ${export_archive_path} \-exportPath ${export_ipa_path} \-exportOptionsPlist ${ExportOptionsPlistPath}

4.上传ipa包到托管平台

shell中我们上传文件,一般都是用curl,它的详细语法可以自行google。这里演示最简单的用法

echo "上传分发平台"
curl -F ”file=ipa文件路径“  上传url
curl -F "file=@$export_ipa_path/$ipa_name.ipa" http://10.200.17.41:8090/app/upload

5.托管平台

托管平台有不同选择,我们可以使用第三方公司提供的网站,如蒲公英,Fir等。当然也可以自己搭建托管网站。

这里给大家推荐一个开源项目:https://github.com/yizhaorong/intranet_app_manager

项目使用 Spring Boot 开发的类似蒲公英和fir的企业内网 APP 分发平台,解决下载限制,实名认证等繁琐过程。样式与 fir 一致,直接扒的。里面有详细的安装和使用指南。


总结

好了,现在我们从打包到上传ipa,一键自动化部署的全流程就可以跑通了,当然我们大家可能看着容易,中间不知道会碰到多少坑,但是不管再多的坑,只有我们自己趟过才是我们真正属于我们自己的东西。

下面给大家分享我自己是使用的ExportIpa.sh的文件全部代码。参考:https://blog.csdn.net/ismilesky/article/details/76689448

#----------------项目自定义部分(自定义好下列参数后再执行该脚本)#
# (注意: 因为shell定义变量时,=号两边不能留空格,若scheme_name与info_plist_name有空格,脚本运行会失败)# 计时
SECONDS=0# 是否编译工作空间 (例:若是用Cocopods管理的.xcworkspace项目,赋值true;用Xcode默认创建的.xcodeproj,赋值false)
is_workspace="true"# 指定项目的scheme名称
scheme_name="Unity-iPhone"# 工程中Target对应的配置plist文件名称, Xcode默认的配置文件为Info.plist
info_plist_name="Info"# 指定要打包编译的方式 : Release,Debug
build_configuration="Release"# ----------------自动打包部分(无特殊情况不用修改)## 导出ipa所需要的plist文件路径 (默认为AdHocExportOptionsPlist.plist)
ExportOptionsPlistPath="./DevelopmentExportOptionsPlist.plist"
# 返回上一级目录,进入项目工程目录# 获取项目名称,我用find方法找到的不对,所以直接写死了
# project_name=`find . -name *.xcworkspace | awk -F "[/.]" '{print $(NF-1)}'`
project_name=${scheme_name}# 获取版本号,内部版本号,bundleID
info_plist_path="$project_name/$info_plist_name.plist"# 时间
DATE=`date '+%Y-%m-%d-%H-%m-%S'`
# 指定输出ipa路径
export_path=~/Desktop/"$scheme_name-$DATE"
# 指定输出归档文件地址
export_archive_path="$export_path/$scheme_name.xcarchive"
# 指定输出ipa地址
export_ipa_path="$export_path"
# 指定输出ipa名称
ipa_name="$zoo"# AdHoc,AppStore,Enterprise三种打包方式的区别: http://blog.csdn.net/lwjok2007/article/details/46379945echo "------------------------------------------------------"
echo "\033[32m开始构建项目  \033[0m"
# 指定输出文件目录不存在则创建
if [ -d "$export_path" ] ; then
echo $export_path
else
mkdir -pv $export_path
fi# 判断编译的项目类型是workspace还是project
if $is_workspace ; then
# 编译前清理工程
xcodebuild clean -workspace ${project_name}.xcworkspace -scheme ${scheme_name} -configuration ${build_configuration}xcodebuild archive -workspace ${project_name}.xcworkspace \-scheme ${scheme_name} \-configuration ${build_configuration} \-archivePath ${export_archive_path}
else
# 编译前清理工程
xcodebuild clean -project ${project_name}.xcodeproj \-scheme ${scheme_name} \-configuration ${build_configuration}xcodebuild archive -project ${project_name}.xcodeproj \-scheme ${scheme_name} \-configuration ${build_configuration} \-archivePath ${export_archive_path}
fi#  检查是否构建成功
#  xcarchive 实际是一个文件夹不是一个文件所以使用 -d 判断
if [ -d "$export_archive_path" ] ; then
echo "\033[32;1m项目构建成功 \033[0m"
else
echo "\033[31;1m项目构建失败 \033[0m"
exit 1
fi
echo "------------------------------------------------------"echo "\033[32m开始导出ipa文件 \033[0m"
xcodebuild  -exportArchive \-archivePath ${export_archive_path} \-exportPath ${export_ipa_path} \-exportOptionsPlist ${ExportOptionsPlistPath}# 检查文件是否存在
if [ -f "$export_ipa_path/$ipa_name.ipa" ] ; then
echo "\033[32;1m导出 ${ipa_name}.ipa 包成功 \033[0m"
open $export_path
else
echo "\033[31;1m导出 ${ipa_name}.ipa 包失败 \033[0m"
exit 1
fi# 输出打包总用时
echo "\033[36;1m使用AutoPackageScript打包总用时: ${SECONDS}s \033[0m"echo "上传分发平台"
curl -F "file=@$export_ipa_path/$ipa_name.ipa" http://10.200.17.41:8090/app/upload# 蒲公英上传
# 执行 curl -F "file=@/tmp/example.ipa" -F "uKey=xxx" -F "_api_key=xxx" https://qiniu-storage.pgyer.com/apiv1/app/upload 请根据开发者自己的账号,将其中的 uKey 和 _api_key 的值替换为相应的值。exit 0

Unity 之自动化打包ipa相关推荐

  1. fastlane自动化打包ipa并发布到firim或者蒲公英

    1.打开终端,确保Xcode Command Line Tools 安装了最新版 xcode-select --install 2.安装fastlane sudo gem install -n /us ...

  2. TeamCity自动化打包Unity项目

    TeamCity是 JetBrains旗下的一款持续集成(Continuous Integration,简称CI)工具,开箱即用. 下载链接 https://www.jetbrains.com/tea ...

  3. iOS自动化打包之重签名导出不同证书ipa探索

    在完成基础的自动包打包流程过后, 随即也出现了日常中常见的问题, 比如我们每次需要打出不同网络环境和不同证书的ipa, 由于开发者可以添加的设备只有100个, 而公司的几个项目都是用的一个账号, 各项 ...

  4. unity安卓打包修改启动画面_Unity自动化打包Android APK

    零. 前言 最近在做Unity开发,有个任务是通过Jenkins实现自动化打包Unity游戏成Android APK的需求,所以在完成任务后,梳理成了一个最简单的教学,也把遇到的坑和大家分享. 若需要 ...

  5. Unity 自动化打包XCode工程

    Unity 自动化打包XCode工程 每次打包都要手动修改Xcode的各种配置,于是研究了一下通过Unity提供的API设置XCode的各种配置 XCode签名 在我使用的Unity版本中(Unity ...

  6. 【游戏开发进阶】教你Unity通过Jenkins实现自动化打包,打包这种事情就交给策划了(保姆级教程 | 命令行打包 | 自动构建)

    文章目录 一.前言 二.Jenkins简介 三.Jenkins的下载与安装 1.JDK下载与安装 2.Jenkins下载 3.Jenkins安装 4.Jenkins初始化 四.Jenkins的基本操作 ...

  7. Unity自动化打包脚本设置

    代码如下: using UnityEditor; using UnityEngine;public class PackageTools {[MenuItem("Tools/PerformB ...

  8. 关于fastlane自动化打包

    fastlane(自动化打包) 安装: sudo gem install -n /usr/local/bin fastlane 复制代码 1.在工程目录下,会在工程下生成fastlane文件夹 fas ...

  9. xcode 选择configuraftions 打包_分利宝IOS自动化打包

    前言 在iOS开发中,我们常用的打包上传方式就是用Xcode的archive方式打包.到了测试阶段,需要频繁的打包提交到测试平台,整个流程包括:编译-打包-上传,整个过程需要我们去坚守每一步操作,提交 ...

  10. python发送文件到钉钉群_iOS python 自动化打包,并在钉钉群里发通知

    最近感觉iOS 打包给测试人员测试,用Xcode 打包太费经了.项目编译太慢,一次打包可能需要20来分钟.于是就想用下自动化打包.本来想尝试下Fastlane 或者jenkins 但是觉得还是有点麻烦 ...

最新文章

  1. java高级----Java动态代理的原理
  2. ExtJS中layout的12种布局风格
  3. 使用RNN解决NLP中序列标注问题的通用优化思路
  4. lwIP ARP协议分析
  5. 轻松与外来客户进行REST通信
  6. Python--发送邮件
  7. 什么叫python代码的优化_优化Python代码
  8. Win7下DB2 Express-C 9.7.2的卸载与安装(上)
  9. 错误 1 未能找到类型或命名空间名称mysql_错误1未能找到类型或命名空间名称“DataPager”(是否缺少 using 指令或程序集引用?)...
  10. 【前端框架之Bootstrap 02】布局与导航
  11. Android UI学习之TextView
  12. H - 命运(动态规划) 数塔问题
  13. 深度学习计算机视觉的简介_商业用途计算机视觉简介
  14. cck8graphpad作图_北京cck8数据作图「上海儒安生物科技供应」
  15. 施耐德电气技术文档集
  16. matlab进化树的下载,mega7.0进化树软件下载-mega 7.0 win 64位下载【附详细使用教程】 - 百当下载站...
  17. miniconda3官网介绍
  18. weblogic 启动报错bea 000386解决方案
  19. ssm基于Android的组装机配置商城APP(ssm+uinapp+Mysql)
  20. 大数据破解污染图谱 北风与雾霾啥关系

热门文章

  1. 两个线程交替打印A1B2C3D4E5输出,6种实现方式
  2. kubernetes 源码安装1.18.3 (7)部署cni网络
  3. 从产品角度看滴滴事件,滴滴顺风车业务存在的问题
  4. 图画日记怎么画_图画日记
  5. 15分钟带你入门Pandas
  6. 用origin画不同柱族柱状图
  7. 超详细wordPress主题制作教程
  8. Mac 电脑系统重装(详细流程,包含 Intel、Apple M系列)
  9. 大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低平 每日一题--2020049--
  10. 京东页面html前台代码,京东页面代码