自动化实现

  • ##### 什么是自动化?

通过简单的一条命令, 去自动执行一组固定操作

  • ##### 自动化使用场景:

    测试打包上传审核分发…

  • ##### Action机制

    Action是Fastlane自动化流程中的最小执行单元,体现在Fastfile脚本中的一个个命令比如:cocoapods,
    git_add等等,而这些命令背后都对应一个用Ruby编写的脚本。目前所有的Actionfastlane
    actions描述链接
    创建可用于 iTunes Connect 和 Apple Developer Portal 的 iOS app。cert
    自动创建和维护 iOS 代码签名证书。sigh 创建、更新、下载和修复
    provisioning profiles。snapshot 自动将 App
    屏幕截图本地化到每种设备上。frameit
    将屏幕截图适配到适当的设备屏幕大小。gym 创建和打包 iOS app。deliver
    上传屏幕截图、元数据和 App 到 App 商店。PEM 自动创建和更新 Push
    通知的 profile。

  • ##### 使用概念

lane
:航道Action机制1.Action是Fastlane自动化流程中的最小执行单元,体现在Fastfile脚本中的一个个命令2.比如:cocoapods,
git_add等等,而这些命令背后都对应一个用Ruby编写的脚本。3.目前所有的Action:fastlane
actions描述链接:
创建可用于 iTunes Connect 和 Apple Developer Portal 的 iOS app。cert
自动创建和维护 iOS 代码签名证书。sigh 创建、更新、下载和修复
provisioning profiles。snapshot 自动将 App
屏幕截图本地化到每种设备上。frameit
将屏幕截图适配到适当的设备屏幕大小。gym 创建和打包 iOS app。deliver
上传屏幕截图、元数据和 App 到 App 商店。PEM 自动创建和更新 Push 通知的
profile。

  • ##### 安装

    1.sudo gem install fastlane2.sudo gem install -n /usr/local/bin
    fastlane要求ruby版本最新brew updatebrew install ruby

  • ##### 实现

下图是自动化的实现步骤,那么4的pod
install-7步骤都是以后重复要做的,那么这几步可进行自动化,1步骤的到4的修改spec还是跟之前一样的人工操作。

图片 1

1.进入项目根目录2.fastlane init注意: 如果不需要实现上传等操作,
其实我们可以直接在工程目录下, 创建一个文件夹,
在文件夹内部创建”使用文件”fastlane:创建Fastfile文件

图片 2

Fastfile:

desc 'ManagerLib 使用这个航道, 可以快速的对自己的私有库, 进行升级维护'lane :ManagerLib do |options|tagName = options[:tag]targetName = options[:target]# 具体这个巷道上面执行哪些行为# 1. pod installcocoapods(clean: true,podfile: "./Example/Podfile")# 2. git add .git_add(path: ".")# git commit -m 'xxx'git_commit(path: ".", message: "版本升级维护")# git push origin masterpush_to_git_remote# 验证tag是否存在,如果存在, 应该删除本地标签和远程标签#if 判断标签是否存在# 执行删除本地/远程标签#endif git_tag_exists(tag: tagName) UI.message("发现tag:#{tagName} 已经存在, 即将执行, 删除动作 🚀") remove_tag(tag:tagName)end# 3. git tag 标签名称add_git_tag(tag: tagName)# git push --tagspush_git_tags# 4. pod spec lintpod_lib_lint(allow_warnings: true)# pod repo push XXXX xxx.podspecpod_push(path: "#{targetName}.podspec", repo: "XMGFMSpecs", allow_warnings: true)end

其中remove_tag属于自定义action,因为有些action,
并没有人提供,那么我们可以自己自定来满足我们的需求1.操作指令fastlane
new_action,响应后输入你的action的名字就可以生成新的action2.remove_tag.rb内容如下:

module Fastlane module Actions module SharedValues REMOVE_TAG_CUSTOM_VALUE = :REMOVE_TAG_CUSTOM_VALUE end class RemoveTagAction < Action def self.run tagName = params[:tag] isRemoveLocalTag = params[:rL] isRemoveRemoteTag = params[:rR] # 1. 先定义一个数组, 用来存储所有需要执行的命令 cmds = [] # 2. 往数组里面, 添加相应的命令 # 删除本地标签 # git tag -d 标签名称 if isRemoveLocalTag cmds << "git tag -d #{tagName} " end # 删除远程标签 # git push origin :标签名称 if isRemoveRemoteTag cmds << " git push origin :#{tagName}" end #3. 执行数组里面的所有命令 result = Actions.sh(cmds.join; return result end def self.description "恩, 牛逼" end def self.details # Optional: # this is your chance to provide a more detailed description of this action "我们可以使用这个action ,来删除本地或者远程标签" end def self.available_options # Define all options your action supports. # Below a few examples [ FastlaneCore::ConfigItem.new(key: :tag, description: "需要被删除的标签名称", optional: false, is_string: true), FastlaneCore::ConfigItem.new(key: :rL, description: "是否需要删除本地标签", optional: true, is_string: false, default_value: true), FastlaneCore::ConfigItem.new(key: :rR, description: "是否需要删除远程标签", optional: true, is_string: false, default_value: true) ] end def self.output end def self.return_value nil end def self.authors # So no one will ever forget your contribution to fastlane :) You are awesome btw! ["你的名字"] end def self.is_supported? # you can do things like # # true # # platform == :ios # # [:ios, :mac].include? # platform == :ios end end endend

3.执行:fastlane lanes

图片 3

控制台打印上图说明没有语法问题,但是不代表没有逻辑问题。4.升级提交版本库:fastlane
ManagerLib tag:版本号 target:工程名字

注意事项:1.在制作私有库的过程中, 如果上一个标签已经存在,
再次创建则会报错解决方案, 先判断标签是否存在, 如果存在,
则删除标签2.如果标签存在,
则删除本地/远程标签标签存在:git_tag_exists删除本地&远程标签:remove_tag(tagName:
target_version, dR:true, dL:true)

相关文章