fastlane 2.107.0 → 2.108.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.
@@ -36,6 +36,7 @@ module Fastlane
36
36
  profile_type = "app-store"
37
37
  profile_type = "ad-hoc" if values[:adhoc]
38
38
  profile_type = "development" if values[:development]
39
+ profile_type = "developer-id" if values[:developer_id]
39
40
  profile_type = "enterprise" if enterprise
40
41
 
41
42
  UI.message("Setting Provisioning Profile type to '#{profile_type}'")
@@ -65,7 +66,7 @@ module Fastlane
65
66
  end
66
67
 
67
68
  def self.is_supported?(platform)
68
- platform == :ios
69
+ [:ios, :mac].include?(platform)
69
70
  end
70
71
 
71
72
  def self.example_code
@@ -34,6 +34,7 @@ module Fastlane
34
34
  workspace: '--workspace',
35
35
  binary_file: '--binary-file',
36
36
  binary_basename: '--binary-basename',
37
+ arch: '--arch',
37
38
  source_files: '--source-files',
38
39
  decimals: '--decimals'
39
40
  }.freeze
@@ -257,6 +258,10 @@ module Fastlane
257
258
  description: "Binary file name to be used for code coverage",
258
259
  is_string: false,
259
260
  default_value: false),
261
+ FastlaneCore::ConfigItem.new(key: :arch,
262
+ env_name: "FL_SLATHER_ARCH",
263
+ description: "Specify which architecture the binary file is in. Needed for universal binaries",
264
+ optional: true),
260
265
  FastlaneCore::ConfigItem.new(key: :source_files,
261
266
  env_name: "FL_SLATHER_SOURCE_FILES",
262
267
  description: "A Dir.glob compatible pattern used to limit the lookup to specific source files. Ignored in gcov mode",
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.107.0'.freeze
2
+ VERSION = '2.108.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
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.107.0
21
+ // Generated with fastlane 2.108.0
@@ -1079,6 +1079,24 @@ func crashlytics(ipaPath: String? = nil,
1079
1079
  RubyCommand.Argument(name: "debug", value: debug)])
1080
1080
  _ = runner.executeCommand(command)
1081
1081
  }
1082
+ func createAppOnManagedPlayStore(jsonKey: String? = nil,
1083
+ jsonKeyData: String? = nil,
1084
+ developerAccountId: String,
1085
+ apk: String,
1086
+ appTitle: String,
1087
+ language: String = "en_US",
1088
+ rootUrl: String? = nil,
1089
+ timeout: Int = 300) {
1090
+ let command = RubyCommand(commandID: "", methodName: "create_app_on_managed_play_store", className: nil, args: [RubyCommand.Argument(name: "json_key", value: jsonKey),
1091
+ RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
1092
+ RubyCommand.Argument(name: "developer_account_id", value: developerAccountId),
1093
+ RubyCommand.Argument(name: "apk", value: apk),
1094
+ RubyCommand.Argument(name: "app_title", value: appTitle),
1095
+ RubyCommand.Argument(name: "language", value: language),
1096
+ RubyCommand.Argument(name: "root_url", value: rootUrl),
1097
+ RubyCommand.Argument(name: "timeout", value: timeout)])
1098
+ _ = runner.executeCommand(command)
1099
+ }
1082
1100
  func createAppOnline(username: String,
1083
1101
  appIdentifier: String,
1084
1102
  bundleIdentifierSuffix: String? = nil,
@@ -1533,7 +1551,14 @@ func getGithubRelease(url: String,
1533
1551
  RubyCommand.Argument(name: "ipa", value: ipa)])
1534
1552
  return runner.executeCommand(command)
1535
1553
  }
1554
+ func getManagedPlayStorePublishingRights(jsonKey: String? = nil,
1555
+ jsonKeyData: String? = nil) {
1556
+ let command = RubyCommand(commandID: "", methodName: "get_managed_play_store_publishing_rights", className: nil, args: [RubyCommand.Argument(name: "json_key", value: jsonKey),
1557
+ RubyCommand.Argument(name: "json_key_data", value: jsonKeyData)])
1558
+ _ = runner.executeCommand(command)
1559
+ }
1536
1560
  func getProvisioningProfile(adhoc: Bool = false,
1561
+ developerId: Bool = false,
1537
1562
  development: Bool = false,
1538
1563
  skipInstall: Bool = false,
1539
1564
  force: Bool = false,
@@ -1553,6 +1578,7 @@ func getProvisioningProfile(adhoc: Bool = false,
1553
1578
  readonly: Bool = false,
1554
1579
  templateName: String? = nil) {
1555
1580
  let command = RubyCommand(commandID: "", methodName: "get_provisioning_profile", className: nil, args: [RubyCommand.Argument(name: "adhoc", value: adhoc),
1581
+ RubyCommand.Argument(name: "developer_id", value: developerId),
1556
1582
  RubyCommand.Argument(name: "development", value: development),
1557
1583
  RubyCommand.Argument(name: "skip_install", value: skipInstall),
1558
1584
  RubyCommand.Argument(name: "force", value: force),
@@ -3012,6 +3038,7 @@ func setupTravis(force: Bool = false) {
3012
3038
  return runner.executeCommand(command)
3013
3039
  }
3014
3040
  func sigh(adhoc: Bool = false,
3041
+ developerId: Bool = false,
3015
3042
  development: Bool = false,
3016
3043
  skipInstall: Bool = false,
3017
3044
  force: Bool = false,
@@ -3031,6 +3058,7 @@ func sigh(adhoc: Bool = false,
3031
3058
  readonly: Bool = false,
3032
3059
  templateName: String? = nil) {
3033
3060
  let command = RubyCommand(commandID: "", methodName: "sigh", className: nil, args: [RubyCommand.Argument(name: "adhoc", value: adhoc),
3061
+ RubyCommand.Argument(name: "developer_id", value: developerId),
3034
3062
  RubyCommand.Argument(name: "development", value: development),
3035
3063
  RubyCommand.Argument(name: "skip_install", value: skipInstall),
3036
3064
  RubyCommand.Argument(name: "force", value: force),
@@ -3127,6 +3155,7 @@ func slather(buildDirectory: String? = nil,
3127
3155
  useBundleExec: Bool = false,
3128
3156
  binaryBasename: Bool = false,
3129
3157
  binaryFile: Bool = false,
3158
+ arch: String? = nil,
3130
3159
  sourceFiles: Bool = false,
3131
3160
  decimals: Bool = false) {
3132
3161
  let command = RubyCommand(commandID: "", methodName: "slather", className: nil, args: [RubyCommand.Argument(name: "build_directory", value: buildDirectory),
@@ -3155,6 +3184,7 @@ func slather(buildDirectory: String? = nil,
3155
3184
  RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
3156
3185
  RubyCommand.Argument(name: "binary_basename", value: binaryBasename),
3157
3186
  RubyCommand.Argument(name: "binary_file", value: binaryFile),
3187
+ RubyCommand.Argument(name: "arch", value: arch),
3158
3188
  RubyCommand.Argument(name: "source_files", value: sourceFiles),
3159
3189
  RubyCommand.Argument(name: "decimals", value: decimals)])
3160
3190
  _ = runner.executeCommand(command)
@@ -4013,7 +4043,7 @@ func xcov(workspace: String? = nil,
4013
4043
  coverallsServiceJobId: String? = nil,
4014
4044
  coverallsRepoToken: String? = nil,
4015
4045
  xcconfig: String? = nil,
4016
- ideFoundationPath: String = "/Applications/Xcode-10.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
4046
+ ideFoundationPath: String = "/Applications/Xcode.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
4017
4047
  legacySupport: Bool = false) {
4018
4048
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
4019
4049
  RubyCommand.Argument(name: "project", value: project),
@@ -4121,4 +4151,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
4121
4151
  let snapshotfile: Snapshotfile = Snapshotfile()
4122
4152
  // Please don't remove the lines below
4123
4153
  // They are used to detect outdated files
4124
- // FastlaneRunnerAPIVersion [0.9.32]
4154
+ // FastlaneRunnerAPIVersion [0.9.33]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.107.0
21
+ // Generated with fastlane 2.108.0
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.107.0
21
+ // Generated with fastlane 2.108.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.107.0
21
+ // Generated with fastlane 2.108.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.107.0
21
+ // Generated with fastlane 2.108.0
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.107.0
21
+ // Generated with fastlane 2.108.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.107.0
21
+ // Generated with fastlane 2.108.0
@@ -44,6 +44,19 @@ module FastlaneCore
44
44
  parse(path, keychain_path).fetch("Name")
45
45
  end
46
46
 
47
+ def mac?(path, keychain_path = nil)
48
+ parse(path, keychain_path).fetch("Platform", []).include?('OSX')
49
+ end
50
+
51
+ def profile_filename(path, keychain_path = nil)
52
+ basename = uuid(path, keychain_path)
53
+ if mac?(path, keychain_path)
54
+ basename + ".provisionprofile"
55
+ else
56
+ basename + ".mobileprovision"
57
+ end
58
+ end
59
+
47
60
  def profiles_path
48
61
  path = File.expand_path("~") + "/Library/MobileDevice/Provisioning Profiles/"
49
62
  # If the directory doesn't exist, create it first
@@ -57,8 +70,7 @@ module FastlaneCore
57
70
  # Installs a provisioning profile for Xcode to use
58
71
  def install(path, keychain_path = nil)
59
72
  UI.message("Installing provisioning profile...")
60
- profile_filename = uuid(path, keychain_path) + ".mobileprovision"
61
- destination = File.join(profiles_path, profile_filename)
73
+ destination = File.join(profiles_path, profile_filename(path, keychain_path))
62
74
 
63
75
  if path != destination
64
76
  # copy to Xcode provisioning profile directory
@@ -14,18 +14,27 @@ module Sigh
14
14
  description: "Setting this flag will generate AdHoc profiles instead of App Store Profiles",
15
15
  is_string: false,
16
16
  default_value: false,
17
- conflicting_options: [:development],
18
- conflict_block: proc do |value|
19
- UI.user_error!("You can't enable both :development and :adhoc")
17
+ conflicting_options: [:developer_id, :development],
18
+ conflict_block: proc do |option|
19
+ UI.user_error!("You can't enable both :#{option.key} and :adhoc")
20
+ end),
21
+ FastlaneCore::ConfigItem.new(key: :developer_id,
22
+ env_name: "SIGH_DEVELOPER_ID",
23
+ description: "Setting his flag will generate Developer ID profiles instead of App Store Profiles",
24
+ is_string: false,
25
+ default_value: false,
26
+ conflicting_options: [:adhoc, :development],
27
+ conflict_block: proc do |option|
28
+ UI.user_error!("You can't enable both :#{option.key} and :developer_id")
20
29
  end),
21
30
  FastlaneCore::ConfigItem.new(key: :development,
22
31
  env_name: "SIGH_DEVELOPMENT",
23
32
  description: "Renew the development certificate instead of the production one",
24
33
  is_string: false,
25
34
  default_value: false,
26
- conflicting_options: [:adhoc],
27
- conflict_block: proc do |value|
28
- UI.user_error!("You can't enable both :development and :adhoc")
35
+ conflicting_options: [:adhoc, :developer_id],
36
+ conflict_block: proc do |option|
37
+ UI.user_error!("You can't enable both :#{option.key} and :development")
29
38
  end),
30
39
  FastlaneCore::ConfigItem.new(key: :skip_install,
31
40
  env_name: "SIGH_SKIP_INSTALL",
@@ -58,6 +58,7 @@ module Sigh
58
58
  @profile_type = Spaceship.provisioning_profile.app_store
59
59
  @profile_type = Spaceship.provisioning_profile.in_house if Spaceship.client.in_house?
60
60
  @profile_type = Spaceship.provisioning_profile.ad_hoc if Sigh.config[:adhoc]
61
+ @profile_type = Spaceship.provisioning_profile.direct if Sigh.config[:developer_id]
61
62
  @profile_type = Spaceship.provisioning_profile.development if Sigh.config[:development]
62
63
 
63
64
  @profile_type
@@ -260,7 +261,11 @@ module Sigh
260
261
  profile_name += "_tvos"
261
262
  end
262
263
 
263
- profile_name += '.mobileprovision'
264
+ if Sigh.config[:platform].to_s == 'macos'
265
+ profile_name += '.provisionprofile'
266
+ else
267
+ profile_name += '.mobileprovision'
268
+ end
264
269
 
265
270
  tmp_path = Dir.mktmpdir("profile_download")
266
271
  output_path = File.join(tmp_path, profile_name)
@@ -114,10 +114,14 @@ open class Snapshot: NSObject {
114
114
  } catch {
115
115
  print("Couldn't detect/set locale...")
116
116
  }
117
+
117
118
  if locale.isEmpty {
118
119
  locale = Locale(identifier: deviceLanguage).identifier
119
120
  }
120
- app.launchArguments += ["-AppleLocale", "\"\(locale)\""]
121
+
122
+ if !locale.isEmpty {
123
+ app.launchArguments += ["-AppleLocale", "\"\(locale)\""]
124
+ }
121
125
  }
122
126
 
123
127
  class func setLaunchArguments(_ app: XCUIApplication) {
@@ -273,4 +277,4 @@ private extension CGFloat {
273
277
 
274
278
  // Please don't remove the lines below
275
279
  // They are used to detect outdated configuration files
276
- // SnapshotHelperVersion [1.12]
280
+ // SnapshotHelperVersion [1.13]
@@ -107,10 +107,10 @@ module Spaceship
107
107
  class MacInstallerDistribution < Certificate; end
108
108
 
109
109
  # A Mac Developer ID signing certificate for building .app bundles
110
- class DeveloperIDApplication < Certificate; end
110
+ class DeveloperIdApplication < Certificate; end
111
111
 
112
112
  # A Mac Developer ID signing certificate for building .pkg installers
113
- class DeveloperIDInstaller < Certificate; end
113
+ class DeveloperIdInstaller < Certificate; end
114
114
 
115
115
  #####################################################
116
116
  # Certs that are specific for one app
@@ -175,11 +175,11 @@ module Spaceship
175
175
  "749Y1QAGU7" => MacDevelopment,
176
176
  "HXZEUKP0FP" => MacAppDistribution,
177
177
  "2PQI8IDXNH" => MacInstallerDistribution,
178
- "OYVN2GW35E" => DeveloperIDInstaller,
179
- "W0EURJRMC5" => DeveloperIDApplication,
178
+ "OYVN2GW35E" => DeveloperIdInstaller,
179
+ "W0EURJRMC5" => DeveloperIdApplication,
180
180
  "CDZ7EMXIZ1" => MacProductionPush,
181
181
  "HQ4KP3I34R" => MacDevelopmentPush,
182
- "DIVN2GW3XT" => DeveloperIDApplication
182
+ "DIVN2GW3XT" => DeveloperIdApplication
183
183
  }
184
184
 
185
185
  CERTIFICATE_TYPE_IDS = IOS_CERTIFICATE_TYPE_IDS.merge(MAC_CERTIFICATE_TYPE_IDS)
@@ -445,7 +445,7 @@ module Spaceship
445
445
  if self.kind_of?(Development)
446
446
  self.certificates = [Spaceship::Portal::Certificate::MacDevelopment.all.first]
447
447
  elsif self.kind_of?(Direct)
448
- self.certificates = [Spaceship::Portal::Certificate::DeveloperIDApplication.all.first]
448
+ self.certificates = [Spaceship::Portal::Certificate::DeveloperIdApplication.all.first]
449
449
  else
450
450
  self.certificates = [Spaceship::Portal::Certificate::MacAppDistribution.all.first]
451
451
  end
@@ -4,6 +4,7 @@ require 'supply/client'
4
4
  require 'supply/listing'
5
5
  require 'supply/apk_listing'
6
6
  require 'supply/uploader'
7
+ require 'supply/languages'
7
8
 
8
9
  require 'fastlane_core'
9
10
 
@@ -5,9 +5,76 @@ Androidpublisher = Google::Apis::AndroidpublisherV2
5
5
  require 'net/http'
6
6
 
7
7
  module Supply
8
- class Client
8
+ class AbstractGoogleServiceClient
9
+ SCOPE = nil
10
+ SERVICE = nil
11
+
9
12
  # Connecting with Google
10
- attr_accessor :android_publisher
13
+ attr_accessor :client
14
+
15
+ def self.make_from_config(params: nil)
16
+ unless params[:json_key] || params[:json_key_data]
17
+ UI.important("To not be asked about this value, you can specify it using 'json_key'")
18
+ json_key_path = UI.input("The service account json file used to authenticate with Google: ")
19
+ json_key_path = File.expand_path(json_key_path)
20
+
21
+ UI.user_error!("Could not find service account json file at path '#{json_key_path}'") unless File.exist?(json_key_path)
22
+ params[:json_key] = json_key_path
23
+ end
24
+
25
+ if params[:json_key]
26
+ service_account_json = File.open(File.expand_path(params[:json_key]))
27
+ elsif params[:json_key_data]
28
+ service_account_json = StringIO.new(params[:json_key_data])
29
+ end
30
+
31
+ return self.new(service_account_json: service_account_json, params: params)
32
+ end
33
+
34
+ # Initializes the service and its auth_client using the specified information
35
+ # @param service_account_json: The raw service account Json data
36
+ def initialize(service_account_json: nil, params: nil)
37
+ auth_client = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: service_account_json, scope: self.class::SCOPE)
38
+
39
+ UI.verbose("Fetching a new access token from Google...")
40
+
41
+ auth_client.fetch_access_token!
42
+
43
+ if FastlaneCore::Env.truthy?("DEBUG")
44
+ Google::Apis.logger.level = Logger::DEBUG
45
+ end
46
+
47
+ Google::Apis::ClientOptions.default.application_name = "fastlane (supply client)"
48
+ Google::Apis::ClientOptions.default.application_version = Fastlane::VERSION
49
+ Google::Apis::ClientOptions.default.read_timeout_sec = params[:timeout]
50
+ Google::Apis::ClientOptions.default.open_timeout_sec = params[:timeout]
51
+ Google::Apis::ClientOptions.default.send_timeout_sec = params[:timeout]
52
+ Google::Apis::RequestOptions.default.retries = 5
53
+
54
+ service = self.class::SERVICE.new
55
+ service.authorization = auth_client
56
+
57
+ if params[:root_url]
58
+ # Google's client expects the root_url string to end with "/".
59
+ params[:root_url] << '/' unless params[:root_url].end_with?('/')
60
+ service.root_url = params[:root_url]
61
+ end
62
+
63
+ self.client = service
64
+ end
65
+
66
+ private
67
+
68
+ def call_google_api
69
+ yield if block_given?
70
+ rescue Google::Apis::ClientError => e
71
+ UI.user_error!("Google Api Error: #{e.message}")
72
+ end
73
+ end
74
+
75
+ class Client < AbstractGoogleServiceClient
76
+ SERVICE = Androidpublisher::AndroidPublisherService
77
+ SCOPE = Androidpublisher::AUTH_ANDROIDPUBLISHER
11
78
 
12
79
  # Editing something
13
80
  # Reference to the entry we're currently editing. Might be nil if don't have one open
@@ -20,32 +87,29 @@ module Supply
20
87
  #####################################################
21
88
 
22
89
  # instantiate a client given the supplied configuration
23
- def self.make_from_config
24
- unless Supply.config[:json_key] || Supply.config[:json_key_data] || (Supply.config[:key] && Supply.config[:issuer])
25
- UI.important("To not be asked about this value, you can specify it using 'json_key'")
26
- Supply.config[:json_key] = UI.input("The service account json file used to authenticate with Google: ")
90
+ def self.make_from_config(params: nil)
91
+ if params.nil?
92
+ params = Supply.config
27
93
  end
28
94
 
29
- if Supply.config[:json_key]
30
- service_account_json = File.open(File.expand_path(Supply.config[:json_key]))
31
- elsif Supply.config[:json_key_data]
32
- service_account_json = StringIO.new(Supply.config[:json_key_data])
95
+ # first consider deprecated params
96
+ unless params[:json_key] || params[:json_key_data] || (params[:key] && params[:issuer])
97
+ UI.important("To not be asked about this value, you can specify it using 'json_key'")
98
+ params[:json_key] = UI.input("The service account json file used to authenticate with Google: ")
33
99
  end
34
100
 
35
- return Client.new(path_to_key: Supply.config[:key],
36
- issuer: Supply.config[:issuer], service_account_json: service_account_json)
101
+ super(params: params)
37
102
  end
38
103
 
39
- # Initializes the android_publisher and its auth_client using the specified information
104
+ # Initializes the client and its auth_client using the specified information
40
105
  # @param service_account_json: The raw service account Json data
41
106
  # @param path_to_key: The path to your p12 file (@deprecated)
42
107
  # @param issuer: Email address for oauth (@deprecated)
43
- def initialize(path_to_key: nil, issuer: nil, service_account_json: nil)
44
- scope = Androidpublisher::AUTH_ANDROIDPUBLISHER
45
-
108
+ def initialize(path_to_key: nil, issuer: nil, service_account_json: nil, params: nil)
46
109
  if service_account_json
47
110
  key_io = service_account_json
48
111
  else
112
+ # deprecated
49
113
  require 'google/api_client/auth/key_utils'
50
114
  key = Google::APIClient::KeyUtils.load_from_pkcs12(File.expand_path(path_to_key), 'notasecret')
51
115
  cred_json = {
@@ -55,30 +119,7 @@ module Supply
55
119
  key_io = StringIO.new(MultiJson.dump(cred_json))
56
120
  end
57
121
 
58
- auth_client = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: key_io, scope: scope)
59
-
60
- UI.verbose("Fetching a new access token from Google...")
61
-
62
- auth_client.fetch_access_token!
63
-
64
- if FastlaneCore::Env.truthy?("DEBUG")
65
- Google::Apis.logger.level = Logger::DEBUG
66
- end
67
-
68
- Google::Apis::ClientOptions.default.application_name = "fastlane - supply"
69
- Google::Apis::ClientOptions.default.application_version = Fastlane::VERSION
70
- Google::Apis::ClientOptions.default.read_timeout_sec = Supply.config[:timeout]
71
- Google::Apis::ClientOptions.default.open_timeout_sec = Supply.config[:timeout]
72
- Google::Apis::ClientOptions.default.send_timeout_sec = Supply.config[:timeout]
73
- Google::Apis::RequestOptions.default.retries = 5
74
-
75
- self.android_publisher = Androidpublisher::AndroidPublisherService.new
76
- self.android_publisher.authorization = auth_client
77
- if Supply.config[:root_url]
78
- # Google's client expects the root_url string to end with "/".
79
- Supply.config[:root_url] << '/' unless Supply.config[:root_url].end_with?('/')
80
- self.android_publisher.root_url = Supply.config[:root_url]
81
- end
122
+ super(service_account_json: key_io, params: params)
82
123
  end
83
124
 
84
125
  #####################################################
@@ -89,7 +130,7 @@ module Supply
89
130
  def begin_edit(package_name: nil)
90
131
  UI.user_error!("You currently have an active edit") if @current_edit
91
132
 
92
- self.current_edit = call_google_api { android_publisher.insert_edit(package_name) }
133
+ self.current_edit = call_google_api { client.insert_edit(package_name) }
93
134
 
94
135
  self.current_package_name = package_name
95
136
  end
@@ -98,7 +139,7 @@ module Supply
98
139
  def abort_current_edit
99
140
  ensure_active_edit!
100
141
 
101
- call_google_api { android_publisher.delete_edit(current_package_name, current_edit.id) }
142
+ call_google_api { client.delete_edit(current_package_name, current_edit.id) }
102
143
 
103
144
  self.current_edit = nil
104
145
  self.current_package_name = nil
@@ -108,14 +149,14 @@ module Supply
108
149
  def validate_current_edit!
109
150
  ensure_active_edit!
110
151
 
111
- call_google_api { android_publisher.validate_edit(current_package_name, current_edit.id) }
152
+ call_google_api { client.validate_edit(current_package_name, current_edit.id) }
112
153
  end
113
154
 
114
155
  # Commits the current edit saving all pending changes on Google Play
115
156
  def commit_current_edit!
116
157
  ensure_active_edit!
117
158
 
118
- call_google_api { android_publisher.commit_edit(current_package_name, current_edit.id) }
159
+ call_google_api { client.commit_edit(current_package_name, current_edit.id) }
119
160
 
120
161
  self.current_edit = nil
121
162
  self.current_package_name = nil
@@ -130,7 +171,7 @@ module Supply
130
171
  def listings
131
172
  ensure_active_edit!
132
173
 
133
- result = call_google_api { android_publisher.list_listings(current_package_name, current_edit.id) }
174
+ result = call_google_api { client.list_listings(current_package_name, current_edit.id) }
134
175
 
135
176
  return result.listings.map do |row|
136
177
  Listing.new(self, row.language, row)
@@ -142,7 +183,7 @@ module Supply
142
183
  ensure_active_edit!
143
184
 
144
185
  begin
145
- result = android_publisher.get_listing(
186
+ result = client.get_listing(
146
187
  current_package_name,
147
188
  current_edit.id,
148
189
  language
@@ -159,7 +200,7 @@ module Supply
159
200
  def apks_version_codes
160
201
  ensure_active_edit!
161
202
 
162
- result = call_google_api { android_publisher.list_apks(current_package_name, current_edit.id) }
203
+ result = call_google_api { client.list_apks(current_package_name, current_edit.id) }
163
204
 
164
205
  return Array(result.apks).map(&:version_code)
165
206
  end
@@ -168,7 +209,7 @@ module Supply
168
209
  def aab_version_codes
169
210
  ensure_active_edit!
170
211
 
171
- result = call_google_api { android_publisher.list_edit_bundles(current_package_name, current_edit.id) }
212
+ result = call_google_api { client.list_edit_bundles(current_package_name, current_edit.id) }
172
213
 
173
214
  return Array(result.bundles).map(&:version_code)
174
215
  end
@@ -178,7 +219,7 @@ module Supply
178
219
  ensure_active_edit!
179
220
 
180
221
  result = call_google_api do
181
- android_publisher.list_apk_listings(
222
+ client.list_apk_listings(
182
223
  current_package_name,
183
224
  current_edit.id,
184
225
  apk_version_code
@@ -207,7 +248,7 @@ module Supply
207
248
  })
208
249
 
209
250
  call_google_api do
210
- android_publisher.update_listing(
251
+ client.update_listing(
211
252
  current_package_name,
212
253
  current_edit.id,
213
254
  language,
@@ -220,7 +261,7 @@ module Supply
220
261
  ensure_active_edit!
221
262
 
222
263
  result_upload = call_google_api do
223
- android_publisher.upload_apk(
264
+ client.upload_apk(
224
265
  current_package_name,
225
266
  current_edit.id,
226
267
  upload_source: path_to_apk
@@ -234,7 +275,7 @@ module Supply
234
275
  ensure_active_edit!
235
276
 
236
277
  call_google_api do
237
- android_publisher.upload_edit_deobfuscationfile(
278
+ client.upload_edit_deobfuscationfile(
238
279
  current_package_name,
239
280
  current_edit.id,
240
281
  apk_version_code,
@@ -249,7 +290,7 @@ module Supply
249
290
  ensure_active_edit!
250
291
 
251
292
  result_upload = call_google_api do
252
- android_publisher.upload_edit_bundle(
293
+ client.upload_edit_bundle(
253
294
  current_package_name,
254
295
  self.current_edit.id,
255
296
  upload_source: path_to_aab,
@@ -278,7 +319,7 @@ module Supply
278
319
  })
279
320
 
280
321
  call_google_api do
281
- android_publisher.update_track(
322
+ client.update_track(
282
323
  current_package_name,
283
324
  current_edit.id,
284
325
  track,
@@ -292,7 +333,7 @@ module Supply
292
333
  ensure_active_edit!
293
334
 
294
335
  begin
295
- result = android_publisher.get_track(
336
+ result = client.get_track(
296
337
  current_package_name,
297
338
  current_edit.id,
298
339
  track
@@ -313,7 +354,7 @@ module Supply
313
354
  })
314
355
 
315
356
  call_google_api do
316
- android_publisher.update_apk_listing(
357
+ client.update_apk_listing(
317
358
  current_package_name,
318
359
  current_edit.id,
319
360
  apk_listing.apk_version_code,
@@ -331,7 +372,7 @@ module Supply
331
372
  ensure_active_edit!
332
373
 
333
374
  result = call_google_api do
334
- android_publisher.list_images(
375
+ client.list_images(
335
376
  current_package_name,
336
377
  current_edit.id,
337
378
  language,
@@ -347,7 +388,7 @@ module Supply
347
388
  ensure_active_edit!
348
389
 
349
390
  call_google_api do
350
- android_publisher.upload_image(
391
+ client.upload_image(
351
392
  current_package_name,
352
393
  current_edit.id,
353
394
  language,
@@ -362,7 +403,7 @@ module Supply
362
403
  ensure_active_edit!
363
404
 
364
405
  call_google_api do
365
- android_publisher.delete_all_images(
406
+ client.delete_all_images(
366
407
  current_package_name,
367
408
  current_edit.id,
368
409
  language,
@@ -375,7 +416,7 @@ module Supply
375
416
  ensure_active_edit!
376
417
 
377
418
  call_google_api do
378
- android_publisher.upload_expansion_file(
419
+ client.upload_expansion_file(
379
420
  current_package_name,
380
421
  current_edit.id,
381
422
  apk_version_code,
@@ -391,11 +432,5 @@ module Supply
391
432
  def ensure_active_edit!
392
433
  UI.user_error!("You need to have an active edit, make sure to call `begin_edit`") unless @current_edit
393
434
  end
394
-
395
- def call_google_api
396
- yield if block_given?
397
- rescue Google::Apis::ClientError => e
398
- UI.user_error!("Google Api Error: #{e.message}")
399
- end
400
435
  end
401
436
  end