fastlane 2.138.0 → 2.139.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +66 -66
  3. data/deliver/lib/deliver/submit_for_review.rb +7 -1
  4. data/fastlane/lib/fastlane/action.rb +1 -1
  5. data/fastlane/lib/fastlane/actions/create_pull_request.rb +42 -2
  6. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +10 -0
  7. data/fastlane/lib/fastlane/actions/last_git_tag.rb +14 -5
  8. data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -8
  9. data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
  10. data/fastlane/lib/fastlane/version.rb +1 -1
  11. data/fastlane/swift/Deliverfile.swift +1 -1
  12. data/fastlane/swift/Fastlane.swift +64 -10
  13. data/fastlane/swift/Gymfile.swift +1 -1
  14. data/fastlane/swift/Matchfile.swift +1 -1
  15. data/fastlane/swift/Precheckfile.swift +1 -1
  16. data/fastlane/swift/Scanfile.swift +1 -1
  17. data/fastlane/swift/ScanfileProtocol.swift +5 -1
  18. data/fastlane/swift/Screengrabfile.swift +1 -1
  19. data/fastlane/swift/Snapshotfile.swift +1 -1
  20. data/fastlane_core/lib/fastlane_core/build_watcher.rb +6 -2
  21. data/fastlane_core/lib/fastlane_core/device_manager.rb +20 -0
  22. data/fastlane_core/lib/fastlane_core/helper.rb +7 -1
  23. data/frameit/lib/frameit/editor.rb +3 -0
  24. data/gym/lib/gym/.runner.rb.swp +0 -0
  25. data/gym/lib/gym/generators/build_command_generator.rb +1 -0
  26. data/gym/lib/gym/runner.rb +8 -3
  27. data/pilot/lib/pilot/build_manager.rb +31 -6
  28. data/pilot/lib/pilot/options.rb +3 -1
  29. data/scan/lib/scan/options.rb +5 -0
  30. data/scan/lib/scan/runner.rb +6 -0
  31. data/spaceship/lib/spaceship/connect_api/models/build.rb +5 -0
  32. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +5 -0
  33. data/supply/lib/supply/client.rb +26 -0
  34. data/supply/lib/supply/uploader.rb +28 -0
  35. metadata +22 -20
@@ -0,0 +1,78 @@
1
+ module Fastlane
2
+ module Actions
3
+ class UploadToPlayStoreInternalAppSharingAction < Action
4
+ def self.run(params)
5
+ require 'supply'
6
+
7
+ # If no APK params were provided, try to fill in the values from lane context, preferring
8
+ # the multiple APKs over the single APK if set.
9
+ if params[:apk_paths].nil? && params[:apk].nil?
10
+ all_apk_paths = Actions.lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS] || []
11
+ if all_apk_paths.size > 1
12
+ params[:apk_paths] = all_apk_paths
13
+ else
14
+ params[:apk] = Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]
15
+ end
16
+ end
17
+
18
+ # If no AAB param was provided, try to fill in the value from lane context.
19
+ # First GRADLE_ALL_AAB_OUTPUT_PATHS if only one
20
+ # Else from GRADLE_AAB_OUTPUT_PATH
21
+ if params[:aab].nil?
22
+ all_aab_paths = Actions.lane_context[SharedValues::GRADLE_ALL_AAB_OUTPUT_PATHS] || []
23
+ if all_aab_paths.count == 1
24
+ params[:aab] = all_aab_paths.first
25
+ else
26
+ params[:aab] = Actions.lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH]
27
+ end
28
+ end
29
+
30
+ Supply.config = params # we already have the finished config
31
+
32
+ Supply::Uploader.new.perform_upload_to_internal_app_sharing
33
+ end
34
+
35
+ #####################################################
36
+ # @!group Documentation
37
+ #####################################################
38
+
39
+ def self.description
40
+ "Upload binaries to Google Play Internal App Sharing (via _supply_)"
41
+ end
42
+
43
+ def self.details
44
+ "More information: https://docs.fastlane.tools/actions/upload_to_play_store_internal_app_sharing/"
45
+ end
46
+
47
+ def self.available_options
48
+ require 'supply'
49
+ require 'supply/options'
50
+ options = Supply::Options.available_options.clone
51
+
52
+ # remove all the unnecessary (for this action) options
53
+ options_to_keep = [:package_name, :apk, :apk_paths, :aab, :aab_paths, :json_key, :json_key_data, :root_url, :timeout]
54
+ options.delete_if { |option| options_to_keep.include?(option.key) == false }
55
+ end
56
+
57
+ def self.return_value
58
+ "Returns a string containing the download URL for the uploaded APK/AAB (or array of strings if multiple were uploaded)."
59
+ end
60
+
61
+ def self.authors
62
+ ["andrewhavens"]
63
+ end
64
+
65
+ def self.is_supported?(platform)
66
+ platform == :android
67
+ end
68
+
69
+ def self.example_code
70
+ ["upload_to_play_store_internal_app_sharing"]
71
+ end
72
+
73
+ def self.category
74
+ :production
75
+ end
76
+ end
77
+ end
78
+ end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.138.0'.freeze
2
+ VERSION = '2.139.0'.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.138.0
21
+ // Generated with fastlane 2.139.0
@@ -2146,6 +2146,8 @@ func createKeychain(name: String? = nil,
2146
2146
  - base: The name of the branch you want your changes pulled into (defaults to `master`)
2147
2147
  - apiUrl: The URL of GitHub API - used when the Enterprise (default to `https://api.github.com`)
2148
2148
  - assignees: The assignees for the pull request
2149
+ - reviewers: The reviewers (slug) for the pull request
2150
+ - teamReviewers: The team reviewers (slug) for the pull request
2149
2151
 
2150
2152
  - returns: The pull request URL when successful
2151
2153
  */
@@ -2157,7 +2159,9 @@ func createPullRequest(apiToken: String,
2157
2159
  head: String? = nil,
2158
2160
  base: String = "master",
2159
2161
  apiUrl: String = "https://api.github.com",
2160
- assignees: [String]? = nil) {
2162
+ assignees: [String]? = nil,
2163
+ reviewers: [String]? = nil,
2164
+ teamReviewers: [String]? = nil) {
2161
2165
  let command = RubyCommand(commandID: "", methodName: "create_pull_request", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken),
2162
2166
  RubyCommand.Argument(name: "repo", value: repo),
2163
2167
  RubyCommand.Argument(name: "title", value: title),
@@ -2166,7 +2170,9 @@ func createPullRequest(apiToken: String,
2166
2170
  RubyCommand.Argument(name: "head", value: head),
2167
2171
  RubyCommand.Argument(name: "base", value: base),
2168
2172
  RubyCommand.Argument(name: "api_url", value: apiUrl),
2169
- RubyCommand.Argument(name: "assignees", value: assignees)])
2173
+ RubyCommand.Argument(name: "assignees", value: assignees),
2174
+ RubyCommand.Argument(name: "reviewers", value: reviewers),
2175
+ RubyCommand.Argument(name: "team_reviewers", value: teamReviewers)])
2170
2176
  _ = runner.executeCommand(command)
2171
2177
  }
2172
2178
 
@@ -4077,10 +4083,13 @@ func jira(url: String,
4077
4083
  /**
4078
4084
  Get the most recent git tag
4079
4085
 
4086
+ - parameter pattern: Pattern to filter tags when looking for last one. Limit tags to ones matching given shell glob. If pattern lacks ?, *, or [, * at the end is implied
4087
+
4080
4088
  If you are using this action on a **shallow clone**, *the default with some CI systems like Bamboo*, you need to ensure that you have also pulled all the git tags appropriately. Assuming your git repo has the correct remote set you can issue `sh('git fetch --tags')`.
4089
+ Pattern parameter allows you to filter to a subset of tags.
4081
4090
  */
4082
- @discardableResult func lastGitTag() -> String {
4083
- let command = RubyCommand(commandID: "", methodName: "last_git_tag", className: nil, args: [])
4091
+ @discardableResult func lastGitTag(pattern: String? = nil) -> String {
4092
+ let command = RubyCommand(commandID: "", methodName: "last_git_tag", className: nil, args: [RubyCommand.Argument(name: "pattern", value: pattern)])
4084
4093
  return runner.executeCommand(command)
4085
4094
  }
4086
4095
 
@@ -4667,7 +4676,7 @@ func pem(development: Bool = false,
4667
4676
  - localizedBuildInfo: Localized beta app test info for what's new
4668
4677
  - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog
4669
4678
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
4670
- - skipWaitingForBuildProcessing: Don't wait for the build to process. If set to true, the changelog won't be set, `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan)
4679
+ - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
4671
4680
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
4672
4681
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
4673
4682
  - distributeExternal: Should the build be distributed to external testers?
@@ -5354,6 +5363,7 @@ func rubyVersion() {
5354
5363
  - skipDetectDevices: Should skip auto detecting of devices if none were specified
5355
5364
  - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
5356
5365
  - resetSimulator: Enabling this option will automatically erase the simulator before running the application
5366
+ - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
5357
5367
  - prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command
5358
5368
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
5359
5369
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
@@ -5411,6 +5421,7 @@ func runTests(workspace: String? = nil,
5411
5421
  skipDetectDevices: Bool = false,
5412
5422
  forceQuitSimulator: Bool = false,
5413
5423
  resetSimulator: Bool = false,
5424
+ disableSlideToType: Bool = true,
5414
5425
  prelaunchSimulator: Bool? = nil,
5415
5426
  reinstallApp: Bool = false,
5416
5427
  appIdentifier: String? = nil,
@@ -5465,6 +5476,7 @@ func runTests(workspace: String? = nil,
5465
5476
  RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
5466
5477
  RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
5467
5478
  RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
5479
+ RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
5468
5480
  RubyCommand.Argument(name: "prelaunch_simulator", value: prelaunchSimulator),
5469
5481
  RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
5470
5482
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
@@ -5600,6 +5612,7 @@ func say(text: Any,
5600
5612
  - skipDetectDevices: Should skip auto detecting of devices if none were specified
5601
5613
  - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
5602
5614
  - resetSimulator: Enabling this option will automatically erase the simulator before running the application
5615
+ - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
5603
5616
  - prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command
5604
5617
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
5605
5618
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
@@ -5657,6 +5670,7 @@ func scan(workspace: Any? = scanfile.workspace,
5657
5670
  skipDetectDevices: Bool = scanfile.skipDetectDevices,
5658
5671
  forceQuitSimulator: Bool = scanfile.forceQuitSimulator,
5659
5672
  resetSimulator: Bool = scanfile.resetSimulator,
5673
+ disableSlideToType: Bool = scanfile.disableSlideToType,
5660
5674
  prelaunchSimulator: Bool? = scanfile.prelaunchSimulator,
5661
5675
  reinstallApp: Bool = scanfile.reinstallApp,
5662
5676
  appIdentifier: Any? = scanfile.appIdentifier,
@@ -5711,6 +5725,7 @@ func scan(workspace: Any? = scanfile.workspace,
5711
5725
  RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
5712
5726
  RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
5713
5727
  RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
5728
+ RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
5714
5729
  RubyCommand.Argument(name: "prelaunch_simulator", value: prelaunchSimulator),
5715
5730
  RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
5716
5731
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
@@ -6006,7 +6021,7 @@ func setPodKey(useBundleExec: Bool = true,
6006
6021
 
6007
6022
  - parameters:
6008
6023
  - force: Force setup, even if not executed by CI
6009
- - provider: CI provider
6024
+ - provider: CI provider. If none is set, the provider is detected automatically
6010
6025
 
6011
6026
  - Creates a new temporary keychain for use with match|
6012
6027
  - Switches match to `readonly` mode to not create new profiles/cert on CI|
@@ -7014,7 +7029,7 @@ func testfairy(apiKey: String,
7014
7029
  - localizedBuildInfo: Localized beta app test info for what's new
7015
7030
  - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog
7016
7031
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
7017
- - skipWaitingForBuildProcessing: Don't wait for the build to process. If set to true, the changelog won't be set, `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan)
7032
+ - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
7018
7033
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
7019
7034
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
7020
7035
  - distributeExternal: Should the build be distributed to external testers?
@@ -7816,6 +7831,45 @@ func uploadToPlayStore(packageName: String,
7816
7831
  _ = runner.executeCommand(command)
7817
7832
  }
7818
7833
 
7834
+ /**
7835
+ Upload binaries to Google Play Internal App Sharing (via _supply_)
7836
+
7837
+ - parameters:
7838
+ - packageName: The package name of the application to use
7839
+ - jsonKey: The path to a file containing service account JSON, used to authenticate with Google
7840
+ - jsonKeyData: The raw service account JSON data used to authenticate with Google
7841
+ - apk: Path to the APK file to upload
7842
+ - apkPaths: An array of paths to APK files to upload
7843
+ - aab: Path to the AAB file to upload
7844
+ - aabPaths: An array of paths to AAB files to upload
7845
+ - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/
7846
+ - timeout: Timeout for read, open, and send (in seconds)
7847
+
7848
+ - returns: Returns a string containing the download URL for the uploaded APK/AAB (or array of strings if multiple were uploaded).
7849
+
7850
+ More information: https://docs.fastlane.tools/actions/upload_to_play_store_internal_app_sharing/
7851
+ */
7852
+ func uploadToPlayStoreInternalAppSharing(packageName: String,
7853
+ jsonKey: String? = nil,
7854
+ jsonKeyData: String? = nil,
7855
+ apk: String? = nil,
7856
+ apkPaths: [String]? = nil,
7857
+ aab: String? = nil,
7858
+ aabPaths: [String]? = nil,
7859
+ rootUrl: String? = nil,
7860
+ timeout: Int = 300) {
7861
+ let command = RubyCommand(commandID: "", methodName: "upload_to_play_store_internal_app_sharing", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
7862
+ RubyCommand.Argument(name: "json_key", value: jsonKey),
7863
+ RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
7864
+ RubyCommand.Argument(name: "apk", value: apk),
7865
+ RubyCommand.Argument(name: "apk_paths", value: apkPaths),
7866
+ RubyCommand.Argument(name: "aab", value: aab),
7867
+ RubyCommand.Argument(name: "aab_paths", value: aabPaths),
7868
+ RubyCommand.Argument(name: "root_url", value: rootUrl),
7869
+ RubyCommand.Argument(name: "timeout", value: timeout)])
7870
+ _ = runner.executeCommand(command)
7871
+ }
7872
+
7819
7873
  /**
7820
7874
  Upload new binary to App Store Connect for TestFlight beta testing (via _pilot_)
7821
7875
 
@@ -7833,7 +7887,7 @@ func uploadToPlayStore(packageName: String,
7833
7887
  - localizedBuildInfo: Localized beta app test info for what's new
7834
7888
  - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog
7835
7889
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
7836
- - skipWaitingForBuildProcessing: Don't wait for the build to process. If set to true, the changelog won't be set, `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan)
7890
+ - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
7837
7891
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
7838
7892
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
7839
7893
  - distributeExternal: Should the build be distributed to external testers?
@@ -8211,7 +8265,7 @@ func xcov(workspace: String? = nil,
8211
8265
  coverallsServiceJobId: String? = nil,
8212
8266
  coverallsRepoToken: String? = nil,
8213
8267
  xcconfig: String? = nil,
8214
- ideFoundationPath: String = "/Applications/Xcode-11.2.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8268
+ ideFoundationPath: String = "/Applications/Xcode-11.3.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8215
8269
  legacySupport: Bool = false) {
8216
8270
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
8217
8271
  RubyCommand.Argument(name: "project", value: project),
@@ -8356,4 +8410,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8356
8410
 
8357
8411
  // Please don't remove the lines below
8358
8412
  // They are used to detect outdated files
8359
- // FastlaneRunnerAPIVersion [0.9.66]
8413
+ // FastlaneRunnerAPIVersion [0.9.67]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.138.0
21
+ // Generated with fastlane 2.139.0
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.138.0
21
+ // Generated with fastlane 2.139.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.138.0
21
+ // Generated with fastlane 2.139.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.138.0
21
+ // Generated with fastlane 2.139.0
@@ -24,6 +24,9 @@ protocol ScanfileProtocol: class {
24
24
  /// Enabling this option will automatically erase the simulator before running the application
25
25
  var resetSimulator: Bool { get }
26
26
 
27
+ /// Enabling this option will disable the simulator from showing the 'Slide to type' prompt
28
+ var disableSlideToType: Bool { get }
29
+
27
30
  /// Enabling this option will launch the first simulator prior to calling any xcodebuild command
28
31
  var prelaunchSimulator: Bool? { get }
29
32
 
@@ -172,6 +175,7 @@ extension ScanfileProtocol {
172
175
  var skipDetectDevices: Bool { return false }
173
176
  var forceQuitSimulator: Bool { return false }
174
177
  var resetSimulator: Bool { return false }
178
+ var disableSlideToType: Bool { return true }
175
179
  var prelaunchSimulator: Bool? { return nil }
176
180
  var reinstallApp: Bool { return false }
177
181
  var appIdentifier: String? { return nil }
@@ -222,4 +226,4 @@ extension ScanfileProtocol {
222
226
 
223
227
  // Please don't remove the lines below
224
228
  // They are used to detect outdated files
225
- // FastlaneRunnerAPIVersion [0.9.22]
229
+ // FastlaneRunnerAPIVersion [0.9.23]
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.138.0
21
+ // Generated with fastlane 2.139.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.138.0
21
+ // Generated with fastlane 2.139.0
@@ -6,7 +6,7 @@ module FastlaneCore
6
6
  class BuildWatcher
7
7
  class << self
8
8
  # @return The build we waited for. This method will always return a build
9
- def wait_for_build_processing_to_be_complete(app_id: nil, platform: nil, train_version: nil, app_version: nil, build_version: nil, poll_interval: 10, strict_build_watch: false, return_spaceship_testflight_build: true)
9
+ def wait_for_build_processing_to_be_complete(app_id: nil, platform: nil, train_version: nil, app_version: nil, build_version: nil, poll_interval: 10, strict_build_watch: false, return_when_build_appears: false, return_spaceship_testflight_build: true)
10
10
  # Warn about train_version being removed in the future
11
11
  if train_version
12
12
  UI.deprecated(":train_version is no longer a used argument on FastlaneCore::BuildWatcher. Please use :app_version instead.")
@@ -32,7 +32,11 @@ module FastlaneCore
32
32
 
33
33
  report_status(build: matched_build)
34
34
 
35
- if matched_build && matched_build.processed?
35
+ # Processing of builds by AppStoreConnect can be a very time consuming task and will
36
+ # block the worker running this task until it is completed. In some cases,
37
+ # having a build resource appear in AppStoreConnect (matched_build) may be enough (i.e. setting a changelog)
38
+ # so here we may choose to skip the full processing of the build if return_when_build_appears is true
39
+ if matched_build && (return_when_build_appears || matched_build.processed?)
36
40
  if return_spaceship_testflight_build
37
41
  return matched_build.to_testflight_build
38
42
  else
@@ -212,6 +212,19 @@ module FastlaneCore
212
212
  `xcrun simctl delete #{self.udid}`
213
213
  return
214
214
  end
215
+
216
+ def disable_slide_to_type
217
+ return unless is_simulator
218
+ return unless os_type == "iOS"
219
+ return unless Gem::Version.new(os_version) >= Gem::Version.new('13.0')
220
+ UI.message("Disabling 'Slide to Type' #{self}")
221
+
222
+ plist_buddy = '/usr/libexec/PlistBuddy'
223
+ plist_buddy_cmd = "-c \"Add :KeyboardContinuousPathEnabled bool false\""
224
+ plist_path = File.expand_path("~/Library/Developer/CoreSimulator/Devices/#{self.udid}/data/Library/Preferences/com.apple.keyboard.ContinuousPath.plist")
225
+
226
+ Helper.backticks("#{plist_buddy} #{plist_buddy_cmd} #{plist_path}")
227
+ end
215
228
  end
216
229
  end
217
230
 
@@ -248,6 +261,13 @@ module FastlaneCore
248
261
  all.select { |device| device.os_version == os_version }.each(&:delete)
249
262
  end
250
263
 
264
+ # Disable 'Slide to Type' by UDID or name and OS version
265
+ # Latter is useful when combined with -destination option of xcodebuild
266
+ def disable_slide_to_type(udid: nil, name: nil, os_version: nil)
267
+ match = all.detect { |device| device.udid == udid || device.name == name && device.os_version == os_version }
268
+ match.disable_slide_to_type if match
269
+ end
270
+
251
271
  def clear_cache
252
272
  @devices = nil
253
273
  end
@@ -71,13 +71,19 @@ module FastlaneCore
71
71
 
72
72
  # @return [boolean] true if building in a known CI environment
73
73
  def self.ci?
74
+ return true if self.is_circle_ci?
75
+
74
76
  # 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', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO'].each do |current|
77
+ ['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO'].each do |current|
76
78
  return true if ENV.key?(current)
77
79
  end
78
80
  return false
79
81
  end
80
82
 
83
+ def self.is_circle_ci?
84
+ return ENV.key?('CIRCLECI')
85
+ end
86
+
81
87
  def self.operating_system
82
88
  return "macOS" if RUBY_PLATFORM.downcase.include?("darwin")
83
89
  return "Windows" if RUBY_PLATFORM.downcase.include?("mswin")
@@ -262,6 +262,9 @@ module Frameit
262
262
  left_space = (background.width / 2.0 - image.width / 2.0).round
263
263
 
264
264
  @image = background.composite(image, "png") do |c|
265
+ colorspace = image.data["colorspace"]
266
+ c.colorspace(colorspace) if colorspace
267
+
265
268
  c.compose("Over")
266
269
  c.geometry("+#{left_space}+#{device_top(background)}")
267
270
  end
@@ -51,6 +51,7 @@ module Gym
51
51
 
52
52
  buildactions = []
53
53
  buildactions << :clean if config[:clean]
54
+ buildactions << :build if config[:skip_archive]
54
55
  buildactions << :archive unless config[:skip_archive]
55
56
 
56
57
  buildactions
@@ -18,6 +18,9 @@ module Gym
18
18
  build_app
19
19
  end
20
20
  verify_archive unless Gym.config[:skip_archive]
21
+
22
+ return nil if Gym.config[:skip_archive]
23
+
21
24
  FileUtils.mkdir_p(File.expand_path(Gym.config[:output_directory]))
22
25
 
23
26
  if Gym.project.ios? || Gym.project.tvos?
@@ -97,9 +100,11 @@ module Gym
97
100
  ErrorHandler.handle_build_error(output)
98
101
  end)
99
102
 
100
- mark_archive_as_built_by_gym(BuildCommandGenerator.archive_path)
101
- UI.success("Successfully stored the archive. You can find it in the Xcode Organizer.") unless Gym.config[:archive_path].nil?
102
- UI.verbose("Stored the archive in: " + BuildCommandGenerator.archive_path)
103
+ unless Gym.config[:skip_archive]
104
+ mark_archive_as_built_by_gym(BuildCommandGenerator.archive_path)
105
+ UI.success("Successfully stored the archive. You can find it in the Xcode Organizer.") unless Gym.config[:archive_path].nil?
106
+ UI.verbose("Stored the archive in: " + BuildCommandGenerator.archive_path)
107
+ end
103
108
 
104
109
  post_build_app
105
110
  end