fastlane 2.157.2 → 2.160.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +80 -80
  3. data/deliver/lib/deliver/options.rb +17 -1
  4. data/deliver/lib/deliver/runner.rb +36 -6
  5. data/deliver/lib/deliver/upload_metadata.rb +36 -6
  6. data/deliver/lib/deliver/upload_price_tier.rb +7 -2
  7. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +12 -8
  8. data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +1 -0
  9. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -0
  10. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
  11. data/fastlane/lib/fastlane/actions/download_dsyms.rb +116 -71
  12. data/fastlane/lib/fastlane/actions/set_changelog.rb +2 -1
  13. data/fastlane/lib/fastlane/helper/git_helper.rb +2 -0
  14. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +6 -4
  15. data/fastlane/lib/fastlane/swift_fastlane_function.rb +1 -1
  16. data/fastlane/lib/fastlane/version.rb +1 -1
  17. data/fastlane/swift/Actions.swift +2 -1
  18. data/fastlane/swift/Appfile.swift +2 -4
  19. data/fastlane/swift/ArgumentProcessor.swift +2 -6
  20. data/fastlane/swift/ControlCommand.swift +2 -5
  21. data/fastlane/swift/Deliverfile.swift +5 -2
  22. data/fastlane/swift/DeliverfileProtocol.swift +15 -4
  23. data/fastlane/swift/Fastfile.swift +5 -1
  24. data/fastlane/swift/Fastlane.swift +2279 -2237
  25. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +5 -5
  26. data/fastlane/swift/Gymfile.swift +5 -2
  27. data/fastlane/swift/GymfileProtocol.swift +6 -3
  28. data/fastlane/swift/LaneFileProtocol.swift +36 -19
  29. data/fastlane/swift/MainProcess.swift +77 -0
  30. data/fastlane/swift/Matchfile.swift +5 -2
  31. data/fastlane/swift/MatchfileProtocol.swift +6 -3
  32. data/fastlane/swift/Plugins.swift +2 -1
  33. data/fastlane/swift/Precheckfile.swift +5 -2
  34. data/fastlane/swift/PrecheckfileProtocol.swift +18 -3
  35. data/fastlane/swift/RubyCommand.swift +2 -6
  36. data/fastlane/swift/RubyCommandable.swift +2 -6
  37. data/fastlane/swift/Runner.swift +5 -9
  38. data/fastlane/swift/RunnerArgument.swift +2 -6
  39. data/fastlane/swift/Scanfile.swift +5 -2
  40. data/fastlane/swift/ScanfileProtocol.swift +6 -3
  41. data/fastlane/swift/Screengrabfile.swift +5 -2
  42. data/fastlane/swift/ScreengrabfileProtocol.swift +6 -3
  43. data/fastlane/swift/Snapshotfile.swift +5 -2
  44. data/fastlane/swift/SnapshotfileProtocol.swift +6 -3
  45. data/fastlane/swift/SocketClient.swift +3 -7
  46. data/fastlane/swift/SocketClientDelegateProtocol.swift +2 -6
  47. data/fastlane/swift/SocketResponse.swift +2 -6
  48. data/fastlane/swift/formatting/Brewfile.lock.json +18 -10
  49. data/fastlane/swift/main.swift +4 -8
  50. data/fastlane/swift/upgrade_manifest.json +1 -1
  51. data/frameit/lib/frameit/editor.rb +1 -0
  52. data/match/lib/match/importer.rb +5 -2
  53. data/match/lib/match/spaceship_ensure.rb +5 -5
  54. data/pilot/lib/pilot/build_manager.rb +0 -3
  55. data/pilot/lib/pilot/manager.rb +1 -2
  56. data/pilot/lib/pilot/options.rb +2 -2
  57. data/precheck/lib/precheck/options.rb +25 -0
  58. data/precheck/lib/precheck/rule_processor.rb +94 -60
  59. data/precheck/lib/precheck/runner.rb +26 -5
  60. data/produce/lib/produce/itunes_connect.rb +2 -1
  61. data/sigh/lib/assets/resign.sh +9 -6
  62. data/sigh/lib/sigh/runner.rb +2 -1
  63. data/snapshot/lib/assets/SnapshotHelper.swift +17 -2
  64. data/spaceship/lib/spaceship/client.rb +1 -0
  65. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  66. data/spaceship/lib/spaceship/connect_api/client.rb +34 -7
  67. data/spaceship/lib/spaceship/connect_api/file_uploader.rb +2 -0
  68. data/spaceship/lib/spaceship/connect_api/models/.app_store_version_submission.rb.swp +0 -0
  69. data/spaceship/lib/spaceship/connect_api/models/app.rb +22 -14
  70. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
  71. data/spaceship/lib/spaceship/connect_api/models/app_price_point.rb +26 -0
  72. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +2 -2
  73. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +10 -6
  74. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +3 -5
  75. data/spaceship/lib/spaceship/connect_api/models/app_store_version_phased_release.rb +21 -0
  76. data/spaceship/lib/spaceship/connect_api/spaceship.rb +3 -2
  77. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +50 -50
  78. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +31 -6
  79. metadata +21 -18
@@ -18,10 +18,24 @@ module Precheck
18
18
  hide_keys: [:output_path],
19
19
  title: "Summary for precheck #{Fastlane::VERSION}")
20
20
 
21
- unless Spaceship::Tunes.client
21
+ if api_token
22
+
23
+ # As of 2020-09-15, App Store Connect API does not have support for IAPs yet
24
+ # This means that API Key will fail if checking for IAPs.
25
+ #
26
+ # There is also a check in Deliver::Runner for this.
27
+ # Please remove check in Deliver when the API support IAPs.
28
+ if Precheck.config[:include_in_app_purchases]
29
+ UI.user_error!("Precheck cannot check In-app purchases with the App Store Connect API Key (yet). Exclude In-app purchases from precheck or use Apple ID login")
30
+ end
31
+
32
+ UI.message("Creating authorization token for App Store Connect API")
33
+ Spaceship::ConnectAPI.token = api_token
34
+ elsif Spaceship::Tunes.client.nil?
35
+ # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
36
+ # Prompts select team if multiple teams and none specified
22
37
  UI.message("Starting login with user '#{Precheck.config[:username]}'")
23
- Spaceship::Tunes.login(Precheck.config[:username])
24
- Spaceship::Tunes.select_team
38
+ Spaceship::ConnectAPI.login(Precheck.config[:username], use_portal: false, use_tunes: true)
25
39
 
26
40
  UI.message("Successfully logged in")
27
41
  end
@@ -57,6 +71,12 @@ module Precheck
57
71
  return true
58
72
  end
59
73
 
74
+ def api_token
75
+ @api_token ||= Spaceship::ConnectAPI::Token.create(Precheck.config[:api_key]) if Precheck.config[:api_key]
76
+ @api_token ||= Spaceship::ConnectAPI::Token.from_json_file(Precheck.config[:api_key_path]) if Precheck.config[:api_key_path]
77
+ return @api_token
78
+ end
79
+
60
80
  def print_items_not_checked(processor_result: nil)
61
81
  names = processor_result.items_not_checked.map(&:friendly_name)
62
82
  UI.message("😶 Metadata fields not checked by any rule: #{names.join(', ')}".yellow) if names.length > 0
@@ -160,11 +180,12 @@ module Precheck
160
180
  end
161
181
 
162
182
  def app
163
- Spaceship::Tunes::Application.find(Precheck.config[:app_identifier])
183
+ Spaceship::ConnectAPI::App.find(Precheck.config[:app_identifier])
164
184
  end
165
185
 
166
186
  def latest_app_version
167
- @latest_version ||= app.latest_version
187
+ platform = Spaceship::ConnectAPI::Platform.map(Precheck.config[:platform])
188
+ @latest_version ||= app.get_edit_app_store_version(platform: platform)
168
189
  end
169
190
 
170
191
  # Makes sure the current App ID exists. If not, it will show an appropriate error message
@@ -9,8 +9,9 @@ module Produce
9
9
  @full_bundle_identifier = app_identifier
10
10
  @full_bundle_identifier.gsub!('*', Produce.config[:bundle_identifier_suffix].to_s) if wildcard_bundle?
11
11
 
12
+ # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
13
+ # Prompts select team if multiple teams and none specified
12
14
  Spaceship::ConnectAPI.login(Produce.config[:username], nil, use_portal: false, use_tunes: true)
13
- Spaceship::ConnectAPI.client.select_team
14
15
 
15
16
  create_new_app
16
17
  end
@@ -72,6 +72,9 @@
72
72
  # new features June 2020
73
73
  # 1. enable (re)signing of OnDemandResources when ipa has been built for the appstore
74
74
  #
75
+ # new features August 2020
76
+ # 1. fixes usage for users with GNU-sed in their $PATH
77
+ #
75
78
 
76
79
  # Logging functions
77
80
 
@@ -762,7 +765,7 @@ function resign {
762
765
 
763
766
  # Get the entry from app's entitlements
764
767
  # Read it with PlistBuddy as XML, then strip the header and <plist></plist> part
765
- ENTITLEMENTS_VALUE="$(PlistBuddy -x -c "Print $KEY" "$APP_ENTITLEMENTS" 2>/dev/null | sed -e 's,.*<plist[^>]*>\(.*\)</plist>,\1,g')"
768
+ ENTITLEMENTS_VALUE="$(PlistBuddy -x -c "Print $KEY" "$APP_ENTITLEMENTS" 2>/dev/null | /usr/bin/sed -e 's,.*<plist[^>]*>\(.*\)</plist>,\1,g')"
766
769
  if [[ -z "$ENTITLEMENTS_VALUE" ]]; then
767
770
  log "No value for '$KEY'"
768
771
  continue
@@ -780,7 +783,7 @@ function resign {
780
783
  log "Certificate $CERTIFICATE matches a SHA1 pattern"
781
784
  local certificate_matches="$( security find-identity -v -p codesigning | grep -m 1 "$CERTIFICATE" )"
782
785
  if [ -n "$certificate_matches" ]; then
783
- certificate_name="$( sed -E s/[^\"]+\"\([^\"]+\)\".*/\\1/ <<< $certificate_matches )"
786
+ certificate_name="$(/usr/bin/sed -E s/[^\"]+\"\([^\"]+\)\".*/\\1/ <<< $certificate_matches )"
784
787
  log "Certificate name: $certificate_name"
785
788
  fi
786
789
  fi
@@ -807,18 +810,18 @@ function resign {
807
810
  # otherwise it interprets they key path as nested keys
808
811
  # TODO: Should be able to replace with echo ${KEY//\./\\\\.} and remove shellcheck disable directive
809
812
  # shellcheck disable=SC2001
810
- PLUTIL_KEY=$(echo "$KEY" | sed 's/\./\\\./g')
813
+ PLUTIL_KEY=$(echo "$KEY" | /usr/bin/sed 's/\./\\\./g')
811
814
  plutil -insert "$PLUTIL_KEY" -xml "$ENTITLEMENTS_VALUE" "$PATCHED_ENTITLEMENTS"
812
815
 
813
816
  # Patch the ID value if specified
814
817
  if [[ "$ID_TYPE" == "APP_ID" ]]; then
815
818
  # Replace old value with new value in patched entitlements
816
819
  log "Replacing old app identifier prefix '$OLD_APP_ID' with new value '$NEW_APP_ID'"
817
- sed -i .bak "s/$OLD_APP_ID/$NEW_APP_ID/g" "$PATCHED_ENTITLEMENTS"
820
+ /usr/bin/sed -i .bak "s/$OLD_APP_ID/$NEW_APP_ID/g" "$PATCHED_ENTITLEMENTS"
818
821
  elif [[ "$ID_TYPE" == "TEAM_ID" ]]; then
819
822
  # Replace old team identifier with new value
820
823
  log "Replacing old team ID '$OLD_TEAM_ID' with new team ID: '$NEW_TEAM_ID'"
821
- sed -i .bak "s/$OLD_TEAM_ID/$NEW_TEAM_ID/g" "$PATCHED_ENTITLEMENTS"
824
+ /usr/bin/sed -i .bak "s/$OLD_TEAM_ID/$NEW_TEAM_ID/g" "$PATCHED_ENTITLEMENTS"
822
825
  else
823
826
  continue
824
827
  fi
@@ -835,7 +838,7 @@ function resign {
835
838
  # e.g. <string>AB1GP98Q19.com.example.foo</string>
836
839
  # vs
837
840
  # com.example.foo
838
- sed -i .bak "s!${OLD_BUNDLE_ID}</string>!${NEW_BUNDLE_ID}</string>!g" "$PATCHED_ENTITLEMENTS"
841
+ /usr/bin/sed -i .bak "s!${OLD_BUNDLE_ID}</string>!${NEW_BUNDLE_ID}</string>!g" "$PATCHED_ENTITLEMENTS"
839
842
 
840
843
  log "Resigning application using certificate: '$CERTIFICATE'"
841
844
  log "and patched entitlements:"
@@ -17,9 +17,10 @@ module Sigh
17
17
  hide_keys: [:output_path],
18
18
  title: "Summary for sigh #{Fastlane::VERSION}")
19
19
 
20
+ # Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
21
+ # Prompts select team if multiple teams and none specified
20
22
  UI.message("Starting login with user '#{Sigh.config[:username]}'")
21
23
  Spaceship::ConnectAPI.login(Sigh.config[:username], nil, use_portal: true, use_tunes: false)
22
- Spaceship::ConnectAPI.select_team
23
24
  UI.message("Successfully logged in")
24
25
 
25
26
  profiles = [] if Sigh.config[:skip_fetch_profiles]
@@ -165,6 +165,8 @@ open class Snapshot: NSObject {
165
165
  }
166
166
 
167
167
  let screenshot = XCUIScreen.main.screenshot()
168
+ let image = XCUIDevice.shared.orientation.isLandscape ? fixLandscapeOrientation(image: screenshot.image) : screenshot.image
169
+
168
170
  guard var simulator = ProcessInfo().environment["SIMULATOR_DEVICE_NAME"], let screenshotsDir = screenshotsDirectory else { return }
169
171
 
170
172
  do {
@@ -174,7 +176,7 @@ open class Snapshot: NSObject {
174
176
  simulator = regex.stringByReplacingMatches(in: simulator, range: range, withTemplate: "")
175
177
 
176
178
  let path = screenshotsDir.appendingPathComponent("\(simulator)-\(name).png")
177
- try screenshot.pngRepresentation.write(to: path)
179
+ try image.pngData()?.write(to: path, options: .atomic)
178
180
  } catch let error {
179
181
  NSLog("Problem writing screenshot: \(name) to \(screenshotsDir)/\(simulator)-\(name).png")
180
182
  NSLog(error.localizedDescription)
@@ -182,6 +184,19 @@ open class Snapshot: NSObject {
182
184
  #endif
183
185
  }
184
186
 
187
+ class func fixLandscapeOrientation(image: UIImage) -> UIImage {
188
+ if #available(iOS 10.0, *) {
189
+ let format = UIGraphicsImageRendererFormat()
190
+ format.scale = image.scale
191
+ let renderer = UIGraphicsImageRenderer(size: image.size, format: format)
192
+ return renderer.image { context in
193
+ image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height))
194
+ }
195
+ } else {
196
+ return image
197
+ }
198
+ }
199
+
185
200
  class func waitForLoadingIndicatorToDisappear(within timeout: TimeInterval) {
186
201
  #if os(tvOS)
187
202
  return
@@ -279,4 +294,4 @@ private extension CGFloat {
279
294
 
280
295
  // Please don't remove the lines below
281
296
  // They are used to detect outdated configuration files
282
- // SnapshotHelperVersion [1.23]
297
+ // SnapshotHelperVersion [1.24]
@@ -6,6 +6,7 @@ require 'logger'
6
6
  require 'tmpdir'
7
7
  require 'cgi'
8
8
  require 'tempfile'
9
+ require 'openssl'
9
10
 
10
11
  require 'fastlane/version'
11
12
  require_relative 'helper/net_http_generic_request'
@@ -39,6 +39,7 @@ require 'spaceship/connect_api/models/app_info_localization'
39
39
  require 'spaceship/connect_api/models/app_preview_set'
40
40
  require 'spaceship/connect_api/models/app_preview'
41
41
  require 'spaceship/connect_api/models/app_price'
42
+ require 'spaceship/connect_api/models/app_price_point'
42
43
  require 'spaceship/connect_api/models/app_price_tier'
43
44
  require 'spaceship/connect_api/models/app_store_review_attachment'
44
45
  require 'spaceship/connect_api/models/app_store_review_detail'
@@ -43,20 +43,27 @@ module Spaceship
43
43
  # @param portal_team_id (String) (optional): The Spaceship::Portal team id
44
44
  # @param tunes_team_id (String) (optional): The Spaceship::Tunes team id
45
45
  # @param team_name (String) (optional): The team name
46
+ # @param skip_select_team (Boolean) (optional): Whether to skip automatic selection or prompt for team
46
47
  #
47
48
  # @raise InvalidUserCredentialsError: raised if authentication failed
48
49
  #
49
50
  # @return (Spaceship::ConnectAPI::Client) The client the login method was called for
50
- def self.login(user = nil, password = nil, use_portal: true, use_tunes: true, portal_team_id: nil, tunes_team_id: nil, team_name: nil)
51
+ def self.login(user = nil, password = nil, use_portal: true, use_tunes: true, portal_team_id: nil, tunes_team_id: nil, team_name: nil, skip_select_team: false)
51
52
  portal_client = Spaceship::Portal.login(user, password) if use_portal
52
53
  tunes_client = Spaceship::Tunes.login(user, password) if use_tunes
53
54
 
54
- # The clients will automatically select the first team if none is given
55
- if portal_client && (!portal_team_id.nil? || !team_name.nil?)
56
- portal_client.select_team(team_id: portal_team_id, team_name: team_name)
57
- end
58
- if tunes_client && (!tunes_team_id.nil? || !team_name.nil?)
59
- tunes_client.select_team(team_id: tunes_team_id, team_name: team_name)
55
+ unless skip_select_team
56
+ # Check if environment variables are set for Spaceship::Portal or Spaceship::Tunes to select team
57
+ portal_team_id ||= ENV['FASTLANE_TEAM_ID']
58
+ portal_team_name = team_name || ENV['FASTLANE_TEAM_NAME']
59
+ tunes_team_id ||= ENV['FASTLANE_ITC_TEAM_ID']
60
+ tunes_team_name = team_name || ENV['FASTLANE_ITC_TEAM_NAME']
61
+
62
+ # The clients will prompt for a team selection if:
63
+ # 1. client exists
64
+ # 2. team_id and team_name are nil and user belongs to multiple teams
65
+ portal_client.select_team(team_id: portal_team_id, team_name: portal_team_name) if portal_client
66
+ tunes_client.select_team(team_id: tunes_team_id, team_name: tunes_team_name) if tunes_client
60
67
  end
61
68
 
62
69
  return ConnectAPI::Client.new(tunes_client: tunes_client, portal_client: portal_client)
@@ -89,6 +96,26 @@ module Spaceship
89
96
  )
90
97
  end
91
98
 
99
+ def portal_team_id
100
+ return nil if @portal_client.nil?
101
+ return @portal_client.team_id
102
+ end
103
+
104
+ def tunes_team_id
105
+ return nil if @tunes_client.nil?
106
+ return @tunes_client.team_id
107
+ end
108
+
109
+ def portal_teams
110
+ return nil if @portal_client.nil?
111
+ return @portal_client.teams
112
+ end
113
+
114
+ def tunes_teams
115
+ return nil if @tunes_client.nil?
116
+ return @tunes_client.teams
117
+ end
118
+
92
119
  def in_house?
93
120
  if token
94
121
  if token.in_house.nil?
@@ -4,6 +4,8 @@ require 'faraday_middleware'
4
4
 
5
5
  require 'spaceship/globals'
6
6
 
7
+ require 'openssl'
8
+
7
9
  module Spaceship
8
10
  class ConnectAPI
9
11
  module FileUploader
@@ -16,6 +16,7 @@ module Spaceship
16
16
  attr_accessor :available_in_new_territories
17
17
  attr_accessor :content_rights_declaration
18
18
  attr_accessor :app_store_versions
19
+ attr_accessor :prices
19
20
 
20
21
  module ContentRightsDeclaration
21
22
  USES_THIRD_PARTY_CONTENT = "USES_THIRD_PARTY_CONTENT"
@@ -34,9 +35,15 @@ module Spaceship
34
35
 
35
36
  "contentRightsDeclaration" => "content_rights_declaration",
36
37
 
37
- "appStoreVersions" => "app_store_versions"
38
+ "appStoreVersions" => "app_store_versions",
39
+ "prices" => "prices"
38
40
  })
39
41
 
42
+ ESSENTIAL_INCLUDES = [
43
+ "appStoreVersions",
44
+ "prices"
45
+ ].join(",")
46
+
40
47
  def self.type
41
48
  return "apps"
42
49
  end
@@ -45,7 +52,7 @@ module Spaceship
45
52
  # Apps
46
53
  #
47
54
 
48
- def self.all(filter: {}, includes: "appStoreVersions", limit: nil, sort: nil)
55
+ def self.all(filter: {}, includes: ESSENTIAL_INCLUDES, limit: nil, sort: nil)
49
56
  resps = Spaceship::ConnectAPI.get_apps(filter: filter, includes: includes, limit: limit, sort: sort).all_pages
50
57
  return resps.flat_map(&:to_models)
51
58
  end
@@ -84,13 +91,13 @@ module Spaceship
84
91
  def fetch_live_app_info(includes: Spaceship::ConnectAPI::AppInfo::ESSENTIAL_INCLUDES)
85
92
  states = [
86
93
  Spaceship::ConnectAPI::AppInfo::AppStoreState::READY_FOR_SALE,
94
+ Spaceship::ConnectAPI::AppInfo::AppStoreState::PENDING_APPLE_RELEASE,
87
95
  Spaceship::ConnectAPI::AppInfo::AppStoreState::PENDING_DEVELOPER_RELEASE,
88
96
  Spaceship::ConnectAPI::AppInfo::AppStoreState::PROCESSING_FOR_APP_STORE,
89
97
  Spaceship::ConnectAPI::AppInfo::AppStoreState::IN_REVIEW
90
98
  ]
91
99
 
92
- filter = { app: id }
93
- resp = Spaceship::ConnectAPI.get_app_infos(filter: filter, includes: includes)
100
+ resp = Spaceship::ConnectAPI.get_app_infos(app_id: id, includes: includes)
94
101
  return resp.to_models.select do |model|
95
102
  states.include?(model.app_store_state)
96
103
  end.first
@@ -106,8 +113,7 @@ module Spaceship
106
113
  Spaceship::ConnectAPI::AppInfo::AppStoreState::INVALID_BINARY
107
114
  ]
108
115
 
109
- filter = { app: id }
110
- resp = Spaceship::ConnectAPI.get_app_infos(filter: filter, includes: includes)
116
+ resp = Spaceship::ConnectAPI.get_app_infos(app_id: id, includes: includes)
111
117
  return resp.to_models.select do |model|
112
118
  states.include?(model.app_store_state)
113
119
  end.first
@@ -128,8 +134,6 @@ module Spaceship
128
134
  #
129
135
 
130
136
  def fetch_app_prices(filter: {}, includes: "priceTier", limit: nil, sort: nil)
131
- filter ||= {}
132
- filter[:app] = id
133
137
  resp = Spaceship::ConnectAPI.get_app_prices(app_id: id, filter: filter, includes: includes, limit: limit, sort: sort)
134
138
  return resp.to_models
135
139
  end
@@ -142,6 +146,7 @@ module Spaceship
142
146
  platform ||= Spaceship::ConnectAPI::Platform::IOS
143
147
  filter = {
144
148
  appStoreState: [
149
+ Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::PENDING_APPLE_RELEASE,
145
150
  Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::PENDING_DEVELOPER_RELEASE,
146
151
  Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::IN_REVIEW,
147
152
  Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::WAITING_FOR_REVIEW
@@ -192,7 +197,7 @@ module Spaceship
192
197
  .last
193
198
  end
194
199
 
195
- def get_live_app_store_version(platform: nil, includes: nil)
200
+ def get_live_app_store_version(platform: nil, includes: Spaceship::ConnectAPI::AppStoreVersion::ESSENTIAL_INCLUDES)
196
201
  platform ||= Spaceship::ConnectAPI::Platform::IOS
197
202
  filter = {
198
203
  appStoreState: Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::READY_FOR_SALE,
@@ -201,7 +206,7 @@ module Spaceship
201
206
  return get_app_store_versions(filter: filter, includes: includes).first
202
207
  end
203
208
 
204
- def get_edit_app_store_version(platform: nil, includes: nil)
209
+ def get_edit_app_store_version(platform: nil, includes: Spaceship::ConnectAPI::AppStoreVersion::ESSENTIAL_INCLUDES)
205
210
  platform ||= Spaceship::ConnectAPI::Platform::IOS
206
211
  filter = {
207
212
  appStoreState: [
@@ -221,7 +226,7 @@ module Spaceship
221
226
  .last
222
227
  end
223
228
 
224
- def get_in_review_app_store_version(platform: nil, includes: nil)
229
+ def get_in_review_app_store_version(platform: nil, includes: Spaceship::ConnectAPI::AppStoreVersion::ESSENTIAL_INCLUDES)
225
230
  platform ||= Spaceship::ConnectAPI::Platform::IOS
226
231
  filter = {
227
232
  appStoreState: Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::IN_REVIEW,
@@ -230,16 +235,19 @@ module Spaceship
230
235
  return get_app_store_versions(filter: filter, includes: includes).first
231
236
  end
232
237
 
233
- def get_pending_release_app_store_version(platform: nil, includes: nil)
238
+ def get_pending_release_app_store_version(platform: nil, includes: Spaceship::ConnectAPI::AppStoreVersion::ESSENTIAL_INCLUDES)
234
239
  platform ||= Spaceship::ConnectAPI::Platform::IOS
235
240
  filter = {
236
- appStoreState: Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::PENDING_DEVELOPER_RELEASE,
241
+ appStoreState: [
242
+ Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::PENDING_APPLE_RELEASE,
243
+ Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::PENDING_DEVELOPER_RELEASE
244
+ ].join(','),
237
245
  platform: platform
238
246
  }
239
247
  return get_app_store_versions(filter: filter, includes: includes).first
240
248
  end
241
249
 
242
- def get_app_store_versions(filter: {}, includes: nil, limit: nil, sort: nil)
250
+ def get_app_store_versions(filter: {}, includes: Spaceship::ConnectAPI::AppStoreVersion::ESSENTIAL_INCLUDES, limit: nil, sort: nil)
243
251
  resps = Spaceship::ConnectAPI.get_app_store_versions(app_id: id, filter: filter, includes: includes, limit: limit, sort: sort).all_pages
244
252
  return resps.flat_map(&:to_models)
245
253
  end
@@ -20,6 +20,7 @@ module Spaceship
20
20
  READY_FOR_SALE = "READY_FOR_SALE"
21
21
  PROCESSING_FOR_APP_STORE = "PROCESSING_FOR_APP_STORE"
22
22
  PENDING_DEVELOPER_RELEASE = "PENDING_DEVELOPER_RELEASE"
23
+ PENDING_APPLE_RELEASE = "PENDING_APPLE_RELEASE"
23
24
  IN_REVIEW = "IN_REVIEW"
24
25
  WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
25
26
  DEVELOPER_REJECTED = "DEVELOPER_REJECTED"
@@ -0,0 +1,26 @@
1
+ require_relative '../model'
2
+ module Spaceship
3
+ class ConnectAPI
4
+ class AppPricePoint
5
+ include Spaceship::ConnectAPI::Model
6
+
7
+ attr_accessor :customer_price
8
+
9
+ attr_accessor :proceeds
10
+
11
+ attr_accessor :price_tier
12
+ attr_accessor :territory
13
+
14
+ attr_mapping({
15
+ "customerPrice" => "customer_price",
16
+ "proceeds" => "proceeds",
17
+ "priceTier" => "price_tier",
18
+ "territory" => "territory"
19
+ })
20
+
21
+ def self.type
22
+ return "appPricePoints"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -112,8 +112,8 @@ module Spaceship
112
112
  # API
113
113
  #
114
114
 
115
- def self.all(filter: {}, includes: nil, limit: nil, sort: nil)
116
- resp = Spaceship::ConnectAPI.get_app_screenshot_sets(filter: filter, includes: includes, limit: limit, sort: sort)
115
+ def self.all(app_store_version_localization_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
116
+ resp = Spaceship::ConnectAPI.get_app_screenshot_sets(app_store_version_localization_id: app_store_version_localization_id, filter: filter, includes: includes, limit: limit, sort: sort)
117
117
  return resp.to_models
118
118
  end
119
119
 
@@ -26,6 +26,7 @@ module Spaceship
26
26
  READY_FOR_SALE = "READY_FOR_SALE"
27
27
  PROCESSING_FOR_APP_STORE = "PROCESSING_FOR_APP_STORE"
28
28
  PENDING_DEVELOPER_RELEASE = "PENDING_DEVELOPER_RELEASE"
29
+ PENDING_APPLE_RELEASE = "PENDING_APPLE_RELEASE"
29
30
  IN_REVIEW = "IN_REVIEW"
30
31
  WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
31
32
  DEVELOPER_REJECTED = "DEVELOPER_REJECTED"
@@ -55,9 +56,15 @@ module Spaceship
55
56
  "downloadable" => "downloadable",
56
57
  "createdDate" => "created_date",
57
58
 
58
- "appStoreVersionSubmission" => "app_store_version_submission"
59
+ "appStoreVersionSubmission" => "app_store_version_submission",
60
+ "build" => "build"
59
61
  })
60
62
 
63
+ ESSENTIAL_INCLUDES = [
64
+ "appStoreVersionSubmission",
65
+ "build"
66
+ ].join(",")
67
+
61
68
  def self.type
62
69
  return "appStoreVersions"
63
70
  end
@@ -108,11 +115,8 @@ module Spaceship
108
115
  return resp.to_models.first
109
116
  end
110
117
 
111
- # appScreenshotSets,appPreviewSets
112
- def get_app_store_version_localizations(filter: {}, includes: "appScreenshotSets", limit: nil, sort: nil)
113
- filter ||= {}
114
- filter["appStoreVersion"] = id
115
- return Spaceship::ConnectAPI::AppStoreVersionLocalization.all(filter: filter, includes: includes, limit: limit, sort: sort)
118
+ def get_app_store_version_localizations(filter: {}, includes: nil, limit: nil, sort: nil)
119
+ return Spaceship::ConnectAPI::AppStoreVersionLocalization.all(app_store_version_id: id, filter: filter, includes: includes, limit: limit, sort: sort)
116
120
  end
117
121
 
118
122
  #