【iOS开发工程化——开发完毕】:自动打包
一、Fastlane环境搭建:https://www.jianshu.com/p/703534031e42
二、Fastlane自动打包并发布:https://www.jianshu.com/p/703534031e42
1、cd到项目,初始化fastlane
fastlane init

2、编辑AppFile信息
app_identifier "ineyee.TestApp"
apple_id "2487407179@qq.com"
3、编辑fastlane自动打包和发布脚本,Fastfile文件(没什么特殊需要的话,下面只需要改一下project_name)
project_name = "CICDTestApp"
output_platform = "蒲公英"
default_platform(:ios)
platform :ios do
# 描述一下Fastlane正在做什么
desc "🚀🚀🚀🚀🚀🚀Fastlane自动打包并发布#{project_name}到#{output_platform}🚀🚀🚀🚀🚀🚀"
# 将来执行fastlane beta命令来开始自动打包并发布,beta可以修改
lane :beta do
# add actions here: https://docs.fastlane.tools/actions
gym(
# 每次打包之前clean一下以前的编译信息
clean: true,
# 工程的名字,不是App显示的名字
scheme: "#{project_name}",
# 打包模式:Release、Debug、Profile
configuration: "Release",
# 什么包,包含 app-store, validation, ad-hoc, package, enterprise, development, developer-id and mac-application
export_method: "ad-hoc",
# 输出ipa的名称
output_name: "#{project_name}.ipa",
# 输出ipa的路径
output_directory: "/Users/yiyi/Desktop/#{project_name}_IPA_#{Time.new.strftime("%Y-%m-%-d-%H-%M")}",
# 是否包含bitcode
include_bitcode: false,
# 是否包含symbols
include_symbols: true,
# 这个设置是为了设置Xcode自动配置证书和配置文件,当然也可以手动配置,可以参考文档
export_xcargs: "-allowProvisioningUpdates"
)
# mac上的通知弹窗,通知打包完毕
notification(app_icon: "./fastlane/icon.png", title: "manager", subtitle: "Fastlane自动打包成功,已导出ipa", message: "准备发布到#{output_platform}……")
# 配置要上传到的蒲公英账号
pgyer(api_key:"d36324232ca7de702af30d5d1e754787", update_description:"1、修复已知Bug;\n2、提升部分性能。")
end
end
4、加入蒲公英插件,Gemfile文件里会加入插件
fastlane add_plugin pgyer
5、执行以下命令开始fastlane自动打包并发布(就算你蒲公英控制台没创建过这个项目,这个也会帮你自动创建)
fastlane beta
三、Jenkins环境搭建:https://www.jianshu.com/p/531c959b8cf8
四、先保证能手动打包,然后再保证能用Fastlane打包,最后再Jenkins驱动Fastlane自动打包并发布(本质其实就是把我们单纯使用Fastlane时需要往命令行敲命令的操作,搞成了Jenkins的可视化操作加脚本):https://www.jianshu.com/p/c61eb3890704(自动构建,无参数配置、脚本精简)、https://www.jianshu.com/p/531c959b8cf8(有配置哪几项参数,但是脚本不太精简)、https://www.jianshu.com/p/407b91d702b2(参考了一下怎么把Jenkins的配置参数应用在shell脚本里,然后shell脚本又怎么决定Fastlane脚本执行不同的代码,Fastlane脚本如何拆分成不同的模式)
1、新建一个任务


2、General -> 参数化构建过程





3、Build Steps


shell脚本
#!/bin/bash
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
echo -e "=========安装更新pod==========="
pod update
echo -e "=======打包上传======="
## 这里的Configuration和ExportMethod是上面Jenkins配置的选项参数
## 这里的脚本给fastlane脚本传参数就是beta后面连续的跟key:value即可
fastlane beta configuration:${Configuration} export_method:${ExportMethod}
当然上面的shell脚本是针对于iOS项目的,如果你想打Flutter项目里的iOS包,那我们得在前面进入到iOS目录下,也就是加一行cd到ios目录下(注意路径要准确,否则会报错,比如不能直接cd ios)
#!/bin/bash
cd /Users/yiyi/Desktop/AuditoryWorks/FlutterProject/nearhub-flutter/ios
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
echo -e "=========安装更新pod==========="
pod update
echo -e "=======打包上传======="
## 这里的Configuration和ExportMethod是上面Jenkins配置的选项参数
## 这里的脚本给fastlane脚本传参数就是beta后面连续的跟key:value即可
fastlane beta configuration:${Configuration} export_method:${ExportMethod}
为了根据配置打出不同模式的包,我们需要修改下Fastlane的脚本(没什么特殊需要的话,下面只需要改一下project_name)
project_name = "Runner"
configuration = ""
export_method = “”
default_platform(:ios)
platform :ios do
# 描述一下Fastlane正在做什么
desc "🚀🚀🚀🚀🚀🚀Fastlane自动打包并发布🚀🚀🚀🚀🚀🚀"
# 将来执行fastlane beta命令来开始自动打包并发布,beta可以修改
# do后面固定跟一个|options|代表外界命令传进来的参数
lane :beta do |options|
# add actions here: https://docs.fastlane.tools/actions
configuration = options[:configuration]
export_method = options[:export_method]
gym(
# 每次打包之前clean一下以前的编译信息
clean: true,
# 工程的名字,不是App显示的名字
scheme: "#{project_name}",
# 打包模式:Release、Debug、Profile
configuration: "#{configuration}",
# 什么包,包含 app-store, validation, ad-hoc, package, enterprise, development, developer-id and mac-application
export_method: "#{export_method}",
# 输出ipa的名称
output_name: "#{project_name}.ipa",
# 输出ipa的路径
output_directory: "/Users/yiyi/Desktop/#{project_name}_IPA_#{Time.new.strftime("%Y-%m-%-d-%H-%M")}",
# 是否包含bitcode
include_bitcode: false,
# 是否包含symbols
include_symbols: true,
# 这个设置是为了设置Xcode自动配置证书和配置文件,当然也可以手动配置,可以参考文档
export_xcargs: "-allowProvisioningUpdates"
)
# ad-hoc包直接上传到蒲公英;app-store包暂时自己上传导出的ipa
if (options[:export_method] == "ad-hoc")
# mac上的通知弹窗,通知打包完毕
notification(app_icon: "./fastlane/icon.png", title: "manager", subtitle: "Fastlane自动打包成功", message: "准备发布到蒲公英……")
# 配置要上传到的蒲公英账号
pgyer(api_key:"d36324232ca7de702af30d5d1e754787", update_description:"1、修复已知Bug;\n2、提升部分性能。")
else
# mac上的通知弹窗,通知打包完毕
notification(app_icon: "./fastlane/icon.png", title: "manager", subtitle: "Fastlane自动打包成功,已导出ipa", message: "")
end
end
end
4、ok,接下来就可以发起自动打包了
(1)选中你想要打包的这个项目

(2)然后配置一下你要打什么分支、什么模式的包,开始构建即可

(3)开始构建即可



5、然后去蒲公英扫码安装就好了

6、然后关于Jenkins服务,当你启动后不关掉或者不关电脑的话,它就是一直启动的,Jenkins的网页就一直能访问,如果你想关掉就关掉,用的时候再打开,后面这个-lts看你安装jenkins的时候是brew install jenkins-lts还是brew install jenkins,后者的话就不需要加这个-lts
启动 jenkins: brew services start jenkins-lts
停止 jenkins:brew services stop jenkins-lts
重启 Jenkins:brew services restart jenkins-lts
五、安卓端基本跟上面一样的操作甚至更少的操作:https://www.jianshu.com/p/6776d142aa9a,无非就是fastlane脚本文件里稍有区别而已
project_name = "Runner"
configuration = ""
default_platform(:android)
platform :android do
lane:beta do
puts “Debug版本开始打包"
gradle(task:'clean')
gradle(
task: 'assemble',
build_type: 'Debug',
)
puts "Debug版本打包成功”
puts "开始上传到蒲公英"
pgyer(api_key:"d36324232ca7de702af30d5d1e754787", update_description:"1、修复已知Bug;\n2、提升部分性能。")
puts "上传到蒲公英成功”
# 在上传完apk后,打开apk的存放文件夹,起到提示上传完成的作用
system "open /Users/yiyi/Desktop/apk/debug”
end
lane:beta do
puts “Debug版本开始打包"
gradle(task:'clean')
gradle(
task: 'assemble',
build_type: ‘Release',
)
puts "Debug版本打包成功”
puts "开始上传到蒲公英"
pgyer(api_key:"d36324232ca7de702af30d5d1e754787", update_description:"1、修复已知Bug;\n2、提升部分性能。")
puts "上传到蒲公英成功”
# 在上传完apk后,打开apk的存放文件夹,起到提示上传完成的作用
system "open /Users/yiyi/Desktop/apk/debug”
end
end
六、一些错误及解决办法: