fastlane 2.130.0.beta.20190825200030 → 2.131.0.beta.20190830200038

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 777d538ed73a31d65a53000a73aecc35dac85057
4
- data.tar.gz: f2ef470b1a3000b2884c8828493601cec3a0d424
3
+ metadata.gz: e579d1381d263975b91f2275bb548330fc4fb066
4
+ data.tar.gz: 569a8ffbd1a4b5624b0ce3f99cce3d0493122bab
5
5
  SHA512:
6
- metadata.gz: aa0e70c540500700a8525dea96d5f4545541e41a757eaf91d545c7129c9d7b7778e42aab3126529703e324629387ca637571839c33f48957c5f77e4c69dabfba
7
- data.tar.gz: 9bb1699a31f8a8677d6a29b9793e3758fcbee33eea420b19ff1baca25a5b6821f363cf9eda88eabf4ef4e95b6a4c8b5203a880de5a63bd14663dc2495c1fd781
6
+ metadata.gz: 8a2bbc4fb0fc475e603d53a108e8dc01910e39f91031b90ef30d20b8e442a7095360f585439800fe357f9d1ea5b36f6499f6b85ccb237fbb62a624f387f0211d
7
+ data.tar.gz: 716cae39edb3848e64506801e91c40ba6a0c68e3cac27bdc525cb24f4ce71b53d0866c0d747352f2d8d1e40c9fd4b8e5984cf4fa9e00f425b62d2eb106f30614
data/README.md CHANGED
@@ -40,17 +40,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
40
40
  </a>
41
41
  <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
42
42
  </td>
43
- <td id='olivier-halligon'>
44
- <a href='https://github.com/AliSoftware'>
45
- <img src='https://github.com/AliSoftware.png?size=140'>
43
+ <td id='joshua-liebowitz'>
44
+ <a href='https://github.com/taquitos'>
45
+ <img src='https://github.com/taquitos.png?size=140'>
46
46
  </a>
47
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
47
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
48
48
  </td>
49
- <td id='jérôme-lacoste'>
50
- <a href='https://github.com/lacostej'>
51
- <img src='https://github.com/lacostej.png?size=140'>
49
+ <td id='jan-piotrowski'>
50
+ <a href='https://github.com/janpio'>
51
+ <img src='https://github.com/janpio.png?size=140'>
52
52
  </a>
53
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
53
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
54
+ </td>
55
+ <td id='aaron-brager'>
56
+ <a href='https://github.com/getaaron'>
57
+ <img src='https://github.com/getaaron.png?size=140'>
58
+ </a>
59
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
54
60
  </td>
55
61
  <td id='jimmy-dee'>
56
62
  <a href='https://github.com/jdee'>
@@ -58,37 +64,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
58
64
  </a>
59
65
  <h4 align='center'>Jimmy Dee</h4>
60
66
  </td>
61
- <td id='matthew-ellis'>
62
- <a href='https://github.com/matthewellis'>
63
- <img src='https://github.com/matthewellis.png?size=140'>
64
- </a>
65
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
66
- </td>
67
67
  </tr>
68
68
  <tr>
69
- <td id='luka-mirosevic'>
70
- <a href='https://github.com/lmirosevic'>
71
- <img src='https://github.com/lmirosevic.png?size=140'>
72
- </a>
73
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
74
- </td>
75
- <td id='iulian-onofrei'>
76
- <a href='https://github.com/revolter'>
77
- <img src='https://github.com/revolter.png?size=140'>
78
- </a>
79
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
80
- </td>
81
69
  <td id='manu-wallner'>
82
70
  <a href='https://github.com/milch'>
83
71
  <img src='https://github.com/milch.png?size=140'>
84
72
  </a>
85
73
  <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
86
74
  </td>
87
- <td id='andrew-mcburney'>
88
- <a href='https://github.com/armcburney'>
89
- <img src='https://github.com/armcburney.png?size=140'>
75
+ <td id='jérôme-lacoste'>
76
+ <a href='https://github.com/lacostej'>
77
+ <img src='https://github.com/lacostej.png?size=140'>
90
78
  </a>
91
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
79
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
80
+ </td>
81
+ <td id='stefan-natchev'>
82
+ <a href='https://github.com/snatchev'>
83
+ <img src='https://github.com/snatchev.png?size=140'>
84
+ </a>
85
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
86
+ </td>
87
+ <td id='josh-holtz'>
88
+ <a href='https://github.com/joshdholtz'>
89
+ <img src='https://github.com/joshdholtz.png?size=140'>
90
+ </a>
91
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
92
92
  </td>
93
93
  <td id='jorge-revuelta-h'>
94
94
  <a href='https://github.com/minuscorp'>
@@ -98,18 +98,38 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
98
98
  </td>
99
99
  </tr>
100
100
  <tr>
101
+ <td id='luka-mirosevic'>
102
+ <a href='https://github.com/lmirosevic'>
103
+ <img src='https://github.com/lmirosevic.png?size=140'>
104
+ </a>
105
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
106
+ </td>
107
+ <td id='olivier-halligon'>
108
+ <a href='https://github.com/AliSoftware'>
109
+ <img src='https://github.com/AliSoftware.png?size=140'>
110
+ </a>
111
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
112
+ </td>
113
+ <td id='helmut-januschka'>
114
+ <a href='https://github.com/hjanuschka'>
115
+ <img src='https://github.com/hjanuschka.png?size=140'>
116
+ </a>
117
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
118
+ </td>
119
+ <td id='felix-krause'>
120
+ <a href='https://github.com/KrauseFx'>
121
+ <img src='https://github.com/KrauseFx.png?size=140'>
122
+ </a>
123
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
124
+ </td>
101
125
  <td id='fumiya-nakamura'>
102
126
  <a href='https://github.com/nafu'>
103
127
  <img src='https://github.com/nafu.png?size=140'>
104
128
  </a>
105
129
  <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
106
130
  </td>
107
- <td id='stefan-natchev'>
108
- <a href='https://github.com/snatchev'>
109
- <img src='https://github.com/snatchev.png?size=140'>
110
- </a>
111
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
112
- </td>
131
+ </tr>
132
+ <tr>
113
133
  <td id='danielle-tomlinson'>
114
134
  <a href='https://github.com/endocrimes'>
115
135
  <img src='https://github.com/endocrimes.png?size=140'>
@@ -122,43 +142,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
122
142
  </a>
123
143
  <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
124
144
  </td>
125
- <td id='josh-holtz'>
126
- <a href='https://github.com/joshdholtz'>
127
- <img src='https://github.com/joshdholtz.png?size=140'>
128
- </a>
129
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
130
- </td>
131
- </tr>
132
- <tr>
133
- <td id='joshua-liebowitz'>
134
- <a href='https://github.com/taquitos'>
135
- <img src='https://github.com/taquitos.png?size=140'>
136
- </a>
137
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
138
- </td>
139
- <td id='jan-piotrowski'>
140
- <a href='https://github.com/janpio'>
141
- <img src='https://github.com/janpio.png?size=140'>
142
- </a>
143
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
144
- </td>
145
- <td id='felix-krause'>
146
- <a href='https://github.com/KrauseFx'>
147
- <img src='https://github.com/KrauseFx.png?size=140'>
145
+ <td id='andrew-mcburney'>
146
+ <a href='https://github.com/armcburney'>
147
+ <img src='https://github.com/armcburney.png?size=140'>
148
148
  </a>
149
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
149
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
150
150
  </td>
151
- <td id='helmut-januschka'>
152
- <a href='https://github.com/hjanuschka'>
153
- <img src='https://github.com/hjanuschka.png?size=140'>
151
+ <td id='matthew-ellis'>
152
+ <a href='https://github.com/matthewellis'>
153
+ <img src='https://github.com/matthewellis.png?size=140'>
154
154
  </a>
155
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
156
156
  </td>
157
- <td id='aaron-brager'>
158
- <a href='https://github.com/getaaron'>
159
- <img src='https://github.com/getaaron.png?size=140'>
157
+ <td id='iulian-onofrei'>
158
+ <a href='https://github.com/revolter'>
159
+ <img src='https://github.com/revolter.png?size=140'>
160
160
  </a>
161
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
161
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
162
162
  </td>
163
163
  </tr>
164
164
  </table>
@@ -7,41 +7,53 @@ module Fastlane
7
7
  [:ios, :mac].include?(platform)
8
8
  end
9
9
 
10
+ def self.file_column_headers
11
+ ['Device ID', 'Device Name', 'Device Platform']
12
+ end
13
+
10
14
  def self.run(params)
11
- require 'spaceship'
15
+ if params[:devices]
16
+ new_devices = params[:devices].map do |name, udid|
17
+ [udid, name]
18
+ end
19
+ elsif params[:devices_file]
20
+ require 'csv'
12
21
 
13
- devices = params[:devices]
14
- devices_file = params[:devices_file]
22
+ devices_file = CSV.read(File.expand_path(File.join(params[:devices_file])), col_sep: "\t")
23
+ unless devices_file.first == file_column_headers.first(2) || devices_file.first == file_column_headers
24
+ UI.user_error!("Please provide a file according to the Apple Sample UDID file (https://developer.apple.com/account/resources/downloads/Multiple-Upload-Samples.zip)")
25
+ end
15
26
 
16
- mac = params[:platform] == "mac"
27
+ new_devices = devices_file.drop(1).map do |row|
28
+ UI.user_error!("Invalid device line, please provide a file according to the Apple Sample UDID file (https://developer.apple.com/account/resources/downloads/Multiple-Upload-Samples.zip)") unless (2..3).cover?(row.count)
29
+ row
30
+ end
31
+ else
32
+ UI.user_error!("You must pass either a valid `devices` or `devices_file`. Please check the readme.")
33
+ end
17
34
 
35
+ require 'spaceship'
18
36
  credentials = CredentialsManager::AccountManager.new(user: params[:username])
19
37
  Spaceship.login(credentials.user, credentials.password)
20
38
  Spaceship.select_team
21
39
 
22
40
  UI.message("Fetching list of currently registered devices...")
23
- existing_devices = Spaceship::Device.all(mac: mac)
24
-
25
- if devices
26
- device_objs = devices.map do |k, v|
27
- next if existing_devices.map(&:udid).include?(v)
28
- try_create_device(name: k, udid: v, mac: mac)
29
- end
30
- elsif devices_file
31
- require 'csv'
41
+ all_platforms = Set[params[:platform]]
42
+ new_devices.each do |device|
43
+ next if device[2].nil?
44
+ all_platforms.add(device[2])
45
+ end
46
+ supported_platforms = all_platforms.select { |platform| self.is_supported?(platform.to_sym) }
32
47
 
33
- devices_file = CSV.read(File.expand_path(File.join(devices_file)), col_sep: "\t")
34
- UI.user_error!("Please provide a file according to the Apple Sample UDID file (https://devimages.apple.com.edgekey.net/downloads/devices/Multiple-Upload-Samples.zip)") unless devices_file.first == ['Device ID', 'Device Name']
48
+ existing_devices = supported_platforms.map { |platform| Spaceship::Device.all(mac: platform == "mac") }.flatten
35
49
 
36
- device_objs = devices_file.drop(1).map do |device|
37
- next if existing_devices.map(&:udid).include?(device[0])
50
+ device_objs = new_devices.map do |device|
51
+ next if existing_devices.map(&:udid).include?(device[0])
38
52
 
39
- UI.user_error!("Invalid device line, please provide a file according to the Apple Sample UDID file (http://devimages.apple.com/downloads/devices/Multiple-Upload-Samples.zip)") unless device.count == 2
53
+ device_platform_supported = !device[2].nil? && self.is_supported?(device[2].to_sym)
54
+ mac = (device_platform_supported ? device[2] : params[:platform]) == "mac"
40
55
 
41
- try_create_device(name: device[1], udid: device[0], mac: mac)
42
- end
43
- else
44
- UI.user_error!("You must pass either a valid `devices` or `devices_file`. Please check the readme.")
56
+ try_create_device(name: device[1], udid: device[0], mac: mac)
45
57
  end
46
58
 
47
59
  UI.success("Successfully registered new devices.")
@@ -55,6 +67,10 @@ module Fastlane
55
67
  UI.crash!("Failed to register new device (name: #{name}, UDID: #{udid})")
56
68
  end
57
69
 
70
+ #####################################################
71
+ # @!group Documentation
72
+ #####################################################
73
+
58
74
  def self.description
59
75
  "Registers new devices to the Apple Dev Portal"
60
76
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.130.0.beta.20190825200030'.freeze
2
+ VERSION = '2.131.0.beta.20190830200038'.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
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.129.0
21
+ // Generated with fastlane 2.130.0
@@ -494,6 +494,7 @@ func buildApp(workspace: String? = nil,
494
494
  exportXcargs: String? = nil,
495
495
  skipBuildArchive: Bool? = nil,
496
496
  skipArchive: Bool? = nil,
497
+ skipCodesigning: Bool? = nil,
497
498
  buildPath: String? = nil,
498
499
  archivePath: String? = nil,
499
500
  derivedDataPath: String? = nil,
@@ -501,20 +502,20 @@ func buildApp(workspace: String? = nil,
501
502
  resultBundlePath: String? = nil,
502
503
  buildlogPath: String = "~/Library/Logs/gym",
503
504
  sdk: String? = nil,
504
- toolchain: Any? = nil,
505
+ toolchain: String? = nil,
505
506
  destination: String? = nil,
506
507
  exportTeamId: String? = nil,
507
508
  xcargs: String? = nil,
508
509
  xcconfig: String? = nil,
509
510
  suppressXcodeOutput: Bool? = nil,
510
- disableXcpretty: Any? = nil,
511
- xcprettyTestFormat: Any? = nil,
511
+ disableXcpretty: Bool? = nil,
512
+ xcprettyTestFormat: Bool? = nil,
512
513
  xcprettyFormatter: String? = nil,
513
514
  xcprettyReportJunit: String? = nil,
514
515
  xcprettyReportHtml: String? = nil,
515
516
  xcprettyReportJson: String? = nil,
516
- analyzeBuildTime: Any? = nil,
517
- xcprettyUtf: Any? = nil,
517
+ analyzeBuildTime: Bool? = nil,
518
+ xcprettyUtf: Bool? = nil,
518
519
  skipProfileDetection: Bool = false) {
519
520
  let command = RubyCommand(commandID: "", methodName: "build_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
520
521
  RubyCommand.Argument(name: "project", value: project),
@@ -533,6 +534,7 @@ func buildApp(workspace: String? = nil,
533
534
  RubyCommand.Argument(name: "export_xcargs", value: exportXcargs),
534
535
  RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive),
535
536
  RubyCommand.Argument(name: "skip_archive", value: skipArchive),
537
+ RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning),
536
538
  RubyCommand.Argument(name: "build_path", value: buildPath),
537
539
  RubyCommand.Argument(name: "archive_path", value: archivePath),
538
540
  RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
@@ -574,6 +576,7 @@ func buildIosApp(workspace: String? = nil,
574
576
  exportXcargs: String? = nil,
575
577
  skipBuildArchive: Bool? = nil,
576
578
  skipArchive: Bool? = nil,
579
+ skipCodesigning: Bool? = nil,
577
580
  buildPath: String? = nil,
578
581
  archivePath: String? = nil,
579
582
  derivedDataPath: String? = nil,
@@ -581,20 +584,20 @@ func buildIosApp(workspace: String? = nil,
581
584
  resultBundlePath: String? = nil,
582
585
  buildlogPath: String = "~/Library/Logs/gym",
583
586
  sdk: String? = nil,
584
- toolchain: Any? = nil,
587
+ toolchain: String? = nil,
585
588
  destination: String? = nil,
586
589
  exportTeamId: String? = nil,
587
590
  xcargs: String? = nil,
588
591
  xcconfig: String? = nil,
589
592
  suppressXcodeOutput: Bool? = nil,
590
- disableXcpretty: Any? = nil,
591
- xcprettyTestFormat: Any? = nil,
593
+ disableXcpretty: Bool? = nil,
594
+ xcprettyTestFormat: Bool? = nil,
592
595
  xcprettyFormatter: String? = nil,
593
596
  xcprettyReportJunit: String? = nil,
594
597
  xcprettyReportHtml: String? = nil,
595
598
  xcprettyReportJson: String? = nil,
596
- analyzeBuildTime: Any? = nil,
597
- xcprettyUtf: Any? = nil,
599
+ analyzeBuildTime: Bool? = nil,
600
+ xcprettyUtf: Bool? = nil,
598
601
  skipProfileDetection: Bool = false) {
599
602
  let command = RubyCommand(commandID: "", methodName: "build_ios_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
600
603
  RubyCommand.Argument(name: "project", value: project),
@@ -613,6 +616,7 @@ func buildIosApp(workspace: String? = nil,
613
616
  RubyCommand.Argument(name: "export_xcargs", value: exportXcargs),
614
617
  RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive),
615
618
  RubyCommand.Argument(name: "skip_archive", value: skipArchive),
619
+ RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning),
616
620
  RubyCommand.Argument(name: "build_path", value: buildPath),
617
621
  RubyCommand.Argument(name: "archive_path", value: archivePath),
618
622
  RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
@@ -1206,6 +1210,7 @@ func danger(useBundleExec: Bool = true,
1206
1210
  githubApiToken: String? = nil,
1207
1211
  failOnErrors: Bool = false,
1208
1212
  newComment: Bool = false,
1213
+ removePreviousComments: Bool = false,
1209
1214
  base: String? = nil,
1210
1215
  head: String? = nil,
1211
1216
  pr: String? = nil) {
@@ -1216,6 +1221,7 @@ func danger(useBundleExec: Bool = true,
1216
1221
  RubyCommand.Argument(name: "github_api_token", value: githubApiToken),
1217
1222
  RubyCommand.Argument(name: "fail_on_errors", value: failOnErrors),
1218
1223
  RubyCommand.Argument(name: "new_comment", value: newComment),
1224
+ RubyCommand.Argument(name: "remove_previous_comments", value: removePreviousComments),
1219
1225
  RubyCommand.Argument(name: "base", value: base),
1220
1226
  RubyCommand.Argument(name: "head", value: head),
1221
1227
  RubyCommand.Argument(name: "pr", value: pr)])
@@ -1393,7 +1399,8 @@ func downloadDsyms(username: String,
1393
1399
  version: String? = nil,
1394
1400
  buildNumber: String? = nil,
1395
1401
  minVersion: String? = nil,
1396
- outputDirectory: String? = nil) {
1402
+ outputDirectory: String? = nil,
1403
+ waitForDsymProcessing: Bool = false) {
1397
1404
  let command = RubyCommand(commandID: "", methodName: "download_dsyms", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
1398
1405
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
1399
1406
  RubyCommand.Argument(name: "team_id", value: teamId),
@@ -1402,7 +1409,8 @@ func downloadDsyms(username: String,
1402
1409
  RubyCommand.Argument(name: "version", value: version),
1403
1410
  RubyCommand.Argument(name: "build_number", value: buildNumber),
1404
1411
  RubyCommand.Argument(name: "min_version", value: minVersion),
1405
- RubyCommand.Argument(name: "output_directory", value: outputDirectory)])
1412
+ RubyCommand.Argument(name: "output_directory", value: outputDirectory),
1413
+ RubyCommand.Argument(name: "wait_for_dsym_processing", value: waitForDsymProcessing)])
1406
1414
  _ = runner.executeCommand(command)
1407
1415
  }
1408
1416
  func downloadFromPlayStore(packageName: String,
@@ -1812,6 +1820,7 @@ func gym(workspace: Any? = gymfile.workspace,
1812
1820
  exportXcargs: Any? = gymfile.exportXcargs,
1813
1821
  skipBuildArchive: Bool? = gymfile.skipBuildArchive,
1814
1822
  skipArchive: Bool? = gymfile.skipArchive,
1823
+ skipCodesigning: Bool? = gymfile.skipCodesigning,
1815
1824
  buildPath: Any? = gymfile.buildPath,
1816
1825
  archivePath: Any? = gymfile.archivePath,
1817
1826
  derivedDataPath: Any? = gymfile.derivedDataPath,
@@ -1825,14 +1834,14 @@ func gym(workspace: Any? = gymfile.workspace,
1825
1834
  xcargs: Any? = gymfile.xcargs,
1826
1835
  xcconfig: Any? = gymfile.xcconfig,
1827
1836
  suppressXcodeOutput: Bool? = gymfile.suppressXcodeOutput,
1828
- disableXcpretty: Any? = gymfile.disableXcpretty,
1829
- xcprettyTestFormat: Any? = gymfile.xcprettyTestFormat,
1837
+ disableXcpretty: Bool? = gymfile.disableXcpretty,
1838
+ xcprettyTestFormat: Bool? = gymfile.xcprettyTestFormat,
1830
1839
  xcprettyFormatter: Any? = gymfile.xcprettyFormatter,
1831
1840
  xcprettyReportJunit: Any? = gymfile.xcprettyReportJunit,
1832
1841
  xcprettyReportHtml: Any? = gymfile.xcprettyReportHtml,
1833
1842
  xcprettyReportJson: Any? = gymfile.xcprettyReportJson,
1834
- analyzeBuildTime: Any? = gymfile.analyzeBuildTime,
1835
- xcprettyUtf: Any? = gymfile.xcprettyUtf,
1843
+ analyzeBuildTime: Bool? = gymfile.analyzeBuildTime,
1844
+ xcprettyUtf: Bool? = gymfile.xcprettyUtf,
1836
1845
  skipProfileDetection: Bool = gymfile.skipProfileDetection) {
1837
1846
  let command = RubyCommand(commandID: "", methodName: "gym", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
1838
1847
  RubyCommand.Argument(name: "project", value: project),
@@ -1851,6 +1860,7 @@ func gym(workspace: Any? = gymfile.workspace,
1851
1860
  RubyCommand.Argument(name: "export_xcargs", value: exportXcargs),
1852
1861
  RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive),
1853
1862
  RubyCommand.Argument(name: "skip_archive", value: skipArchive),
1863
+ RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning),
1854
1864
  RubyCommand.Argument(name: "build_path", value: buildPath),
1855
1865
  RubyCommand.Argument(name: "archive_path", value: archivePath),
1856
1866
  RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
@@ -3306,7 +3316,7 @@ func slather(buildDirectory: String? = nil,
3306
3316
  verbose: Bool? = nil,
3307
3317
  useBundleExec: Bool = false,
3308
3318
  binaryBasename: Bool = false,
3309
- binaryFile: String? = nil,
3319
+ binaryFile: [String]? = nil,
3310
3320
  arch: String? = nil,
3311
3321
  sourceFiles: Bool = false,
3312
3322
  decimals: Bool = false) {
@@ -4399,6 +4409,7 @@ let precheckfile: Precheckfile = Precheckfile()
4399
4409
  let scanfile: Scanfile = Scanfile()
4400
4410
  let screengrabfile: Screengrabfile = Screengrabfile()
4401
4411
  let snapshotfile: Snapshotfile = Snapshotfile()
4412
+
4402
4413
  // Please don't remove the lines below
4403
4414
  // They are used to detect outdated files
4404
- // FastlaneRunnerAPIVersion [0.9.55]
4415
+ // FastlaneRunnerAPIVersion [0.9.56]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.129.0
21
+ // Generated with fastlane 2.130.0
@@ -16,6 +16,7 @@ protocol GymfileProtocol: class {
16
16
  var exportXcargs: String? { get }
17
17
  var skipBuildArchive: Bool? { get }
18
18
  var skipArchive: Bool? { get }
19
+ var skipCodesigning: Bool? { get }
19
20
  var buildPath: String? { get }
20
21
  var archivePath: String? { get }
21
22
  var derivedDataPath: String? { get }
@@ -29,14 +30,14 @@ protocol GymfileProtocol: class {
29
30
  var xcargs: String? { get }
30
31
  var xcconfig: String? { get }
31
32
  var suppressXcodeOutput: Bool? { get }
32
- var disableXcpretty: String? { get }
33
- var xcprettyTestFormat: String? { get }
33
+ var disableXcpretty: Bool? { get }
34
+ var xcprettyTestFormat: Bool? { get }
34
35
  var xcprettyFormatter: String? { get }
35
36
  var xcprettyReportJunit: String? { get }
36
37
  var xcprettyReportHtml: String? { get }
37
38
  var xcprettyReportJson: String? { get }
38
- var analyzeBuildTime: String? { get }
39
- var xcprettyUtf: String? { get }
39
+ var analyzeBuildTime: Bool? { get }
40
+ var xcprettyUtf: Bool? { get }
40
41
  var skipProfileDetection: Bool { get }
41
42
  }
42
43
 
@@ -58,6 +59,7 @@ extension GymfileProtocol {
58
59
  var exportXcargs: String? { return nil }
59
60
  var skipBuildArchive: Bool? { return nil }
60
61
  var skipArchive: Bool? { return nil }
62
+ var skipCodesigning: Bool? { return nil }
61
63
  var buildPath: String? { return nil }
62
64
  var archivePath: String? { return nil }
63
65
  var derivedDataPath: String? { return nil }
@@ -71,17 +73,17 @@ extension GymfileProtocol {
71
73
  var xcargs: String? { return nil }
72
74
  var xcconfig: String? { return nil }
73
75
  var suppressXcodeOutput: Bool? { return nil }
74
- var disableXcpretty: String? { return nil }
75
- var xcprettyTestFormat: String? { return nil }
76
+ var disableXcpretty: Bool? { return nil }
77
+ var xcprettyTestFormat: Bool? { return nil }
76
78
  var xcprettyFormatter: String? { return nil }
77
79
  var xcprettyReportJunit: String? { return nil }
78
80
  var xcprettyReportHtml: String? { return nil }
79
81
  var xcprettyReportJson: String? { return nil }
80
- var analyzeBuildTime: String? { return nil }
81
- var xcprettyUtf: String? { return nil }
82
+ var analyzeBuildTime: Bool? { return nil }
83
+ var xcprettyUtf: Bool? { return nil }
82
84
  var skipProfileDetection: Bool { return false }
83
85
  }
84
86
 
85
87
  // Please don't remove the lines below
86
88
  // They are used to detect outdated files
87
- // FastlaneRunnerAPIVersion [0.9.4]
89
+ // FastlaneRunnerAPIVersion [0.9.5]
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.129.0
21
+ // Generated with fastlane 2.130.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.129.0
21
+ // Generated with fastlane 2.130.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.129.0
21
+ // Generated with fastlane 2.130.0
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.129.0
21
+ // Generated with fastlane 2.130.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.129.0
21
+ // Generated with fastlane 2.130.0
@@ -1 +1 @@
1
- {"Fastlane.swift":"Autogenerated API","DeliverfileProtocol.swift":"Autogenerated API","GymfileProtocol.swift":"Autogenerated API","MatchfileProtocol.swift":"Autogenerated API","PrecheckfileProtocol.swift":"Autogenerated API","ScanfileProtocol.swift":"Autogenerated API","ScreengrabfileProtocol.swift":"Autogenerated API","SnapshotfileProtocol.swift":"Autogenerated API","LaneFileProtocol.swift":"Fastfile Components","ControlCommand.swift":"Networking","RubyCommand.swift":"Networking","RubyCommandable.swift":"Networking","Runner.swift":"Networking","SocketClient.swift":"Networking","SocketClientDelegateProtocol.swift":"Networking","SocketResponse.swift":"Networking","ArgumentProcessor.swift":"Runner Code","main.swift":"Runner Code","RunnerArgument.swift":"Runner Code"}
1
+ {"Actions.swift":"Autogenerated API","Fastlane.swift":"Autogenerated API","DeliverfileProtocol.swift":"Autogenerated API","GymfileProtocol.swift":"Autogenerated API","MatchfileProtocol.swift":"Autogenerated API","Plugins.swift":"Autogenerated API","PrecheckfileProtocol.swift":"Autogenerated API","ScanfileProtocol.swift":"Autogenerated API","ScreengrabfileProtocol.swift":"Autogenerated API","SnapshotfileProtocol.swift":"Autogenerated API","LaneFileProtocol.swift":"Fastfile Components","ControlCommand.swift":"Networking","RubyCommand.swift":"Networking","RubyCommandable.swift":"Networking","Runner.swift":"Networking","SocketClient.swift":"Networking","SocketClientDelegateProtocol.swift":"Networking","SocketResponse.swift":"Networking","ArgumentProcessor.swift":"Runner Code","main.swift":"Runner Code","RunnerArgument.swift":"Runner Code"}
@@ -72,7 +72,7 @@ module FastlaneCore
72
72
  # @return [boolean] true if building in a known CI environment
73
73
  def self.ci?
74
74
  # Check for Jenkins, Travis CI, ... environment variables
75
- ['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CIRCLECI', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD'].each do |current|
75
+ ['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CIRCLECI', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION'].each do |current|
76
76
  return true if ENV.key?(current)
77
77
  end
78
78
  return false
@@ -58,7 +58,11 @@ module Gym
58
58
 
59
59
  def setting
60
60
  setting = []
61
- setting << "CODE_SIGN_IDENTITY=#{Gym.config[:codesigning_identity].shellescape}" if Gym.config[:codesigning_identity]
61
+ if Gym.config[:skip_codesigning]
62
+ setting << "CODE_SIGN_IDENTITY='' CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS='' CODE_SIGNING_ALLOWED=NO"
63
+ elsif Gym.config[:codesigning_identity]
64
+ setting << "CODE_SIGN_IDENTITY=#{Gym.config[:codesigning_identity].shellescape}"
65
+ end
62
66
  setting
63
67
  end
64
68
 
@@ -134,6 +134,11 @@ module Gym
134
134
  description: "After building, don't archive, effectively not including -archivePath param",
135
135
  type: Boolean,
136
136
  optional: true),
137
+ FastlaneCore::ConfigItem.new(key: :skip_codesigning,
138
+ env_name: "GYM_SKIP_CODESIGNING",
139
+ description: "Build without codesigning",
140
+ type: Boolean,
141
+ optional: true),
137
142
  # Very optional
138
143
  FastlaneCore::ConfigItem.new(key: :build_path,
139
144
  env_name: "GYM_BUILD_PATH",
@@ -12,7 +12,42 @@ module Sigh
12
12
  Spaceship.select_team
13
13
  UI.message("Successfully logged in")
14
14
 
15
- Spaceship.provisioning_profile.all(xcode: download_xcode_profiles).each do |profile|
15
+ case Sigh.config[:platform].to_s
16
+ when 'ios'
17
+ download_profiles(Spaceship.provisioning_profile.all(xcode: download_xcode_profiles))
18
+ xcode_profiles_downloaded?(xcode: download_xcode_profiles, supported: true)
19
+ when 'macos'
20
+ download_profiles(Spaceship.provisioning_profile.all(mac: true, xcode: download_xcode_profiles))
21
+ xcode_profiles_downloaded?(xcode: download_xcode_profiles, supported: true)
22
+ when 'tvos'
23
+ download_profiles(Spaceship.provisioning_profile.all_tvos)
24
+ xcode_profiles_downloaded?(xcode: download_xcode_profiles, supported: false)
25
+ end
26
+ end
27
+
28
+ # @param xcode [Bool] Whether or not the user passed the download_xcode_profiles flag
29
+ # @param supported [Bool] Whether or not this platform supports downloading xcode profiles at all
30
+ def xcode_profiles_downloaded?(xcode: false, supported: false)
31
+ if supported
32
+ if xcode
33
+ UI.message("This run also included all Xcode managed provisioning profiles, as you used the `--download_xcode_profiles` flag")
34
+ elsif !xcode
35
+ UI.message("All Xcode managed provisioning profiles were ignored on this, to include them use the `--download_xcode_profiles` flag")
36
+ end
37
+
38
+ elsif !supported
39
+ if xcode
40
+ UI.important("Downloading Xcode managed profiles is not supported for platform #{Sigh.config[:platform]}")
41
+ return
42
+ end
43
+ end
44
+ end
45
+
46
+ # @param profiles [Array] Array of all the provisioning profiles we want to download
47
+ def download_profiles(profiles)
48
+ UI.important("No profiles available for download") if profiles.empty?
49
+
50
+ profiles.each do |profile|
16
51
  if profile.valid?
17
52
  UI.message("Downloading profile '#{profile.name}'...")
18
53
  download_profile(profile)
@@ -20,19 +55,24 @@ module Sigh
20
55
  UI.important("Skipping invalid/expired profile '#{profile.name}'")
21
56
  end
22
57
  end
23
-
24
- if download_xcode_profiles
25
- UI.message("This run also included all Xcode managed provisioning profiles, as you used the `--download_xcode_profiles` flag")
26
- else
27
- UI.message("All Xcode managed provisioning profiles were ignored on this, to include them use the `--download_xcode_profiles` flag")
28
- end
29
58
  end
30
59
 
60
+ # @param profile [ProvisioningProfile] A profile we plan to download and store
31
61
  def download_profile(profile)
32
62
  FileUtils.mkdir_p(Sigh.config[:output_path])
33
63
 
34
64
  type_name = profile.class.pretty_type
35
- profile_name = "#{type_name}_#{profile.uuid}_#{profile.app.bundle_id}.mobileprovision" # default name
65
+ profile_name = "#{type_name}_#{profile.uuid}_#{profile.app.bundle_id}"
66
+
67
+ if Sigh.config[:platform].to_s == 'tvos'
68
+ profile_name += "_tvos"
69
+ end
70
+
71
+ if Sigh.config[:platform].to_s == 'macos'
72
+ profile_name += '.provisionprofile'
73
+ else
74
+ profile_name += '.mobileprovision'
75
+ end
36
76
 
37
77
  output_path = File.join(Sigh.config[:output_path], profile_name)
38
78
  File.open(output_path, "wb") do |f|
@@ -1,5 +1,6 @@
1
1
  require_relative 'territory'
2
2
  require_relative 'b2b_user'
3
+ require_relative 'b2b_organization'
3
4
  module Spaceship
4
5
  module Tunes
5
6
  class Availability < TunesBase
@@ -27,6 +28,9 @@ module Spaceship
27
28
  # @return (Array of Spaceship::Tunes::B2bUser objects) A list of users
28
29
  attr_accessor :b2b_users
29
30
 
31
+ # @return (Array of Spaceship::Tunes::B2bOrganization objects) A list of b2b orgs
32
+ attr_accessor :b2b_organizations
33
+
30
34
  attr_mapping(
31
35
  'theWorld' => :include_future_territories,
32
36
  'preOrder.clearedForPreOrder.value' => :cleared_for_preorder,
@@ -47,12 +51,12 @@ module Spaceship
47
51
  # Base::DataHash sets values for paths that don't exist
48
52
  obj = self.new(
49
53
  'preOrder' => {
50
- 'clearedForPreOrder' => {
51
- 'value' => false
52
- },
53
- 'appAvailableDate' => {
54
- 'value' => nil
55
- }
54
+ 'clearedForPreOrder' => {
55
+ 'value' => false
56
+ },
57
+ 'appAvailableDate' => {
58
+ 'value' => nil
59
+ }
56
60
  }
57
61
  )
58
62
 
@@ -66,8 +70,8 @@ module Spaceship
66
70
  obj.include_future_territories = params.fetch(:include_future_territories, true)
67
71
  obj.cleared_for_preorder = params.fetch(:cleared_for_preorder, false)
68
72
  obj.app_available_date = params.fetch(:app_available_date, nil)
69
- obj.b2b_unavailable = params.fetch(:b2b_unavailable, false)
70
- obj.b2b_app_enabled = params.fetch(:b2b_app_enabled, false)
73
+ obj.b2b_unavailable = params.fetch(:b2b_unavailable, false)
74
+ obj.b2b_app_enabled = params.fetch(:b2b_app_enabled, false)
71
75
  obj.educational_discount = params.fetch(:educational_discount, true)
72
76
  return obj
73
77
  end
@@ -80,6 +84,10 @@ module Spaceship
80
84
  @b2b_users || raw_data['b2bUsers'].map { |user| B2bUser.new(user) }
81
85
  end
82
86
 
87
+ def b2b_organizations
88
+ @b2b_organizations || raw_data['b2bOrganizations'].map { |user| B2bOrganization.new(user) }
89
+ end
90
+
83
91
  def b2b_app_enabled
84
92
  @b2b_app_enabled.nil? ? raw_data['b2bAppEnabled'] : @b2b_app_enabled
85
93
  end
@@ -127,6 +135,30 @@ module Spaceship
127
135
 
128
136
  return self
129
137
  end
138
+
139
+ # Updates users for b2b enabled apps
140
+ def update_dep_organizations(organization_list = [])
141
+ raise "Cannot add dep organizations if b2b is not enabled" unless b2b_app_enabled
142
+
143
+ added_orgs = b2b_organizations
144
+
145
+ # Returns if list is unchanged
146
+ return self if (added_orgs - organization_list) == (organization_list - added_orgs)
147
+
148
+ orgs_to_add = organization_list.reject { |organization| added_orgs.include?(organization) }
149
+ orgs_to_remove = added_orgs.nil? ? organization_list : added_orgs.reject { |organization| organization_list.include?(organization) }
150
+
151
+ @b2b_organizations = b2b_organizations.reject { |organization| orgs_to_remove.include?(organization) }
152
+ @b2b_organizations.concat(orgs_to_add)
153
+ @b2b_organizations.concat(orgs_to_remove.map do |organization|
154
+ B2bOrganization.from_id_info(dep_id: organization.dep_customer_id,
155
+ dep_name: organization.name,
156
+ dep_org_id: organization.dep_organization_id,
157
+ type: false)
158
+ end)
159
+
160
+ return self
161
+ end
130
162
  end
131
163
  end
132
164
  end
@@ -0,0 +1,50 @@
1
+ require_relative 'tunes_base'
2
+ module Spaceship
3
+ module Tunes
4
+ class B2bOrganization < TunesBase
5
+ # @return (String) add or remove
6
+ attr_accessor :type
7
+
8
+ # @return (String) customer id
9
+ attr_accessor :dep_customer_id
10
+
11
+ # @return (String) organization id
12
+ attr_accessor :dep_organization_id
13
+
14
+ # @return (String) organization name
15
+ attr_accessor :name
16
+
17
+ # enum for types
18
+ class TYPE
19
+ ADD = "ADD"
20
+ REMOVE = "REMOVE"
21
+ NO_CHANGE = "NO_CHANGE"
22
+ end
23
+
24
+ attr_mapping(
25
+ 'value.type' => :type,
26
+ 'value.depCustomerId' => :dep_customer_id,
27
+ 'value.organizationId' => :dep_organization_id,
28
+ 'value.name' => :name
29
+ )
30
+
31
+ def self.from_id_info(dep_id: nil, dep_org_id: nil, dep_name: nil, type: TYPE::NO_CHANGE)
32
+ self.new({ "value" => { "type" => type, "depCustomerId" => dep_id, "organizationId" => dep_org_id, "name" => dep_name } })
33
+ end
34
+
35
+ def ==(other)
36
+ other.class == self.class && other.state == self.state
37
+ end
38
+
39
+ def state
40
+ return [type, dep_customer_id, name]
41
+ end
42
+
43
+ alias eql? ==
44
+
45
+ def hash
46
+ state.hash
47
+ end
48
+ end
49
+ end
50
+ end
@@ -718,7 +718,7 @@ module Spaceship
718
718
  data["preOrder"]["clearedForPreOrder"] = { "value" => cleared_for_preorder, "isEditable" => true, "isRequired" => true, "errorKeys" => nil }
719
719
  data["preOrder"]["appAvailableDate"] = { "value" => app_available_date, "isEditable" => true, "isRequired" => true, "errorKeys" => nil }
720
720
  data["b2bUsers"] = availability.b2b_app_enabled ? availability.b2b_users.map { |user| { "value" => { "add" => user.add, "delete" => user.delete, "dsUsername" => user.ds_username } } } : []
721
-
721
+ data["b2bOrganizations"] = availability.b2b_app_enabled ? availability.b2b_organizations.map { |org| { "value" => { "type" => org.type, "depCustomerId" => org.dep_customer_id, "organizationId" => org.dep_organization_id, "name" => org.name } } } : []
722
722
  # send the changes back to Apple
723
723
  r = request(:post) do |req|
724
724
  req.url("ra/apps/#{app_id}/pricing/intervals")
metadata CHANGED
@@ -1,33 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.130.0.beta.20190825200030
4
+ version: 2.131.0.beta.20190830200038
5
5
  platform: ruby
6
6
  authors:
7
- - Jorge Revuelta H
8
- - Olivier Halligon
9
- - Aaron Brager
7
+ - Felix Krause
8
+ - Matthew Ellis
10
9
  - Joshua Liebowitz
11
10
  - Fumiya Nakamura
11
+ - Danielle Tomlinson
12
12
  - Kohki Miki
13
- - Jan Piotrowski
14
- - Jimmy Dee
15
- - Andrew McBurney
16
- - Maksym Grebenets
17
13
  - Stefan Natchev
18
- - Matthew Ellis
14
+ - Jimmy Dee
15
+ - Luka Mirosevic
19
16
  - Jérôme Lacoste
17
+ - Josh Holtz
18
+ - Maksym Grebenets
19
+ - Helmut Januschka
20
20
  - Iulian Onofrei
21
- - Danielle Tomlinson
21
+ - Aaron Brager
22
+ - Andrew McBurney
22
23
  - Manu Wallner
23
- - Felix Krause
24
- - Luka Mirosevic
25
- - Helmut Januschka
26
- - Josh Holtz
24
+ - Jan Piotrowski
25
+ - Jorge Revuelta H
26
+ - Olivier Halligon
27
27
  autorequire:
28
28
  bindir: bin
29
29
  cert_chain: []
30
- date: 2019-08-25 00:00:00.000000000 Z
30
+ date: 2019-08-30 00:00:00.000000000 Z
31
31
  dependencies:
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: slack-notifier
@@ -1690,6 +1690,7 @@ files:
1690
1690
  - spaceship/lib/spaceship/tunes/app_version_states_history.rb
1691
1691
  - spaceship/lib/spaceship/tunes/application.rb
1692
1692
  - spaceship/lib/spaceship/tunes/availability.rb
1693
+ - spaceship/lib/spaceship/tunes/b2b_organization.rb
1693
1694
  - spaceship/lib/spaceship/tunes/b2b_user.rb
1694
1695
  - spaceship/lib/spaceship/tunes/build.rb
1695
1696
  - spaceship/lib/spaceship/tunes/build_details.rb
@@ -1745,24 +1746,24 @@ metadata:
1745
1746
  post_install_message:
1746
1747
  rdoc_options: []
1747
1748
  require_paths:
1749
+ - deliver/lib
1748
1750
  - produce/lib
1749
- - gym/lib
1750
- - pilot/lib
1751
- - pem/lib
1751
+ - precheck/lib
1752
+ - frameit/lib
1752
1753
  - supply/lib
1754
+ - fastlane_core/lib
1755
+ - cert/lib
1756
+ - pilot/lib
1753
1757
  - screengrab/lib
1754
- - frameit/lib
1758
+ - sigh/lib
1755
1759
  - scan/lib
1756
- - cert/lib
1757
- - fastlane/lib
1758
- - snapshot/lib
1759
1760
  - credentials_manager/lib
1760
- - deliver/lib
1761
+ - gym/lib
1761
1762
  - spaceship/lib
1762
- - precheck/lib
1763
- - fastlane_core/lib
1763
+ - snapshot/lib
1764
1764
  - match/lib
1765
- - sigh/lib
1765
+ - fastlane/lib
1766
+ - pem/lib
1766
1767
  required_ruby_version: !ruby/object:Gem::Requirement
1767
1768
  requirements:
1768
1769
  - - ">="