持续创作,加快生长!这是我参加「日新方案 10 月更文应战」的第6天,点击检查活动概况
您能在这儿看到啥
- 温故知新
- iOS打包流程
- iOS项目装备
- iOS终究打包
- DEMO
- 脚本地址
温故知新
往期文章
Flutter 解放双手-Shell主动化打包之概要
Flutter 解放双手-Shell主动化打包之装备
*Flutter 解放双手-Shell主动化打包之APK
流程图如下所示 |
---|
脚本目录如下所示 |
---|
打包导出的文件.如下所示 |
---|
这些基础装备,便是打包的基石.给咱们指明了路途.依据上面的流程图.shell主动化打包.总共分为四步
- 参数装备
- 清缓存
- 导出文件
- 打包
在此之前,前三步,咱们都现已完结.不了解的同学,能够看看往期文章.
当然打包系列不会是最终一步.
由于之前事务需求.对咱们的事务来说,确实打包、上传,便是结束.
但由于爱折腾的我.天然也不会放过群消息(未发布)这个功用.
后续也会不断丰富解放双手系列.喜爱的能够点点重视.
好了,回归主题.— Flutter 解放双手-Shell主动化打包之IPA
iOS打包流程
从上面的流程图中,咱们发现有一个奇怪的过程.那便是前期装备.下面我先来解说一下这个.
前期装备
前因
咱们这儿挑选的打包指令,是苹果官方供给的xcodebuild.简单易上手.下面先看一下pack_ipa.sh文件,咱们哪里运用了xcodebuild.运用了xcodebuild什么功用.
archive |
---|
export |
---|
从 xcodebuild exportArchive的指令中,咱们得知.
最终导出ipa文件的时分,有一个特别的参数exportOpptionsPlist.
这个参数指定导出IPA包的特点.分为develop、ad-hoc、appstore三种类型.
由于咱们这儿xcode中签名办法是automatic,也便是登录开发者账号,让xcode主动装备证书的办法.
所以导出的exportOpptionsPlist会和手动装备证书的不一样.
假如你运用的是手动装备.不必担心.
下面咱们也会解说一下,exportOpptionsPlist怎样获取.
这儿咱们就简单讲一下xcodebuild的运用.
可选参数 | 参数阐明 |
---|---|
xcodebuild type | [build(编译) 、 archive(归档)、 exprotArchive(导出)] |
-workspace | 编译工作空间称号 |
-scheme | 编译方案称号 |
-archivePath | 被指定任何创立的档案将被放置的目录,或应导出存档 |
-configuration | 为构建每一个目标运用build装备称号 |
-destination | 运用由目标阐明(用逗号分隔的一系列的key =描绘目的地运用值对)中描绘的目的地 |
-exportOptionsPlist | 指定用于装备归档导出plist文件的途径 |
-exportArchive | 指定归档应导出 |
后边我会写一篇flutter 解放双手-XcodeBuild,来具体的解说一下,敬请期待哦
说到这儿,总会算是把你引到了前期装备的主题上了.持续看看后果吧.
后果
从上面的流程图.咱们来逐个解说一下,exportOpptionsPlist是怎样找到的.
-
装备iOS项目
- 主动装备证书 如上图所示,登录自己的开发者账号即可.
- 手动装备证书 如上图所示,把挑选对应描绘文件即可
-
Xcode Archive
-
手动导出IPA
App Store:上传商铺版别,release环境 Ad Hoc:能够经过蒲公英下载安装的release环境,也能够收到推送 Development: Debug环境.
当然,咱们也能够经过修正打包环境,让Ad Hoc环境为Debug.可是,请慎用.修正Archive环境.如下所示
- Edit Scheme
- Change Build Configuration 经过修正Archive build环境,就能够到达咱们的目的,但还是那句话,请慎用.
-
获取ExportOptions.plist 这样咱们就获取到ExportOptions.plist,当然假如你运用的也xcode 主动装备证书,那么你就不必从头获取ExportOptions.plist文件了,由于.我现已帮你装备好了.如下所示
从上面的文件里.咱们能够看出,各个环境的ExportOptions.plist,只是有一点点的不同.
尽管我也能够经过plutil -replace指令,修正一个ExportOptions.plist文件.来到达三个ExportOptions.plist的作用.
为了更好的区别app-stroe、ad-hoc、development这三个环境,还有由于每个项目装备也不一样.各个环境可能各不相同.区别开也方便修正.
至此.前期装备完结.这样咱们就能够好好的讲一下pack_ipa.sh文件了.
pack_ipa.sh
经过咱们上面的流程图.我把IPA总共分为5部分.如下所示
-
装备环境
首要目的是为了装备export_options_plist、build_type、configuration,判断逻辑如下所示
# 依据上传类型,确定是上传商铺版别 if [[ $upload_type == 1 ]]; then export_options_plist=$export_options_plist_store build_type="release" configuration="Release" elif [[ $project_build_type == 1 ]]; then # 假如不是上商铺,那便是上传蒲公英了, # 蒲公英是要承认打包环境 # 这儿边打包环境是release export_options_plist=$export_options_plist_hoc build_type="release" configuration="Release" else # 这儿便是debug build_type="debug" configuration="Debug" export_options_plist=$export_options_plist_dev fi
-
编译iOS
这儿咱们运用的还是flutter build,这个指令.当然也是能够运用xcodebuild的.如下所示
-
flutter build
if [ -e "${project_path}"/pubspec.yaml ]; then echomsg "编译FLUTTER" ### 依据**装备环境** ### 咱们获取到了打包的环境 build_type ### 然后执行 build 指令 flutter build ios --$build_type fi
-
xcodebuid build
xcodebuild \ build -workspace "${project_workspace_path}" \ -scheme "$project_scheme" \ -configuration $configuration \ -destination 'generic/platform=iOS' \ -quiet || **exit**
-
flutter build
-
archive
echomsg "开始archive" xcodebuild archive \ -workspace "${project_workspace_path}" \ -scheme "$project_scheme" \ -configuration $configuration \ -archivePath "${export_xcarchive_path}${xcarchive_name}" \ -destination "$generic" -quiet || exit
-
exportArchive
为了更好的完结导出,现已判断导出文件是否成功.咱们需求知道导出文件的姓名.
而IPA的姓名,是依据info.plist文件中的CFBundleName字段,进行命名的.其格局如下
CFBundleName.ipa
因而咱们需求获取到info.plist文件,并获取到CFBundleName字段对应的姓名才能够.
所以我在exportArchive的时分,分4步来完结,如下所示:
-
获取info.plist
有两个地方能够获取咱们想要的info.plist
- 工程项目中的info.plist
- archive中的info.plist
这儿我挑选了archive中的info.plist,现在想想,如同把获取弄的麻烦了,直接运用项目中的info.plist文件即可.为难了.好了咱们看一下代码吧
info_plist="$export_xcarchive_path$xcarchive_name/Products/Applications/Runner.app/Info.plist"
-
获取CFBundleName
ipa_name=$(/usr/libexec/PlistBuddy -c "Print CFBundleName" "$info_plist")
-
修正export_options_plist文件中的团队ID.
获取TeamId
经过archive,咱们在export_xcarchive_path中的info.plist文件中,找到咱们想要的Team.获取代码如下
run_plist="$export_xcarchive_path$xcarchive_name/Info.plist" ipa_teamID=$(/usr/libexec/PlistBuddy -c "Print ApplicationProperties:Team" "$run_plist")
修正TeamId
这样咱们就获取到了TeamId,然后经过plutil指令,来修正plist文件,就拿到了完好的export_options_plist文件了,修正Team代码如下.
plutil -replace teamID -string "$ipa_teamID" "$export_options_plist"
-
执行导出指令
经过前面过程,终于到了导出了,直接上代码
# 导出上传商铺的ipa xcodebuild \ -exportArchive -archivePath "$export_xcarchive_path$xcarchive_name" \ -exportPath "${export_ipa_path}" \ -exportOptionsPlist "${export_options_plist}" \ -destination "$generic" \ -allowProvisioningUpdates -quiet || exit
经过上面的过程,假如状况是成功的.咱们就能获取到IPA.到这儿,咱们基本上打包完结了,高不高兴,简不简单.唉,可对于我来说,也是学习了不少东西呢.下面,咱们再把上传搞定就齐活了.
-
-
上传
从上面的流程图中,上传分为商铺和蒲公英.下面咱们来看一下吧
商铺
上传商铺,咱们用的是苹果供给的xcrun altool指令.
上传分为两种暗码验证机制,一种是密钥,一种是专属暗码.
这儿咱们选用的专属暗码办法.想要学习xcrun altool的同学,我将会在后续文章里,做具体解说.这儿咱们就不再细讲.
当然,上传首要分为两个过程
1. 验证app ``` xcrun altool \ --validate-app \ -f "$export_ipa_path/$ipa_name.ipa" \ ## 开发者账号 -u "$xcrun_u" \ ## 开发者专属暗码 -p "$xcrun_p" \ ## 验证类型 -t ios ``` 3. 上传app ``` xcrun altool \ --upload-app \ -f "$export_ipa_path/$ipa_name.ipa" \ -u "$xcrun_u" \ -p "$xcrun_p" \ -t ios ``` > 经过上面的流程,你的**IPA**就上传到商铺了,是不是很省劲啊.
蒲公英
蒲公英相对简单一点,由于咱们用的pgyer_uload.sh文件,现已封装的很好.只需求调用办法.如下所示
echomsg "开始上传ipa到蒲公英" ### 调用办法需求两个参数 ### 第一个是你蒲公英的key, ### 第二个便是IPA的全途径即可 uploadPgyer "$api_key" "$export_ipa_path/$ipa_name".ipa
至此.Flutter 解放双手-Shell主动化打包之IPA完结.后续有什么问题,我也会持续更新.喜爱的能够点点赞,重视一下.
Flutter 解放双手系列
文章列表入口