赞
踩
除了unity自带一套命令行工具外,xcode 也自带一套xcodebuild的命令行工具,可以自动化打包和分发,如果我们写好工具,可以为以后节省很多的打包时间。
正常情况下,我们如果时真机测试的话,有一下三个途径
1.手机通过usb连接电脑,然后xcode,build到手机上,这种方法最简单实用,但是缺点就是无法异地安装
2.开发通过xcode.archive出来一个包,上传到tf,然后只要在后台添加过测试邮箱,手机就可以直接下载tf包。优点是支持异地安装。缺点就是速度太慢,archive速度慢+上传速度也慢,tf还要审核10-15分钟左右。
3.通过archive出ipa的包,然后上传到托管网站(如蒲公英或者fir),然后可以直接扫码下载。速度快,且支持异地安装。
通过分析上诉三种方式,我们不难看出,通过ipa是非常方便的。
首先先来了解下iOS的App的打包和分发流程,这里主要有两个步骤:
1.Build:Unity3D通过Build打包出xcode工程。
2.Archive:对 Target
进行编译、归档,生成 .xcarchive
文件。
3.Export:对 .xcarchive 归档文件进一步处理,生成不同渠道的 .ipa
包。
4.上传ipa到托管平台(蒲公英或者fir)
xcodebuild 是苹果发布自动构建的工具。一般持续集成的时候都需要用到它。可以在终端输入man xcodebuild
查看用法及介绍。也可以在官方文档中查看。
官方文档 Workspace、Project、Scheme、Target 了解
Xcode打包原理: 点击 build
或 Command + R
实际执行 xcodebuild
命令 ; 编译好后, 生成 ipa 包 实际执行的 xcrun
命令。
自动打包脚本主要使用的 是 xcodebuild
的 archive
命令 和 -exportArchive
命令 ,
先说明下几个
下面详细说下这两个命令
1.xcodebuild archive
命令可以 把工程给编译出来一 个 .archive
文件:
公共参数的意义:
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}
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}
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
托管平台有不同选择,我们可以使用第三方公司提供的网站,如蒲公英,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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。