fastlane 2.178.0 → 2.182.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +97 -84
  4. data/cert/lib/cert/commands_generator.rb +2 -1
  5. data/cert/lib/cert/options.rb +1 -0
  6. data/cert/lib/cert/runner.rb +4 -0
  7. data/deliver/lib/deliver/commands_generator.rb +2 -1
  8. data/deliver/lib/deliver/download_screenshots.rb +1 -2
  9. data/deliver/lib/deliver/languages.rb +1 -1
  10. data/deliver/lib/deliver/options.rb +3 -2
  11. data/deliver/lib/deliver/runner.rb +4 -0
  12. data/deliver/lib/deliver/setup.rb +0 -1
  13. data/deliver/lib/deliver/upload_metadata.rb +2 -1
  14. data/fastlane/lib/fastlane/actions/actions_helper.rb +2 -2
  15. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +5 -0
  16. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +3 -3
  17. data/fastlane/lib/fastlane/actions/backup_xcarchive.rb +1 -1
  18. data/fastlane/lib/fastlane/actions/build_app.rb +4 -0
  19. data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +4 -0
  20. data/fastlane/lib/fastlane/actions/clipboard.rb +3 -6
  21. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
  22. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +18 -1
  23. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -1
  24. data/fastlane/lib/fastlane/actions/ensure_env_vars.rb +2 -6
  25. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +4 -0
  26. data/fastlane/lib/fastlane/actions/get_version_number.rb +17 -10
  27. data/fastlane/lib/fastlane/actions/git_branch.rb +4 -10
  28. data/fastlane/lib/fastlane/actions/git_commit.rb +3 -1
  29. data/fastlane/lib/fastlane/actions/git_submodule_update.rb +16 -8
  30. data/fastlane/lib/fastlane/actions/git_tag_exists.rb +4 -0
  31. data/fastlane/lib/fastlane/actions/import_from_git.rb +5 -5
  32. data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +4 -0
  33. data/fastlane/lib/fastlane/actions/jira.rb +61 -14
  34. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -0
  35. data/fastlane/lib/fastlane/actions/match_nuke.rb +59 -0
  36. data/fastlane/lib/fastlane/actions/notarize.rb +98 -51
  37. data/fastlane/lib/fastlane/actions/slack.rb +155 -133
  38. data/fastlane/lib/fastlane/actions/sourcedocs.rb +164 -0
  39. data/fastlane/lib/fastlane/actions/spaceship_logs.rb +1 -1
  40. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +1 -2
  41. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +4 -2
  42. data/fastlane/lib/fastlane/cli_tools_distributor.rb +1 -1
  43. data/fastlane/lib/fastlane/commands_generator.rb +2 -1
  44. data/fastlane/lib/fastlane/fast_file.rb +10 -2
  45. data/fastlane/lib/fastlane/fastlane_require.rb +7 -1
  46. data/fastlane/lib/fastlane/helper/git_helper.rb +19 -7
  47. data/fastlane/lib/fastlane/lane_manager.rb +3 -2
  48. data/fastlane/lib/fastlane/notification/slack.rb +56 -0
  49. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +1 -2
  50. data/fastlane/lib/fastlane/plugins/plugin_info.rb +2 -2
  51. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +1 -2
  52. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -2
  53. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +7 -6
  54. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +30 -35
  55. data/fastlane/lib/fastlane/plugins/template/spec/spec_helper.rb.erb +1 -1
  56. data/fastlane/lib/fastlane/setup/setup.rb +23 -10
  57. data/fastlane/lib/fastlane/swift_fastlane_function.rb +39 -14
  58. data/fastlane/lib/fastlane/swift_runner_upgrader.rb +2 -0
  59. data/fastlane/lib/fastlane/version.rb +2 -2
  60. data/fastlane/swift/Deliverfile.swift +1 -1
  61. data/fastlane/swift/DeliverfileProtocol.swift +3 -3
  62. data/fastlane/swift/Fastlane.swift +6852 -3824
  63. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +4 -0
  64. data/fastlane/swift/Gymfile.swift +1 -1
  65. data/fastlane/swift/GymfileProtocol.swift +1 -1
  66. data/fastlane/swift/LaneFileProtocol.swift +9 -3
  67. data/fastlane/swift/Matchfile.swift +1 -1
  68. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  69. data/fastlane/swift/OptionalConfigValue.swift +131 -0
  70. data/fastlane/swift/Precheckfile.swift +1 -1
  71. data/fastlane/swift/PrecheckfileProtocol.swift +3 -3
  72. data/fastlane/swift/RubyCommand.swift +1 -1
  73. data/fastlane/swift/Scanfile.swift +1 -1
  74. data/fastlane/swift/ScanfileProtocol.swift +5 -1
  75. data/fastlane/swift/Screengrabfile.swift +1 -1
  76. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  77. data/fastlane/swift/Snapshotfile.swift +1 -1
  78. data/fastlane/swift/SnapshotfileProtocol.swift +5 -1
  79. data/fastlane/swift/SocketClient.swift +2 -1
  80. data/fastlane/swift/SocketResponse.swift +4 -2
  81. data/fastlane/swift/formatting/Brewfile.lock.json +18 -16
  82. data/fastlane/swift/upgrade_manifest.json +1 -1
  83. data/fastlane_core/lib/fastlane_core.rb +22 -21
  84. data/fastlane_core/lib/fastlane_core/build_watcher.rb +50 -9
  85. data/fastlane_core/lib/fastlane_core/clipboard.rb +20 -0
  86. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +5 -3
  87. data/fastlane_core/lib/fastlane_core/helper.rb +28 -5
  88. data/fastlane_core/lib/fastlane_core/languages.rb +2 -2
  89. data/fastlane_core/lib/fastlane_core/queue_worker.rb +2 -2
  90. data/fastlane_core/lib/fastlane_core/swag.rb +1 -1
  91. data/fastlane_core/lib/fastlane_core/ui/help.erb +35 -0
  92. data/fastlane_core/lib/fastlane_core/ui/help_formatter.rb +16 -0
  93. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +12 -1
  94. data/frameit/lib/frameit/commands_generator.rb +2 -1
  95. data/gym/lib/gym/commands_generator.rb +2 -1
  96. data/gym/lib/gym/generators/package_command_generator.rb +4 -0
  97. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +13 -8
  98. data/gym/lib/gym/runner.rb +15 -4
  99. data/match/lib/match/change_password.rb +3 -3
  100. data/match/lib/match/commands_generator.rb +2 -1
  101. data/match/lib/match/encryption/interface.rb +1 -1
  102. data/match/lib/match/encryption/openssl.rb +2 -2
  103. data/match/lib/match/module.rb +1 -0
  104. data/pem/lib/pem/commands_generator.rb +2 -1
  105. data/pilot/lib/pilot/commands_generator.rb +2 -1
  106. data/pilot/lib/pilot/manager.rb +4 -0
  107. data/pilot/lib/pilot/options.rb +3 -2
  108. data/pilot/lib/pilot/tester_exporter.rb +0 -1
  109. data/pilot/lib/pilot/tester_manager.rb +0 -1
  110. data/precheck/lib/precheck/commands_generator.rb +2 -1
  111. data/precheck/lib/precheck/options.rb +1 -0
  112. data/precheck/lib/precheck/runner.rb +4 -0
  113. data/produce/lib/produce/commands_generator.rb +2 -1
  114. data/scan/lib/scan/commands_generator.rb +2 -1
  115. data/scan/lib/scan/options.rb +10 -5
  116. data/scan/lib/scan/runner.rb +54 -1
  117. data/scan/lib/scan/test_command_generator.rb +10 -8
  118. data/screengrab/lib/screengrab/android_environment.rb +6 -4
  119. data/screengrab/lib/screengrab/commands_generator.rb +2 -1
  120. data/screengrab/lib/screengrab/runner.rb +1 -1
  121. data/sigh/lib/sigh/commands_generator.rb +2 -1
  122. data/sigh/lib/sigh/options.rb +1 -0
  123. data/sigh/lib/sigh/runner.rb +4 -0
  124. data/snapshot/lib/assets/SnapfileTemplate +1 -1
  125. data/snapshot/lib/assets/SnapshotHelper.swift +1 -1
  126. data/snapshot/lib/snapshot/commands_generator.rb +3 -1
  127. data/snapshot/lib/snapshot/options.rb +5 -0
  128. data/snapshot/lib/snapshot/reports_generator.rb +4 -0
  129. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  130. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +1 -1
  131. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +8 -4
  132. data/spaceship/README.md +2 -12
  133. data/spaceship/lib/spaceship/base.rb +2 -2
  134. data/spaceship/lib/spaceship/commands_generator.rb +4 -2
  135. data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +1 -1
  136. data/spaceship/lib/spaceship/connect_api/models/profile.rb +6 -0
  137. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +6 -2
  138. data/spaceship/lib/spaceship/connect_api/token.rb +7 -1
  139. data/spaceship/lib/spaceship/spaceauth_runner.rb +19 -9
  140. data/spaceship/lib/spaceship/tunes/members.rb +1 -1
  141. data/spaceship/lib/spaceship/ui.rb +2 -2
  142. data/supply/lib/supply/client.rb +3 -1
  143. data/supply/lib/supply/commands_generator.rb +2 -1
  144. data/supply/lib/supply/options.rb +2 -2
  145. data/supply/lib/supply/uploader.rb +1 -0
  146. metadata +53 -64
  147. data/gym/lib/gym/.runner.rb.swp +0 -0
  148. data/pilot/lib/pilot/tester_util.rb +0 -0
@@ -308,7 +308,7 @@ module Screengrab
308
308
  if out =~ /Permission denied/
309
309
  dir = File.dirname(path)
310
310
  base = File.basename(path)
311
- run_adb_command("-s #{device_serial} shell run-as #{@config[:app_package_name]} 'tar -cC #{dir} #{base}' | tar -xvC #{tempdir}",
311
+ run_adb_command("-s #{device_serial} shell run-as #{@config[:app_package_name]} \"tar -cC #{dir} #{base}\" | tar -xv -f- -C #{tempdir}",
312
312
  print_all: false,
313
313
  print_command: true)
314
314
  end
@@ -1,5 +1,6 @@
1
1
  require 'commander'
2
2
  require 'fastlane/version'
3
+ require 'fastlane_core/ui/help_formatter'
3
4
 
4
5
  require_relative 'options'
5
6
  require_relative 'resign'
@@ -23,7 +24,7 @@ module Sigh
23
24
  program :help, 'Author', 'Felix Krause <sigh@krausefx.com>'
24
25
  program :help, 'Website', 'https://fastlane.tools'
25
26
  program :help, 'Documentation', 'https://docs.fastlane.tools/actions/sigh/'
26
- program :help_formatter, :compact
27
+ program :help_formatter, FastlaneCore::HelpFormatter
27
28
 
28
29
  global_option('--verbose') { FastlaneCore::Globals.verbose = true }
29
30
  global_option('--env STRING[,STRING2]', String, 'Add environment(s) to use with `dotenv`')
@@ -77,6 +77,7 @@ module Sigh
77
77
  short_option: "-u",
78
78
  env_name: "SIGH_USERNAME",
79
79
  description: "Your Apple ID Username",
80
+ optional: true,
80
81
  default_value: user,
81
82
  default_value_dynamic: true),
82
83
  FastlaneCore::ConfigItem.new(key: :team_id,
@@ -21,6 +21,10 @@ module Sigh
21
21
  UI.message("Creating authorization token for App Store Connect API")
22
22
  Spaceship::ConnectAPI.token = api_token
23
23
  else
24
+ # Username is now optional since addition of App Store Connect API Key
25
+ # Force asking for username to prompt user if not already set
26
+ Sigh.config.fetch(:username, force_ask: true)
27
+
24
28
  # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
25
29
  # Prompts select team if multiple teams and none specified
26
30
  UI.message("Starting login with user '#{Sigh.config[:username]}'")
@@ -27,7 +27,7 @@
27
27
  # remove the '#' to clear all previously generated screenshots before creating new ones
28
28
  # clear_previous_screenshots(true)
29
29
 
30
- # Remove the '#' to set the status bar to 9:41 AM, and show full battery and reception.
30
+ # Remove the '#' to set the status bar to 9:41 AM, and show full battery and reception. See also override_status_bar_arguments for custom options.
31
31
  # override_status_bar(true)
32
32
 
33
33
  # Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments
@@ -302,4 +302,4 @@ private extension CGFloat {
302
302
 
303
303
  // Please don't remove the lines below
304
304
  // They are used to detect outdated configuration files
305
- // SnapshotHelperVersion [1.24]
305
+ // SnapshotHelperVersion [1.25]
@@ -1,5 +1,7 @@
1
1
  require 'commander'
2
2
 
3
+ require 'fastlane_core/ui/help_formatter'
4
+
3
5
  require_relative 'module'
4
6
  require_relative 'runner'
5
7
  require_relative 'options'
@@ -21,7 +23,7 @@ module Snapshot
21
23
  program :help, 'Author', 'Felix Krause <snapshot@krausefx.com>'
22
24
  program :help, 'Website', 'https://fastlane.tools'
23
25
  program :help, 'Documentation', 'https://docs.fastlane.tools/actions/snapshot/'
24
- program :help_formatter, :compact
26
+ program :help_formatter, FastlaneCore::HelpFormatter
25
27
 
26
28
  global_option('--verbose', 'Shows a more verbose output') { FastlaneCore::Globals.verbose = true }
27
29
 
@@ -126,6 +126,11 @@ module Snapshot
126
126
  description: "Enabling this option will automatically override the status bar to show 9:41 AM, full battery, and full reception",
127
127
  default_value: false,
128
128
  is_string: false),
129
+ FastlaneCore::ConfigItem.new(key: :override_status_bar_arguments,
130
+ env_name: 'SNAPSHOT_OVERRIDE_STATUS_BAR_ARGUMENTS',
131
+ description: "Fully customize the status bar by setting each option here. See `xcrun simctl status_bar --help`",
132
+ optional: true,
133
+ type: String),
129
134
  FastlaneCore::ConfigItem.new(key: :localize_simulator,
130
135
  env_name: 'SNAPSHOT_LOCALIZE_SIMULATOR',
131
136
  description: "Enabling this option will configure the Simulator's system language",
@@ -84,6 +84,10 @@ module Snapshot
84
84
  {
85
85
  # snapshot in Xcode 9 saves screenshots with the SIMULATOR_DEVICE_NAME
86
86
  # which includes spaces
87
+ 'iPhone 12 Pro Max' => "iPhone 12 Pro Max",
88
+ 'iPhone 12 Pro' => "iPhone 12 Pro",
89
+ 'iPhone 12 mini' => "iPhone 12 mini",
90
+ 'iPhone 12' => "iPhone 12",
87
91
  'iPhone 11 Pro Max' => "iPhone 11 Pro Max",
88
92
  'iPhone 11 Pro' => "iPhone 11 Pro",
89
93
  'iPhone 11' => "iPhone 11",
@@ -14,6 +14,7 @@ module Snapshot
14
14
  attr_accessor :app_identifier
15
15
  attr_accessor :disable_slide_to_type
16
16
  attr_accessor :override_status_bar
17
+ attr_accessor :override_status_bar_arguments
17
18
 
18
19
  # xcode 8
19
20
  attr_accessor :number_of_retries
@@ -47,6 +48,7 @@ module Snapshot
47
48
  @concurrent_simulators = snapshot_config[:concurrent_simulators]
48
49
  @disable_slide_to_type = snapshot_config[:disable_slide_to_type]
49
50
  @override_status_bar = snapshot_config[:override_status_bar]
51
+ @override_status_bar_arguments = snapshot_config[:override_status_bar_arguments]
50
52
 
51
53
  launch_arguments = Array(snapshot_config[:launch_arguments])
52
54
  # if more than 1 set of arguments, use a tuple with an index
@@ -89,7 +89,7 @@ module Snapshot
89
89
  log_path: xcodebuild_log_path(language: language, locale: locale)
90
90
  )
91
91
 
92
- devices.each { |device_type| override_status_bar(device_type) } if launcher_config.override_status_bar
92
+ devices.each { |device_type| override_status_bar(device_type, launcher_config.override_status_bar_arguments) } if launcher_config.override_status_bar
93
93
 
94
94
  UI.important("Running snapshot on: #{devices.join(', ')}")
95
95
 
@@ -112,7 +112,7 @@ module Snapshot
112
112
  end
113
113
  end
114
114
 
115
- def override_status_bar(device_type)
115
+ def override_status_bar(device_type, arguments = nil)
116
116
  device_udid = TestCommandGenerator.device_udid(device_type)
117
117
 
118
118
  UI.message("Launch Simulator #{device_type}")
@@ -120,9 +120,13 @@ module Snapshot
120
120
 
121
121
  UI.message("Overriding Status Bar")
122
122
 
123
- # The time needs to be passed as ISO8601 so the simulator formats it correctly
124
- time = Time.new(2007, 1, 9, 9, 41, 0)
125
- Helper.backticks("xcrun simctl status_bar #{device_udid} override --time #{time.iso8601} --dataNetwork wifi --wifiMode active --wifiBars 3 --cellularMode active --cellularBars 4 --batteryState charged --batteryLevel 100 &> /dev/null")
123
+ if arguments.nil? || arguments.empty?
124
+ # The time needs to be passed as ISO8601 so the simulator formats it correctly
125
+ time = Time.new(2007, 1, 9, 9, 41, 0)
126
+ arguments = "--time #{time.iso8601} --dataNetwork wifi --wifiMode active --wifiBars 3 --cellularMode active --cellularBars 4 --batteryState charged --batteryLevel 100"
127
+ end
128
+
129
+ Helper.backticks("xcrun simctl status_bar #{device_udid} override #{arguments} &> /dev/null")
126
130
  end
127
131
 
128
132
  def clear_status_bar(device_type)
data/spaceship/README.md CHANGED
@@ -111,21 +111,11 @@ When your Apple account has 2 factor verification enabled, you'll automatically
111
111
 
112
112
  #### Web sessions
113
113
 
114
- To generate a web session for your CI machine, use
115
-
116
- ```sh
117
- fastlane spaceauth -u user@example.org
118
- ```
119
-
120
- This will authenticate you and provide a string that can be transferred to your CI system. Copy everything from `---\n` to your CI server and provide it as environment variable named `FASTLANE_SESSION`. For example:
121
-
122
- ```
123
- export FASTLANE_SESSION='---\n- !ruby/object:HTTP::Cookie\n name: DES5c148586dfd451e55afbaaa5f62418f91\n value: HSARMTKNSRVTWFla1+yO4gVPowH17VaaaxPFnUdMUegQZxqy1Ie1c2v6bM1vSOzIbuOmrl/FNenlScsd/NbF7/Lw4cpnL15jsyg0TOJwP32tC/NguPiyOaaaU+jrj4tf4uKdIywVaaaFSRVT\n domain: idmsa.apple.com\n for_domain: true\n path: "/"\n secure: true\n httponly: true\n expires: 2016-04-27 23:55:56.000000000 Z\n max_age: \n created_at: 2016-03-28 16:55:57.032086000 -07:00\n accessed_at: 2016-03-28 19:11:17.828141000 -07:00\n'
124
- ```
114
+ See [Continuous Integration > Authenticating with Apple services > Method 2: Two-step or two-factor authentication > Storing a manually verified session using spaceauth](https://docs.fastlane.tools/best-practices/continuous-integration/#storing-a-manually-verified-session-using-spaceauth)
125
115
 
126
116
  #### Transporter
127
117
 
128
- See [Continuous Integration > Authentication with Apple services > Application specific passwords](https://docs.fastlane.tools/best-practices/continuous-integration/#application-specific-passwords)
118
+ See [Getting Started > iOS > Authentication > Method 3: Application-specific passwords](https://docs.fastlane.tools/getting-started/ios/authentication/#method-3-application-specific-passwords)
129
119
 
130
120
  ## _spaceship_ in use
131
121
 
@@ -89,12 +89,12 @@ module Spaceship
89
89
  ##
90
90
  # Sets client and returns self for chaining.
91
91
  # @return (Spaceship::Base)
92
- # rubocop:disable Style/AccessorMethodName
92
+ # rubocop:disable Naming/AccessorMethodName
93
93
  def set_client(client)
94
94
  self.client = client
95
95
  self
96
96
  end
97
- # rubocop:enable Style/AccessorMethodName
97
+ # rubocop:enable Naming/AccessorMethodName
98
98
 
99
99
  ##
100
100
  # Binds attributes getters and setters to underlying data returned from the API.
@@ -3,6 +3,7 @@ require 'highline'
3
3
  HighLine.track_eof = false
4
4
 
5
5
  require 'fastlane/version'
6
+ require 'fastlane_core/ui/help_formatter'
6
7
  require_relative 'playground'
7
8
  require_relative 'spaceauth_runner'
8
9
 
@@ -21,7 +22,7 @@ module Spaceship
21
22
  program :help, 'Author', 'Felix Krause <spaceship@krausefx.com>'
22
23
  program :help, 'Website', 'https://fastlane.tools'
23
24
  program :help, 'GitHub', 'https://github.com/fastlane/fastlane/tree/master/spaceship'
24
- program :help_formatter, :compact
25
+ program :help_formatter, FastlaneCore::HelpFormatter
25
26
 
26
27
  global_option('-u', '--user USERNAME', 'Specify the Apple ID you want to log in with')
27
28
  global_option('--verbose') { FastlaneCore::Globals.verbose = true }
@@ -39,9 +40,10 @@ module Spaceship
39
40
  command :spaceauth do |c|
40
41
  c.syntax = 'fastlane spaceship spaceauth'
41
42
  c.description = 'Authentication helper for spaceship/fastlane to work with Apple 2-Step/2FA'
43
+ c.option('--copy_to_clipboard', 'Whether the session string should be copied to clipboard. For more info see https://docs.fastlane.tools/best-practices/continuous-integration/#storing-a-manually-verified-session-using-spaceauth`')
42
44
 
43
45
  c.action do |args, options|
44
- Spaceship::SpaceauthRunner.new(username: options.user).run
46
+ Spaceship::SpaceauthRunner.new(username: options.user, copy_to_clipboard: options.copy_to_clipboard).run
45
47
  end
46
48
  end
47
49
 
@@ -112,7 +112,7 @@ module Spaceship
112
112
  timeout_minutes = (ENV["SPACESHIP_SCREENSHOT_UPLOAD_TIMEOUT"] || 20).to_i
113
113
 
114
114
  loop do
115
- # This error handling needs to be revised since any error occured can reach here.
115
+ # This error handling needs to be revised since any error occurred can reach here.
116
116
  # It should handle errors based on what status code is.
117
117
  puts("Waiting for screenshots to appear before uploading. This is unlikely to be recovered unless it's 503 error. error=\"#{error}\"")
118
118
  sleep(30)
@@ -92,6 +92,12 @@ module Spaceship
92
92
  return resps.flat_map(&:to_models)
93
93
  end
94
94
 
95
+ def fetch_all_certificates(client: nil, filter: {}, includes: nil, sort: nil)
96
+ client ||= Spaceship::ConnectAPI
97
+ resps = client.get_certificates(profile_id: id, filter: filter, includes: includes).all_pages
98
+ return resps.flat_map(&:to_models)
99
+ end
100
+
95
101
  def delete!(client: nil)
96
102
  client ||= Spaceship::ConnectAPI
97
103
  return client.delete_profile(profile_id: id)
@@ -84,9 +84,13 @@ module Spaceship
84
84
  # certificates
85
85
  #
86
86
 
87
- def get_certificates(filter: {}, includes: nil, limit: nil, sort: nil)
87
+ def get_certificates(profile_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
88
88
  params = provisioning_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
89
- provisioning_request_client.get("certificates", params)
89
+ if profile_id.nil?
90
+ provisioning_request_client.get("certificates", params)
91
+ else
92
+ provisioning_request_client.get("profiles/#{profile_id}/certificates", params)
93
+ end
90
94
  end
91
95
 
92
96
  def get_certificate(certificate_id: nil, includes: nil)
@@ -60,14 +60,16 @@ module Spaceship
60
60
  key_id: key_id,
61
61
  issuer_id: issuer_id,
62
62
  key: OpenSSL::PKey::EC.new(key),
63
+ key_raw: key,
63
64
  duration: duration,
64
65
  in_house: in_house
65
66
  )
66
67
  end
67
68
 
68
- def initialize(key_id: nil, issuer_id: nil, key: nil, duration: nil, in_house: nil)
69
+ def initialize(key_id: nil, issuer_id: nil, key: nil, key_raw: nil, duration: nil, in_house: nil)
69
70
  @key_id = key_id
70
71
  @key = key
72
+ @key_raw = key_raw
71
73
  @issuer_id = issuer_id
72
74
  @duration = duration
73
75
  @in_house = in_house
@@ -97,6 +99,10 @@ module Spaceship
97
99
  def expired?
98
100
  @expiration < Time.now
99
101
  end
102
+
103
+ def write_key_to_file(path)
104
+ File.open(path, 'w') { |f| f.write(@key_raw) }
105
+ end
100
106
  end
101
107
  end
102
108
  end
@@ -1,15 +1,17 @@
1
1
  require 'colored'
2
2
  require 'credentials_manager/appfile_config'
3
3
  require 'yaml'
4
+ require 'fastlane_core'
4
5
 
5
6
  require_relative 'tunes/tunes_client'
6
7
 
7
8
  module Spaceship
8
9
  class SpaceauthRunner
9
- def initialize(username: nil)
10
+ def initialize(username: nil, copy_to_clipboard: nil)
10
11
  @username = username
11
12
  @username ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
12
13
  @username ||= ask("Username: ")
14
+ @copy_to_clipboard = copy_to_clipboard
13
15
  end
14
16
 
15
17
  def run
@@ -22,7 +24,7 @@ module Spaceship
22
24
  puts("Could not login to App Store Connect".red)
23
25
  puts("Please check your credentials and try again.".yellow)
24
26
  puts("This could be an issue with App Store Connect,".yellow)
25
- puts("Please try unsetting the FASTLANE_SESSION environment variable".yellow)
27
+ puts("Please try unsetting the FASTLANE_SESSION environment variable by calling 'unset FASTLANE_SESSION'".yellow)
26
28
  puts("(if it is set) and re-run `fastlane spaceauth`".yellow)
27
29
  puts("")
28
30
  puts("Exception type: #{ex.class}")
@@ -49,22 +51,30 @@ module Spaceship
49
51
  cookie.name.start_with?("myacinfo") || cookie.name == "dqsid" || cookie.name.start_with?("DES")
50
52
  end
51
53
 
52
- yaml = cookies.to_yaml.gsub("\n", "\\n")
54
+ @yaml = cookies.to_yaml.gsub("\n", "\\n")
53
55
 
54
56
  puts("---")
55
57
  puts("")
56
58
  puts("Pass the following via the FASTLANE_SESSION environment variable:")
57
- puts(yaml.cyan.underline)
59
+ puts(@yaml.cyan.underline)
58
60
  puts("")
59
61
  puts("")
60
62
  puts("Example:")
61
- puts("export FASTLANE_SESSION='#{yaml}'".cyan.underline)
63
+ puts("export FASTLANE_SESSION='#{@yaml}'".cyan.underline)
62
64
 
63
- if mac? && Spaceship::Client::UserInterface.interactive? && agree("🙄 Should fastlane copy the cookie into your clipboard, so you can easily paste it? (y/n)", true)
64
- require 'open3'
65
- Open3.popen3('pbcopy') { |input, _, _| input << yaml }
66
- puts("Successfully copied text into your clipboard 🎨".green)
65
+ if @copy_to_clipboard == false
66
+ puts("Skipped asking to copy the session string into your clipboard ⏭️".green)
67
+ elsif @copy_to_clipboard || (mac? && Spaceship::Client::UserInterface.interactive? && agree("🙄 Should fastlane copy the cookie into your clipboard, so you can easily paste it? (y/n)", true))
68
+ FastlaneCore::Clipboard.copy(content: @yaml)
69
+ puts("Successfully copied the session string into your clipboard 🎨".green)
67
70
  end
71
+
72
+ return self
73
+ end
74
+
75
+ def session_string
76
+ FastlaneCore::UI.user_error!("`#{__method__}` method called before calling `run` in `SpaceauthRunner`") unless @yaml
77
+ @yaml
68
78
  end
69
79
 
70
80
  def mac?
@@ -15,7 +15,7 @@ module Spaceship
15
15
 
16
16
  def find(email)
17
17
  all.each do |member|
18
- if member.email_address == email
18
+ if member.email_address.casecmp?(email)
19
19
  return member
20
20
  end
21
21
  end
@@ -18,10 +18,10 @@ module Spaceship
18
18
  end
19
19
 
20
20
  # Public getter for all UI related code
21
- # rubocop:disable Style/MethodName
21
+ # rubocop:disable Naming/MethodName
22
22
  def UI
23
23
  UserInterface.new(self)
24
24
  end
25
- # rubocop:enable Style/MethodName
25
+ # rubocop:enable Naming/MethodName
26
26
  end
27
27
  end
@@ -327,12 +327,14 @@ module Supply
327
327
  def upload_mapping(path_to_mapping, apk_version_code)
328
328
  ensure_active_edit!
329
329
 
330
+ extension = File.extname(path_to_mapping).downcase
331
+
330
332
  call_google_api do
331
333
  client.upload_edit_deobfuscationfile(
332
334
  current_package_name,
333
335
  current_edit.id,
334
336
  apk_version_code,
335
- "proguard",
337
+ extension == ".zip" ? "nativeCode" : "proguard",
336
338
  upload_source: path_to_mapping,
337
339
  content_type: "application/octet-stream"
338
340
  )
@@ -1,5 +1,6 @@
1
1
  require "commander"
2
2
  require "fastlane_core"
3
+ require 'fastlane_core/ui/help_formatter'
3
4
  require "supply"
4
5
 
5
6
  HighLine.track_eof = false
@@ -19,7 +20,7 @@ module Supply
19
20
  program :help, 'Author', 'Felix Krause <supply@krausefx.com>'
20
21
  program :help, 'Website', 'https://fastlane.tools'
21
22
  program :help, 'Documentation', 'https://docs.fastlane.tools/actions/supply/'
22
- program :help_formatter, :compact
23
+ program :help_formatter, FastlaneCore::HelpFormatter
23
24
 
24
25
  always_trace!
25
26
 
@@ -223,7 +223,7 @@ module Supply
223
223
  default_value: false),
224
224
  FastlaneCore::ConfigItem.new(key: :mapping,
225
225
  env_name: "SUPPLY_MAPPING",
226
- description: "Path to the mapping file to upload",
226
+ description: "Path to the mapping file to upload (mapping.txt or native-debug-symbols.zip alike)",
227
227
  short_option: "-d",
228
228
  conflicting_options: [:mapping_paths],
229
229
  optional: true,
@@ -235,7 +235,7 @@ module Supply
235
235
  conflicting_options: [:mapping],
236
236
  optional: true,
237
237
  type: Array,
238
- description: "An array of paths to mapping files to upload",
238
+ description: "An array of paths to mapping files to upload (mapping.txt or native-debug-symbols.zip alike)",
239
239
  short_option: "-s",
240
240
  verify_block: proc do |value|
241
241
  UI.user_error!("Could not evaluate array from '#{value}'") unless value.kind_of?(Array)
@@ -304,6 +304,7 @@ module Supply
304
304
  mapping_paths = [Supply.config[:mapping]] unless (mapping_paths = Supply.config[:mapping_paths])
305
305
  mapping_paths.zip(apk_version_codes).each do |mapping_path, version_code|
306
306
  if mapping_path
307
+ UI.message("Preparing mapping at path '#{mapping_path}', version code #{version_code} for upload...")
307
308
  client.upload_mapping(mapping_path, version_code)
308
309
  end
309
310
  end