fastlane 2.193.1 → 2.197.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +88 -88
  3. data/cert/lib/cert/options.rb +1 -1
  4. data/deliver/lib/assets/ScreenshotsHelp +29 -6
  5. data/deliver/lib/deliver/app_screenshot.rb +4 -4
  6. data/deliver/lib/deliver/options.rb +1 -1
  7. data/deliver/lib/deliver/upload_screenshots.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -7
  9. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
  10. data/fastlane/lib/fastlane/actions/download_dsyms.rb +47 -30
  11. data/fastlane/lib/fastlane/actions/gradle.rb +15 -2
  12. data/fastlane/lib/fastlane/actions/last_git_commit.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +3 -4
  14. data/fastlane/lib/fastlane/actions/notarize.rb +27 -18
  15. data/fastlane/lib/fastlane/actions/prompt.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
  17. data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
  18. data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
  19. data/fastlane/lib/fastlane/actions/slather.rb +6 -0
  20. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +11 -5
  21. data/fastlane/lib/fastlane/version.rb +1 -1
  22. data/fastlane/swift/Deliverfile.swift +1 -1
  23. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  24. data/fastlane/swift/Fastlane.swift +86 -99
  25. data/fastlane/swift/Gymfile.swift +1 -1
  26. data/fastlane/swift/GymfileProtocol.swift +1 -1
  27. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  28. data/fastlane/swift/Matchfile.swift +1 -1
  29. data/fastlane/swift/MatchfileProtocol.swift +10 -2
  30. data/fastlane/swift/Precheckfile.swift +1 -1
  31. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  32. data/fastlane/swift/Runner.swift +1 -1
  33. data/fastlane/swift/Scanfile.swift +1 -1
  34. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  35. data/fastlane/swift/Screengrabfile.swift +1 -1
  36. data/fastlane/swift/ScreengrabfileProtocol.swift +3 -3
  37. data/fastlane/swift/Snapshotfile.swift +1 -1
  38. data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
  39. data/fastlane/swift/formatting/Brewfile.lock.json +16 -16
  40. data/fastlane_core/lib/fastlane_core/build_watcher.rb +1 -1
  41. data/frameit/lib/frameit/editor.rb +16 -18
  42. data/frameit/lib/frameit/trim_box.rb +6 -0
  43. data/match/lib/match/generator.rb +2 -1
  44. data/match/lib/match/options.rb +11 -1
  45. data/match/lib/match/runner.rb +94 -10
  46. data/pem/lib/pem/manager.rb +2 -1
  47. data/pem/lib/pem/options.rb +1 -1
  48. data/pilot/lib/pilot/options.rb +1 -1
  49. data/precheck/lib/precheck/options.rb +1 -1
  50. data/screengrab/lib/screengrab/options.rb +2 -2
  51. data/sigh/lib/assets/resign.sh +9 -6
  52. data/sigh/lib/sigh/options.rb +6 -1
  53. data/sigh/lib/sigh/runner.rb +2 -2
  54. data/snapshot/lib/snapshot/options.rb +1 -1
  55. data/snapshot/lib/snapshot/reports_generator.rb +8 -0
  56. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +9 -1
  57. data/spaceship/lib/spaceship/connect_api/models/.build.rb.swp +0 -0
  58. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
  59. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -2
  60. data/spaceship/lib/spaceship/connect_api/models/build_bundle.rb +59 -0
  61. data/spaceship/lib/spaceship/connect_api/token.rb +1 -1
  62. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  63. data/supply/lib/supply/client.rb +3 -3
  64. data/supply/lib/supply/uploader.rb +10 -7
  65. metadata +39 -35
  66. data/fastlane/lib/fastlane/actions/crashlytics.rb +0 -207
  67. data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +0 -157
@@ -114,7 +114,7 @@ module Sigh
114
114
 
115
115
  # Take the provisioning profile name into account
116
116
  results = filter_profiles_by_name(results) if Sigh.config[:provisioning_name].to_s.length > 0
117
- return results if Sigh.config[:skip_certificate_verification]
117
+ return results if Sigh.config[:skip_certificate_verification] || Sigh.config[:include_all_certificates]
118
118
 
119
119
  UI.message("Verifying certificates...")
120
120
  return results.find_all do |current_profile|
@@ -311,7 +311,7 @@ module Sigh
311
311
 
312
312
  # verify certificates
313
313
  if Helper.mac?
314
- unless Sigh.config[:skip_certificate_verification]
314
+ unless Sigh.config[:skip_certificate_verification] || Sigh.config[:include_all_certificates]
315
315
  certificates = certificates.find_all do |c|
316
316
  file = Tempfile.new('cert')
317
317
  raw_data = Base64.decode64(c.certificate_content)
@@ -123,7 +123,7 @@ module Snapshot
123
123
  type: Boolean),
124
124
  FastlaneCore::ConfigItem.new(key: :override_status_bar,
125
125
  env_name: 'SNAPSHOT_OVERRIDE_STATUS_BAR',
126
- description: "Enabling this option will automatically override the status bar to show 9:41 AM, full battery, and full reception",
126
+ description: "Enabling this option will automatically override the status bar to show 9:41 AM, full battery, and full reception (Adjust 'SNAPSHOT_SIMULATOR_WAIT_FOR_BOOT_TIMEOUT' environment variable if override status bar is not working. Might be because simulator is not fully booted. Defaults to 10 seconds)",
127
127
  default_value: false,
128
128
  is_string: false),
129
129
  FastlaneCore::ConfigItem.new(key: :override_status_bar_arguments,
@@ -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 13 Pro Max' => "iPhone 13 Pro Max",
88
+ 'iPhone 13 Pro' => "iPhone 13 Pro",
89
+ 'iPhone 13 mini' => "iPhone 13 mini",
90
+ 'iPhone 13' => "iPhone 13",
87
91
  'iPhone 12 Pro Max' => "iPhone 12 Pro Max",
88
92
  'iPhone 12 Pro' => "iPhone 12 Pro",
89
93
  'iPhone 12 mini' => "iPhone 12 mini",
@@ -113,6 +117,10 @@ module Snapshot
113
117
  'iPad Air' => 'iPad Air',
114
118
  'iPad (5th generation)' => 'iPad (5th generation)',
115
119
  'iPad (7th generation)' => 'iPad (7th generation)',
120
+ 'iPad mini 2' => 'iPad mini 2',
121
+ 'iPad mini 3' => 'iPad mini 3',
122
+ 'iPad mini 4' => 'iPad mini 4',
123
+ 'iPad mini (6th generation)' => 'iPad mini (6th generation)',
116
124
  'iPad Pro (9.7-inch)' => 'iPad Pro (9.7-inch)',
117
125
  'iPad Pro (9.7 inch)' => 'iPad Pro (9.7-inch)', # iOS 10.3.1 simulator
118
126
  'iPad Pro (10.5-inch)' => 'iPad Pro (10.5-inch)',
@@ -116,7 +116,15 @@ module Snapshot
116
116
  device_udid = TestCommandGenerator.device_udid(device_type)
117
117
 
118
118
  UI.message("Launch Simulator #{device_type}")
119
- Helper.backticks("xcrun instruments -w #{device_udid} &> /dev/null")
119
+ # Boot the simulator and wait for it to finish booting
120
+ Helper.backticks("xcrun simctl bootstatus #{device_udid} -b &> /dev/null")
121
+
122
+ # "Booted" status is not enough for to adjust the status bar
123
+ # Simulator could stil be booting with Apple logo
124
+ # Need to wait "some amount of time" until home screen shows
125
+ boot_sleep = ENV["SNAPSHOT_SIMULATOR_WAIT_FOR_BOOT_TIMEOUT"].to_i || 10
126
+ UI.message("Waiting #{boot_sleep} seconds for device to fully boot before overriding status bar... Set 'SNAPSHOT_SIMULATOR_WAIT_FOR_BOOT_TIMEOUT' environemnt variable to adjust timeout")
127
+ sleep(boot_sleep) if boot_sleep > 0
120
128
 
121
129
  UI.message("Overriding Status Bar")
122
130
 
@@ -112,7 +112,7 @@ module Spaceship
112
112
 
113
113
  # @deprecated
114
114
  def fetch_age_rating_declaration(client: nil)
115
- raise 'AppStoreVersion no longer as AgeRatingDelcaration as of App Store Connect API 1.3 - Use AppInfo instead'
115
+ raise 'AppStoreVersion no longer as AgeRatingDeclaration as of App Store Connect API 1.3 - Use AppInfo instead'
116
116
  end
117
117
 
118
118
  #
@@ -19,6 +19,7 @@ module Spaceship
19
19
  attr_accessor :beta_build_metrics
20
20
  attr_accessor :beta_build_localizations
21
21
  attr_accessor :build_beta_detail
22
+ attr_accessor :build_bundles
22
23
  attr_accessor :pre_release_version
23
24
  attr_accessor :individual_testers
24
25
 
@@ -38,10 +39,11 @@ module Spaceship
38
39
  "betaBuildLocalizations" => "beta_build_localizations",
39
40
  "buildBetaDetail" => "build_beta_detail",
40
41
  "preReleaseVersion" => "pre_release_version",
41
- "individualTesters" => "individual_testers"
42
+ "individualTesters" => "individual_testers",
43
+ "buildBundles" => "build_bundles"
42
44
  })
43
45
 
44
- ESSENTIAL_INCLUDES = "app,buildBetaDetail,preReleaseVersion"
46
+ ESSENTIAL_INCLUDES = "app,buildBetaDetail,preReleaseVersion,buildBundles"
45
47
 
46
48
  module ProcessingState
47
49
  PROCESSING = "PROCESSING"
@@ -0,0 +1,59 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class BuildBundle
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :bundle_id
8
+ attr_accessor :bundle_type
9
+ attr_accessor :sdk_build
10
+ attr_accessor :platform_build
11
+ attr_accessor :file_name
12
+ attr_accessor :has_siri_kit
13
+ attr_accessor :has_on_demand_resources
14
+ attr_accessor :is_newsstand
15
+ attr_accessor :has_prerendered_icon
16
+ attr_accessor :uses_location_services
17
+ attr_accessor :is_ios_build_mac_app_store_compatible
18
+ attr_accessor :includes_symbols
19
+ attr_accessor :dsym_url
20
+ attr_accessor :supported_architectures
21
+ attr_accessor :required_capabilities
22
+ attr_accessor :device_protocols
23
+ attr_accessor :locales
24
+ attr_accessor :entitlements
25
+ attr_accessor :tracks_users
26
+
27
+ module BundleType
28
+ APP = "APP"
29
+ # APP_CLIP might be in here as well
30
+ end
31
+
32
+ attr_mapping({
33
+ "bundleId" => "bundle_id",
34
+ "bundleType" => "bundle_type",
35
+ "sdkBuild" => "sdk_build",
36
+ "platformBuild" => "platform_build",
37
+ "fileName" => "file_name",
38
+ "hasSirikit" => "has_siri_kit",
39
+ "hasOnDemandResources" => "has_on_demand_resources",
40
+ "isNewsstand" => "is_newsstand",
41
+ "hasPrerenderedIcon" => "has_prerendered_icon",
42
+ "usesLocationServices" => "uses_location_services",
43
+ "isIosBuildMacAppStoreCompatible" => "is_ios_build_mac_app_store_compatible",
44
+ "includesSymbols" => "includes_symbols",
45
+ "dSYMUrl" => "dsym_url",
46
+ "supportedArchitectures" => "supported_architectures",
47
+ "requiredCapabilities" => "required_capabilities",
48
+ "deviceProtocols" => "device_protocols",
49
+ "locales" => "locales",
50
+ "entitlements" => "entitlements",
51
+ "tracksUsers" => "tracks_users"
52
+ })
53
+
54
+ def self.type
55
+ return "buildBundles"
56
+ end
57
+ end
58
+ end
59
+ end
@@ -29,7 +29,7 @@ module Spaceship
29
29
  attr_accessor :in_house
30
30
 
31
31
  def self.from(hash: nil, filepath: nil)
32
- api_token ||= self.create(**hash) if hash
32
+ api_token ||= self.create(**hash.transform_keys(&:to_sym)) if hash
33
33
  api_token ||= self.from_json_file(filepath) if filepath
34
34
  return api_token
35
35
  end
@@ -32,6 +32,7 @@ require 'spaceship/connect_api/models/beta_tester_metric'
32
32
  require 'spaceship/connect_api/models/build'
33
33
  require 'spaceship/connect_api/models/build_delivery'
34
34
  require 'spaceship/connect_api/models/build_beta_detail'
35
+ require 'spaceship/connect_api/models/build_bundle'
35
36
  require 'spaceship/connect_api/models/custom_app_organization'
36
37
  require 'spaceship/connect_api/models/custom_app_user'
37
38
  require 'spaceship/connect_api/models/pre_release_version'
@@ -286,10 +286,10 @@ module Supply
286
286
 
287
287
  filtered_release = filtered_track.releases.first { |r| !r.name.nil? && r.name == version }
288
288
 
289
- # Since we can release on Alpha/Beta without release notes.
289
+ # Since we can release on Internal/Alpha/Beta without release notes.
290
290
  if filtered_release.release_notes.nil?
291
- UI.user_error!("Version '#{version}' for '#{current_package_name}' does not seem to have any release notes. Nothing to download.")
292
- return nil
291
+ UI.message("Version '#{version}' for '#{current_package_name}' does not seem to have any release notes. Nothing to download.")
292
+ return []
293
293
  end
294
294
 
295
295
  return filtered_release.release_notes.map do |row|
@@ -13,6 +13,8 @@ module Supply
13
13
  apk_version_codes.concat(upload_bundles) unless Supply.config[:skip_upload_aab]
14
14
  upload_mapping(apk_version_codes)
15
15
 
16
+ track_to_update = Supply.config[:track]
17
+
16
18
  apk_version_codes.concat(Supply.config[:version_codes_to_retain]) if Supply.config[:version_codes_to_retain]
17
19
 
18
20
  if !apk_version_codes.empty?
@@ -23,13 +25,14 @@ module Supply
23
25
  else
24
26
  # Only promote or rollout if we don't have version codes
25
27
  if Supply.config[:track_promote_to]
28
+ track_to_update = Supply.config[:track_promote_to]
26
29
  promote_track
27
30
  elsif !Supply.config[:rollout].nil? && Supply.config[:track].to_s != ""
28
31
  update_rollout
29
32
  end
30
33
  end
31
34
 
32
- perform_upload_meta(apk_version_codes)
35
+ perform_upload_meta(apk_version_codes, track_to_update)
33
36
 
34
37
  if Supply.config[:validate_only]
35
38
  UI.message("Validating all changes with Google Play...")
@@ -70,7 +73,7 @@ module Supply
70
73
  end
71
74
  end
72
75
 
73
- def perform_upload_meta(version_codes)
76
+ def perform_upload_meta(version_codes, track_name)
74
77
  if (!Supply.config[:skip_upload_metadata] || !Supply.config[:skip_upload_images] || !Supply.config[:skip_upload_changelogs] || !Supply.config[:skip_upload_screenshots]) && metadata_path
75
78
  # Use version code from config if version codes is empty and no nil or empty string
76
79
  version_codes = [Supply.config[:version_code]] if version_codes.empty?
@@ -81,7 +84,7 @@ module Supply
81
84
  version_codes.each do |version_code|
82
85
  UI.user_error!("Could not find folder #{metadata_path}") unless File.directory?(metadata_path)
83
86
 
84
- track, release = fetch_track_and_release!(Supply.config[:track], version_code)
87
+ track, release = fetch_track_and_release!(track_name, version_code)
85
88
  UI.user_error!("Unable to find the requested track - '#{Supply.config[:track]}'") unless track
86
89
  UI.user_error!("Could not find release for version code '#{version_code}' to update changelog") unless release
87
90
 
@@ -98,7 +101,7 @@ module Supply
98
101
  release_notes << upload_changelog(language, version_code) unless Supply.config[:skip_upload_changelogs]
99
102
  end
100
103
 
101
- upload_changelogs(release_notes, release, track) unless release_notes.empty?
104
+ upload_changelogs(release_notes, release, track, track_name) unless release_notes.empty?
102
105
  end
103
106
  end
104
107
  end
@@ -144,7 +147,7 @@ module Supply
144
147
  end
145
148
 
146
149
  def verify_config!
147
- unless metadata_path || Supply.config[:apk] || Supply.config[:apk_paths] || Supply.config[:aab] || Supply.config[:aab_paths] || (Supply.config[:track] && Supply.config[:track_promote_to])
150
+ unless metadata_path || Supply.config[:apk] || Supply.config[:apk_paths] || Supply.config[:aab] || Supply.config[:aab_paths] || (Supply.config[:track] && Supply.config[:track_promote_to]) || (Supply.config[:track] && Supply.config[:rollout])
148
151
  UI.user_error!("No local metadata, apks, aab, or track to promote were found, make sure to run `fastlane supply init` to setup supply")
149
152
  end
150
153
 
@@ -239,9 +242,9 @@ module Supply
239
242
  )
240
243
  end
241
244
 
242
- def upload_changelogs(release_notes, release, track)
245
+ def upload_changelogs(release_notes, release, track, track_name)
243
246
  release.release_notes = release_notes
244
- client.upload_changelogs(track, Supply.config[:track])
247
+ client.upload_changelogs(track, track_name)
245
248
  end
246
249
 
247
250
  def upload_metadata(language, listing)
metadata CHANGED
@@ -1,38 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.193.1
4
+ version: 2.197.0
5
5
  platform: ruby
6
6
  authors:
7
- - Maksym Grebenets
8
- - Jérôme Lacoste
9
- - Fumiya Nakamura
10
- - Olivier Halligon
11
- - Daniel Jankowski
12
- - Kohki Miki
7
+ - Max Ott
8
+ - Danielle Tomlinson
13
9
  - Jimmy Dee
14
- - Jan Piotrowski
15
10
  - Manish Rathi
16
11
  - Manu Wallner
17
- - Jorge Revuelta H
18
- - Joshua Liebowitz
19
- - Helmut Januschka
20
- - Aaron Brager
21
- - Josh Holtz
22
- - Danielle Tomlinson
12
+ - Maksym Grebenets
13
+ - Iulian Onofrei
23
14
  - Felix Krause
15
+ - Helmut Januschka
16
+ - Jan Piotrowski
17
+ - Stefan Natchev
24
18
  - Luka Mirosevic
19
+ - Joshua Liebowitz
20
+ - Fumiya Nakamura
21
+ - Kohki Miki
22
+ - Satoshi Namai
23
+ - Jérôme Lacoste
24
+ - Daniel Jankowski
25
+ - Aaron Brager
26
+ - Olivier Halligon
27
+ - Matthew Ellis
25
28
  - Roger Oba
26
29
  - Andrew McBurney
27
- - Iulian Onofrei
28
- - Matthew Ellis
29
- - Satoshi Namai
30
- - Max Ott
31
- - Stefan Natchev
30
+ - Josh Holtz
31
+ - Jorge Revuelta H
32
32
  autorequire:
33
33
  bindir: bin
34
34
  cert_chain: []
35
- date: 2021-09-02 00:00:00.000000000 Z
35
+ date: 2021-10-22 00:00:00.000000000 Z
36
36
  dependencies:
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: xcodeproj
@@ -1056,7 +1056,6 @@ files:
1056
1056
  - fastlane/lib/fastlane/actions/commit_github_file.rb
1057
1057
  - fastlane/lib/fastlane/actions/commit_version_bump.rb
1058
1058
  - fastlane/lib/fastlane/actions/copy_artifacts.rb
1059
- - fastlane/lib/fastlane/actions/crashlytics.rb
1060
1059
  - fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb
1061
1060
  - fastlane/lib/fastlane/actions/create_app_online.rb
1062
1061
  - fastlane/lib/fastlane/actions/create_keychain.rb
@@ -1278,7 +1277,6 @@ files:
1278
1277
  - fastlane/lib/fastlane/features.rb
1279
1278
  - fastlane/lib/fastlane/helper/README.md
1280
1279
  - fastlane/lib/fastlane/helper/adb_helper.rb
1281
- - fastlane/lib/fastlane/helper/crashlytics_helper.rb
1282
1280
  - fastlane/lib/fastlane/helper/dotenv_helper.rb
1283
1281
  - fastlane/lib/fastlane/helper/gem_helper.rb
1284
1282
  - fastlane/lib/fastlane/helper/git_helper.rb
@@ -1656,6 +1654,7 @@ files:
1656
1654
  - spaceship/lib/spaceship/connect_api/client.rb
1657
1655
  - spaceship/lib/spaceship/connect_api/file_uploader.rb
1658
1656
  - spaceship/lib/spaceship/connect_api/model.rb
1657
+ - spaceship/lib/spaceship/connect_api/models/.build.rb.swp
1659
1658
  - spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb
1660
1659
  - spaceship/lib/spaceship/connect_api/models/app.rb
1661
1660
  - spaceship/lib/spaceship/connect_api/models/app_category.rb
@@ -1693,6 +1692,7 @@ files:
1693
1692
  - spaceship/lib/spaceship/connect_api/models/beta_tester_metric.rb
1694
1693
  - spaceship/lib/spaceship/connect_api/models/build.rb
1695
1694
  - spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb
1695
+ - spaceship/lib/spaceship/connect_api/models/build_bundle.rb
1696
1696
  - spaceship/lib/spaceship/connect_api/models/build_delivery.rb
1697
1697
  - spaceship/lib/spaceship/connect_api/models/bundle_id.rb
1698
1698
  - spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb
@@ -1841,28 +1841,32 @@ homepage: https://fastlane.tools
1841
1841
  licenses:
1842
1842
  - MIT
1843
1843
  metadata:
1844
- docs_url: https://docs.fastlane.tools
1844
+ bug_tracker_uri: https://github.com/fastlane/fastlane/issues
1845
+ changelog_uri: https://github.com/fastlane/fastlane/releases
1846
+ documentation_uri: https://docs.fastlane.tools/
1847
+ homepage_uri: https://fastlane.tools
1848
+ source_code_uri: https://github.com/fastlane/fastlane
1845
1849
  post_install_message:
1846
1850
  rdoc_options: []
1847
1851
  require_paths:
1852
+ - cert/lib
1848
1853
  - credentials_manager/lib
1849
- - pem/lib
1850
- - snapshot/lib
1851
- - frameit/lib
1852
- - match/lib
1853
- - fastlane_core/lib
1854
1854
  - deliver/lib
1855
- - scan/lib
1856
- - supply/lib
1857
- - cert/lib
1858
1855
  - fastlane/lib
1859
- - spaceship/lib
1860
- - pilot/lib
1856
+ - fastlane_core/lib
1857
+ - frameit/lib
1861
1858
  - gym/lib
1859
+ - match/lib
1860
+ - pem/lib
1861
+ - pilot/lib
1862
1862
  - precheck/lib
1863
+ - produce/lib
1864
+ - scan/lib
1863
1865
  - screengrab/lib
1864
1866
  - sigh/lib
1865
- - produce/lib
1867
+ - snapshot/lib
1868
+ - spaceship/lib
1869
+ - supply/lib
1866
1870
  required_ruby_version: !ruby/object:Gem::Requirement
1867
1871
  requirements:
1868
1872
  - - ">="
@@ -1874,7 +1878,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1874
1878
  - !ruby/object:Gem::Version
1875
1879
  version: '0'
1876
1880
  requirements: []
1877
- rubygems_version: 3.1.4
1881
+ rubygems_version: 3.2.3
1878
1882
  signing_key:
1879
1883
  specification_version: 4
1880
1884
  summary: The easiest way to automate beta deployments and releases for your iOS and
@@ -1,207 +0,0 @@
1
- module Fastlane
2
- module Actions
3
- class CrashlyticsAction < Action
4
- def self.run(params)
5
- params.values # to validate all inputs before looking for the ipa/apk
6
- tempfiles = []
7
-
8
- # We need to store notes in a file, because the crashlytics CLI (iOS) says so
9
- if params[:notes]
10
- UI.error("Overwriting :notes_path, because you specified :notes") if params[:notes_path]
11
-
12
- changelog = Helper::CrashlyticsHelper.write_to_tempfile(params[:notes], 'changelog')
13
- tempfiles << changelog
14
- params[:notes_path] = changelog.path
15
- elsif Actions.lane_context[SharedValues::FL_CHANGELOG] && !params[:notes_path]
16
- UI.message("Sending FL_CHANGELOG as release notes to Beta by Crashlytics")
17
-
18
- changelog = Helper::CrashlyticsHelper.write_to_tempfile(
19
- Actions.lane_context[SharedValues::FL_CHANGELOG], 'changelog'
20
- )
21
- tempfiles << changelog
22
- params[:notes_path] = changelog.path
23
- end
24
-
25
- if params[:ipa_path]
26
- command = Helper::CrashlyticsHelper.generate_ios_command(params)
27
- elsif params[:apk_path]
28
- android_manifest = Helper::CrashlyticsHelper.generate_android_manifest_tempfile
29
- tempfiles << android_manifest
30
- command = Helper::CrashlyticsHelper.generate_android_command(params, android_manifest.path)
31
- else
32
- UI.user_error!("You have to either pass an ipa or an apk file to the Crashlytics action")
33
- end
34
-
35
- UI.success('Uploading the build to Crashlytics Beta. Time for some ☕️.')
36
-
37
- sanitizer = proc do |message|
38
- message.gsub(params[:api_token], '[[API_TOKEN]]')
39
- .gsub(params[:build_secret], '[[BUILD_SECRET]]')
40
- end
41
-
42
- UI.verbose(sanitizer.call(command.join(' '))) if FastlaneCore::Globals.verbose?
43
-
44
- error_callback = proc do |error|
45
- clean_error = sanitizer.call(error)
46
- UI.user_error!(clean_error)
47
- end
48
-
49
- result = Actions.sh_control_output(
50
- command.join(" "),
51
- print_command: false,
52
- print_command_output: false,
53
- error_callback: error_callback
54
- )
55
-
56
- tempfiles.each(&:unlink)
57
- return command if Helper.test?
58
-
59
- UI.verbose(sanitizer.call(result)) if FastlaneCore::Globals.verbose?
60
-
61
- UI.success('Build successfully uploaded to Crashlytics Beta 🌷')
62
- UI.success('Visit https://fabric.io/_/beta to add release notes and notify testers.')
63
- end
64
-
65
- def self.description
66
- "Refer to [Firebase App Distribution](https://appdistro.page.link/fastlane-repo)"
67
- end
68
-
69
- def self.available_options
70
- platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME]
71
-
72
- if platform == :ios || platform.nil?
73
- ipa_path_default = Dir["*.ipa"].sort_by { |x| File.mtime(x) }.last
74
- end
75
-
76
- if platform == :android
77
- apk_path_default = Dir["*.apk"].last || Dir[File.join("app", "build", "outputs", "apk", "app-release.apk")].last
78
- end
79
-
80
- [
81
- # iOS Specific
82
- FastlaneCore::ConfigItem.new(key: :ipa_path,
83
- env_name: "CRASHLYTICS_IPA_PATH",
84
- description: "Path to your IPA file. Optional if you use the _gym_ or _xcodebuild_ action",
85
- default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] || ipa_path_default,
86
- default_value_dynamic: true,
87
- optional: true,
88
- verify_block: proc do |value|
89
- UI.user_error!("Couldn't find ipa file at path '#{value}'") unless File.exist?(value)
90
- end),
91
- # Android Specific
92
- FastlaneCore::ConfigItem.new(key: :apk_path,
93
- env_name: "CRASHLYTICS_APK_PATH",
94
- description: "Path to your APK file",
95
- default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] || apk_path_default,
96
- default_value_dynamic: true,
97
- optional: true,
98
- verify_block: proc do |value|
99
- UI.user_error!("Couldn't find apk file at path '#{value}'") unless File.exist?(value)
100
- end),
101
- # General
102
- FastlaneCore::ConfigItem.new(key: :crashlytics_path,
103
- env_name: "CRASHLYTICS_FRAMEWORK_PATH",
104
- description: "Path to the submit binary in the Crashlytics bundle (iOS) or `crashlytics-devtools.jar` file (Android)",
105
- optional: true,
106
- verify_block: proc do |value|
107
- UI.user_error!("Couldn't find crashlytics at path '#{File.expand_path(value)}'`") unless File.exist?(File.expand_path(value))
108
- end),
109
- FastlaneCore::ConfigItem.new(key: :api_token,
110
- env_name: "CRASHLYTICS_API_TOKEN",
111
- description: "Crashlytics API Key",
112
- sensitive: true,
113
- verify_block: proc do |value|
114
- UI.user_error!("No API token for Crashlytics given, pass using `api_token: 'token'`") unless value && !value.empty?
115
- end),
116
- FastlaneCore::ConfigItem.new(key: :build_secret,
117
- env_name: "CRASHLYTICS_BUILD_SECRET",
118
- description: "Crashlytics Build Secret",
119
- sensitive: true,
120
- verify_block: proc do |value|
121
- UI.user_error!("No build secret for Crashlytics given, pass using `build_secret: 'secret'`") unless value && !value.empty?
122
- end),
123
- FastlaneCore::ConfigItem.new(key: :notes_path,
124
- env_name: "CRASHLYTICS_NOTES_PATH",
125
- description: "Path to the release notes",
126
- optional: true,
127
- verify_block: proc do |value|
128
- UI.user_error!("Path '#{value}' not found") unless File.exist?(value)
129
- end),
130
- FastlaneCore::ConfigItem.new(key: :notes,
131
- env_name: "CRASHLYTICS_NOTES",
132
- description: "The release notes as string - uses :notes_path under the hood",
133
- optional: true),
134
- FastlaneCore::ConfigItem.new(key: :groups,
135
- env_name: "CRASHLYTICS_GROUPS",
136
- description: "The groups used for distribution, separated by commas",
137
- type: Array,
138
- optional: true),
139
- FastlaneCore::ConfigItem.new(key: :emails,
140
- env_name: "CRASHLYTICS_EMAILS",
141
- description: "Pass email addresses of testers, separated by commas",
142
- type: Array,
143
- optional: true),
144
- FastlaneCore::ConfigItem.new(key: :notifications,
145
- env_name: "CRASHLYTICS_NOTIFICATIONS",
146
- description: "Crashlytics notification option (true/false)",
147
- default_value: true,
148
- type: Boolean),
149
- FastlaneCore::ConfigItem.new(key: :debug,
150
- env_name: "CRASHLYTICS_DEBUG",
151
- description: "Crashlytics debug option (true/false)",
152
- default_value: false,
153
- type: Boolean)
154
-
155
- ]
156
- end
157
-
158
- def self.is_supported?(platform)
159
- [:ios, :mac, :android].include?(platform)
160
- end
161
-
162
- def self.author
163
- ["KrauseFx", "pedrogimenez"]
164
- end
165
-
166
- def self.details
167
- [
168
- "Additionally, you can specify `notes`, `emails`, `groups` and `notifications`.",
169
- "Distributing to Groups: When using the `groups` parameter, it's important to use the group **alias** names for each group you'd like to distribute to. A group's alias can be found in the web UI. If you're viewing the Beta page, you can open the groups dialog by clicking the 'Manage Groups' button.",
170
- "This action uses the `submit` binary provided by the Crashlytics framework. If the binary is not found in its usual path, you'll need to specify the path manually by using the `crashlytics_path` option."
171
- ].join("\n")
172
- end
173
-
174
- def self.example_code
175
- [
176
- 'crashlytics',
177
- '# If you installed Crashlytics via CocoaPods
178
- crashlytics(
179
- crashlytics_path: "./Pods/Crashlytics/submit", # path to your Crashlytics submit binary.
180
- api_token: "...",
181
- build_secret: "...",
182
- ipa_path: "./app.ipa"
183
- )',
184
- '# If you installed Crashlytics via Carthage for iOS platform
185
- crashlytics(
186
- crashlytics_path: "./Carthage/Build/iOS/Crashlytics.framework/submit", # path to your Crashlytics submit binary.
187
- api_token: "...",
188
- build_secret: "...",
189
- ipa_path: "./app.ipa"
190
- )'
191
- ]
192
- end
193
-
194
- def self.category
195
- :deprecated
196
- end
197
-
198
- def self.deprecated_notes
199
- [
200
- "Crashlytics Beta has been deprecated and replaced with Firebase App Distribution.",
201
- "Beta will continue working until May 4, 2020.",
202
- "Check out the [Firebase App Distribution docs](https://github.com/fastlane/fastlane-plugin-firebase_app_distribution) to get started."
203
- ].join("\n")
204
- end
205
- end
206
- end
207
- end