fastlane-plugin-schindler 1.0.1 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3dc6800faf3c06d1669dcc1392063a9697da465dc84e5ae0eaab7663f9ebbde
4
- data.tar.gz: cb8c1463f85fcc05f4b66ff4ef27aec031ca9b340988ce8dfa8c8be94387c98f
3
+ metadata.gz: 9d7583e26bfcb742720ddd40b67925bfdbf24b727bdd95d8a217a9d7848d9a92
4
+ data.tar.gz: eb8be5ad671c3b58ea8fbbd4e342202fecee2fed6515d0d3bb98f60f2464e1f7
5
5
  SHA512:
6
- metadata.gz: 732c551cb93ba20431af7f67f76078a91d8a583df81f0d00a206a3a9e58ff2334ec915489994f134e857b5ec00839334dc0697ffb9354a8b80ac179f35fa3951
7
- data.tar.gz: 67bc91047c239884e6556e379ce972c4f3f711f98b235e8b25ef15c882e9106cf0f8b7fe0ef0d7a2a6e6ea280f5c3ffad16d5fbb3356f81c5e04d3a0f194f633
6
+ metadata.gz: 13641045bedca00ebf8f966c9675189271f71e6b3eb0ad5915c008239b2cf6abc4823424eab05a55760100e1269d3bfd95b549a0228dac3ad6f10e78b97aeab1
7
+ data.tar.gz: bb7b2c68347141637d668b485f4e298324af081390d4c5816ab5e9a43d7a5b19379d0c9266f98a964a68c5427e63eff625d0c662e4ff4680ae3541de50850e0e
data/README.md CHANGED
@@ -7,12 +7,23 @@
7
7
 
8
8
  Schindler is a TestFlight automatic processing tool, which is used to maintain the number of TestFlight quota, eliminate useless testers, and improve the external gray effect of iOS.
9
9
 
10
+ ## Change Log
11
+
12
+ | Date | Version | Content |
13
+ |--|--|-------|
14
+ | 2023-08-10 |1.1.0| 1. Adapts to App Store Connect API 2.4|
15
+ ||| 2. Remove only Publick link testers, as email tester cannot be removed|
16
+ ||| 3. No more deleting Unused testers|
17
+ ||| 4. Multi-group account friendly, providing optional parameters Developer Portal Team ID, App Store Connect Team ID|
18
+ ||| 5. Full English log|
19
+ | 2022-09-30 |1.0.1| 1. Remove TestFlight testers that are not actually testing your app, support the following 3 categories: Uninstall, Expired, Unused|
20
+
10
21
 
11
22
  ## Getting Started
12
23
 
13
24
  This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-schindler`, add it to your project by running:
14
25
 
15
- ```bash
26
+ ```shell
16
27
  fastlane add_plugin schindler
17
28
  ```
18
29
 
@@ -23,7 +34,7 @@ fastlane add_plugin schindler
23
34
 
24
35
  ## Example
25
36
  ### 1. Fastlane Ready
26
- ```bash
37
+ ```shell
27
38
  # install fastlane
28
39
  gem install fastlane
29
40
  # create a workspace
@@ -40,11 +51,13 @@ Edit ./fastlane/Fastfile,for example:
40
51
  # A sample Fastfile
41
52
  lane :delete do
42
53
  schindler(
43
- filter_type: "7", # Optional, '1'-Not installed, '2'-Expired, '4'-Unused, '7'-All(1 | 2 | 4), default 7
54
+ filter_type: "3", # Optional, '1'-Not installed, '2'-Expired, '7'-All(1 | 2), default 3
44
55
  auto_confirm: "auto", # Optional, 'auto'-skip, default no. Skip the second confirmation, or wait for user confirmation before deleting after scanning
45
56
  user_id: "xjk_001@163.com", # Your AppID for login App Store Connect
46
- user_password: "********", # AppID password, support App private password
47
- ios_app_id: "11112222" # The ID of the app in the Apple Store
57
+ user_password: "********", # Optional, AppID password
58
+ ios_app_id: "11112222", # The ID of the app in the Apple Store
59
+ portal_team_id: "my_team_id", # Optional, Developer Portal Team ID
60
+ itc_team_id: "my_itc_team_id" # Optional, App Store Connect Team ID
48
61
  )
49
62
  end
50
63
 
@@ -69,6 +82,137 @@ To automatically fix many of the styling issues, use
69
82
  rubocop -a
70
83
  ```
71
84
 
85
+ ## Extras(important by 08/10/2023)
86
+ Due to changes in App Store Connect API 2.4, beta_tester_metrics for betaTesters in Spaceship are invalid, resulting in Tester status information no longer being available.
87
+
88
+ Based on the betaTesters interface (appstoreconnect.apple.com/iris/v1/betaTesters), I updated this repository. And submitted the commit to fastlane.
89
+
90
+ Consider that it takes time and days for the commit to go through, so while waiting for it to go through, if you get an error running this script, scroll down.
91
+
92
+ ### Find local fastlane
93
+ First, we need to find the betaTesters file in the local fastlane
94
+
95
+ ```shell
96
+ # Get local gem folder path
97
+ which fastlane
98
+ # Assuming that the previous step yields '/Users/hongtao/.mtl-cli-env/gems/bin/fastlane'
99
+
100
+ # Further find the specific fastlane version, note that here you need to open the gem folder by deleting the path to fastlane (replace '/bin/fastlane' at the end with '/gems') and then append the path to gems (/gems).
101
+ open /Users/hongtao/.mtl-cli-env/gems/gems
102
+
103
+ # After opening finder, find the latest local version of fastlane, for example, the author's local is fastlane-2.214.0, drag this folder to the terminal window and append '/spaceship/lib/spaceship/connect_api/models/beta_tester.rb' to the end. , and then open this file
104
+ open /Users/hongtao/.mtl-cli-env/gems/gems/fastlane-2.214.0/spaceship/lib/spaceship/connect_api/models/beta_tester.rb
105
+ ```
106
+
107
+ ### Modify local fastlane
108
+ Second, we need to manually modify the betaTesters property in the local fastlane
109
+
110
+ before modification
111
+ ```ruby
112
+ require_relative '../model'
113
+ module Spaceship
114
+ class ConnectAPI
115
+ class BetaTester
116
+ include Spaceship::ConnectAPI::Model
117
+
118
+ attr_accessor :first_name
119
+ attr_accessor :last_name
120
+ attr_accessor :email
121
+ attr_accessor :invite_type
122
+ attr_accessor :invitation
123
+
124
+ attr_accessor :apps
125
+ attr_accessor :beta_groups
126
+ attr_accessor :beta_tester_metrics
127
+ attr_accessor :builds
128
+
129
+ attr_mapping({
130
+ "firstName" => "first_name",
131
+ "lastName" => "last_name",
132
+ "email" => "email",
133
+ "inviteType" => "invite_type",
134
+ "invitation" => "invitation",
135
+
136
+ "apps" => "apps",
137
+ "betaGroups" => "beta_groups",
138
+ "betaTesterMetrics" => "beta_tester_metrics",
139
+ "builds" => "builds"
140
+ })
141
+
142
+ ......
143
+ ```
144
+
145
+ after modification
146
+ ```ruby
147
+ require_relative '../model'
148
+ module Spaceship
149
+ class ConnectAPI
150
+ class BetaTester
151
+ include Spaceship::ConnectAPI::Model
152
+
153
+ attr_accessor :first_name
154
+ attr_accessor :last_name
155
+ attr_accessor :email
156
+ attr_accessor :invite_type
157
+ attr_accessor :invitation
158
+
159
+ attr_accessor :apps
160
+ attr_accessor :beta_groups
161
+ attr_accessor :beta_tester_metrics
162
+ attr_accessor :builds
163
+
164
+ # add by xjkstar 2023-08-09
165
+ attr_accessor :isDeleted
166
+ attr_accessor :beta_tester_state
167
+ attr_accessor :last_modified_date
168
+ attr_accessor :installedCfBundleShortVersionString
169
+ attr_accessor :installedCfBundleVersion
170
+ attr_accessor :removeAfterDate
171
+ attr_accessor :latestExpiringCfBundleShortVersionString
172
+ attr_accessor :latestExpiringCfBundleVersionString
173
+ attr_accessor :installedDevice
174
+ attr_accessor :installedOsVersion
175
+ attr_accessor :installedDevicePlatform
176
+ attr_accessor :installedAppPlatform
177
+
178
+ attr_mapping({
179
+ "firstName" => "first_name",
180
+ "lastName" => "last_name",
181
+ "email" => "email",
182
+ "inviteType" => "invite_type",
183
+ "invitation" => "invitation",
184
+
185
+ "apps" => "apps",
186
+ "betaGroups" => "beta_groups",
187
+ "betaTesterMetrics" => "beta_tester_metrics",
188
+ "builds" => "builds",
189
+
190
+ # add by xjkstar 2023-08-09
191
+ "isDeleted" => "isDeleted",
192
+ "betaTesterState" => "beta_tester_state",
193
+ "lastModifiedDate" => "last_modified_date",
194
+ "installedCfBundleShortVersionString" => "installedCfBundleShortVersionString",
195
+ "installedCfBundleVersion" => "installedCfBundleVersion",
196
+ "removeAfterDate" => "removeAfterDate",
197
+ "latestExpiringCfBundleShortVersionString" => "latestExpiringCfBundleShortVersionString",
198
+ "latestExpiringCfBundleVersionString" => "latestExpiringCfBundleVersionString",
199
+ "installedDevice" => "installedDevice",
200
+ "installedOsVersion" => "installedOsVersion",
201
+ "installedDevicePlatform" => "installedDevicePlatform",
202
+ "installedAppPlatform" => "installedAppPlatform"
203
+ })
204
+
205
+ ......
206
+ ```
207
+
208
+ ### Let's go
209
+ Changes complete, up and running
210
+
211
+ ```shell
212
+ fastlane delete
213
+ ```
214
+
215
+
72
216
  ## Issues and Feedback
73
217
 
74
218
  For any other issues and feedback about this plugin, please submit it to this repository.
@@ -11,7 +11,7 @@ module Fastlane
11
11
  Filter_UnUse = 1 << 2
12
12
 
13
13
  def self.run(params)
14
- UI.message('The schindler plugin is working!')
14
+ UI.message('The schindler plugin is working!🚀🚀🚀')
15
15
 
16
16
  ARGV.clear
17
17
 
@@ -20,18 +20,19 @@ module Fastlane
20
20
  user_id = params[:user_id].to_s
21
21
  user_password = params[:user_password].to_s
22
22
  ios_app_id = params[:ios_app_id].to_s
23
- puts "================================\n新建名单,初始化参数信息:\n筛选类型(位运算):#{filter_type} (#{Filter_Uninstall}-未安装,#{Filter_Expire}-已过期,#{Filter_UnUse}-未使用)\n跳过二次确认:#{auto_confirm}\n账号:#{user_id}\n密码:******\n应用ID:#{ios_app_id}\n================================"
23
+ portal_team_id = params[:portal_team_id].to_s
24
+ itc_team_id = params[:itc_team_id].to_s
25
+ puts "================================\nNew task begin, initialize parameter information: \nFilter type (bit operation): #{filter_type} (#{Filter_Uninstall}-Uninstall,#{Filter_Expire}-Expire,#{Filter_UnUse}-UnUse)\nSkip secondary confirmation: #{auto_confirm}\nUserID: #{user_id}\nPassword: ******\nAppID: #{ios_app_id}\nPortal Team ID: #{portal_team_id}\nITC Team ID: #{itc_team_id}\n================================"
24
26
 
25
27
  # 先扫描未安装、已过期
26
28
  if (filter_type & Filter_Uninstall > 0) || (filter_type & Filter_Expire > 0)
27
- add_process_uninstall_expired(filter_type: filter_type, auto_confirm: auto_confirm, ios_app_id: ios_app_id,
28
- user_id: user_id, user_password: user_password)
29
+ add_process_uninstall_expired(filter_type: filter_type, auto_confirm: auto_confirm, params: params)
29
30
  end
30
31
  # 再扫描未使用,因为未使用需要全量查询,耗时1小时起步,容易超时
31
- if filter_type & Filter_UnUse > 0
32
- add_process_unused(auto_confirm: auto_confirm, ios_app_id: ios_app_id, user_id: user_id,
33
- user_password: user_password)
34
- end
32
+ # if filter_type & Filter_UnUse > 0
33
+ # add_process_unused(auto_confirm: auto_confirm, ios_app_id: ios_app_id, user_id: user_id,
34
+ # user_password: user_password)
35
+ # end
35
36
  end
36
37
 
37
38
  def self.exec_process(testers, filter_type, auto_confirm)
@@ -47,58 +48,63 @@ module Fastlane
47
48
  testers.each do |tester|
48
49
  # puts "测试员信息:#{tester.to_json}"
49
50
 
50
- unless tester.respond_to?(:beta_tester_metrics)
51
- puts "\n\n~~~~~~~~~~ 异常跳过:不合法的BetaTester数据 ~~~~~~~~~~"
51
+ unless tester.respond_to?(:beta_tester_state)
52
+ puts "\n\n~~~~~~~~~~ 🏃Exception skip: illegal BetaTester data ~~~~~~~~~~"
53
+ next
54
+ end
55
+
56
+ unless tester.invite_type == 'PUBLIC_LINK'
57
+ puts "\n\n~~~~~~~~~~ 🏃Ignore: Only delete testers invited by the public link ~~~~~~~~~~"
52
58
  next
53
59
  end
54
60
 
55
61
  id = tester.id.to_s
56
- metric = (tester.beta_tester_metrics || []).first
57
- tester_state = metric.beta_tester_state
58
- puts "测试员:#{tester.id} 状态-#{tester_state}"
62
+ tester_state = tester.beta_tester_state
63
+ puts "TesterID:#{tester.id} state-#{tester_state}"
59
64
 
60
- if metric.installed?
61
- modified_date = string2date(metric.last_modified_date)
65
+ if tester.beta_tester_state == "INSTALLED"
66
+ modified_date = string2date(tester.last_modified_date)
62
67
  next if modified_date.nil?
63
68
 
64
69
  last_date = modified_date.getlocal.to_i
65
- puts "最后更新时间:#{modified_date}"
70
+ puts "last_modified_date:#{modified_date}"
66
71
  # 在sevenDaySessionCount支持前,暂时用session_count + lastModifiedDate
67
- count = metric.session_count.to_i
72
+ # session_count被苹果废弃, by hongtao 2023/08/09
73
+ # count = tester.session_count.to_i
68
74
 
69
75
  if (filter_type & Filter_Expire) > 0 && last_date < expiredtime
70
76
  # 过期
71
77
  ids << id
72
78
 
73
- puts '===== 已过期 +1 ====='
74
- elsif (filter_type & Filter_UnUse) > 0 && count < 1 && last_date < sevendaytime
75
- # 超过7天未使用
76
- ids << id
79
+ puts '===== 🐷Expire +1 ====='
80
+ # elsif (filter_type & Filter_UnUse) > 0 && count < 1 && last_date < sevendaytime
81
+ # # 超过7天未使用
82
+ # ids << id
77
83
 
78
- puts '===== 未使用 +1 ====='
84
+ # puts '===== 🐷未使用 +1 ====='
79
85
  end
80
86
  elsif filter_type & Filter_Uninstall > 0
81
87
  ids << id
82
88
 
83
- puts '===== 未安装 +1 ====='
89
+ puts '===== 🐷Uninstall +1 ====='
84
90
  end
85
91
  end
86
92
 
87
- puts "\n测试员筛选完成\n================================"
93
+ puts "\nTester screening completed\n================================"
88
94
  if ids.size < 1
89
- puts "当前规则下,测试员已经删完干净了\n================================"
95
+ puts "🎉Under the current rules, the testers have deleted🎉\n================================"
90
96
  return []
91
97
  end
92
98
 
93
99
  unless auto_confirm
94
- puts "删除TestFlight测试员:#{ids.size}个? (Y/n)"
100
+ puts "Delete TestFlight tester count: #{ids.size} (Y/n)"
95
101
  if gets.chomp != 'Y'
96
- puts "Cancel,任务取消,此次任务结束\n================================"
102
+ puts "Cancel,Task cancel, this task is over\n================================"
97
103
  return []
98
104
  end
99
105
  end
100
106
 
101
- ids
107
+ return ids
102
108
  end
103
109
 
104
110
  def self.string2date(origin_date_string)
@@ -131,54 +137,71 @@ module Fastlane
131
137
  modified_date
132
138
  end
133
139
 
134
- def self.add_process_unused(auto_confirm: false, ios_app_id: nil, user_id: nil, user_password: nil)
135
- # 查询全量数据,但容易超时,未使用的用户只能全量查询
136
- puts "#{DateTime.now.to_time} 开始获取App数据……"
137
- app = Spaceship::ConnectAPI::App.get(app_id: ios_app_id)
138
-
139
- puts "#{DateTime.now.to_time} 开始获取测试人员列表,带薪喝茶时间……"
140
- testers = nil
141
- if app
142
- puts 'App get_beta_testers'
143
- testers = app.get_beta_testers(filter: { apps: ios_app_id, isDeleted: false }, includes: 'betaTesterMetrics',
144
- sort: 'betaTesterMetrics.betaTesterState', limit: 20)
145
- else
146
- puts 'Spaceship::ConnectAPI::BetaTester'
147
- testers = Spaceship::ConnectAPI::BetaTester.all(filter: { apps: ios_app_id, isDeleted: false },
148
- includes: 'betaTesterMetrics', sort: 'betaTesterMetrics.betaTesterState', limit: 20)
149
- end
150
- puts "#{DateTime.now.to_time} 获取测试人员列表成功,共#{testers.count}个"
151
-
152
- ids = exec_process(testers, Filter_UnUse, auto_confirm)
153
- return if ids.size < 1
154
-
155
- client = Spaceship::ConnectAPI::Client.login(user_id, user_password)
156
- puts '登录成功'
157
- client.delete_beta_testers_from_app(beta_tester_ids: ids, app_id: ios_app_id)
158
- puts "Success,删除#{ids.size}个测试人员成功\n================================"
159
- end
160
-
161
- def self.add_process_uninstall_expired(filter_type: (Filter_Uninstall | Filter_Expire), auto_confirm: false, ios_app_id: nil, user_id: nil, user_password: nil)
140
+ # def self.add_process_unused(auto_confirm: false, ios_app_id: nil, user_id: nil, user_password: nil)
141
+ # # 查询全量数据,但容易超时,未使用的用户只能全量查询
142
+ # puts "#{DateTime.now.to_time} 开始获取App数据……"
143
+ # app = Spaceship::ConnectAPI::App.get(app_id: ios_app_id)
144
+
145
+ # puts "#{DateTime.now.to_time} 开始获取测试人员列表,带薪喝茶时间……"
146
+ # testers = nil
147
+ # if app
148
+ # puts 'App get_beta_testers'
149
+ # testers = app.get_beta_testers(filter: { apps: ios_app_id, isDeleted: false }, includes: 'betaTesterMetrics',
150
+ # sort: 'betaTesterMetrics.betaTesterState', limit: 20)
151
+ # else
152
+ # puts 'Spaceship::ConnectAPI::BetaTester'
153
+ # testers = Spaceship::ConnectAPI::BetaTester.all(filter: { apps: ios_app_id, isDeleted: false },
154
+ # includes: 'betaTesterMetrics', sort: 'betaTesterMetrics.betaTesterState', limit: 200)
155
+ # end
156
+ # puts "#{DateTime.now.to_time} 获取测试人员列表成功,共#{testers.count}个"
157
+
158
+ # ids = exec_process(testers, Filter_UnUse, auto_confirm)
159
+ # return if ids.size < 1
160
+
161
+ # itc_team_id = '82324800'
162
+ # team_id = "9SR35Y6UHD"
163
+ # # 每次查询Top 50,直到没有符合的记录,适合按状态排序后的扫描
164
+ # client = Spaceship::ConnectAPI::Client.login(user_id, user_password, portal_team_id: team_id, tunes_team_id: itc_team_id)
165
+ # puts '登录成功'
166
+ # client.delete_beta_testers_from_app(beta_tester_ids: ids, app_id: ios_app_id)
167
+ # puts "Success,删除#{ids.size}个测试人员成功\n================================"
168
+ # end
169
+
170
+ def self.add_process_uninstall_expired(filter_type: (Filter_Uninstall | Filter_Expire), auto_confirm: false, params: nil)
171
+ user_id = params[:user_id].to_s
172
+ user_password = params[:user_password].to_s
173
+ ios_app_id = params[:ios_app_id].to_s
174
+ team_id = params[:portal_team_id].to_s
175
+ itc_team_id = params[:itc_team_id].to_s
162
176
  # 每次查询Top 50,直到没有符合的记录,适合按状态排序后的扫描
163
- client = Spaceship::ConnectAPI::Client.login(user_id, user_password)
164
- puts '登录成功'
177
+ client = Spaceship::ConnectAPI::Client.login(user_id, user_password, portal_team_id: team_id, tunes_team_id: itc_team_id)
178
+ puts 'ConnectAPI login success🎉'
165
179
 
180
+ deleteCount = 0
166
181
  while true
167
- puts "#{DateTime.now.to_time} 开始获取测试人员列表,带薪喝茶时间……"
182
+ puts "#{DateTime.now.to_time} Start getting a list of testers, take a cup of tea🍵……"
168
183
  testers = client.get_beta_testers(filter: { apps: ios_app_id, isDeleted: false },
169
- includes: 'betaTesterMetrics', sort: 'betaTesterMetrics.betaTesterState')
184
+ includes: 'betaTesterMetrics',
185
+ sort: 'betaTesterMetrics.betaTesterState',
186
+ limit: 100)
170
187
 
171
- puts "#{DateTime.now.to_time} 获取测试人员列表成功,共#{testers.count}"
188
+ puts "#{DateTime.now.to_time} Get tester list complete, #{testers.count} in count"
172
189
 
173
190
  ids = exec_process(testers, filter_type, auto_confirm)
174
191
  if ids.size < 1
175
- puts "未安装 or 已过期 测试员清除完毕\n================================"
176
- return
192
+ puts "Uninstall or Expired Tester cleared🎉🎉🎉\n================================"
193
+ break
177
194
  end
178
195
 
179
- client.delete_beta_testers_from_app(beta_tester_ids: ids, app_id: ios_app_id)
180
- puts "Success,删除#{ids.size}个测试人员成功\n================================"
196
+ begin
197
+ client.delete_beta_testers_from_app(beta_tester_ids: ids, app_id: ios_app_id)
198
+ rescue => e
199
+ puts "delete error, but the program continues to execute🤔. exception detail: #{e}"
200
+ end
201
+ deleteCount = deleteCount + ids.size
181
202
  end
203
+
204
+ puts "Success,deletion of #{deleteCount} testers successful🦋\n================================"
182
205
  end
183
206
 
184
207
  #####################################################
@@ -199,20 +222,20 @@ module Fastlane
199
222
 
200
223
  def self.details
201
224
  # Optional:
202
- 'Schindler is a TestFlight automatic processing tool, which is used to maintain the number of TestFlight quota, eliminate useless testers, and improve the external gray effect of iOS.'
225
+ 'Remove TestFlight testers that are not actually testing your app. Schindler is a TestFlight automatic processing tool, which is used to maintain the number of TestFlight quota, eliminate useless testers, and improve the external gray effect of iOS App.'
203
226
  end
204
227
 
205
228
  def self.available_options
206
229
  [
207
230
  FastlaneCore::ConfigItem.new(key: :filter_type,
208
231
  env_name: 'SCHINDLER_FILTER_TYPE',
209
- description: "'1'-Not installed, '2'-Expired, '4'-Unused, '7'-All(1 | 2 | 4), default 7",
232
+ description: "'1'-Not installed, '2'-Expired, '3'-All(1 | 2), default 7",
210
233
  optional: true,
211
- default_value: '7',
234
+ default_value: '3',
212
235
  type: String),
213
236
  FastlaneCore::ConfigItem.new(key: :auto_confirm,
214
237
  env_name: 'SCHINDLER_AUTO_CONFIRM',
215
- description: "'auto'-skip, default no. Skip the second confirmation, or wait for user confirmation before deleting after scanning",
238
+ description: "'auto'-skip, default no. Skip the second confirmation, or wait for user confirmation before deleting after scanning (optional)",
216
239
  optional: true,
217
240
  default_value: 'none',
218
241
  type: String),
@@ -223,14 +246,24 @@ module Fastlane
223
246
  type: String),
224
247
  FastlaneCore::ConfigItem.new(key: :user_password,
225
248
  env_name: 'SCHINDLER_PASSWORD',
226
- description: 'AppID password, support App private password',
227
- optional: false,
249
+ description: 'AppID password, support App private password (optional)',
250
+ optional: true,
228
251
  type: String),
229
252
  FastlaneCore::ConfigItem.new(key: :ios_app_id,
230
253
  env_name: 'SCHINDLER_APP_ID',
231
254
  description: 'The ID of the app in the Apple Store',
232
255
  optional: false,
233
- type: String)
256
+ type: String),
257
+ FastlaneCore::ConfigItem.new(key: :portal_team_id,
258
+ env_name: 'SCHINDLER_PORTAL_TEAM_ID',
259
+ description: 'Developer Portal Team ID (optional)',
260
+ optional: true,
261
+ type: String),
262
+ FastlaneCore::ConfigItem.new(key: :itc_team_id,
263
+ env_name: 'SCHINDLER_ITC_TEAM_ID',
264
+ description: 'App Store Connect Team ID (optional)',
265
+ optional: true,
266
+ type: String)
234
267
  ]
235
268
  end
236
269
 
@@ -245,11 +278,13 @@ module Fastlane
245
278
  def self.example_code
246
279
  [
247
280
  'schindler(
248
- filter_type: "7", # Optional, eliminate useless testers
281
+ filter_type: "3", # Optional, eliminate useless testers
249
282
  auto_confirm: "auto", # Optional, Skip the second confirmation
250
283
  user_id: "my_username", # My AppID
251
- user_password: "my_password", # My password
252
- ios_app_id: "my_ios_app" # The App which to be eliminated
284
+ user_password: "my_password", # Optional, My password
285
+ ios_app_id: "my_ios_app", # The App which to be eliminated
286
+ portal_team_id: "my_team_id", # Optional, Developer Portal Team ID
287
+ itc_team_id: "my_itc_team_id" # Optional, App Store Connect Team ID
253
288
  )'
254
289
  ]
255
290
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Schindler
3
- VERSION = '1.0.1'
3
+ VERSION = '1.1.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-schindler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - xjkstar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-30 00:00:00.000000000 Z
11
+ date: 2023-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -181,10 +181,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
181
  - !ruby/object:Gem::Version
182
182
  version: '0'
183
183
  requirements: []
184
- rubygems_version: 3.1.6
184
+ rubygems_version: 3.0.3.1
185
185
  signing_key:
186
186
  specification_version: 4
187
- summary: Schindler is a TestFlight automatic processing tool, which is used to maintain
188
- the number of TestFlight quota, eliminate useless testers, and improve the external
189
- gray effect of iOS.
187
+ summary: Remove TestFlight testers that are not actually testing your app. Schindler
188
+ is a TestFlight automatic processing tool, which is used to maintain the number
189
+ of TestFlight quota, eliminate useless testers, and improve the external gray effect
190
+ of iOS.
190
191
  test_files: []