搜索了一下網(wǎng)上關(guān)于TestFlight上馬甲的資料,大概是基于商業(yè)原因狐蜕,很多資料都點到即止欲言又止宠纯,為了不被砍,那我也就不點破TF馬甲能上架的個中原理了层释。
TestFlight理論上極限能分發(fā)到10000臺手機婆瓜,但只要稍加處理,就能做到無限分發(fā)贡羔,只要把列表中已安裝的設(shè)備刪除廉白,就可以繼續(xù)進行分發(fā)了。從列表中刪除設(shè)備后治力,并不影響已安裝設(shè)備對App的使用,安裝app后勃黍,就算蘋果賬號被封宵统,也不影響用戶使用3個月。由于是興致所至想寫個文章覆获,并無任何準備马澈,下圖為隨便在網(wǎng)上截取的盜圖,見諒弄息。Testers的狀態(tài)有兩個痊班,一個是已接受(就是打開了TestFlight安裝頁面未安裝),另一個狀態(tài)是已安裝摹量。
那么問題來了涤伐,作為程序員的你馒胆,難道需要每天在這個頁面,手動刪除已安裝的測試員這么low凝果?在網(wǎng)上搜索了一番祝迂,談及這方面的資料不多,因此器净,作為好奇心爆棚的寶寶型雳,決定自己寫一個小項目去探索這個問題,此時山害,最科學的方法就是踩著巨人的肩膀解決問題纠俭;此時,fastlane的spaceship就走進我的眼簾浪慌。決定借助spaceship寫一個ruby程序解決問題冤荆。
工具地址 https://github.com/fastlane/fastlane
一、首先需要安裝rvm
curl -L get.rvm.io | bash -s stable
source ~/.bashrc
source ~/.bash_profile
source ~/.profile
二眷射、安裝ruby
rvm install 2.7.3
三匙赞、安裝fastlane
sudo gem install -n /usr/local/bin fastlane
四、ruby程序妖碉,由于懶得重新寫一份涌庭,抽取幾個點記錄下來就算了。
筆者也是粗略研究欧宜,粗略應用坐榆,也未探索到完全智能,因此冗茸,第一步是手動登錄一次席镀,手動輸入一次驗證碼,貌似一個月內(nèi)都不用輸入第二次夏漱,打開終端豪诲,命令:fastlane spaceship,根據(jù)提示完成登錄挂绰。
ruby代碼部分
1.導入spaceship屎篱。require "spaceship"
2.登錄itune,Spaceship::Tunes.login("傳入賬號名稱", "傳入賬號密碼")葵蒂,在上述手動登錄過一次輸入過驗證碼后交播,在ruby中l(wèi)ogin itunes,只需傳入賬號名稱和賬號密碼践付,就能進行登錄了秦士,貌似一個月內(nèi)都不用再輸入手機驗證碼。
3.獲取整個測試員列表:testers = Spaceship::TestFlight::Tester.all(app_id: '傳入你從蘋果開發(fā)者賬號里獲取的appid'),接口能獲取到上圖中整個Testers的列表永高,筆者試了其他獲取測試員的方法隧土,其他方法和這個方法的區(qū)別在于提针,這個方法獲取到的列表,每個模型中都帶有status字段去判斷是installed:已安裝次洼,還是accepted:已接受狀態(tài)关贵;其他接口返回的列表中,不帶這個狀態(tài)卖毁。
4.根據(jù)返回列表testers中揖曾,模型的status字段,抽取已安裝狀態(tài)的設(shè)備id列表亥啦,設(shè)備id在模型中字段為tester_id,因此炭剪,作為ruby邊學邊用的初學者,寫法大概為:
testers =?Spaceship::TestFlight::Tester.all(app_id: '傳入你從蘋果開發(fā)者賬號里獲取的appid')
ids = Array.new();index = 0
testers.each do |i|
? ? if i.status == 'installed'
? ? ? ? ids[index] = i.tester_id.to_s
? ? ? ? index = index + 1
? ? end
這樣就從testers列表中翔脱,抽取了已安裝設(shè)備的tester_id組裝為數(shù)組ids奴拦;
5.要用到ConnectAPI的接口,把已安裝設(shè)備的tester_id數(shù)組傳入到刪除方法届吁,從而把已安裝的設(shè)備批量刪除错妖。找了很多個remove方法,都用不了疚沐,在絕望之際暂氯,打開了下面這個類:
https://github.com/fastlane/fastlane/blob/master/spaceship/spec/connect_api/testflight/testflight_client_spec.rb
在里面看到了client.delete_beta_testers_from_app(beta_tester_ids: "傳入上面已安裝設(shè)備的數(shù)組ids", app_id: "傳入從蘋果開發(fā)者中心獲取的appid")
由于是ConnectAPI接口,因此需要額外獲取ConnectAPI的client亮蛔,再用client這個實例去調(diào)delete_beta_testers_from_app這個方法痴施,把已安裝的設(shè)備刪除,因此代碼大概為:
client=Spaceship::ConnectAPI::Client.login('傳入蘋果開發(fā)者賬號','傳入蘋果開發(fā)者密碼')
client.delete_beta_testers_from_app(beta_tester_ids: "傳入上面已安裝設(shè)備的數(shù)組ids", app_id: "傳入從蘋果開發(fā)者中心獲取的appid")
完成一次刪除任務(wù)究流。
再把這個流程放在一個定時任務(wù)里循環(huán)執(zhí)行辣吃,比如while循環(huán),配合sleep-30分鐘芬探,作為一個簡單的30分鐘定時任務(wù)神得,自動刪除。就實現(xiàn)了自動刪除已安裝設(shè)備的功能了偷仿。