fastlane 2.111.0.beta.20181211193527 → 2.111.0.beta.20181213171204
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/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
|
- - ">="
|