fastlane 2.82.0.beta.20180222010003 → 2.82.0.beta.20180223010003
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fastlane/lib/assets/ActionDetails.md.erb +2 -3
- data/fastlane/lib/fastlane/actions/add_git_tag.rb +3 -1
- data/fastlane/lib/fastlane/actions/appetize.rb +1 -1
- data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +4 -3
- data/fastlane/lib/fastlane/actions/commit_github_file.rb +1 -0
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +4 -0
- data/fastlane/lib/fastlane/actions/gradle.rb +1 -1
- data/fastlane/lib/fastlane/actions/hg_push.rb +1 -1
- data/fastlane/lib/fastlane/actions/import_from_git.rb +4 -4
- data/fastlane/lib/fastlane/actions/ipa.rb +1 -0
- data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -1
- data/fastlane/lib/fastlane/actions/push_git_tags.rb +1 -1
- data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +5 -3
- data/fastlane/lib/fastlane/actions/reset_git_repo.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_fastlane.rb +1 -1
- data/fastlane/lib/fastlane/documentation/actions_list.rb +1 -6
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +15 -0
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +14 -10
- data/gym/lib/gym/options.rb +1 -0
- data/match/lib/match/runner.rb +6 -6
- data/pem/lib/pem/options.rb +1 -1
- data/scan/lib/scan/options.rb +1 -0
- data/sigh/lib/assets/resign.sh +92 -29
- data/snapshot/lib/snapshot/options.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff02f04c2efc782d90b6082d827aa42b8779915c
|
4
|
+
data.tar.gz: 5c35f24eb249af77add3fa24d19c1f69411f3626
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46efa7c14c4881c6d6d426295a48407ac3dd5ecfd9f56114d6191e5311cfeda40b9db46603464b0cf98ed1370991e1fcb4e46b21adb0e843007916328576ef03
|
7
|
+
data.tar.gz: 83647d742c6f92503ff756de030b72fedc698d40ba4d2dc190579e1e0184ff3c976366456099cb597214b26f7d5944ff986a8f158c5494911edfdf265751de2b
|
@@ -44,10 +44,9 @@ Key | Description | Default
|
|
44
44
|
<%- (action.available_options || []).each do |config_item| -%>
|
45
45
|
<%- next unless config_item.kind_of?(FastlaneCore::ConfigItem) -%>
|
46
46
|
<%- next if config_item.description.to_s.length == 0 -%>
|
47
|
-
`<%= config_item.key %>` | <%= config_item.description %> | <%= config_item.
|
47
|
+
`<%= config_item.key %>` | <%= config_item.description %> | <%= config_item.doc_default_value %>
|
48
48
|
<%- end %>
|
49
|
-
|
50
|
-
_* = this default value is dependent on the user's system_
|
49
|
+
<em id="dynamic">* = default value is dependent on the user's system</em>
|
51
50
|
<% end %><%# End of action.available_options... %>
|
52
51
|
|
53
52
|
<hr />
|
@@ -46,7 +46,7 @@ module Fastlane
|
|
46
46
|
optional: true),
|
47
47
|
FastlaneCore::ConfigItem.new(key: :grouping,
|
48
48
|
env_name: "FL_GIT_TAG_GROUPING",
|
49
|
-
description: "Is used to keep your tags organised under one 'folder'
|
49
|
+
description: "Is used to keep your tags organised under one 'folder'",
|
50
50
|
default_value: 'builds'),
|
51
51
|
FastlaneCore::ConfigItem.new(key: :prefix,
|
52
52
|
env_name: "FL_GIT_TAG_PREFIX",
|
@@ -65,10 +65,12 @@ module Fastlane
|
|
65
65
|
FastlaneCore::ConfigItem.new(key: :message,
|
66
66
|
env_name: "FL_GIT_TAG_MESSAGE",
|
67
67
|
description: "The tag message. Defaults to the tag's name",
|
68
|
+
default_value_dynamic: true,
|
68
69
|
optional: true),
|
69
70
|
FastlaneCore::ConfigItem.new(key: :commit,
|
70
71
|
env_name: "FL_GIT_TAG_COMMIT",
|
71
72
|
description: "The commit or object where the tag will be set. Defaults to the current HEAD",
|
73
|
+
default_value_dynamic: true,
|
72
74
|
optional: true),
|
73
75
|
FastlaneCore::ConfigItem.new(key: :force,
|
74
76
|
env_name: "FL_GIT_TAG_FORCE",
|
@@ -115,7 +115,7 @@ module Fastlane
|
|
115
115
|
optional: true),
|
116
116
|
FastlaneCore::ConfigItem.new(key: :platform,
|
117
117
|
env_name: "APPETIZE_PLATFORM",
|
118
|
-
description: "Platform. Either `ios` or `android
|
118
|
+
description: "Platform. Either `ios` or `android`",
|
119
119
|
is_string: true,
|
120
120
|
default_value: 'ios'),
|
121
121
|
FastlaneCore::ConfigItem.new(key: :path,
|
@@ -82,17 +82,18 @@ module Fastlane
|
|
82
82
|
UI.user_error!("Couldn't find the destination folder at '#{value}'") if !Helper.test? && !File.directory?(value) && !File.exist?(value)
|
83
83
|
end),
|
84
84
|
FastlaneCore::ConfigItem.new(key: :zip,
|
85
|
-
description: 'Enable compression of the archive
|
85
|
+
description: 'Enable compression of the archive',
|
86
86
|
is_string: false,
|
87
87
|
default_value: true,
|
88
88
|
optional: true,
|
89
89
|
env_name: 'BACKUP_XCARCHIVE_ZIP'),
|
90
90
|
FastlaneCore::ConfigItem.new(key: :zip_filename,
|
91
91
|
description: 'Filename of the compressed archive. Will be appended by `.xcarchive.zip`. Default value is the output xcarchive filename',
|
92
|
+
default_value_dynamic: true,
|
92
93
|
optional: true,
|
93
94
|
env_name: 'BACKUP_XCARCHIVE_ZIP_FILENAME'),
|
94
95
|
FastlaneCore::ConfigItem.new(key: :versioned,
|
95
|
-
description: 'Create a versioned (date and app version) subfolder where to put the archive
|
96
|
+
description: 'Create a versioned (date and app version) subfolder where to put the archive',
|
96
97
|
is_string: false,
|
97
98
|
default_value: true,
|
98
99
|
optional: true,
|
@@ -120,7 +121,7 @@ module Fastlane
|
|
120
121
|
xcarchive: "/path/to/file.xcarchive", # Optional if you use the `xcodebuild` action
|
121
122
|
destination: "/somewhere/else/file.xcarchive", # Where the backup should be created
|
122
123
|
zip: false, # Enable compression of the archive. Defaults to `true`.
|
123
|
-
versioned: true # Create a versioned (date and app version) subfolder where to put the archive
|
124
|
+
versioned: true # Create a versioned (date and app version) subfolder where to put the archive
|
124
125
|
)'
|
125
126
|
]
|
126
127
|
end
|
@@ -126,6 +126,7 @@ module Fastlane
|
|
126
126
|
FastlaneCore::ConfigItem.new(key: :message,
|
127
127
|
env_name: "FL_COMMIT_GITHUB_FILE_MESSAGE",
|
128
128
|
description: "The commit message. Defaults to the file name",
|
129
|
+
default_value_dynamic: true,
|
129
130
|
optional: true),
|
130
131
|
FastlaneCore::ConfigItem.new(key: :secure,
|
131
132
|
env_name: "FL_COMMIT_GITHUB_FILE_SECURE",
|
@@ -221,6 +221,10 @@ fastlane snapshot reset_simulators
|
|
221
221
|
|
222
222
|
You can use the environment variable `SNAPSHOT_FORCE_DELETE` to stop asking for confirmation before deleting.
|
223
223
|
|
224
|
+
```no-highlight
|
225
|
+
SNAPSHOT_FORCE_DELETE=1 fastlane snapshot reset_simulators
|
226
|
+
```
|
227
|
+
|
224
228
|
## Update snapshot helpers
|
225
229
|
|
226
230
|
Some updates require the helper files to be updated. _snapshot_ will automatically warn you and tell you how to update.
|
@@ -113,7 +113,7 @@ module Fastlane
|
|
113
113
|
is_string: true),
|
114
114
|
FastlaneCore::ConfigItem.new(key: :project_dir,
|
115
115
|
env_name: 'FL_GRADLE_PROJECT_DIR',
|
116
|
-
description: 'The root directory of the gradle project
|
116
|
+
description: 'The root directory of the gradle project',
|
117
117
|
default_value: '.',
|
118
118
|
is_string: true),
|
119
119
|
FastlaneCore::ConfigItem.new(key: :gradle_path,
|
@@ -26,7 +26,7 @@ module Fastlane
|
|
26
26
|
[
|
27
27
|
FastlaneCore::ConfigItem.new(key: :force,
|
28
28
|
env_name: "FL_HG_PUSH_FORCE",
|
29
|
-
description: "Force push to remote
|
29
|
+
description: "Force push to remote",
|
30
30
|
is_string: false,
|
31
31
|
default_value: false),
|
32
32
|
FastlaneCore::ConfigItem.new(key: :destination,
|
@@ -52,14 +52,14 @@ module Fastlane
|
|
52
52
|
[
|
53
53
|
'import_from_git(
|
54
54
|
url: "git@github.com:fastlane/fastlane.git", # The URL of the repository to import the Fastfile from.
|
55
|
-
branch: "HEAD", # The branch to checkout on the repository
|
56
|
-
path: "fastlane/Fastfile" # The path of the Fastfile in the repository
|
55
|
+
branch: "HEAD", # The branch to checkout on the repository
|
56
|
+
path: "fastlane/Fastfile", # The path of the Fastfile in the repository
|
57
57
|
version: "~> 1.0.0" # The version to checkout on the repository. Optimistic match operator can be used to select the latest version within constraints.
|
58
58
|
)',
|
59
59
|
'import_from_git(
|
60
60
|
url: "git@github.com:fastlane/fastlane.git", # The URL of the repository to import the Fastfile from.
|
61
|
-
branch: "HEAD", # The branch to checkout on the repository
|
62
|
-
path: "fastlane/Fastfile" # The path of the Fastfile in the repository
|
61
|
+
branch: "HEAD", # The branch to checkout on the repository
|
62
|
+
path: "fastlane/Fastfile", # The path of the Fastfile in the repository
|
63
63
|
version: [">= 1.1.0", "< 2.0.0"] # The version to checkout on the repository. Multiple conditions can be used to select the latest version within constraints.
|
64
64
|
)'
|
65
65
|
]
|
@@ -163,6 +163,7 @@ module Fastlane
|
|
163
163
|
FastlaneCore::ConfigItem.new(key: :destination,
|
164
164
|
env_name: "IPA_DESTINATION",
|
165
165
|
description: "Build destination. Defaults to current directory",
|
166
|
+
default_value_dynamic: true,
|
166
167
|
optional: true),
|
167
168
|
FastlaneCore::ConfigItem.new(key: :embed,
|
168
169
|
env_name: "IPA_EMBED",
|
@@ -107,7 +107,7 @@ module Fastlane
|
|
107
107
|
optional: false),
|
108
108
|
FastlaneCore::ConfigItem.new(key: :mount_path,
|
109
109
|
env_name: "FL_NEXUS_MOUNT_PATH",
|
110
|
-
description: "Nexus mount path
|
110
|
+
description: "Nexus mount path",
|
111
111
|
default_value: "/nexus",
|
112
112
|
optional: true),
|
113
113
|
FastlaneCore::ConfigItem.new(key: :username,
|
@@ -29,7 +29,7 @@ module Fastlane
|
|
29
29
|
[
|
30
30
|
FastlaneCore::ConfigItem.new(key: :force,
|
31
31
|
env_name: "FL_PUSH_GIT_FORCE",
|
32
|
-
description: "Force push to remote
|
32
|
+
description: "Force push to remote",
|
33
33
|
is_string: false,
|
34
34
|
default_value: false,
|
35
35
|
optional: true),
|
@@ -40,24 +40,26 @@ module Fastlane
|
|
40
40
|
FastlaneCore::ConfigItem.new(key: :local_branch,
|
41
41
|
env_name: "FL_GIT_PUSH_LOCAL_BRANCH",
|
42
42
|
description: "The local branch to push from. Defaults to the current branch",
|
43
|
+
default_value_dynamic: true,
|
43
44
|
optional: true),
|
44
45
|
FastlaneCore::ConfigItem.new(key: :remote_branch,
|
45
46
|
env_name: "FL_GIT_PUSH_REMOTE_BRANCH",
|
46
47
|
description: "The remote branch to push to. Defaults to the local branch",
|
48
|
+
default_value_dynamic: true,
|
47
49
|
optional: true),
|
48
50
|
FastlaneCore::ConfigItem.new(key: :force,
|
49
51
|
env_name: "FL_PUSH_GIT_FORCE",
|
50
|
-
description: "Force push to remote
|
52
|
+
description: "Force push to remote",
|
51
53
|
is_string: false,
|
52
54
|
default_value: false),
|
53
55
|
FastlaneCore::ConfigItem.new(key: :tags,
|
54
56
|
env_name: "FL_PUSH_GIT_TAGS",
|
55
|
-
description: "Whether tags are pushed to remote
|
57
|
+
description: "Whether tags are pushed to remote",
|
56
58
|
is_string: false,
|
57
59
|
default_value: true),
|
58
60
|
FastlaneCore::ConfigItem.new(key: :remote,
|
59
61
|
env_name: "FL_GIT_PUSH_REMOTE",
|
60
|
-
description: "The remote to push to
|
62
|
+
description: "The remote to push to",
|
61
63
|
default_value: 'origin')
|
62
64
|
]
|
63
65
|
end
|
@@ -88,7 +88,7 @@ module Fastlane
|
|
88
88
|
default_value: false),
|
89
89
|
FastlaneCore::ConfigItem.new(key: :skip_clean,
|
90
90
|
env_name: "FL_RESET_GIT_SKIP_CLEAN",
|
91
|
-
description: "Skip 'git clean' to avoid removing untracked files like `.env
|
91
|
+
description: "Skip 'git clean' to avoid removing untracked files like `.env`",
|
92
92
|
is_string: false,
|
93
93
|
default_value: false),
|
94
94
|
FastlaneCore::ConfigItem.new(key: :disregard_gitignore,
|
@@ -134,7 +134,7 @@ module Fastlane
|
|
134
134
|
default_value: false),
|
135
135
|
FastlaneCore::ConfigItem.new(key: :no_update,
|
136
136
|
env_name: "FL_NO_UPDATE",
|
137
|
-
description: "Don't update during this run.
|
137
|
+
description: "Don't update during this run. This is used internally",
|
138
138
|
is_string: false,
|
139
139
|
default_value: false),
|
140
140
|
FastlaneCore::ConfigItem.new(key: :tools,
|
@@ -135,7 +135,6 @@ module Fastlane
|
|
135
135
|
else
|
136
136
|
puts("No available options".yellow)
|
137
137
|
end
|
138
|
-
puts("- = this parameter doesn't have a default value")
|
139
138
|
puts("* = this default value is dependent on the user's system")
|
140
139
|
puts("")
|
141
140
|
end
|
@@ -192,11 +191,7 @@ module Fastlane
|
|
192
191
|
if options.kind_of?(Array)
|
193
192
|
options.each do |current|
|
194
193
|
if current.kind_of?(FastlaneCore::ConfigItem)
|
195
|
-
|
196
|
-
# rubocop:disable Metrics/BlockNesting, Style/NestedTernaryOperator
|
197
|
-
default = current.default_value_dynamic ? "#{current_default} *".strip : (current_default.nil? ? "-" : current_default)
|
198
|
-
# rubocop:enable Metrics/BlockNesting, Style/NestedTernaryOperator
|
199
|
-
rows << [current.key.to_s.yellow, current.description, current.env_name, default]
|
194
|
+
rows << [current.key.to_s.yellow, current.description, current.env_name, current.help_default_value]
|
200
195
|
elsif current.kind_of?(Array)
|
201
196
|
# Legacy actions that don't use the new config manager
|
202
197
|
UI.user_error!("Invalid number of elements in this row: #{current}. Must be 2 or 3") unless [2, 3].include?(current.count)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Fastlane
|
2
|
-
VERSION = '2.82.0.beta.
|
2
|
+
VERSION = '2.82.0.beta.20180223010003'.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
|
@@ -277,5 +277,20 @@ module FastlaneCore
|
|
277
277
|
def to_s
|
278
278
|
[@key, @description].join(": ")
|
279
279
|
end
|
280
|
+
|
281
|
+
def doc_default_value
|
282
|
+
return "[*](#dynamic)" if self.default_value_dynamic
|
283
|
+
return "" if self.default_value.nil?
|
284
|
+
return "`''`" if self.default_value.instance_of?(String) && self.default_value.empty?
|
285
|
+
|
286
|
+
"`#{self.default_value}`"
|
287
|
+
end
|
288
|
+
|
289
|
+
def help_default_value
|
290
|
+
return "#{self.default_value} *".strip if self.default_value_dynamic
|
291
|
+
return "" if self.default_value.nil?
|
292
|
+
|
293
|
+
self.default_value
|
294
|
+
end
|
280
295
|
end
|
281
296
|
end
|
@@ -23,10 +23,10 @@ module FastlaneCore
|
|
23
23
|
# "TimeToLive"=>185,
|
24
24
|
# "UUID"=>"1752e382-53bd-4910-a393-aaa7de0005ad",
|
25
25
|
# "Version"=>1}
|
26
|
-
def parse(path)
|
26
|
+
def parse(path, keychain_path = nil)
|
27
27
|
require 'plist'
|
28
28
|
|
29
|
-
plist = Plist.parse_xml(decode(path))
|
29
|
+
plist = Plist.parse_xml(decode(path, keychain_path))
|
30
30
|
if (plist || []).count > 5
|
31
31
|
plist
|
32
32
|
else
|
@@ -35,13 +35,13 @@ module FastlaneCore
|
|
35
35
|
end
|
36
36
|
|
37
37
|
# @return [String] The UUID of the given provisioning profile
|
38
|
-
def uuid(path)
|
39
|
-
parse(path).fetch("UUID")
|
38
|
+
def uuid(path, keychain_path = nil)
|
39
|
+
parse(path, keychain_path).fetch("UUID")
|
40
40
|
end
|
41
41
|
|
42
42
|
# @return [String] The Name of the given provisioning profile
|
43
|
-
def name(path)
|
44
|
-
parse(path).fetch("Name")
|
43
|
+
def name(path, keychain_path = nil)
|
44
|
+
parse(path, keychain_path).fetch("Name")
|
45
45
|
end
|
46
46
|
|
47
47
|
def profiles_path
|
@@ -55,9 +55,9 @@ module FastlaneCore
|
|
55
55
|
end
|
56
56
|
|
57
57
|
# Installs a provisioning profile for Xcode to use
|
58
|
-
def install(path)
|
58
|
+
def install(path, keychain_path = nil)
|
59
59
|
UI.message("Installing provisioning profile...")
|
60
|
-
profile_filename = uuid(path) + ".mobileprovision"
|
60
|
+
profile_filename = uuid(path, keychain_path) + ".mobileprovision"
|
61
61
|
destination = File.join(profiles_path, profile_filename)
|
62
62
|
|
63
63
|
if path != destination
|
@@ -73,13 +73,17 @@ module FastlaneCore
|
|
73
73
|
|
74
74
|
private
|
75
75
|
|
76
|
-
def decode(path)
|
76
|
+
def decode(path, keychain_path = nil)
|
77
77
|
require 'tmpdir'
|
78
78
|
Dir.mktmpdir('fastlane') do |dir|
|
79
79
|
err = "#{dir}/cms.err"
|
80
80
|
# we want to prevent the error output to mix up with the standard output because of
|
81
81
|
# /dev/null: https://github.com/fastlane/fastlane/issues/6387
|
82
|
-
|
82
|
+
if keychain_path.nil?
|
83
|
+
decoded = `security cms -D -i "#{path}" 2> #{err}`
|
84
|
+
else
|
85
|
+
decoded = `security cms -D -i "#{path}" -k "#{keychain_path.shellescape}" 2> #{err}`
|
86
|
+
end
|
83
87
|
UI.error("Failure to decode #{path}. Exit: #{$?.exitstatus}: #{File.read(err)}") if $?.exitstatus != 0
|
84
88
|
decoded
|
85
89
|
end
|
data/gym/lib/gym/options.rb
CHANGED
@@ -67,6 +67,7 @@ module Gym
|
|
67
67
|
short_option: "-q",
|
68
68
|
env_name: "GYM_CONFIGURATION",
|
69
69
|
description: "The configuration to use when building the app. Defaults to 'Release'",
|
70
|
+
default_value_dynamic: true,
|
70
71
|
optional: true),
|
71
72
|
FastlaneCore::ConfigItem.new(key: :silent,
|
72
73
|
short_option: "-a",
|
data/match/lib/match/runner.rb
CHANGED
@@ -135,13 +135,14 @@ module Match
|
|
135
135
|
profile_name = names.join("_").gsub("*", '\*') # this is important, as it shouldn't be a wildcard
|
136
136
|
base_dir = File.join(params[:workspace], "profiles", prov_type.to_s)
|
137
137
|
profiles = Dir[File.join(base_dir, "#{profile_name}.mobileprovision")]
|
138
|
+
keychain_path = FastlaneCore::Helper.keychain_path(params[:keychain_name]) unless params[:keychain_name].nil?
|
138
139
|
|
139
140
|
# Install the provisioning profiles
|
140
141
|
profile = profiles.last
|
141
142
|
|
142
143
|
if params[:force_for_new_devices] && !params[:readonly]
|
143
144
|
if prov_type != :appstore
|
144
|
-
params[:force] = device_count_different?(profile: profile) unless params[:force]
|
145
|
+
params[:force] = device_count_different?(profile: profile, keychain_path: keychain_path) unless params[:force]
|
145
146
|
else
|
146
147
|
# App Store provisioning profiles don't contain device identifiers and
|
147
148
|
# thus shouldn't be renewed if the device count has changed.
|
@@ -167,9 +168,8 @@ module Match
|
|
167
168
|
self.files_to_commmit << profile
|
168
169
|
end
|
169
170
|
|
170
|
-
installed_profile = FastlaneCore::ProvisioningProfile.install(profile)
|
171
|
-
|
172
|
-
parsed = FastlaneCore::ProvisioningProfile.parse(profile)
|
171
|
+
installed_profile = FastlaneCore::ProvisioningProfile.install(profile, keychain_path)
|
172
|
+
parsed = FastlaneCore::ProvisioningProfile.parse(profile, keychain_path)
|
173
173
|
uuid = parsed["UUID"]
|
174
174
|
|
175
175
|
if spaceship && !spaceship.profile_exists(username: params[:username], uuid: uuid)
|
@@ -204,9 +204,9 @@ module Match
|
|
204
204
|
return uuid
|
205
205
|
end
|
206
206
|
|
207
|
-
def device_count_different?(profile: nil)
|
207
|
+
def device_count_different?(profile: nil, keychain_path: nil)
|
208
208
|
if profile
|
209
|
-
parsed = FastlaneCore::ProvisioningProfile.parse(profile)
|
209
|
+
parsed = FastlaneCore::ProvisioningProfile.parse(profile, keychain_path)
|
210
210
|
uuid = parsed["UUID"]
|
211
211
|
portal_profile = Spaceship.provisioning_profile.all.detect { |i| i.uuid == uuid }
|
212
212
|
|
data/pem/lib/pem/options.rb
CHANGED
@@ -22,7 +22,7 @@ module PEM
|
|
22
22
|
default_value: true),
|
23
23
|
FastlaneCore::ConfigItem.new(key: :active_days_limit,
|
24
24
|
env_name: "PEM_ACTIVE_DAYS_LIMIT",
|
25
|
-
description: "If the current certificate is active for less than this number of days, generate a new one
|
25
|
+
description: "If the current certificate is active for less than this number of days, generate a new one",
|
26
26
|
default_value: 30,
|
27
27
|
is_string: false,
|
28
28
|
type: Integer,
|
data/scan/lib/scan/options.rb
CHANGED
@@ -196,6 +196,7 @@ module Scan
|
|
196
196
|
short_option: "-q",
|
197
197
|
env_name: "SCAN_CONFIGURATION",
|
198
198
|
description: "The configuration to use when building the app. Defaults to 'Release'",
|
199
|
+
default_value_dynamic: true,
|
199
200
|
optional: true),
|
200
201
|
FastlaneCore::ConfigItem.new(key: :destination,
|
201
202
|
short_option: "-d",
|
data/sigh/lib/assets/resign.sh
CHANGED
@@ -638,6 +638,71 @@ function resign {
|
|
638
638
|
# Start with using what comes in provisioning profile entitlements before patching
|
639
639
|
cp -f "$PROFILE_ENTITLEMENTS" "$PATCHED_ENTITLEMENTS"
|
640
640
|
|
641
|
+
log "Removing blacklisted keys from patched profile"
|
642
|
+
# See https://github.com/facebook/buck/issues/798 and https://github.com/facebook/buck/pull/802/files
|
643
|
+
|
644
|
+
# Update in https://github.com/facebook/buck/commit/99c0fbc3ab5ecf04d186913374f660683deccdef
|
645
|
+
# Update in https://github.com/facebook/buck/commit/36db188da9f6acbb9df419dc1904315ab00c4e19
|
646
|
+
|
647
|
+
# Buck changes referenced above are not self-explanatory and do not seem exhaustive or up-to-date
|
648
|
+
# Comments below explain the rules applied to each key in order to make realignment with future Xcode export logic easier
|
649
|
+
BLACKLISTED_KEYS=(\
|
650
|
+
# PP list identifiers inconsistent with app-defined ones and this key does not seem to appear in IPA entitlements, so ignore it
|
651
|
+
"com.apple.developer.icloud-container-development-container-identifiers" \
|
652
|
+
# This key has an invalid generic value in PP (actual value is set by Xcode during export), see dedicated processing a few blocks below
|
653
|
+
"com.apple.developer.icloud-container-environment" \
|
654
|
+
# PP list identifiers inconsistent with app-defined ones, must use App entitlements value
|
655
|
+
"com.apple.developer.icloud-container-identifiers" \
|
656
|
+
# PP enable all available services and not app-defined ones, must use App entitlements value
|
657
|
+
"com.apple.developer.icloud-services" \
|
658
|
+
# Was already blacklisted in previous version, but has someone ever seen this key in a PP?
|
659
|
+
"com.apple.developer.restricted-resource-mode" \
|
660
|
+
# If actually used by the App, this value will be set in its entitlements
|
661
|
+
"com.apple.developer.nfc.readersession.formats" \
|
662
|
+
# PP list a single TeamID.* identifier and not app-defined ones, must use App entitlements value
|
663
|
+
"com.apple.developer.pass-type-identifiers" \
|
664
|
+
# If actually used by the App, this value will be set in its entitlements
|
665
|
+
"com.apple.developer.siri" \
|
666
|
+
# PP list identifiers inconsistent with app-defined ones, must use App entitlements value
|
667
|
+
"com.apple.developer.ubiquity-container-identifiers" \
|
668
|
+
# PP define a generic TeamID.* identifier and not the app-defined one, must use App entitlements value
|
669
|
+
"com.apple.developer.ubiquity-kvstore-identifier" \
|
670
|
+
# If actually used by the App, this value will be set in its entitlements
|
671
|
+
"inter-app-audio" \
|
672
|
+
# PP define a generic TeamID.* identifier and not the app-defined one, must use App entitlements value
|
673
|
+
"keychain-access-groups" \
|
674
|
+
# If actually used by the App, this value will be set in its entitlements
|
675
|
+
"com.apple.developer.homekit" \
|
676
|
+
# If actually used by the App, this value will be set in its entitlements
|
677
|
+
"com.apple.developer.healthkit" \
|
678
|
+
# PP list identifiers inconsistent with app-defined ones, must use App entitlements value
|
679
|
+
"com.apple.developer.in-app-payments" \
|
680
|
+
# If actually used by the App, this value will be set in its entitlements
|
681
|
+
"com.apple.developer.networking.vpn.api" \
|
682
|
+
# If actually used by the App, this value will be set in its entitlements
|
683
|
+
"com.apple.developer.networking.HotspotConfiguration" \
|
684
|
+
# PP list all available extensions and not app-defined ones, must use App entitlements value
|
685
|
+
"com.apple.developer.networking.networkextension" \
|
686
|
+
# If actually used by the App, this value will be set in its entitlements
|
687
|
+
"com.apple.developer.networking.multipath" \
|
688
|
+
# PP enable all domains via a non-AppStore-compliant '*' value, must use App entitlements value
|
689
|
+
"com.apple.developer.associated-domains" \
|
690
|
+
# If actually used by the App, this value will be set in its entitlements
|
691
|
+
"com.apple.developer.default-data-protection" \
|
692
|
+
# PP seem to list the same groups as the App, but use App entitlements value to be sure
|
693
|
+
"com.apple.security.application-groups" \
|
694
|
+
# Was already blacklisted in previous version, seems to be an artifact from an old Xcode release
|
695
|
+
"com.apple.developer.maps" \
|
696
|
+
# If actually used by the App, this value will be set in its entitlements
|
697
|
+
"com.apple.external-accessory.wireless-configuration"
|
698
|
+
)
|
699
|
+
|
700
|
+
# Blacklisted keys must not be included into new profile, so remove them from patched profile
|
701
|
+
for KEY in "${BLACKLISTED_KEYS[@]}"; do
|
702
|
+
log "Removing blacklisted key: $KEY"
|
703
|
+
PlistBuddy -c "Delete $KEY" "$PATCHED_ENTITLEMENTS" 2>/dev/null
|
704
|
+
done
|
705
|
+
|
641
706
|
# Get the old and new app identifier (prefix)
|
642
707
|
APP_ID_KEY="application-identifier"
|
643
708
|
# Extract just the identifier from the value
|
@@ -664,13 +729,22 @@ function resign {
|
|
664
729
|
# There can be only one ID_TYPE specified
|
665
730
|
# If entitlements use more than one ID type for single entitlement, then this way of resigning will not work
|
666
731
|
# instead an entitlements file must be provided explicitly
|
667
|
-
ENTITLEMENTS_TRANSFER_RULES=(
|
732
|
+
ENTITLEMENTS_TRANSFER_RULES=(\
|
733
|
+
"com.apple.developer.associated-domains" \
|
734
|
+
"com.apple.developer.default-data-protection" \
|
668
735
|
"com.apple.developer.healthkit" \
|
669
736
|
"com.apple.developer.homekit" \
|
737
|
+
"com.apple.developer.icloud-container-environment" \
|
670
738
|
"com.apple.developer.icloud-container-identifiers" \
|
671
739
|
"com.apple.developer.icloud-services" \
|
672
740
|
"com.apple.developer.in-app-payments" \
|
741
|
+
"com.apple.developer.networking.HotspotConfiguration" \
|
742
|
+
"com.apple.developer.networking.multipath" \
|
743
|
+
"com.apple.developer.networking.networkextension" \
|
673
744
|
"com.apple.developer.networking.vpn.api" \
|
745
|
+
"com.apple.developer.nfc.readersession.formats" \
|
746
|
+
"com.apple.developer.pass-type-identifiers|TEAM_ID" \
|
747
|
+
"com.apple.developer.siri" \
|
674
748
|
"com.apple.developer.ubiquity-container-identifiers" \
|
675
749
|
"com.apple.developer.ubiquity-kvstore-identifier|TEAM_ID" \
|
676
750
|
"com.apple.external-accessory.wireless-configuration" \
|
@@ -691,6 +765,22 @@ function resign {
|
|
691
765
|
continue
|
692
766
|
fi
|
693
767
|
|
768
|
+
if [[ "$KEY" == "com.apple.developer.icloud-container-environment" ]]; then
|
769
|
+
# Add specific iCloud Environment key to patched entitlements
|
770
|
+
# This value is set by Xcode during export (manually selected for Development and AdHoc, automatically set to Production for Store)
|
771
|
+
# Would need an additional dedicated option to specify the iCloud environment to be used (Development or Production)
|
772
|
+
# For now, we assume Production is to be used when signing with a Distribution certificate, Development if not
|
773
|
+
if [[ "$CERTIFICATE" =~ "Distribution:" ]]; then
|
774
|
+
ICLOUD_ENV="Production"
|
775
|
+
else
|
776
|
+
ICLOUD_ENV="Development"
|
777
|
+
fi
|
778
|
+
log "Overriding value for $KEY"
|
779
|
+
log "Old value: $ENTITLEMENTS_VALUE"
|
780
|
+
log "New value: $ICLOUD_ENV"
|
781
|
+
ENTITLEMENTS_VALUE="$ICLOUD_ENV"
|
782
|
+
fi
|
783
|
+
|
694
784
|
log "App entitlements value for key '$KEY':"
|
695
785
|
log "$ENTITLEMENTS_VALUE"
|
696
786
|
|
@@ -711,7 +801,7 @@ function resign {
|
|
711
801
|
log "Replacing old app identifier prefix '$OLD_APP_ID' with new value '$NEW_APP_ID'"
|
712
802
|
sed -i .bak "s/$OLD_APP_ID/$NEW_APP_ID/g" "$PATCHED_ENTITLEMENTS"
|
713
803
|
elif [[ "$ID_TYPE" == "TEAM_ID" ]]; then
|
714
|
-
# Replace
|
804
|
+
# Replace old team identifier with new value
|
715
805
|
log "Replacing old team ID '$OLD_TEAM_ID' with new team ID: '$NEW_TEAM_ID'"
|
716
806
|
sed -i .bak "s/$OLD_TEAM_ID/$NEW_TEAM_ID/g" "$PATCHED_ENTITLEMENTS"
|
717
807
|
else
|
@@ -726,33 +816,6 @@ function resign {
|
|
726
816
|
log "Replacing old bundle ID '$OLD_BUNDLE_ID' with new bundle ID '$NEW_BUNDLE_ID' in patched entitlements"
|
727
817
|
sed -i .bak "s/$OLD_BUNDLE_ID/$NEW_BUNDLE_ID/g" "$PATCHED_ENTITLEMENTS"
|
728
818
|
|
729
|
-
log "Removing blacklisted keys from patched profile"
|
730
|
-
# See https://github.com/facebook/buck/issues/798 and https://github.com/facebook/buck/pull/802/files
|
731
|
-
|
732
|
-
# Update in https://github.com/facebook/buck/commit/99c0fbc3ab5ecf04d186913374f660683deccdef
|
733
|
-
# Update in https://github.com/facebook/buck/commit/36db188da9f6acbb9df419dc1904315ab00c4e19
|
734
|
-
BLACKLISTED_KEYS=(\
|
735
|
-
"com.apple.developer.icloud-container-development-container-identifiers" \
|
736
|
-
"com.apple.developer.icloud-container-environment" \
|
737
|
-
"com.apple.developer.icloud-container-identifiers" \
|
738
|
-
"com.apple.developer.icloud-services" \
|
739
|
-
"com.apple.developer.restricted-resource-mode" \
|
740
|
-
"com.apple.developer.ubiquity-container-identifiers" \
|
741
|
-
"com.apple.developer.ubiquity-kvstore-identifier" \
|
742
|
-
"inter-app-audio" \
|
743
|
-
"com.apple.developer.homekit" \
|
744
|
-
"com.apple.developer.healthkit" \
|
745
|
-
"com.apple.developer.in-app-payments" \
|
746
|
-
"com.apple.developer.maps" \
|
747
|
-
"com.apple.external-accessory.wireless-configuration"
|
748
|
-
)
|
749
|
-
|
750
|
-
# Blacklisted keys must not be included into new profile, so remove them from patched profile
|
751
|
-
for KEY in "${BLACKLISTED_KEYS[@]}"; do
|
752
|
-
log "Removing blacklisted key: $KEY"
|
753
|
-
PlistBuddy -c "Delete $KEY" "$PATCHED_ENTITLEMENTS" 2>/dev/null
|
754
|
-
done
|
755
|
-
|
756
819
|
log "Resigning application using certificate: '$CERTIFICATE'"
|
757
820
|
log "and patched entitlements:"
|
758
821
|
log "$(cat "$PATCHED_ENTITLEMENTS")"
|
@@ -153,6 +153,7 @@ module Snapshot
|
|
153
153
|
short_option: "-q",
|
154
154
|
env_name: "SNAPSHOT_CONFIGURATION",
|
155
155
|
description: "The configuration to use when building the app. Defaults to 'Release'",
|
156
|
+
default_value_dynamic: true,
|
156
157
|
optional: true),
|
157
158
|
FastlaneCore::ConfigItem.new(key: :xcpretty_args,
|
158
159
|
short_option: "-x",
|
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.82.0.beta.
|
4
|
+
version: 2.82.0.beta.20180223010003
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Olivier Halligon
|
@@ -25,7 +25,7 @@ authors:
|
|
25
25
|
autorequire:
|
26
26
|
bindir: bin
|
27
27
|
cert_chain: []
|
28
|
-
date: 2018-02-
|
28
|
+
date: 2018-02-23 00:00:00.000000000 Z
|
29
29
|
dependencies:
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: slack-notifier
|