当前位置:   article > 正文

Unity 之自动化打包ipa_unity2021 导出xcode工程编译

unity2021 导出xcode工程编译

前言:

除了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默认创建的.xcodeproj
  	xcodebuild archive 
  					-project ${project_name}.xcodeproj \
                   	-scheme ${scheme_name} \
                   	-configuration ${build_configuration} \
                   	-archivePath ${export_archive_path}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

​ 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包。
  • 1
  • 2
  • 3
  xcodebuild  -exportArchive \
                     -archivePath ${export_archive_path} \
                     -exportPath ${export_ipa_path} \
                     -exportOptionsPlist ${ExportOptionsPlistPath}
  • 1
  • 2
  • 3
  • 4

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
  • 1
  • 2
  • 3

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/46379945

echo "------------------------------------------------------"
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
  • 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
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/82926
推荐阅读
相关标签
  

闽ICP备14008679号