fastlane 2.169.0 → 2.170.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +78 -78
  3. data/deliver/lib/deliver/upload_metadata.rb +3 -3
  4. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +1 -1
  5. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -0
  6. data/fastlane/lib/fastlane/actions/onesignal.rb +13 -3
  7. data/fastlane/lib/fastlane/actions/upload_app_privacy_details_to_app_store.rb +289 -0
  8. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -1
  9. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +3 -0
  10. data/fastlane/lib/fastlane/version.rb +1 -1
  11. data/fastlane/swift/Deliverfile.swift +1 -1
  12. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  13. data/fastlane/swift/Fastlane.swift +44 -3
  14. data/fastlane/swift/Gymfile.swift +1 -1
  15. data/fastlane/swift/GymfileProtocol.swift +1 -1
  16. data/fastlane/swift/Matchfile.swift +1 -1
  17. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  18. data/fastlane/swift/Precheckfile.swift +1 -1
  19. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  20. data/fastlane/swift/Scanfile.swift +1 -1
  21. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  22. data/fastlane/swift/Screengrabfile.swift +1 -1
  23. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  24. data/fastlane/swift/Snapshotfile.swift +1 -1
  25. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  26. data/match/lib/match/runner.rb +1 -1
  27. data/spaceship/lib/spaceship/connect_api.rb +6 -0
  28. data/{sigh/lib/sigh/.options.rb.swp → spaceship/lib/spaceship/connect_api/models/.app_data_usage_data_protection.rb.swp} +0 -0
  29. data/spaceship/lib/spaceship/connect_api/models/app_data_usage.rb +59 -0
  30. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_category.rb +65 -0
  31. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_data_protection.rb +27 -0
  32. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_grouping.rb +18 -0
  33. data/spaceship/lib/spaceship/connect_api/models/app_data_usage_purposes.rb +37 -0
  34. data/spaceship/lib/spaceship/connect_api/models/app_data_usages_publish_state.rb +36 -0
  35. data/spaceship/lib/spaceship/connect_api/models/device.rb +4 -0
  36. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +103 -0
  37. metadata +26 -22
  38. data/cert/lib/cert/.options.rb.swp +0 -0
  39. data/cert/lib/cert/.runner.rb.swp +0 -0
  40. data/match/lib/match/.options.rb.swp +0 -0
@@ -122,7 +122,7 @@ Layout/SpaceAroundOperators:
122
122
  Exclude:
123
123
  - "**/spec/actions_specs/xcodebuild_spec.rb"
124
124
  AllCops:
125
- TargetRubyVersion: 2.0
125
+ TargetRubyVersion: 2.4
126
126
  Include:
127
127
  - "*/lib/assets/*Template"
128
128
  - "*/lib/assets/*TemplateAndroid"
@@ -79,6 +79,7 @@ module Fastlane
79
79
  available_external_actions = Fastlane.external_actions || []
80
80
  available_actions = []
81
81
  ActionsList.all_actions do |action|
82
+ next unless action.respond_to?(:action_name)
82
83
  available_actions << action.action_name unless available_external_actions.include?(action)
83
84
  end
84
85
 
@@ -108,6 +109,7 @@ module Fastlane
108
109
  # Excludes all actions that aren't pluign actions (including external actions)
109
110
  available_actions = []
110
111
  ActionsList.all_actions do |action|
112
+ next unless action.respond_to?(:action_name)
111
113
  available_actions << action.action_name unless available_plugins.include?(action)
112
114
  end
113
115
 
@@ -151,6 +153,7 @@ module Fastlane
151
153
 
152
154
  tool_details = []
153
155
  ActionsList.all_actions do |action|
156
+ next unless action.respond_to?(:action_name)
154
157
  next if self.actions_not_supported.include?(action.action_name)
155
158
 
156
159
  swift_function = process_action(action: action)
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.169.0'.freeze
2
+ VERSION = '2.170.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -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.169.0
20
+ // Generated with fastlane 2.170.0
@@ -256,4 +256,4 @@ public extension DeliverfileProtocol {
256
256
 
257
257
  // Please don't remove the lines below
258
258
  // They are used to detect outdated files
259
- // FastlaneRunnerAPIVersion [0.9.52]
259
+ // FastlaneRunnerAPIVersion [0.9.53]
@@ -5159,6 +5159,7 @@ public func oclint(oclintPath: String = "oclint",
5159
5159
  - apnsP12: APNS P12 File (in .p12 format)
5160
5160
  - apnsP12Password: APNS P12 password
5161
5161
  - apnsEnv: APNS environment
5162
+ - organizationId: OneSignal Organization ID
5162
5163
 
5163
5164
  You can use this action to automatically create or update a OneSignal application. You can also upload a `.p12` with password, a GCM key, or both.
5164
5165
  */
@@ -5169,7 +5170,8 @@ public func onesignal(appId: String? = nil,
5169
5170
  androidGcmSenderId: String? = nil,
5170
5171
  apnsP12: String? = nil,
5171
5172
  apnsP12Password: String? = nil,
5172
- apnsEnv: String = "production")
5173
+ apnsEnv: String = "production",
5174
+ organizationId: String? = nil)
5173
5175
  {
5174
5176
  let command = RubyCommand(commandID: "", methodName: "onesignal", className: nil, args: [RubyCommand.Argument(name: "app_id", value: appId),
5175
5177
  RubyCommand.Argument(name: "auth_token", value: authToken),
@@ -5178,7 +5180,8 @@ public func onesignal(appId: String? = nil,
5178
5180
  RubyCommand.Argument(name: "android_gcm_sender_id", value: androidGcmSenderId),
5179
5181
  RubyCommand.Argument(name: "apns_p12", value: apnsP12),
5180
5182
  RubyCommand.Argument(name: "apns_p12_password", value: apnsP12Password),
5181
- RubyCommand.Argument(name: "apns_env", value: apnsEnv)])
5183
+ RubyCommand.Argument(name: "apns_env", value: apnsEnv),
5184
+ RubyCommand.Argument(name: "organization_id", value: organizationId)])
5182
5185
  _ = runner.executeCommand(command)
5183
5186
  }
5184
5187
 
@@ -8427,6 +8430,44 @@ public func updateUrlSchemes(path: String,
8427
8430
  _ = runner.executeCommand(command)
8428
8431
  }
8429
8432
 
8433
+ /**
8434
+ Upload App Privacy Details for an app in App Store Connect
8435
+
8436
+ - parameters:
8437
+ - username: Your Apple ID Username for App Store Connect
8438
+ - appIdentifier: The bundle identifier of your app
8439
+ - teamId: The ID of your App Store Connect team if you're in multiple teams
8440
+ - teamName: The name of your App Store Connect team if you're in multiple teams
8441
+ - jsonPath: Path to the app usage data JSON
8442
+ - outputJsonPath: Path to the app usage data JSON file generated by interactive questions
8443
+ - skipJsonFileSaving: Whether to skip the saving of the JSON file
8444
+ - skipUpload: Whether to skip the upload and only create the JSON file with interactive questions
8445
+ - skipPublish: Whether to skip the publishing
8446
+
8447
+ Upload App Privacy Details for an app in App Store Connect. For more detail information, view https://docs.fastlane.tools/uploading-app-privacy-details
8448
+ */
8449
+ public func uploadAppPrivacyDetailsToAppStore(username: String,
8450
+ appIdentifier: String,
8451
+ teamId: Any? = nil,
8452
+ teamName: String? = nil,
8453
+ jsonPath: String? = nil,
8454
+ outputJsonPath: String = "./fastlane/app_privacy_details.json",
8455
+ skipJsonFileSaving: Bool = false,
8456
+ skipUpload: Bool = false,
8457
+ skipPublish: Bool = false)
8458
+ {
8459
+ let command = RubyCommand(commandID: "", methodName: "upload_app_privacy_details_to_app_store", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
8460
+ RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
8461
+ RubyCommand.Argument(name: "team_id", value: teamId),
8462
+ RubyCommand.Argument(name: "team_name", value: teamName),
8463
+ RubyCommand.Argument(name: "json_path", value: jsonPath),
8464
+ RubyCommand.Argument(name: "output_json_path", value: outputJsonPath),
8465
+ RubyCommand.Argument(name: "skip_json_file_saving", value: skipJsonFileSaving),
8466
+ RubyCommand.Argument(name: "skip_upload", value: skipUpload),
8467
+ RubyCommand.Argument(name: "skip_publish", value: skipPublish)])
8468
+ _ = runner.executeCommand(command)
8469
+ }
8470
+
8430
8471
  /**
8431
8472
  Upload dSYM symbolication files to Crashlytics
8432
8473
 
@@ -9429,4 +9470,4 @@ public let snapshotfile = Snapshotfile()
9429
9470
 
9430
9471
  // Please don't remove the lines below
9431
9472
  // They are used to detect outdated files
9432
- // FastlaneRunnerAPIVersion [0.9.105]
9473
+ // FastlaneRunnerAPIVersion [0.9.106]
@@ -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.169.0
20
+ // Generated with fastlane 2.170.0
@@ -188,4 +188,4 @@ public extension GymfileProtocol {
188
188
 
189
189
  // Please don't remove the lines below
190
190
  // They are used to detect outdated files
191
- // FastlaneRunnerAPIVersion [0.9.55]
191
+ // FastlaneRunnerAPIVersion [0.9.56]
@@ -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.169.0
20
+ // Generated with fastlane 2.170.0
@@ -184,4 +184,4 @@ public extension MatchfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.49]
187
+ // FastlaneRunnerAPIVersion [0.9.50]
@@ -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.169.0
20
+ // Generated with fastlane 2.170.0
@@ -48,4 +48,4 @@ public extension PrecheckfileProtocol {
48
48
 
49
49
  // Please don't remove the lines below
50
50
  // They are used to detect outdated files
51
- // FastlaneRunnerAPIVersion [0.9.48]
51
+ // FastlaneRunnerAPIVersion [0.9.49]
@@ -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.169.0
20
+ // Generated with fastlane 2.170.0
@@ -268,4 +268,4 @@ public extension ScanfileProtocol {
268
268
 
269
269
  // Please don't remove the lines below
270
270
  // They are used to detect outdated files
271
- // FastlaneRunnerAPIVersion [0.9.60]
271
+ // FastlaneRunnerAPIVersion [0.9.61]
@@ -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.169.0
20
+ // Generated with fastlane 2.170.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.50]
99
+ // FastlaneRunnerAPIVersion [0.9.51]
@@ -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.169.0
20
+ // Generated with fastlane 2.170.0
@@ -184,4 +184,4 @@ public extension SnapshotfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.44]
187
+ // FastlaneRunnerAPIVersion [0.9.45]
@@ -355,7 +355,7 @@ module Match
355
355
  devices = Spaceship::ConnectAPI::Device.all
356
356
  unless device_classes.empty?
357
357
  devices = devices.select do |device|
358
- device_classes.include?(device.device_class)
358
+ device_classes.include?(device.device_class) && device.enabled?
359
359
  end
360
360
  end
361
361
 
@@ -35,6 +35,12 @@ require 'spaceship/connect_api/models/custom_app_organization'
35
35
  require 'spaceship/connect_api/models/custom_app_user'
36
36
  require 'spaceship/connect_api/models/pre_release_version'
37
37
 
38
+ require 'spaceship/connect_api/models/app_data_usage'
39
+ require 'spaceship/connect_api/models/app_data_usage_category'
40
+ require 'spaceship/connect_api/models/app_data_usage_data_protection'
41
+ require 'spaceship/connect_api/models/app_data_usage_grouping'
42
+ require 'spaceship/connect_api/models/app_data_usage_purposes'
43
+ require 'spaceship/connect_api/models/app_data_usages_publish_state'
38
44
  require 'spaceship/connect_api/models/age_rating_declaration'
39
45
  require 'spaceship/connect_api/models/app_category'
40
46
  require 'spaceship/connect_api/models/app_info'
@@ -0,0 +1,59 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class AppDataUsage
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :category
8
+ attr_accessor :grouping
9
+ attr_accessor :purpose
10
+ attr_accessor :data_protection
11
+
12
+ attr_mapping({
13
+ "category" => "category",
14
+ "grouping" => "grouping",
15
+ "dataProtection" => "data_protection"
16
+ })
17
+
18
+ def self.type
19
+ return "appDataUsages"
20
+ end
21
+
22
+ #
23
+ # Helpers
24
+ #
25
+
26
+ def is_not_collected?
27
+ return false unless data_protection
28
+ return data_protection.id == "DATA_NOT_COLLECTED"
29
+ end
30
+
31
+ #
32
+ # API
33
+ #
34
+
35
+ def self.all(app_id:, filter: {}, includes: nil, limit: nil, sort: nil)
36
+ raise "app_id is required " if app_id.nil?
37
+
38
+ resps = Spaceship::ConnectAPI.get_app_data_usages(app_id: app_id, filter: filter, includes: includes, limit: limit, sort: sort).all_pages
39
+ return resps.flat_map(&:to_models)
40
+ end
41
+
42
+ def self.create(app_id:, app_data_usage_category_id: nil, app_data_usage_protection_id: nil, app_data_usage_purpose_id: nil)
43
+ raise "app_id is required " if app_id.nil?
44
+
45
+ resp = Spaceship::ConnectAPI.post_app_data_usage(
46
+ app_id: app_id,
47
+ app_data_usage_category_id: app_data_usage_category_id,
48
+ app_data_usage_protection_id: app_data_usage_protection_id,
49
+ app_data_usage_purpose_id: app_data_usage_purpose_id
50
+ )
51
+ return resp.to_models.first
52
+ end
53
+
54
+ def delete!
55
+ Spaceship::ConnectAPI.delete_app_data_usage(app_data_usage_id: id)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,65 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class AppDataUsageCategory
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :deleted
8
+ attr_accessor :grouping
9
+
10
+ attr_mapping({
11
+ "deleted" => "deleted",
12
+ "grouping" => "grouping"
13
+ })
14
+
15
+ # Found at https://appstoreconnect.apple.com/iris/v1/appDataUsageCategories
16
+ module ID
17
+ PAYMENT_INFORMATION = "PAYMENT_INFORMATION"
18
+ CREDIT_AND_FRAUD = "CREDIT_AND_FRAUD"
19
+ OTHER_FINANCIAL_INFO = "OTHER_FINANCIAL_INFO"
20
+ PRECISE_LOCATION = "PRECISE_LOCATION"
21
+ SENSITIVE_INFO = "SENSITIVE_INFO"
22
+ PHYSICAL_ADDRESS = "PHYSICAL_ADDRESS"
23
+ EMAIL_ADDRESS = "EMAIL_ADDRESS"
24
+ NAME = "NAME"
25
+ PHONE_NUMBER = "PHONE_NUMBER"
26
+ OTHER_CONTACT_INFO = "OTHER_CONTACT_INFO"
27
+ CONTACTS = "CONTACTS"
28
+ EMAILS_OR_TEXT_MESSAGES = "EMAILS_OR_TEXT_MESSAGES"
29
+ PHOTOS_OR_VIDEOS = "PHOTOS_OR_VIDEOS"
30
+ AUDIO = "AUDIO"
31
+ GAMEPLAY_CONTENT = "GAMEPLAY_CONTENT"
32
+ CUSTOMER_SUPPORT = "CUSTOMER_SUPPORT"
33
+ OTHER_USER_CONTENT = "OTHER_USER_CONTENT"
34
+ BROWSING_HISTORY = "BROWSING_HISTORY"
35
+ SEARCH_HISTORY = "SEARCH_HISTORY"
36
+ USER_ID = "USER_ID"
37
+ DEVICE_ID = "DEVICE_ID"
38
+ PURCHASE_HISTORY = "PURCHASE_HISTORY"
39
+ PRODUCT_INTERACTION = "PRODUCT_INTERACTION"
40
+ ADVERTISING_DATA = "ADVERTISING_DATA"
41
+ OTHER_USAGE_DATA = "OTHER_USAGE_DATA"
42
+ CRASH_DATA = "CRASH_DATA"
43
+ PERFORMANCE_DATA = "PERFORMANCE_DATA"
44
+ OTHER_DIAGNOSTIC_DATA = "OTHER_DIAGNOSTIC_DATA"
45
+ OTHER_DATA = "OTHER_DATA"
46
+ HEALTH = "HEALTH"
47
+ FITNESS = "FITNESS"
48
+ COARSE_LOCATION = "COARSE_LOCATION"
49
+ end
50
+
51
+ def self.type
52
+ return "appDataUsageCategories"
53
+ end
54
+
55
+ #
56
+ # API
57
+ #
58
+
59
+ def self.all(filter: {}, includes: nil, limit: nil, sort: nil)
60
+ resps = Spaceship::ConnectAPI.get_app_data_usage_categories(filter: filter, includes: includes, limit: limit, sort: sort).all_pages
61
+ return resps.flat_map(&:to_models)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class AppDataUsageDataProtection
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :deleted
8
+
9
+ attr_mapping({
10
+ "deleted" => "deleted"
11
+ })
12
+
13
+ # Found at https://appstoreconnect.apple.com/iris/v1/appDataUsageDataProtections
14
+ module ID
15
+ DATA_USED_TO_TRACK_YOU = "DATA_USED_TO_TRACK_YOU"
16
+ DATA_LINKED_TO_YOU = "DATA_LINKED_TO_YOU"
17
+ DATA_NOT_LINKED_TO_YOU = "DATA_NOT_LINKED_TO_YOU"
18
+
19
+ DATA_NOT_COLLECTED = "DATA_NOT_COLLECTED"
20
+ end
21
+
22
+ def self.type
23
+ return "appDataUsageDataProtections"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class AppDataUsageGrouping
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :deleted
8
+
9
+ attr_mapping({
10
+ "deleted" => "deleted"
11
+ })
12
+
13
+ def self.type
14
+ return "appDataUsageGroupings"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,37 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class AppDataUsagePurpose
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :deleted
8
+
9
+ attr_mapping({
10
+ "deleted" => "deleted"
11
+ })
12
+
13
+ # Found at https://appstoreconnect.apple.com/iris/v1/appDataUsagePurposes
14
+ module ID
15
+ THIRD_PARTY_ADVERTISING = "THIRD_PARTY_ADVERTISING"
16
+ DEVELOPERS_ADVERTISING = "DEVELOPERS_ADVERTISING"
17
+ ANALYTICS = "ANALYTICS"
18
+ PRODUCT_PERSONALIZATION = "PRODUCT_PERSONALIZATION"
19
+ APP_FUNCTIONALITY = "APP_FUNCTIONALITY"
20
+ OTHER_PURPOSES = "OTHER_PURPOSES"
21
+ end
22
+
23
+ def self.type
24
+ return "appDataUsagePurposes"
25
+ end
26
+
27
+ #
28
+ # API
29
+ #
30
+
31
+ def self.all(filter: {}, includes: nil, limit: nil, sort: nil)
32
+ resps = Spaceship::ConnectAPI.get_app_data_usage_purposes(filter: filter, includes: includes, limit: limit, sort: sort).all_pages
33
+ return resps.flat_map(&:to_models)
34
+ end
35
+ end
36
+ end
37
+ end