fastlane 2.118.0.beta.20190314200016 → 2.118.0.beta.20190315200105

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b95b424328c54b130d7cc2d520287a5d15effe9c
4
- data.tar.gz: 5bdfbd7be137258f89cd5bccc1b8e274add20afe
3
+ metadata.gz: 8068e89b3f12ff2ac5b7bcfde2a67348fd6ffdca
4
+ data.tar.gz: 436903e09ea72d51e5f2cbd1b1a02ca346f4dce7
5
5
  SHA512:
6
- metadata.gz: 947651c2d9be09028f3f58ab0486eb61ba0e918546efc9a145f38ab641f936cd3b89cdc222412a2630a3cee0a1868a65f75488f78e8325d44cb0e335897fa2de
7
- data.tar.gz: 0f3d6afb92b00cc52a5f20e379eb66f7c021685965f49cfcbc3cbdf912ebe2abf29809c77431ac7420defffa33e454ea0c634f6a28820ca861e57f8f470c8dd9
6
+ metadata.gz: 57806cde3a09796c20a42767d08f95cbc543c134f2a51c04ddb9c9e04cf5ed45ee938f83055a3d0e0c48578fc296dbe7dba6f92254fff03e28e59aaffa334d1f
7
+ data.tar.gz: bae632239408a02afbdd7ebd3b06c22b42370ae44eaabfaaf0b685a4b2906136e92f7df0d4d0f3b09096a55844a1b3b7c3d003195f261281ea097688db05c53c
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.118.0.beta.20190314200016'.freeze
2
+ VERSION = '2.118.0.beta.20190315200105'.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
@@ -50,6 +50,12 @@ module Pilot
50
50
  end
51
51
 
52
52
  UI.message("If you want to skip waiting for the processing to be finished, use the `skip_waiting_for_build_processing` option")
53
+ latest_build = wait_for_build_processing_to_be_complete
54
+ distribute(options, build: latest_build)
55
+ end
56
+
57
+ def wait_for_build_processing_to_be_complete
58
+ platform = fetch_app_platform
53
59
  app_version = FastlaneCore::IpaFileAnalyser.fetch_app_version(config[:ipa])
54
60
  app_build = FastlaneCore::IpaFileAnalyser.fetch_app_build(config[:ipa])
55
61
  latest_build = FastlaneCore::BuildWatcher.wait_for_build_processing_to_be_complete(app_id: app.apple_id, platform: platform, train_version: app_version, build_version: app_build, poll_interval: config[:wait_processing_interval], strict_build_watch: config[:wait_for_uploaded_build])
@@ -58,7 +64,7 @@ module Pilot
58
64
  UI.important("Uploaded app #{app_version} - #{app_build}, but received build #{latest_build.train_version} - #{latest_build.build_version}. If you want to wait for uploaded build to be finished processing, use the `wait_for_uploaded_build` option")
59
65
  end
60
66
 
61
- distribute(options, build: latest_build)
67
+ return latest_build
62
68
  end
63
69
 
64
70
  def distribute(options, build: nil)
@@ -210,7 +216,7 @@ module Pilot
210
216
  UI.message("Distributing new build to testers: #{uploaded_build.train_version} - #{uploaded_build.build_version}")
211
217
 
212
218
  # This is where we could add a check to see if encryption is required and has been updated
213
- uploaded_build.export_compliance.encryption_updated = false
219
+ set_export_compliance_if_needed(uploaded_build, options)
214
220
 
215
221
  if options[:groups] || options[:distribute_external]
216
222
  begin
@@ -241,16 +247,27 @@ module Pilot
241
247
  if external_group.nil? && options[:groups].nil?
242
248
  UI.user_error!("You must specify at least one group using the `:groups` option to distribute externally")
243
249
  end
244
- else # distribute internally
245
- # in case any changes to export_compliance are required
246
- if uploaded_build.export_compliance_missing?
247
- uploaded_build.save!
248
- end
249
250
  end
250
251
 
251
252
  true
252
253
  end
253
254
 
255
+ def set_export_compliance_if_needed(uploaded_build, options)
256
+ build = uploaded_build.find_app_store_connect_build
257
+ build_attributes = build["attributes"] || {}
258
+ if build_attributes["usesNonExemptEncryption"].nil?
259
+ uses_non_exempt_encryption = options[:uses_non_exempt_encryption]
260
+ attributes = { usesNonExemptEncryption: uses_non_exempt_encryption }
261
+
262
+ client = Spaceship::ConnectAPI::Base.client
263
+ client.patch_builds(build_id: build["id"], attributes: attributes)
264
+
265
+ UI.important("Export comlpiance has been set to '#{uses_non_exempt_encryption}'. Need to wait for build to finishing processing again...")
266
+ UI.important("Set 'ITSAppUsesNonExemptEncryption' in the 'Info.plist' to skip this step and speed up the submission")
267
+ wait_for_build_processing_to_be_complete
268
+ end
269
+ end
270
+
254
271
  def update_review_detail(app_id, info)
255
272
  info = info.collect { |k, v| [k.to_sym, v] }.to_h
256
273
 
@@ -134,6 +134,12 @@ module Pilot
134
134
  default_value: false),
135
135
 
136
136
  # distribution
137
+ FastlaneCore::ConfigItem.new(key: :uses_non_exempt_encryption,
138
+ short_option: "-X",
139
+ env_name: "PILOT_USES_NON_EXEMPT_ENCRYPTION",
140
+ description: "Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist",
141
+ default_value: false,
142
+ type: Boolean),
137
143
  FastlaneCore::ConfigItem.new(key: :distribute_external,
138
144
  is_string: false,
139
145
  env_name: "PILOT_DISTRIBUTE_EXTERNAL",
@@ -156,7 +156,12 @@ open class Snapshot: NSObject {
156
156
  sleep(1) // Waiting for the animation to be finished (kind of)
157
157
 
158
158
  #if os(OSX)
159
- XCUIApplication().typeKey(XCUIKeyboardKeySecondaryFn, modifierFlags: [])
159
+ guard let app = self.app else {
160
+ print("XCUIApplication is not set. Please call setupSnapshot(app) before snapshot().")
161
+ return
162
+ }
163
+
164
+ app.typeKey(XCUIKeyboardKeySecondaryFn, modifierFlags: [])
160
165
  #else
161
166
 
162
167
  guard let app = self.app else {
@@ -182,7 +187,12 @@ open class Snapshot: NSObject {
182
187
  return
183
188
  #endif
184
189
 
185
- let networkLoadingIndicator = XCUIApplication().otherElements.deviceStatusBars.networkLoadingIndicators.element
190
+ guard let app = self.app else {
191
+ print("XCUIApplication is not set. Please call setupSnapshot(app) before snapshot().")
192
+ return
193
+ }
194
+
195
+ let networkLoadingIndicator = app.otherElements.deviceStatusBars.networkLoadingIndicators.element
186
196
  let networkLoadingIndicatorDisappeared = XCTNSPredicateExpectation(predicate: NSPredicate(format: "exists == false"), object: networkLoadingIndicator)
187
197
  _ = XCTWaiter.wait(for: [networkLoadingIndicatorDisappeared], timeout: timeout)
188
198
  }
@@ -257,7 +267,11 @@ private extension XCUIElementQuery {
257
267
  }
258
268
 
259
269
  var deviceStatusBars: XCUIElementQuery {
260
- let deviceWidth = XCUIApplication().windows.firstMatch.frame.width
270
+ guard let app = Snapshot.app else {
271
+ fatalError("XCUIApplication is not set. Please call setupSnapshot(app) before snapshot().")
272
+ }
273
+
274
+ let deviceWidth = app.windows.firstMatch.frame.width
261
275
 
262
276
  let isStatusBar = NSPredicate { (evaluatedObject, _) in
263
277
  guard let element = evaluatedObject as? XCUIElementAttributes else { return false }
@@ -230,6 +230,27 @@ module Spaceship
230
230
  handle_response(response)
231
231
  end
232
232
 
233
+ def patch_builds(build_id: nil, attributes: {})
234
+ # PATCH
235
+ # https://appstoreconnect.apple.com/iris/v1/builds/<build_id>
236
+ path = "builds/#{build_id}"
237
+
238
+ body = {
239
+ data: {
240
+ attributes: attributes,
241
+ id: build_id,
242
+ type: "builds"
243
+ }
244
+ }
245
+
246
+ response = request(:patch) do |req|
247
+ req.url(path)
248
+ req.body = body.to_json
249
+ req.headers['Content-Type'] = 'application/json'
250
+ end
251
+ handle_response(response)
252
+ end
253
+
233
254
  def post_beta_app_review_submissions(build_id: nil)
234
255
  # POST
235
256
  # https://appstoreconnect.apple.com/iris/v1/betaAppReviewSubmissions
@@ -217,9 +217,7 @@ module Spaceship
217
217
  return if ready_to_test?
218
218
  return if approved?
219
219
 
220
- resp = Spaceship::ConnectAPI::Base.client.get_builds(filter: { expired: false, processingState: "PROCESSING,VALID", version: self.build_version })
221
- build = resp.first
222
-
220
+ build = find_app_store_connect_build
223
221
  Spaceship::ConnectAPI::Base.client.post_beta_app_review_submissions(build_id: build["id"])
224
222
  end
225
223
 
@@ -230,6 +228,12 @@ module Spaceship
230
228
  def add_group!(group)
231
229
  client.add_group_to_build(app_id: app_id, group_id: group.id, build_id: id)
232
230
  end
231
+
232
+ # Bridges the TestFlight::Build to the App Store Connect API build
233
+ def find_app_store_connect_build
234
+ resp = Spaceship::ConnectAPI::Base.client.get_builds(filter: { expired: false, processingState: "PROCESSING,VALID", version: self.build_version })
235
+ resp.first
236
+ end
233
237
  end
234
238
  end
235
239
  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.118.0.beta.20190314200016
4
+ version: 2.118.0.beta.20190315200105
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jimmy Dee
@@ -27,7 +27,7 @@ authors:
27
27
  autorequire:
28
28
  bindir: bin
29
29
  cert_chain: []
30
- date: 2019-03-14 00:00:00.000000000 Z
30
+ date: 2019-03-15 00:00:00.000000000 Z
31
31
  dependencies:
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: slack-notifier
@@ -1687,24 +1687,24 @@ metadata:
1687
1687
  post_install_message:
1688
1688
  rdoc_options: []
1689
1689
  require_paths:
1690
- - pilot/lib
1691
- - match/lib
1692
- - fastlane_core/lib
1693
- - gym/lib
1694
1690
  - precheck/lib
1695
- - produce/lib
1696
- - screengrab/lib
1697
- - sigh/lib
1698
- - spaceship/lib
1699
- - credentials_manager/lib
1691
+ - pem/lib
1692
+ - deliver/lib
1700
1693
  - cert/lib
1694
+ - spaceship/lib
1701
1695
  - scan/lib
1696
+ - frameit/lib
1702
1697
  - snapshot/lib
1703
- - deliver/lib
1698
+ - produce/lib
1699
+ - sigh/lib
1704
1700
  - supply/lib
1705
- - pem/lib
1706
- - frameit/lib
1701
+ - gym/lib
1702
+ - credentials_manager/lib
1703
+ - pilot/lib
1704
+ - screengrab/lib
1705
+ - match/lib
1707
1706
  - fastlane/lib
1707
+ - fastlane_core/lib
1708
1708
  required_ruby_version: !ruby/object:Gem::Requirement
1709
1709
  requirements:
1710
1710
  - - ">="