fastlane
2017-09-28 本文已影响0人
何小八
1、安装
sudo gem install fastlane -NV
2、初始化项目
fastlane init
3、例子
当我们的私有库需要更新的时候
我们需要的操作为:
1、pod install //本地安装
2、git add . //git本地添加
3、git commit -m 'update' //git本地提交
4、git push origin master //git远程提交
5、git tag 0.1.0 //本地打标签
6、git push --tags //远程提交标签
7、pod repo push XBPrivateSpecs xxxx.podspec //更新到私有库
每次更新我们都需要这7个步骤,或者更多,那这时候我们就可以创建一个fastlane自动化来帮我们自动提交
我们需要在Fastfile文件中写如下代码:
lane :pushLib do |options|
tagName = options[:tag]
targetName = options[:target]
# 1. pod install
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)
# 2. git add .
git_add(path: ".")
# git commit -m 'update'
git_commit(path: ".", message: "update")
# git push origin master
push_to_git_remote
# 3. git tag 0.1.0
if git_tag_exists(tag: tagName)
UI.message("Found it tagName, removeing this tag.")
remove_tag(tag: tagName, rl: true, rr: true)
end
add_git_tag(
tag: tagName
)
# git push --tags
push_git_tags
# 4. pod repo push XBPrivateSpecs xxxx.podspec
pod_push(path: "#{targetName}.podspec", repo: "XBPrivateSpecs", allow_warnings: true)
end
5、使用
fastlane pushLib tag:0.1.1 target:EncodeParm
pushLib: 为Fastfile文件中我们自己定义的名称
tag: 需要执行的tag
target: podspec文件的前缀
6、自定义aciton
上面的文件中,本来该我们写的命令,我们用了action
来代替,之后就是fastlane帮我们自动执行
fastlane actions //可以查看所有的action
fastlane action [action_name] //查看具体aciton的执行方法
有些我们需要的action没有的话,我们可以自定义
fastlane new_action
例子:删除本地和远程tag的aciton
module Fastlane
module Actions
module SharedValues
REMOVE_TAG_CUSTOM_VALUE = :REMOVE_TAG_CUSTOM_VALUE
end
class RemoveTagAction < Action
def self.run(params)
tagName = params[:tag]
isRemoveLocalTag = params[:rl]
isRemoveRemoteTag = params[:rr]
# 1. 先定义一个数组,用来存储所有需要执行的命令
cmds = []
# 2、往数组中添加命令
if isRemoveLocalTag
cmds << "git tag -d #{tagName} "
end
if isRemoveRemoteTag
cmds << " git push origin :#{tagName}"
end
# 3、执行命令
Actions.sh(cmds.join('&'));
end
#####################################################
# @!group Documentation
#####################################################
def self.description
"remove tag"
end
def self.details
# Optional:
# this is your chance to provide a more detailed description of this action
"You can use this action to do remove tag"
end
def self.available_options
# Define all options your action supports.
# Below a few examples
[
FastlaneCore::ConfigItem.new(key: :tag,
env_name: "FL_GIT_TAG_NAME",
description: "需要删除的tag名称",
is_string: true,
optional: false),
FastlaneCore::ConfigItem.new(key: :rl,
env_name: "FL_GIT_IS_REMOVE_LOCAL_TAG",
description: "是否需要删除本地tag",
optional: true,
is_string: false,
default_value: true),
FastlaneCore::ConfigItem.new(key: :rr,
env_name: "FL_GIT_IS_REMOVE_REMOTE_TAG",
description: "是否需要删除远程仓库tag",
optional: true,
is_string: false,
default_value: true)
]
end
def self.output
# Define the shared values you are going to provide
# Example
[
['REMOVE_TAG_CUSTOM_VALUE', 'A description of what this value contains']
]
end
def self.return_value
nil
end
def self.authors
# So no one will ever forget your contribution to fastlane :) You are awesome btw!
["hexiaoba"]
end
def self.is_supported?(platform)
# you can do things like
#
# true
#
# platform == :ios
#
# [:ios, :mac].include?(platform)
#
platform == :ios
end
end
end
end
使用
在上面的Fastfile文件中使用过
remove_tag(tag: tagName)
或者
remove_tag(tag: tagName, rl: true, rr: true)