fastlane 2.111.0.beta.20181211193527 → 2.111.0.beta.20181213171204
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fastlane/lib/fastlane/actions/crashlytics.rb +12 -3
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +1 -1
- data/fastlane/lib/fastlane/actions/frame_screenshots.rb +1 -1
- data/fastlane/lib/fastlane/actions/zip.rb +14 -1
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +2 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/frameit/lib/frameit/module.rb +2 -0
- data/frameit/lib/frameit/options.rb +34 -31
- data/match/lib/match/nuke.rb +2 -1
- data/match/lib/match/storage/git_storage.rb +4 -0
- data/match/lib/match/storage/google_cloud_storage.rb +9 -10
- data/match/lib/match/storage/interface.rb +8 -0
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af0cf74e48e328942aea2bfe399ec7d244090855
|
4
|
+
data.tar.gz: 3af3cbdf9257b760a5a180ae87e1f51eda31a1db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 144dd25bed10d9ebcd1bb3d68061d31d5597252b9414ede7eb7e631f9388e9dda685f95015c5514af75d1f17696d019d9b6c57444e797fa08b9c9edd2ad5afd9
|
7
|
+
data.tar.gz: d952795cf6e91c90204a33adaa121f23873c7e7fcdab75256f9e99b8ae7b0a38b35b268144b110259d2bf55e458812f06aa4faa11477e4862b1410b280799330
|
@@ -162,15 +162,24 @@ module Fastlane
|
|
162
162
|
def self.details
|
163
163
|
[
|
164
164
|
"Additionally, you can specify `notes`, `emails`, `groups` and `notifications`.",
|
165
|
-
"Distributing to Groups: When using the `groups` parameter, it's important to use the group **alias** names for each group you'd like to distribute to. A group's alias can be found in the web UI. If you're viewing the Beta page, you can open the groups dialog by clicking the 'Manage Groups' button."
|
165
|
+
"Distributing to Groups: When using the `groups` parameter, it's important to use the group **alias** names for each group you'd like to distribute to. A group's alias can be found in the web UI. If you're viewing the Beta page, you can open the groups dialog by clicking the 'Manage Groups' button.",
|
166
|
+
"This action uses the `submit` binary provided by the Crashlytics framework. If the binary is not found in its usual path, you'll need to specify the path manually by using the `crashlytics_path` option."
|
166
167
|
].join("\n")
|
167
168
|
end
|
168
169
|
|
169
170
|
def self.example_code
|
170
171
|
[
|
171
172
|
'crashlytics',
|
172
|
-
'
|
173
|
-
|
173
|
+
'# If you installed Crashlytics via CocoaPods
|
174
|
+
crashlytics(
|
175
|
+
crashlytics_path: "./Pods/Crashlytics/submit", # path to your Crashlytics submit binary.
|
176
|
+
api_token: "...",
|
177
|
+
build_secret: "...",
|
178
|
+
ipa_path: "./app.ipa"
|
179
|
+
)',
|
180
|
+
'# If you installed Crashlytics via Carthage for iOS platform
|
181
|
+
crashlytics(
|
182
|
+
crashlytics_path: "./Carthage/Build/iOS/Crashlytics.framework/submit", # path to your Crashlytics submit binary.
|
174
183
|
api_token: "...",
|
175
184
|
build_secret: "...",
|
176
185
|
ipa_path: "./app.ipa"
|
@@ -239,7 +239,7 @@ A benefit of using _match_ is that it enables you to give the developers of your
|
|
239
239
|
|
240
240
|
1. Run _match_ to store the certificates in a Git repo or Google Cloud Storage
|
241
241
|
2. Grant access to the Git repo / Google Cloud Storage Bucket to your developers and give them the passphrase (for git storage)
|
242
|
-
3. The developers can now run _match_ which will install the latest code signing profiles so they can build and sign the application without having to have access to the Developer Portal
|
242
|
+
3. The developers can now run _match_ which will install the latest code signing profiles so they can build and sign the application without having to have access to the Apple Developer Portal
|
243
243
|
4. Every time you run _match_ to update the profiles (e.g. add a new device), all your developers will automatically get the latest profiles when running _match_
|
244
244
|
|
245
245
|
If you decide to run _match_ without access to the Developer Portal, make sure to use the `--readonly` option so that the commands don't ask you for the password to the Developer Portal.
|
@@ -32,7 +32,7 @@ module Fastlane
|
|
32
32
|
FastlaneCore::ConfigItem.new(key: :path,
|
33
33
|
env_name: "FRAMEIT_SCREENSHOTS_PATH",
|
34
34
|
description: "The path to the directory containing the screenshots",
|
35
|
-
|
35
|
+
default_value: Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH] || FastlaneCore::FastlaneFolder.path,
|
36
36
|
default_value_dynamic: true)
|
37
37
|
]
|
38
38
|
end
|
@@ -18,6 +18,7 @@ module Fastlane
|
|
18
18
|
|
19
19
|
Dir.chdir(File.expand_path("..", params[:path])) do # required to properly zip
|
20
20
|
zip_options = params[:verbose] ? "r" : "rq"
|
21
|
+
zip_options += "y" if params[:symlinks]
|
21
22
|
|
22
23
|
if params[:password]
|
23
24
|
password_option = "-P '#{params[:password]}'"
|
@@ -60,7 +61,13 @@ module Fastlane
|
|
60
61
|
FastlaneCore::ConfigItem.new(key: :password,
|
61
62
|
env_name: "FL_ZIP_PASSWORD",
|
62
63
|
description: "Encrypt the contents of the zip archive using a password",
|
63
|
-
optional: true)
|
64
|
+
optional: true),
|
65
|
+
FastlaneCore::ConfigItem.new(key: :symlinks,
|
66
|
+
env_name: "FL_ZIP_SYMLINKS",
|
67
|
+
description: "Store symbolic links as such in the zip archive",
|
68
|
+
optional: true,
|
69
|
+
type: Boolean,
|
70
|
+
default_value: false)
|
64
71
|
]
|
65
72
|
end
|
66
73
|
|
@@ -75,6 +82,12 @@ module Fastlane
|
|
75
82
|
path: "MyApp.app",
|
76
83
|
output_path: "Latest.app.zip",
|
77
84
|
verbose: false
|
85
|
+
)',
|
86
|
+
'zip(
|
87
|
+
path: "MyApp.app",
|
88
|
+
output_path: "Latest.app.zip",
|
89
|
+
verbose: false,
|
90
|
+
symlinks: true
|
78
91
|
)'
|
79
92
|
]
|
80
93
|
end
|
@@ -24,7 +24,8 @@ module Fastlane
|
|
24
24
|
path ||= Dir["./Pods/iOS/Crashlytics/Crashlytics.framework/submit"].last
|
25
25
|
path ||= Dir["./**/Crashlytics.framework/submit"].last
|
26
26
|
|
27
|
-
|
27
|
+
downcase_path = path ? path.downcase : nil
|
28
|
+
if downcase_path && downcase_path.include?("pods") && downcase_path.include?("crashlytics.framework")
|
28
29
|
UI.deprecated("Crashlytics has moved the submit binary outside of Crashlytics.framework directory as of 3.4.1. Please change :crashlytics_path to `<PODS_ROOT>/Crashlytics/submit`")
|
29
30
|
end
|
30
31
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Fastlane
|
2
|
-
VERSION = '2.111.0.beta.
|
2
|
+
VERSION = '2.111.0.beta.20181213171204'.freeze
|
3
3
|
DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
|
4
4
|
MINIMUM_XCODE_RELEASE = "7.0".freeze
|
5
5
|
RUBOCOP_REQUIREMENT = '0.49.1'.freeze
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'fastlane_core/helper'
|
2
|
+
require 'fastlane/boolean'
|
2
3
|
|
3
4
|
require_relative 'config_parser'
|
4
5
|
|
@@ -7,6 +8,7 @@ module Frameit
|
|
7
8
|
attr_accessor :config
|
8
9
|
end
|
9
10
|
|
11
|
+
Boolean = Fastlane::Boolean
|
10
12
|
Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore
|
11
13
|
UI = FastlaneCore::UI
|
12
14
|
ROOT = Pathname.new(File.expand_path('../../..', __FILE__))
|
@@ -8,22 +8,25 @@ module Frameit
|
|
8
8
|
@options ||= [
|
9
9
|
|
10
10
|
FastlaneCore::ConfigItem.new(key: :white,
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
env_name: "FRAMEIT_WHITE_FRAME",
|
12
|
+
description: "Use white device frames",
|
13
|
+
type: Boolean,
|
14
|
+
optional: true),
|
15
15
|
FastlaneCore::ConfigItem.new(key: :silver,
|
16
|
+
env_name: "FRAMEIT_SILVER_FRAME",
|
16
17
|
description: "Use white device frames. Alias for :white",
|
17
|
-
|
18
|
-
|
18
|
+
type: Boolean,
|
19
|
+
optional: true),
|
19
20
|
FastlaneCore::ConfigItem.new(key: :rose_gold,
|
21
|
+
env_name: "FRAMEIT_ROSE_GOLD_FRAME",
|
20
22
|
description: "Use rose gold device frames. Alias for :rose_gold",
|
21
|
-
|
22
|
-
|
23
|
+
type: Boolean,
|
24
|
+
optional: true),
|
23
25
|
FastlaneCore::ConfigItem.new(key: :gold,
|
26
|
+
env_name: "FRAMEIT_GOLD_FRAME",
|
24
27
|
description: "Use gold device frames. Alias for :gold",
|
25
|
-
|
26
|
-
|
28
|
+
type: Boolean,
|
29
|
+
optional: true),
|
27
30
|
FastlaneCore::ConfigItem.new(key: :force_device_type,
|
28
31
|
env_name: "FRAMEIT_FORCE_DEVICE_TYPE",
|
29
32
|
description: "Forces a given device type, useful for Mac screenshots, as their sizes vary",
|
@@ -35,29 +38,29 @@ module Frameit
|
|
35
38
|
end
|
36
39
|
end),
|
37
40
|
FastlaneCore::ConfigItem.new(key: :use_legacy_iphone5s,
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
41
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_5_S",
|
42
|
+
description: "Use iPhone 5s instead of iPhone SE frames",
|
43
|
+
default_value: false,
|
44
|
+
type: Boolean),
|
42
45
|
FastlaneCore::ConfigItem.new(key: :use_legacy_iphone6s,
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
46
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_6_S",
|
47
|
+
description: "Use iPhone 6s frames instead of iPhone 7 frames",
|
48
|
+
default_value: false,
|
49
|
+
type: Boolean),
|
47
50
|
FastlaneCore::ConfigItem.new(key: :force_orientation_block,
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
51
|
+
type: :string_callback,
|
52
|
+
description: "[Advanced] A block to customize your screenshots' device orientation",
|
53
|
+
display_in_shell: false,
|
54
|
+
optional: true,
|
55
|
+
default_value: proc do |filename|
|
56
|
+
f = filename.downcase
|
57
|
+
if f.end_with?("force_landscapeleft")
|
58
|
+
:landscape_left
|
59
|
+
elsif f.end_with?("force_landscaperight")
|
60
|
+
:landscape_right
|
61
|
+
end
|
62
|
+
end,
|
63
|
+
default_value_dynamic: true)
|
61
64
|
]
|
62
65
|
end
|
63
66
|
end
|
data/match/lib/match/nuke.rb
CHANGED
@@ -168,8 +168,9 @@ module Match
|
|
168
168
|
|
169
169
|
[file_type, components[2]]
|
170
170
|
end
|
171
|
+
|
171
172
|
puts(Terminal::Table.new({
|
172
|
-
title: "Files that are going to be deleted".green,
|
173
|
+
title: "Files that are going to be deleted".green + "\n" + self.storage.human_readable_description,
|
173
174
|
headings: ["Type", "File Name"],
|
174
175
|
rows: rows
|
175
176
|
}))
|
@@ -96,6 +96,10 @@ module Match
|
|
96
96
|
checkout_branch unless self.branch == "master"
|
97
97
|
end
|
98
98
|
|
99
|
+
def human_readable_description
|
100
|
+
"Git Repo [#{self.git_url}]"
|
101
|
+
end
|
102
|
+
|
99
103
|
def delete_files(files_to_delete: [], custom_message: nil)
|
100
104
|
# No specific list given, e.g. this happens on `fastlane match nuke`
|
101
105
|
# We just want to run `git add -A` to commit everything
|
@@ -98,7 +98,10 @@ module Match
|
|
98
98
|
UI.message("Deleting '#{target_path}' from Google Cloud Storage bucket '#{self.bucket_name}'...")
|
99
99
|
file.delete
|
100
100
|
end
|
101
|
-
|
101
|
+
end
|
102
|
+
|
103
|
+
def human_readable_description
|
104
|
+
"Google Cloud Bucket [#{self.project_id}/#{self.bucket_name}]"
|
102
105
|
end
|
103
106
|
|
104
107
|
def upload_files(files_to_upload: [], custom_message: nil)
|
@@ -118,7 +121,6 @@ module Match
|
|
118
121
|
UI.verbose("Uploading '#{target_path}' to Google Cloud Storage...")
|
119
122
|
bucket.create_file(current_file, target_path)
|
120
123
|
end
|
121
|
-
finished_pushing_message
|
122
124
|
end
|
123
125
|
|
124
126
|
def skip_docs
|
@@ -127,10 +129,6 @@ module Match
|
|
127
129
|
|
128
130
|
private
|
129
131
|
|
130
|
-
def finished_pushing_message
|
131
|
-
UI.success("Finished applying changes up to Google Cloud Storage on bucket '#{self.bucket_name}'")
|
132
|
-
end
|
133
|
-
|
134
132
|
def bucket
|
135
133
|
@_bucket ||= self.gc_storage.bucket(self.bucket_name)
|
136
134
|
|
@@ -152,9 +150,10 @@ module Match
|
|
152
150
|
return google_cloud_keys_file
|
153
151
|
end
|
154
152
|
|
155
|
-
if File.exist?(DEFAULT_KEYS_FILE_NAME)
|
156
|
-
|
157
|
-
|
153
|
+
return DEFAULT_KEYS_FILE_NAME if File.exist?(DEFAULT_KEYS_FILE_NAME)
|
154
|
+
|
155
|
+
fastlane_folder_gc_keys_path = File.join(FastlaneCore::FastlaneFolder.path, DEFAULT_KEYS_FILE_NAME)
|
156
|
+
return fastlane_folder_gc_keys_path if File.exist?(fastlane_folder_gc_keys_path)
|
158
157
|
|
159
158
|
# User doesn't seem to have provided a keys file
|
160
159
|
UI.message("Looks like you don't have a Google Cloud #{DEFAULT_KEYS_FILE_NAME.cyan} file yet")
|
@@ -212,7 +211,7 @@ module Match
|
|
212
211
|
# This can only happen after we went through auth of Google Cloud
|
213
212
|
available_bucket_identifiers = self.gc_storage.buckets.collect(&:id)
|
214
213
|
if available_bucket_identifiers.count > 0
|
215
|
-
@bucket_name = UI.select("What Google Cloud Storage bucket do you want to use?", available_bucket_identifiers)
|
214
|
+
@bucket_name = UI.select("What Google Cloud Storage bucket do you want to use? (you can define it using the `google_cloud_bucket_name` key)", available_bucket_identifiers)
|
216
215
|
else
|
217
216
|
UI.error("Looks like your Google Cloud account for the project ID '#{self.project_id}' doesn't")
|
218
217
|
UI.error("have any available storage buckets yet. Please visit the following URL")
|
@@ -31,6 +31,12 @@ module Match
|
|
31
31
|
not_implemented(__method__)
|
32
32
|
end
|
33
33
|
|
34
|
+
# Returns a short string describing + identifing the current
|
35
|
+
# storage backend. This will be printed when nuking a storage
|
36
|
+
def human_readable_description
|
37
|
+
not_implemented(__method__)
|
38
|
+
end
|
39
|
+
|
34
40
|
# Call this method after locally modifying the files
|
35
41
|
# This will commit the changes and push it back to the
|
36
42
|
# given remote server
|
@@ -62,8 +68,10 @@ module Match
|
|
62
68
|
end
|
63
69
|
|
64
70
|
self.upload_files(files_to_upload: files_to_commit, custom_message: custom_message)
|
71
|
+
UI.message("Finished uploading files to #{self.human_readable_description}")
|
65
72
|
elsif files_to_delete.count > 0
|
66
73
|
self.delete_files(files_to_delete: files_to_delete, custom_message: custom_message)
|
74
|
+
UI.message("Finished deleting files from #{self.human_readable_description}")
|
67
75
|
else
|
68
76
|
UI.user_error!("Neither `files_to_commit` nor `files_to_delete` were provided to the `save_changes!` method call")
|
69
77
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.111.0.beta.
|
4
|
+
version: 2.111.0.beta.20181213171204
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
@@ -27,7 +27,7 @@ authors:
|
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2018-12-
|
30
|
+
date: 2018-12-13 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: slack-notifier
|
@@ -1678,24 +1678,24 @@ metadata:
|
|
1678
1678
|
post_install_message:
|
1679
1679
|
rdoc_options: []
|
1680
1680
|
require_paths:
|
1681
|
-
- credentials_manager/lib
|
1682
1681
|
- produce/lib
|
1683
|
-
- scan/lib
|
1684
|
-
- snapshot/lib
|
1685
|
-
- match/lib
|
1686
|
-
- sigh/lib
|
1687
|
-
- fastlane/lib
|
1688
1682
|
- precheck/lib
|
1683
|
+
- gym/lib
|
1689
1684
|
- supply/lib
|
1690
1685
|
- fastlane_core/lib
|
1691
|
-
-
|
1692
|
-
-
|
1693
|
-
-
|
1694
|
-
-
|
1686
|
+
- credentials_manager/lib
|
1687
|
+
- snapshot/lib
|
1688
|
+
- pilot/lib
|
1689
|
+
- fastlane/lib
|
1695
1690
|
- frameit/lib
|
1691
|
+
- deliver/lib
|
1696
1692
|
- spaceship/lib
|
1693
|
+
- screengrab/lib
|
1697
1694
|
- pem/lib
|
1698
|
-
-
|
1695
|
+
- cert/lib
|
1696
|
+
- match/lib
|
1697
|
+
- sigh/lib
|
1698
|
+
- scan/lib
|
1699
1699
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1700
1700
|
requirements:
|
1701
1701
|
- - ">="
|