fastlane 2.210.1 → 2.211.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +84 -84
  3. data/deliver/lib/deliver/app_screenshot.rb +17 -0
  4. data/fastlane/lib/fastlane/actions/docs/build_app.md +5 -5
  5. data/fastlane/lib/fastlane/actions/docs/run_tests.md +1 -1
  6. data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +14 -4
  7. data/fastlane/lib/fastlane/actions/xcode_install.rb +5 -1
  8. data/fastlane/lib/fastlane/actions/xcode_select.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/xcodes.rb +137 -0
  10. data/fastlane/lib/fastlane/actions/xcversion.rb +10 -15
  11. data/fastlane/lib/fastlane/helper/xcodes_helper.rb +28 -0
  12. data/fastlane/lib/fastlane/helper/xcversion_helper.rb +0 -9
  13. data/fastlane/lib/fastlane/version.rb +1 -1
  14. data/fastlane/swift/Deliverfile.swift +1 -1
  15. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  16. data/fastlane/swift/Fastlane.swift +66 -3
  17. data/fastlane/swift/Gymfile.swift +1 -1
  18. data/fastlane/swift/GymfileProtocol.swift +1 -1
  19. data/fastlane/swift/Matchfile.swift +1 -1
  20. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  21. data/fastlane/swift/Precheckfile.swift +1 -1
  22. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  23. data/fastlane/swift/Scanfile.swift +1 -1
  24. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  25. data/fastlane/swift/Screengrabfile.swift +1 -1
  26. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  27. data/fastlane/swift/Snapshotfile.swift +1 -1
  28. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  29. data/fastlane/swift/formatting/Brewfile.lock.json +20 -15
  30. data/fastlane_core/lib/fastlane_core/cert_checker.rb +2 -2
  31. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +1 -1
  32. data/frameit/lib/frameit/device.rb +1 -1
  33. data/match/lib/match/change_password.rb +2 -0
  34. data/match/lib/match/commands_generator.rb +2 -1
  35. data/match/lib/match/generator.rb +1 -0
  36. data/match/lib/match/importer.rb +2 -0
  37. data/match/lib/match/migrate.rb +4 -3
  38. data/match/lib/match/nuke.rb +2 -0
  39. data/match/lib/match/options.rb +5 -0
  40. data/match/lib/match/runner.rb +5 -2
  41. data/sigh/lib/sigh/options.rb +5 -0
  42. data/sigh/lib/sigh/runner.rb +3 -1
  43. data/snapshot/lib/assets/SnapshotHelper.swift +2 -2
  44. data/spaceship/lib/spaceship/connect_api/models/actor.rb +26 -0
  45. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +5 -0
  46. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
  47. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +10 -10
  48. data/spaceship/lib/spaceship/connect_api/models/device.rb +3 -0
  49. data/spaceship/lib/spaceship/connect_api/models/resolution_center_message.rb +29 -0
  50. data/spaceship/lib/spaceship/connect_api/models/resolution_center_thread.rb +67 -0
  51. data/spaceship/lib/spaceship/connect_api/models/review_rejection.rb +19 -0
  52. data/spaceship/lib/spaceship/connect_api/models/review_submission.rb +12 -0
  53. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +23 -0
  54. data/spaceship/lib/spaceship/connect_api.rb +5 -0
  55. metadata +28 -22
@@ -0,0 +1,28 @@
1
+ module Fastlane
2
+ module Helper
3
+ class XcodesHelper
4
+ def self.read_xcode_version_file
5
+ xcode_version_paths = Dir.glob(".xcode-version")
6
+
7
+ if xcode_version_paths.first
8
+ return File.read(xcode_version_paths.first).strip
9
+ end
10
+
11
+ return nil
12
+ end
13
+
14
+ def self.find_xcodes_binary_path
15
+ `which xcodes`.strip
16
+ end
17
+
18
+ module Verify
19
+ def self.requirement(req)
20
+ UI.user_error!("Version must be specified") if req.nil? || req.to_s.strip.size == 0
21
+ Gem::Requirement.new(req.to_s)
22
+ rescue Gem::Requirement::BadRequirementError
23
+ UI.user_error!("The requirement '#{req}' is not a valid RubyGems style requirement")
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -11,15 +11,6 @@ module Fastlane
11
11
  req.satisfied_by?(Gem::Version.new(xcode.version))
12
12
  end
13
13
  end
14
-
15
- module Verify
16
- def self.requirement(req)
17
- UI.user_error!("Version must be specified") if req.nil? || req.to_s.strip.size == 0
18
- Gem::Requirement.new(req.to_s)
19
- rescue Gem::Requirement::BadRequirementError
20
- UI.user_error!("The requirement '#{req}' is not a valid RubyGems style requirement")
21
- end
22
- end
23
14
  end
24
15
  end
25
16
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.210.1'.freeze
2
+ VERSION = '2.211.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 = '1.12.1'.freeze
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.210.1
20
+ // Generated with fastlane 2.211.0
@@ -264,4 +264,4 @@ public extension DeliverfileProtocol {
264
264
 
265
265
  // Please don't remove the lines below
266
266
  // They are used to detect outdated files
267
- // FastlaneRunnerAPIVersion [0.9.111]
267
+ // FastlaneRunnerAPIVersion [0.9.112]
@@ -4933,6 +4933,7 @@ public func getManagedPlayStorePublishingRights(jsonKey: OptionalConfigValue<Str
4933
4933
  - development: Renew the development certificate instead of the production one
4934
4934
  - skipInstall: By default, the certificate will be added to your local machine. Setting this flag will skip this action
4935
4935
  - force: Renew provisioning profiles regardless of its state - to automatically add all devices for ad hoc profiles
4936
+ - includeMacInProfiles: Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps
4936
4937
  - appIdentifier: The bundle identifier of your app
4937
4938
  - apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
4938
4939
  - apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)
@@ -4962,6 +4963,7 @@ public func getManagedPlayStorePublishingRights(jsonKey: OptionalConfigValue<Str
4962
4963
  development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
4963
4964
  skipInstall: OptionalConfigValue<Bool> = .fastlaneDefault(false),
4964
4965
  force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
4966
+ includeMacInProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
4965
4967
  appIdentifier: String,
4966
4968
  apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
4967
4969
  apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
@@ -4987,6 +4989,7 @@ public func getManagedPlayStorePublishingRights(jsonKey: OptionalConfigValue<Str
4987
4989
  let developmentArg = development.asRubyArgument(name: "development", type: nil)
4988
4990
  let skipInstallArg = skipInstall.asRubyArgument(name: "skip_install", type: nil)
4989
4991
  let forceArg = force.asRubyArgument(name: "force", type: nil)
4992
+ let includeMacInProfilesArg = includeMacInProfiles.asRubyArgument(name: "include_mac_in_profiles", type: nil)
4990
4993
  let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
4991
4994
  let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
4992
4995
  let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
@@ -5011,6 +5014,7 @@ public func getManagedPlayStorePublishingRights(jsonKey: OptionalConfigValue<Str
5011
5014
  developmentArg,
5012
5015
  skipInstallArg,
5013
5016
  forceArg,
5017
+ includeMacInProfilesArg,
5014
5018
  appIdentifierArg,
5015
5019
  apiKeyPathArg,
5016
5020
  apiKeyArg,
@@ -6660,6 +6664,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
6660
6664
  - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
6661
6665
  - force: Renew the provisioning profiles every time you run match
6662
6666
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
6667
+ - includeMacInProfiles: Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps
6663
6668
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
6664
6669
  - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
6665
6670
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
@@ -6712,6 +6717,7 @@ public func match(type: String = matchfile.type,
6712
6717
  keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.keychainPassword),
6713
6718
  force: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.force),
6714
6719
  forceForNewDevices: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.forceForNewDevices),
6720
+ includeMacInProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.includeMacInProfiles),
6715
6721
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.includeAllCertificates),
6716
6722
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.forceForNewCertificates),
6717
6723
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipConfirmation),
@@ -6762,6 +6768,7 @@ public func match(type: String = matchfile.type,
6762
6768
  let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
6763
6769
  let forceArg = force.asRubyArgument(name: "force", type: nil)
6764
6770
  let forceForNewDevicesArg = forceForNewDevices.asRubyArgument(name: "force_for_new_devices", type: nil)
6771
+ let includeMacInProfilesArg = includeMacInProfiles.asRubyArgument(name: "include_mac_in_profiles", type: nil)
6765
6772
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
6766
6773
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
6767
6774
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
@@ -6811,6 +6818,7 @@ public func match(type: String = matchfile.type,
6811
6818
  keychainPasswordArg,
6812
6819
  forceArg,
6813
6820
  forceForNewDevicesArg,
6821
+ includeMacInProfilesArg,
6814
6822
  includeAllCertificatesArg,
6815
6823
  forceForNewCertificatesArg,
6816
6824
  skipConfirmationArg,
@@ -6871,6 +6879,7 @@ public func match(type: String = matchfile.type,
6871
6879
  - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
6872
6880
  - force: Renew the provisioning profiles every time you run match
6873
6881
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
6882
+ - includeMacInProfiles: Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps
6874
6883
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
6875
6884
  - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
6876
6885
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
@@ -6927,6 +6936,7 @@ public func matchNuke(type: String = "development",
6927
6936
  keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
6928
6937
  force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6929
6938
  forceForNewDevices: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6939
+ includeMacInProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6930
6940
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6931
6941
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6932
6942
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -6977,6 +6987,7 @@ public func matchNuke(type: String = "development",
6977
6987
  let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
6978
6988
  let forceArg = force.asRubyArgument(name: "force", type: nil)
6979
6989
  let forceForNewDevicesArg = forceForNewDevices.asRubyArgument(name: "force_for_new_devices", type: nil)
6990
+ let includeMacInProfilesArg = includeMacInProfiles.asRubyArgument(name: "include_mac_in_profiles", type: nil)
6980
6991
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
6981
6992
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
6982
6993
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
@@ -7026,6 +7037,7 @@ public func matchNuke(type: String = "development",
7026
7037
  keychainPasswordArg,
7027
7038
  forceArg,
7028
7039
  forceForNewDevicesArg,
7040
+ includeMacInProfilesArg,
7029
7041
  includeAllCertificatesArg,
7030
7042
  forceForNewCertificatesArg,
7031
7043
  skipConfirmationArg,
@@ -9876,6 +9888,7 @@ public func setupTravis(force: OptionalConfigValue<Bool> = .fastlaneDefault(fals
9876
9888
  - development: Renew the development certificate instead of the production one
9877
9889
  - skipInstall: By default, the certificate will be added to your local machine. Setting this flag will skip this action
9878
9890
  - force: Renew provisioning profiles regardless of its state - to automatically add all devices for ad hoc profiles
9891
+ - includeMacInProfiles: Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps
9879
9892
  - appIdentifier: The bundle identifier of your app
9880
9893
  - apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
9881
9894
  - apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)
@@ -9905,6 +9918,7 @@ public func setupTravis(force: OptionalConfigValue<Bool> = .fastlaneDefault(fals
9905
9918
  development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
9906
9919
  skipInstall: OptionalConfigValue<Bool> = .fastlaneDefault(false),
9907
9920
  force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
9921
+ includeMacInProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
9908
9922
  appIdentifier: String,
9909
9923
  apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
9910
9924
  apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
@@ -9930,6 +9944,7 @@ public func setupTravis(force: OptionalConfigValue<Bool> = .fastlaneDefault(fals
9930
9944
  let developmentArg = development.asRubyArgument(name: "development", type: nil)
9931
9945
  let skipInstallArg = skipInstall.asRubyArgument(name: "skip_install", type: nil)
9932
9946
  let forceArg = force.asRubyArgument(name: "force", type: nil)
9947
+ let includeMacInProfilesArg = includeMacInProfiles.asRubyArgument(name: "include_mac_in_profiles", type: nil)
9933
9948
  let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
9934
9949
  let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
9935
9950
  let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
@@ -9954,6 +9969,7 @@ public func setupTravis(force: OptionalConfigValue<Bool> = .fastlaneDefault(fals
9954
9969
  developmentArg,
9955
9970
  skipInstallArg,
9956
9971
  forceArg,
9972
+ includeMacInProfilesArg,
9957
9973
  appIdentifierArg,
9958
9974
  apiKeyPathArg,
9959
9975
  apiKeyArg,
@@ -11081,6 +11097,7 @@ public func swiftlint(mode: String = "lint",
11081
11097
  - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
11082
11098
  - force: Renew the provisioning profiles every time you run match
11083
11099
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
11100
+ - includeMacInProfiles: Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps
11084
11101
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
11085
11102
  - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
11086
11103
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
@@ -11133,6 +11150,7 @@ public func syncCodeSigning(type: String = "development",
11133
11150
  keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11134
11151
  force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11135
11152
  forceForNewDevices: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11153
+ includeMacInProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11136
11154
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11137
11155
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11138
11156
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -11183,6 +11201,7 @@ public func syncCodeSigning(type: String = "development",
11183
11201
  let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
11184
11202
  let forceArg = force.asRubyArgument(name: "force", type: nil)
11185
11203
  let forceForNewDevicesArg = forceForNewDevices.asRubyArgument(name: "force_for_new_devices", type: nil)
11204
+ let includeMacInProfilesArg = includeMacInProfiles.asRubyArgument(name: "include_mac_in_profiles", type: nil)
11186
11205
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
11187
11206
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
11188
11207
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
@@ -11232,6 +11251,7 @@ public func syncCodeSigning(type: String = "development",
11232
11251
  keychainPasswordArg,
11233
11252
  forceArg,
11234
11253
  forceForNewDevicesArg,
11254
+ includeMacInProfilesArg,
11235
11255
  includeAllCertificatesArg,
11236
11256
  forceForNewCertificatesArg,
11237
11257
  skipConfirmationArg,
@@ -11732,6 +11752,7 @@ public func updateAppIdentifier(xcodeproj: String,
11732
11752
  - parameters:
11733
11753
  - path: Path to your Xcode project
11734
11754
  - useAutomaticSigning: Defines if project should use automatic signing
11755
+ - sdk: Build target SDKs (iphoneos*, macosx*, iphonesimulator*)
11735
11756
  - teamId: Team ID, is used when upgrading project
11736
11757
  - targets: Specify targets you want to toggle the signing mech. (default to all targets)
11737
11758
  - buildConfigurations: Specify build_configurations you want to toggle the signing mech. (default to all configurations)
@@ -11747,6 +11768,7 @@ public func updateAppIdentifier(xcodeproj: String,
11747
11768
  */
11748
11769
  public func updateCodeSigningSettings(path: String,
11749
11770
  useAutomaticSigning: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11771
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11750
11772
  teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11751
11773
  targets: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
11752
11774
  buildConfigurations: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
@@ -11758,6 +11780,7 @@ public func updateCodeSigningSettings(path: String,
11758
11780
  {
11759
11781
  let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
11760
11782
  let useAutomaticSigningArg = useAutomaticSigning.asRubyArgument(name: "use_automatic_signing", type: nil)
11783
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
11761
11784
  let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
11762
11785
  let targetsArg = targets.asRubyArgument(name: "targets", type: nil)
11763
11786
  let buildConfigurationsArg = buildConfigurations.asRubyArgument(name: "build_configurations", type: nil)
@@ -11768,6 +11791,7 @@ public func updateCodeSigningSettings(path: String,
11768
11791
  let bundleIdentifierArg = bundleIdentifier.asRubyArgument(name: "bundle_identifier", type: nil)
11769
11792
  let array: [RubyCommand.Argument?] = [pathArg,
11770
11793
  useAutomaticSigningArg,
11794
+ sdkArg,
11771
11795
  teamIdArg,
11772
11796
  targetsArg,
11773
11797
  buildConfigurationsArg,
@@ -13151,7 +13175,7 @@ public func xcexport() {
13151
13175
  Change the xcode-path to use. Useful for beta versions of Xcode
13152
13176
 
13153
13177
  Select and build with the Xcode installed at the provided path.
13154
- Use the `xcversion` action if you want to select an Xcode:
13178
+ Use the `xcodes` action if you want to select an Xcode:
13155
13179
  - Based on a version specifier or
13156
13180
  - You don't have known, stable paths, as may happen in a CI environment.
13157
13181
  */
@@ -13221,6 +13245,45 @@ public func xcodebuild() {
13221
13245
  _ = runner.executeCommand(command)
13222
13246
  }
13223
13247
 
13248
+ /**
13249
+ Make sure a certain version of Xcode is installed, installing it only if needed
13250
+
13251
+ - parameters:
13252
+ - version: The version number of the version of Xcode to install. Defaults to the value specified in the .xcode-version file
13253
+ - updateList: Whether the list of available Xcode versions should be updated before running the install command
13254
+ - selectForCurrentBuildOnly: When true, it won't attempt to install an Xcode version, just find the installed Xcode version that best matches the passed version argument, and select it for the current build steps. It doesn't change the global Xcode version (e.g. via 'xcrun xcode-select'), which would require sudo permissions — when this option is true, this action doesn't require sudo permissions
13255
+ - binaryPath: Where the xcodes binary lives on your system (full path)
13256
+ - xcodesArgs: Pass in xcodes command line arguments directly. When present, other parameters are ignored and only this parameter is used to build the command to be executed
13257
+
13258
+ - returns: The path to the newly installed Xcode version
13259
+
13260
+ Makes sure a specific version of Xcode is installed. If that's not the case, it will automatically be downloaded by [xcodes](https://github.com/RobotsAndPencils/xcodes).
13261
+ This will make sure to use the correct Xcode version for later actions.
13262
+ Note that this action depends on [xcodes](https://github.com/RobotsAndPencils/xcodes) CLI, so make sure you have it installed in your environment. For the installation guide, see: https://github.com/RobotsAndPencils/xcodes#installation
13263
+ */
13264
+ @discardableResult public func xcodes(version: String,
13265
+ updateList: OptionalConfigValue<Bool> = .fastlaneDefault(true),
13266
+ selectForCurrentBuildOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
13267
+ binaryPath: String = "/opt/homebrew/bin/xcodes",
13268
+ xcodesArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> String
13269
+ {
13270
+ let versionArg = RubyCommand.Argument(name: "version", value: version, type: nil)
13271
+ let updateListArg = updateList.asRubyArgument(name: "update_list", type: nil)
13272
+ let selectForCurrentBuildOnlyArg = selectForCurrentBuildOnly.asRubyArgument(name: "select_for_current_build_only", type: nil)
13273
+ let binaryPathArg = RubyCommand.Argument(name: "binary_path", value: binaryPath, type: nil)
13274
+ let xcodesArgsArg = xcodesArgs.asRubyArgument(name: "xcodes_args", type: nil)
13275
+ let array: [RubyCommand.Argument?] = [versionArg,
13276
+ updateListArg,
13277
+ selectForCurrentBuildOnlyArg,
13278
+ binaryPathArg,
13279
+ xcodesArgsArg]
13280
+ let args: [RubyCommand.Argument] = array
13281
+ .filter { $0?.value != nil }
13282
+ .compactMap { $0 }
13283
+ let command = RubyCommand(commandID: "", methodName: "xcodes", className: nil, args: args)
13284
+ return runner.executeCommand(command)
13285
+ }
13286
+
13224
13287
  /**
13225
13288
  Nice code coverage reports without hassle
13226
13289
 
@@ -13374,7 +13437,7 @@ public func xctool() {
13374
13437
  /**
13375
13438
  Select an Xcode to use by version specifier
13376
13439
 
13377
- - parameter version: The version of Xcode to select specified as a Gem::Version requirement string (e.g. '~> 7.1.0')
13440
+ - parameter version: The version of Xcode to select specified as a Gem::Version requirement string (e.g. '~> 7.1.0'). Defaults to the value specified in the .xcode-version file
13378
13441
 
13379
13442
  Finds and selects a version of an installed Xcode that best matches the provided [`Gem::Version` requirement specifier](http://www.rubydoc.info/github/rubygems/rubygems/Gem/Version)
13380
13443
  You can either manually provide a specific version using `version:` or you make use of the `.xcode-version` file.
@@ -13486,4 +13549,4 @@ public let snapshotfile: Snapshotfile = .init()
13486
13549
 
13487
13550
  // Please don't remove the lines below
13488
13551
  // They are used to detect outdated files
13489
- // FastlaneRunnerAPIVersion [0.9.164]
13552
+ // FastlaneRunnerAPIVersion [0.9.165]
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.210.1
20
+ // Generated with fastlane 2.211.0
@@ -204,4 +204,4 @@ public extension GymfileProtocol {
204
204
 
205
205
  // Please don't remove the lines below
206
206
  // They are used to detect outdated files
207
- // FastlaneRunnerAPIVersion [0.9.114]
207
+ // FastlaneRunnerAPIVersion [0.9.115]
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.210.1
20
+ // Generated with fastlane 2.211.0
@@ -107,6 +107,9 @@ public protocol MatchfileProtocol: AnyObject {
107
107
  /// Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
108
108
  var forceForNewDevices: Bool { get }
109
109
 
110
+ /// Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps
111
+ var includeMacInProfiles: Bool { get }
112
+
110
113
  /// Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
111
114
  var includeAllCertificates: Bool { get }
112
115
 
@@ -186,6 +189,7 @@ public extension MatchfileProtocol {
186
189
  var keychainPassword: String? { return nil }
187
190
  var force: Bool { return false }
188
191
  var forceForNewDevices: Bool { return false }
192
+ var includeMacInProfiles: Bool { return false }
189
193
  var includeAllCertificates: Bool { return false }
190
194
  var forceForNewCertificates: Bool { return false }
191
195
  var skipConfirmation: Bool { return false }
@@ -204,4 +208,4 @@ public extension MatchfileProtocol {
204
208
 
205
209
  // Please don't remove the lines below
206
210
  // They are used to detect outdated files
207
- // FastlaneRunnerAPIVersion [0.9.108]
211
+ // FastlaneRunnerAPIVersion [0.9.109]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.210.1
20
+ // Generated with fastlane 2.211.0
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.107]
55
+ // FastlaneRunnerAPIVersion [0.9.108]
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.210.1
20
+ // Generated with fastlane 2.211.0
@@ -312,4 +312,4 @@ public extension ScanfileProtocol {
312
312
 
313
313
  // Please don't remove the lines below
314
314
  // They are used to detect outdated files
315
- // FastlaneRunnerAPIVersion [0.9.119]
315
+ // FastlaneRunnerAPIVersion [0.9.120]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.210.1
20
+ // Generated with fastlane 2.211.0
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.109]
99
+ // FastlaneRunnerAPIVersion [0.9.110]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.210.1
20
+ // Generated with fastlane 2.211.0
@@ -204,4 +204,4 @@ public extension SnapshotfileProtocol {
204
204
 
205
205
  // Please don't remove the lines below
206
206
  // They are used to detect outdated files
207
- // FastlaneRunnerAPIVersion [0.9.103]
207
+ // FastlaneRunnerAPIVersion [0.9.104]
@@ -2,40 +2,45 @@
2
2
  "entries": {
3
3
  "brew": {
4
4
  "swiftformat": {
5
- "version": "0.49.18",
5
+ "version": "0.50.3",
6
6
  "bottle": {
7
7
  "rebuild": 0,
8
8
  "root_url": "https://ghcr.io/v2/homebrew/core",
9
9
  "files": {
10
+ "arm64_ventura": {
11
+ "cellar": ":any_skip_relocation",
12
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:fca75bfe7fda2151c2972e7e9262e9ca6ce2f50e3fc562e0688dd817550813c2",
13
+ "sha256": "fca75bfe7fda2151c2972e7e9262e9ca6ce2f50e3fc562e0688dd817550813c2"
14
+ },
10
15
  "arm64_monterey": {
11
16
  "cellar": ":any_skip_relocation",
12
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:6362f6087bc3821f4271c3d17b3a4f180b1e1326646ddfb60f6d27bfb5a2a357",
13
- "sha256": "6362f6087bc3821f4271c3d17b3a4f180b1e1326646ddfb60f6d27bfb5a2a357"
17
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:f03398746b42c97a4057eb74c740a842b96b7fbb49b003057daf114d72db74b4",
18
+ "sha256": "f03398746b42c97a4057eb74c740a842b96b7fbb49b003057daf114d72db74b4"
14
19
  },
15
20
  "arm64_big_sur": {
16
21
  "cellar": ":any_skip_relocation",
17
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:e94cf1b66df0d712bbfbf509b98efaf31d39a61b82999314e1f3c0e45195c51a",
18
- "sha256": "e94cf1b66df0d712bbfbf509b98efaf31d39a61b82999314e1f3c0e45195c51a"
22
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:ff1b0f20ebaaa03a580817e8f4c670e54227c86c3c53d813899c276d03415461",
23
+ "sha256": "ff1b0f20ebaaa03a580817e8f4c670e54227c86c3c53d813899c276d03415461"
19
24
  },
20
25
  "monterey": {
21
26
  "cellar": ":any_skip_relocation",
22
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:456e0c95a565adbb45a29747abfadf41c838a7f09fae052a874e59429a94ef14",
23
- "sha256": "456e0c95a565adbb45a29747abfadf41c838a7f09fae052a874e59429a94ef14"
27
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:5dddca5459af2ad28f1a9ef1e664da40ed664ae907c0351dc92b3cd0af52c29e",
28
+ "sha256": "5dddca5459af2ad28f1a9ef1e664da40ed664ae907c0351dc92b3cd0af52c29e"
24
29
  },
25
30
  "big_sur": {
26
31
  "cellar": ":any_skip_relocation",
27
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:d00204be714789fa8b35d4c6f6eea5813604aa09f3911635059973aa827d2e8c",
28
- "sha256": "d00204be714789fa8b35d4c6f6eea5813604aa09f3911635059973aa827d2e8c"
32
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:7427e072a246141371df90135c5cea00c832bf2c511b62ef1cf49c1148b5bf23",
33
+ "sha256": "7427e072a246141371df90135c5cea00c832bf2c511b62ef1cf49c1148b5bf23"
29
34
  },
30
35
  "catalina": {
31
36
  "cellar": ":any_skip_relocation",
32
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:b07f7221f3c5225ad0037293cecb95bde4f0dba4fa19797d84a3376dd1ad02ea",
33
- "sha256": "b07f7221f3c5225ad0037293cecb95bde4f0dba4fa19797d84a3376dd1ad02ea"
37
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:a3de195f76316795eb6a56e240265a8fd41c042c7d515ae1df254aa3f577b540",
38
+ "sha256": "a3de195f76316795eb6a56e240265a8fd41c042c7d515ae1df254aa3f577b540"
34
39
  },
35
40
  "x86_64_linux": {
36
41
  "cellar": "/home/linuxbrew/.linuxbrew/Cellar",
37
- "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:c4a4ebd2f3f54b8f399551efaf47b3e419db2c729ffaf18a09e64bbf62d82f38",
38
- "sha256": "c4a4ebd2f3f54b8f399551efaf47b3e419db2c729ffaf18a09e64bbf62d82f38"
42
+ "url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:8557726207a8ce0871b950bf44ae9f2b8e95973ba026a77cf728d31cefc3ac00",
43
+ "sha256": "8557726207a8ce0871b950bf44ae9f2b8e95973ba026a77cf728d31cefc3ac00"
39
44
  }
40
45
  }
41
46
  }
@@ -61,9 +66,9 @@
61
66
  "macOS": "11.0.1"
62
67
  },
63
68
  "monterey": {
64
- "HOMEBREW_VERSION": "3.6.2-15-g5b02645",
69
+ "HOMEBREW_VERSION": "3.6.10-11-gb683beb",
65
70
  "HOMEBREW_PREFIX": "/opt/homebrew",
66
- "Homebrew/homebrew-core": "86e5e6fe99dd864a34c8366bde85d2d55e5d512d",
71
+ "Homebrew/homebrew-core": "0bc04af3657134103a6f2b48b31e278e2537e85f",
67
72
  "CLT": "13.4.0.0.1.1651278267",
68
73
  "Xcode": "13.4.1",
69
74
  "macOS": "12.5"
@@ -160,13 +160,13 @@ module FastlaneCore
160
160
  import_command = "curl -f -o #{filename} #{url} && security import #{filename} #{keychain}"
161
161
  UI.verbose("Installing WWDR Cert: #{import_command}")
162
162
 
163
- stdout, stderr, _status = Open3.capture3(import_command)
163
+ stdout, stderr, status = Open3.capture3(import_command)
164
164
  if FastlaneCore::Globals.verbose?
165
165
  UI.command_output(stdout)
166
166
  UI.command_output(stderr)
167
167
  end
168
168
 
169
- unless $?.success?
169
+ unless status.success?
170
170
  UI.verbose("Failed to install WWDR Certificate, checking output to see why")
171
171
  # Check the command output, WWDR might already exist
172
172
  unless /The specified item already exists in the keychain./ =~ stderr
@@ -873,7 +873,7 @@ module FastlaneCore
873
873
 
874
874
  # Create .p8 file from api_key and provide api key info which contains .p8 file path
875
875
  def api_key_with_p8_file_path(original_api_key)
876
- api_key = original_api_key.clone
876
+ api_key = original_api_key.dup
877
877
  api_key[:key_dir] = Dir.mktmpdir("deliver-")
878
878
  # Specified p8 needs to be generated to call altool
879
879
  File.open(File.join(api_key[:key_dir], "AuthKey_#{api_key[:key_id]}.p8"), "wb") do |p8|
@@ -51,7 +51,7 @@ module Frameit
51
51
  found_device = nil
52
52
  filename_device = nil
53
53
  filename = Pathname.new(path).basename.to_s
54
- Devices.constants.each do |c|
54
+ Devices.constants.sort_by(&:length).reverse_each do |c|
55
55
  device = Devices.const_get(c)
56
56
  next unless device.resolutions.include?(size)
57
57
  # assign to filename_device if the filename contains the formatted name / id and its priority is higher than the current filename_device
@@ -42,6 +42,8 @@ module Match
42
42
  message = "[fastlane] Changed passphrase"
43
43
  files_to_commit = encryption.encrypt_files(password: new_password)
44
44
  storage.save_changes!(files_to_commit: files_to_commit, custom_message: message)
45
+ ensure
46
+ storage.clear_changes if storage
45
47
  end
46
48
 
47
49
  def self.ensure_ui_interactive
@@ -155,7 +155,8 @@ module Match
155
155
  FastlaneCore::CommanderGenerator.new.generate(Match::Options.available_options, command: c)
156
156
 
157
157
  c.action do |args, options|
158
- Match::Migrate.new.migrate(args, options)
158
+ params = FastlaneCore::Configuration.create(Match::Options.available_options, options.__hash__)
159
+ Match::Migrate.new.migrate(params)
159
160
  end
160
161
  end
161
162
 
@@ -90,6 +90,7 @@ module Match
90
90
  template_name: params[:template_name],
91
91
  fail_on_name_taken: params[:fail_on_name_taken],
92
92
  include_all_certificates: params[:include_all_certificates],
93
+ include_mac_in_profiles: params[:include_mac_in_profiles],
93
94
  }
94
95
 
95
96
  values[:platform] = params[:platform]
@@ -144,6 +144,8 @@ module Match
144
144
  # Encrypt and commit
145
145
  encryption.encrypt_files if encryption
146
146
  storage.save_changes!(files_to_commit: files_to_commit)
147
+ ensure
148
+ storage.clear_changes if storage
147
149
  end
148
150
 
149
151
  def ensure_valid_file_path(file_path, file_description, file_extension, optional: false)
@@ -1,4 +1,3 @@
1
- require_relative 'options'
2
1
  require_relative 'spaceship_ensure'
3
2
  require_relative 'encryption'
4
3
  require_relative 'storage'
@@ -7,8 +6,7 @@ require 'fileutils'
7
6
 
8
7
  module Match
9
8
  class Migrate
10
- def migrate(args, options)
11
- params = FastlaneCore::Configuration.create(Match::Options.available_options, options.__hash__)
9
+ def migrate(params)
12
10
  loaded_matchfile = params.load_configuration_file("Matchfile")
13
11
 
14
12
  ensure_parameters_are_valid(params)
@@ -88,6 +86,9 @@ module Match
88
86
  UI.success("You can also remove the `git_url`, as well as any other git related configurations from your Fastfile and Matchfile")
89
87
  UI.message("")
90
88
  UI.input("Please make sure to read the above and confirm with enter")
89
+ ensure
90
+ google_cloud_storage.clear_changes if google_cloud_storage
91
+ git_storage.clear_changes if git_storage
91
92
  end
92
93
 
93
94
  def api_token(params)
@@ -103,6 +103,8 @@ module Match
103
103
  else
104
104
  UI.success("No relevant certificates or provisioning profiles found, nothing to nuke here :)")
105
105
  end
106
+ ensure
107
+ self.storage.clear_changes if self.storage
106
108
  end
107
109
 
108
110
  # Be smart about optional values here