fastlane 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +21 -0
- data/README.md +418 -0
- data/bin/fastlane +63 -0
- data/lib/assets/AppfileTemplate +2 -0
- data/lib/assets/FastfileTemplate +56 -0
- data/lib/assets/custom_action_template.rb +17 -0
- data/lib/fastlane.rb +28 -0
- data/lib/fastlane/actions/README +3 -0
- data/lib/fastlane/actions/actions_helper.rb +113 -0
- data/lib/fastlane/actions/deliver.rb +28 -0
- data/lib/fastlane/actions/frameit.rb +23 -0
- data/lib/fastlane/actions/hockey.rb +47 -0
- data/lib/fastlane/actions/increment_build_number.rb +40 -0
- data/lib/fastlane/actions/install_cocapods.rb +9 -0
- data/lib/fastlane/actions/say.rb +10 -0
- data/lib/fastlane/actions/sigh.rb +31 -0
- data/lib/fastlane/actions/slack.rb +56 -0
- data/lib/fastlane/actions/snapshot.rb +30 -0
- data/lib/fastlane/actions/testmunk.rb +42 -0
- data/lib/fastlane/actions/xctool.rb +10 -0
- data/lib/fastlane/dependency_checker.rb +18 -0
- data/lib/fastlane/fast_file.rb +89 -0
- data/lib/fastlane/fastlane_folder.rb +24 -0
- data/lib/fastlane/helper.rb +66 -0
- data/lib/fastlane/junit_generator.rb +32 -0
- data/lib/fastlane/lane_manager.rb +39 -0
- data/lib/fastlane/new_action.rb +39 -0
- data/lib/fastlane/runner.rb +58 -0
- data/lib/fastlane/setup.rb +157 -0
- data/lib/fastlane/update_checker.rb +44 -0
- data/lib/fastlane/version.rb +3 -0
- metadata +121 -33
@@ -0,0 +1,39 @@
|
|
1
|
+
module Fastlane
|
2
|
+
# Guides the new user through creating a new action
|
3
|
+
module NewAction
|
4
|
+
def self.run
|
5
|
+
name = self.fetch_name
|
6
|
+
self.generate_action(name)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.fetch_name
|
10
|
+
puts "Must be lower case, and use a'_' between words. Do not use a '.'".green
|
11
|
+
puts "examples: 'testflight', 'upload_to_s3'".green
|
12
|
+
name = ask("Name of your action: ")
|
13
|
+
while not name_valid?name
|
14
|
+
puts "Name invalid!"
|
15
|
+
name = ask("Name of your action: ")
|
16
|
+
end
|
17
|
+
name
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.generate_action(name)
|
21
|
+
template = File.read("#{Helper.gem_path}/lib/assets/custom_action_template.rb")
|
22
|
+
template.gsub!('[[NAME]]', name)
|
23
|
+
template.gsub!('[[NAME_UP]]', name.upcase)
|
24
|
+
template.gsub!('[[NAME_CLASS]]', name.classify + "Action")
|
25
|
+
|
26
|
+
actions_path = File.join(FastlaneFolder.path, "actions")
|
27
|
+
FileUtils.mkdir_p(actions_path) unless File.directory?actions_path
|
28
|
+
|
29
|
+
path = File.join(actions_path, "#{name}.rb")
|
30
|
+
File.write(path, template)
|
31
|
+
Helper.log.info "Created new action file '#{path}'. Edit it to implement your custom action.".green
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def self.name_valid?(name)
|
36
|
+
name == name.downcase and name.length > 0 and not name.include?"."
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Fastlane
|
2
|
+
class Runner
|
3
|
+
|
4
|
+
def execute(key)
|
5
|
+
key = key.to_sym
|
6
|
+
Helper.log.info "Driving the lane '#{key}'".green
|
7
|
+
Actions.lane_context[Actions::SharedValues::LANE_NAME] = key
|
8
|
+
|
9
|
+
return_val = nil
|
10
|
+
|
11
|
+
Dir.chdir(Fastlane::FastlaneFolder.path || Dir.pwd) do # the file is located in the fastlane folder
|
12
|
+
@before_all.call if @before_all
|
13
|
+
|
14
|
+
return_val = nil
|
15
|
+
|
16
|
+
if blocks[key]
|
17
|
+
return_val = blocks[key].call
|
18
|
+
else
|
19
|
+
raise "Could not find lane for type '#{key}'. Available lanes: #{available_lanes.join(', ')}".red
|
20
|
+
end
|
21
|
+
|
22
|
+
@after_all.call(key) if @after_all # this is only called if no exception was raised before
|
23
|
+
end
|
24
|
+
|
25
|
+
return return_val
|
26
|
+
rescue => ex
|
27
|
+
@error.call(key, ex) if @error # notify the block
|
28
|
+
raise ex
|
29
|
+
end
|
30
|
+
|
31
|
+
def available_lanes
|
32
|
+
blocks.keys
|
33
|
+
end
|
34
|
+
|
35
|
+
# Called internally
|
36
|
+
def set_before_all(block)
|
37
|
+
@before_all = block
|
38
|
+
end
|
39
|
+
|
40
|
+
def set_after_all(block)
|
41
|
+
@after_all = block
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_error(block)
|
45
|
+
@error = block
|
46
|
+
end
|
47
|
+
|
48
|
+
def set_block(key, block)
|
49
|
+
raise "Lane '#{key}' was defined multiple times!".red if blocks[key]
|
50
|
+
blocks[key] = block
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
def blocks
|
55
|
+
@blocks ||= {}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
module Fastlane
|
2
|
+
class Setup
|
3
|
+
def run
|
4
|
+
raise "Fastlane already set up at path #{folder}".yellow if FastlaneFolder.setup?
|
5
|
+
|
6
|
+
show_infos
|
7
|
+
response = agree("Do you want to get started? This will move your Deliverfile and Snapfile (if they exist) (y/n)".yellow, true)
|
8
|
+
|
9
|
+
if response
|
10
|
+
response = agree("Do you have everything commited in version control? If not please do so! (y/n)".yellow, true)
|
11
|
+
if response
|
12
|
+
begin
|
13
|
+
FastlaneFolder.create_folder!
|
14
|
+
copy_existing_files
|
15
|
+
generate_app_metadata
|
16
|
+
detect_installed_tools # after copying the existing files
|
17
|
+
ask_to_enable_other_tools
|
18
|
+
FileUtils.mkdir(File.join(folder, "actions"))
|
19
|
+
generate_fastfile
|
20
|
+
Helper.log.info "Successfully finished setting up fastlane".green
|
21
|
+
rescue Exception => ex # this will also be caused by Ctrl + C
|
22
|
+
# Something went wrong with the setup, clear the folder again
|
23
|
+
# and restore previous files
|
24
|
+
Helper.log.fatal "Error occured with the setup program! Reverting changes now!".red
|
25
|
+
restore_previous_state
|
26
|
+
raise ex
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def show_infos
|
33
|
+
Helper.log.info "This setup will help you get up and running in no time.".green
|
34
|
+
Helper.log.info "First, it will move the config files from `deliver` and `snapshot`".green
|
35
|
+
Helper.log.info "into the subfolder `fastlane`.\n".green
|
36
|
+
Helper.log.info "Fastlane will check what tools you're already using and set up".green
|
37
|
+
Helper.log.info "the tool automatically for you. Have fun! ".green
|
38
|
+
end
|
39
|
+
|
40
|
+
def files_to_copy
|
41
|
+
['Deliverfile', 'Snapfile', 'deliver', 'snapshot.js', 'SnapshotHelper.js', 'screenshots']
|
42
|
+
end
|
43
|
+
|
44
|
+
def copy_existing_files
|
45
|
+
files_to_copy.each do |current|
|
46
|
+
if File.exists?current
|
47
|
+
file_name = File.basename(current)
|
48
|
+
to_path = File.join(folder, file_name)
|
49
|
+
Helper.log.info "Moving '#{current}' to '#{to_path}'".green
|
50
|
+
FileUtils.mv(current, to_path)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def generate_app_metadata
|
56
|
+
Helper.log.info "------------------------------"
|
57
|
+
Helper.log.info "To not re-enter your username and app identifier every time you run one of the fastlane tools or fastlane, these will be stored from now on.".green
|
58
|
+
app_identifier = ask("App Identifier (com.krausefx.app): ".yellow)
|
59
|
+
apple_id = ask("Your Apple ID: ".yellow)
|
60
|
+
template = File.read("#{Helper.gem_path}/lib/assets/AppfileTemplate")
|
61
|
+
template.gsub!('[[APP_IDENTIFIER]]', app_identifier)
|
62
|
+
template.gsub!('[[APPLE_ID]]', apple_id)
|
63
|
+
path = File.join(folder, "Appfile")
|
64
|
+
File.write(path, template)
|
65
|
+
Helper.log.info "Created new file '#{path}'. Edit it to manage your preferred app metadata information.".green
|
66
|
+
end
|
67
|
+
|
68
|
+
def detect_installed_tools
|
69
|
+
@tools = {}
|
70
|
+
@tools[:deliver] = File.exists?(File.join(folder, 'Deliverfile'))
|
71
|
+
@tools[:snapshot] = File.exists?(File.join(folder, 'Snapfile'))
|
72
|
+
@tools[:xctool] = File.exists?('./.xctool-args')
|
73
|
+
@tools[:cocoapods] = File.exists?('./Podfile')
|
74
|
+
@tools[:sigh] = false
|
75
|
+
end
|
76
|
+
|
77
|
+
def ask_to_enable_other_tools
|
78
|
+
unless @tools[:deliver]
|
79
|
+
if agree("Do you want to setup 'deliver', which is used to upload app screenshots, app metadata and app updates to the App Store or Apple TestFlight? (y/n)".yellow, true)
|
80
|
+
Helper.log.info "Loading up 'deliver', this might take a few seconds"
|
81
|
+
require 'deliver'
|
82
|
+
Deliver::DeliverfileCreator.create(folder)
|
83
|
+
@tools[:deliver] = true
|
84
|
+
end
|
85
|
+
else
|
86
|
+
# deliver already enabled
|
87
|
+
Helper.log.info "-------------------------------------------------------------------------------------------"
|
88
|
+
Helper.log.info "Since all files are moved into the `fastlane` subfolder, you have to adapt your Deliverfile".yellow
|
89
|
+
Helper.log.info "Update your `ipa` and `beta_ipa` block of your Deliverfile to go a folder up before building".yellow
|
90
|
+
Helper.log.info "e.g. `system('cd ..; ipa build')`".yellow
|
91
|
+
Helper.log.info "Please read the above carefully and click Enter to confirm.".green
|
92
|
+
STDIN.gets
|
93
|
+
end
|
94
|
+
|
95
|
+
unless @tools[:snapshot]
|
96
|
+
if agree("Do you want to setup 'snapshot', which will help you to automatically take screenshots of your iOS app in all languages/devices? (y/n)".yellow, true)
|
97
|
+
Helper.log.info "Loading up 'snapshot', this might take a few seconds"
|
98
|
+
|
99
|
+
require 'snapshot' # we need both requires
|
100
|
+
require 'snapshot/snapfile_creator'
|
101
|
+
Snapshot::SnapfileCreator.create(folder)
|
102
|
+
@tools[:snapshot] = true
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
if @tools[:snapshot] and @tools[:deliver]
|
107
|
+
# Deliver is already installed
|
108
|
+
Helper.log.info "The 'screenshots' folder inside the 'deliver' folder will not be used.".yellow
|
109
|
+
Helper.log.info "Instead the 'screenshots' folder inside the 'fastlane' folder will be used.".yellow
|
110
|
+
Helper.log.info "Click Enter to confirm".green
|
111
|
+
STDIN.gets
|
112
|
+
end
|
113
|
+
|
114
|
+
if agree("Do you want to use 'sigh', which will maintain and download the provisioning profile for your app? (y/n)".yellow, true)
|
115
|
+
@tools[:sigh] = true
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def generate_fastfile
|
120
|
+
template = File.read("#{Helper.gem_path}/lib/assets/FastfileTemplate")
|
121
|
+
|
122
|
+
template.gsub!('deliver', '# deliver') unless @tools[:deliver]
|
123
|
+
template.gsub!('snapshot', '# snapshot') unless @tools[:snapshot]
|
124
|
+
template.gsub!('sigh', '# sigh') unless @tools[:sigh]
|
125
|
+
template.gsub!('xctool', '# xctool') unless @tools[:xctool]
|
126
|
+
template.gsub!('cocoapods', '# cocoapods') unless @tools[:cocoapods]
|
127
|
+
|
128
|
+
@tools.each do |key, value|
|
129
|
+
Helper.log.info "'#{key}' enabled.".magenta if value
|
130
|
+
Helper.log.info "'#{key}' not enabled.".yellow unless value
|
131
|
+
end
|
132
|
+
|
133
|
+
path = File.join(folder, "Fastfile")
|
134
|
+
File.write(path, template)
|
135
|
+
Helper.log.info "Created new file '#{path}'. Edit it to manage your own deployment lanes.".green
|
136
|
+
end
|
137
|
+
|
138
|
+
def folder
|
139
|
+
FastlaneFolder.path
|
140
|
+
end
|
141
|
+
|
142
|
+
def restore_previous_state
|
143
|
+
# Move all moved files back
|
144
|
+
files_to_copy.each do |current|
|
145
|
+
from_path = File.join(folder, current)
|
146
|
+
to_path = File.basename(current)
|
147
|
+
if File.exists?from_path
|
148
|
+
Helper.log.info "Moving '#{from_path}' to '#{to_path}'".yellow
|
149
|
+
FileUtils.mv(from_path, to_path)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
Helper.log.info "Deleting the 'fastlane' folder".yellow
|
154
|
+
FileUtils.rm_rf(folder)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
# Verifies, the user runs the latest version of this gem
|
5
|
+
class UpdateChecker
|
6
|
+
# This method will check if the latest version is installed and show a warning if that's not the case
|
7
|
+
def self.verify_latest_version
|
8
|
+
if self.update_available?
|
9
|
+
v = fetch_latest
|
10
|
+
puts '#######################################################################'.green
|
11
|
+
puts "# fastlane #{v} is available.".green
|
12
|
+
puts "# It is recommended to use the latest version.".green
|
13
|
+
puts "# Update using '(sudo) gem update fastlane'.".green
|
14
|
+
puts "# To see what's new, open https://github.com/KrauseFx/fastlane/releases.".green
|
15
|
+
puts '#######################################################################'.green
|
16
|
+
return true
|
17
|
+
end
|
18
|
+
false
|
19
|
+
end
|
20
|
+
|
21
|
+
# Is a new official release available (this does not include pre-releases)
|
22
|
+
def self.update_available?
|
23
|
+
begin
|
24
|
+
latest = fetch_latest
|
25
|
+
if latest and Gem::Version.new(latest) > Gem::Version.new(current_version)
|
26
|
+
return true
|
27
|
+
end
|
28
|
+
rescue => ex
|
29
|
+
Helper.log.error("Could not check if 'fastlane' is up to date.")
|
30
|
+
end
|
31
|
+
return false
|
32
|
+
end
|
33
|
+
|
34
|
+
# The currently used version of this gem
|
35
|
+
def self.current_version
|
36
|
+
Fastlane::VERSION
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def self.fetch_latest
|
41
|
+
JSON.parse(open("http://rubygems.org/api/v1/gems/fastlane.json").read)["version"]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: security
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.1.3
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 0.1.3
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: highline
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,7 +67,35 @@ dependencies:
|
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: 4.2.0
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
70
|
+
name: nokogiri
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.6.5
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.6.5
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: shenzhen
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.10.3
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.10.3
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: credentials_manager
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - '>='
|
@@ -95,33 +109,75 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: deliver
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - '>='
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
117
|
+
version: 0.5.0
|
104
118
|
type: :runtime
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - '>='
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
124
|
+
version: 0.5.0
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
126
|
+
name: snapshot
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
|
-
- -
|
129
|
+
- - '>='
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
131
|
+
version: 0.4.0
|
118
132
|
type: :runtime
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
|
-
- -
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.4.0
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: frameit
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.2.0
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.2.0
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: pem
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 0.3.0
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.3.0
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: sigh
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.2.0
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - '>='
|
123
179
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
180
|
+
version: 0.2.0
|
125
181
|
- !ruby/object:Gem::Dependency
|
126
182
|
name: bundler
|
127
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -220,14 +276,46 @@ dependencies:
|
|
220
276
|
- - '>='
|
221
277
|
- !ruby/object:Gem::Version
|
222
278
|
version: '0'
|
223
|
-
description:
|
279
|
+
description: Connect all iOS deployment tools into one streamlined workflow
|
224
280
|
email:
|
225
|
-
- krausefx
|
226
|
-
executables:
|
281
|
+
- fastlane@krausefx.com
|
282
|
+
executables:
|
283
|
+
- fastlane
|
227
284
|
extensions: []
|
228
285
|
extra_rdoc_files: []
|
229
|
-
files:
|
230
|
-
|
286
|
+
files:
|
287
|
+
- LICENSE
|
288
|
+
- README.md
|
289
|
+
- bin/fastlane
|
290
|
+
- lib/assets/AppfileTemplate
|
291
|
+
- lib/assets/FastfileTemplate
|
292
|
+
- lib/assets/custom_action_template.rb
|
293
|
+
- lib/fastlane.rb
|
294
|
+
- lib/fastlane/actions/README
|
295
|
+
- lib/fastlane/actions/actions_helper.rb
|
296
|
+
- lib/fastlane/actions/deliver.rb
|
297
|
+
- lib/fastlane/actions/frameit.rb
|
298
|
+
- lib/fastlane/actions/hockey.rb
|
299
|
+
- lib/fastlane/actions/increment_build_number.rb
|
300
|
+
- lib/fastlane/actions/install_cocapods.rb
|
301
|
+
- lib/fastlane/actions/say.rb
|
302
|
+
- lib/fastlane/actions/sigh.rb
|
303
|
+
- lib/fastlane/actions/slack.rb
|
304
|
+
- lib/fastlane/actions/snapshot.rb
|
305
|
+
- lib/fastlane/actions/testmunk.rb
|
306
|
+
- lib/fastlane/actions/xctool.rb
|
307
|
+
- lib/fastlane/dependency_checker.rb
|
308
|
+
- lib/fastlane/fast_file.rb
|
309
|
+
- lib/fastlane/fastlane_folder.rb
|
310
|
+
- lib/fastlane/helper.rb
|
311
|
+
- lib/fastlane/junit_generator.rb
|
312
|
+
- lib/fastlane/lane_manager.rb
|
313
|
+
- lib/fastlane/new_action.rb
|
314
|
+
- lib/fastlane/runner.rb
|
315
|
+
- lib/fastlane/setup.rb
|
316
|
+
- lib/fastlane/update_checker.rb
|
317
|
+
- lib/fastlane/version.rb
|
318
|
+
homepage: https://fastlane.tools
|
231
319
|
licenses:
|
232
320
|
- MIT
|
233
321
|
metadata: {}
|
@@ -250,6 +338,6 @@ rubyforge_project:
|
|
250
338
|
rubygems_version: 2.2.2
|
251
339
|
signing_key:
|
252
340
|
specification_version: 4
|
253
|
-
summary:
|
341
|
+
summary: Connect all iOS deployment tools into one streamlined workflow
|
254
342
|
test_files: []
|
255
343
|
has_rdoc:
|