自動化
使用自動化工具處理 iOS 的 試飛 分發,是一件很愜意的事情,它能幫你節省很多時間,減少大量人工干預——尤其是像這種需要等很久才需要人工操作一下的事情,雖然並不會讓你覺得很累,但大量的時間就這樣浪費掉了。
使用 快車道 一鍵編譯、上傳,然後等待蘋果服務器處理完成,全自動發布 試飛,本來是一個很棒的操作,但由於網絡環境的變化,我的 fastlane 上傳速度變得越來越慢,最終慢到 100M 帶寬的網絡中,上傳速度只有 10 KB /秒。
重置 itmstransporter
由於 fastlane 實際上是使用 itmstransporter 來進行上傳的,那麼如果你遇到上傳相關錯誤,可以嘗試重置這個工具(當然,在我這個情況下就無法解決問題)
1 2 3 |
cd ~ mv .itmstransporter/ .old_itmstransporter/ "/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/itms/bin/iTMSTransporter" |
參考文獻:HTTPS://stackoverflow.com/questions/47433541/app-store-upload-is-really-slow-and-hogging-my-internet-connection
itmstransporter 的三種傳輸模式
實際上,itmstransporter 是有三種上傳模式的,這也就是為什麼你在使用 Xcode 手動上傳 app 時,會有一個步驟叫做“協商上傳模式”。但顯然,這個協商功能沒那麼“智能”。
如果你依賴 itmstransporter 的自動選擇(默認就是如此),那麼最快的上傳模式會最先被使用,但一旦這個模式失敗,itmstransporter 就會轉用其他備用方案了(實際上如果再試試,也許還是能用的)。
DAV
這個模式是最慢的模式,其實就和直接 http 上傳沒什麼區別(會比web上傳更慢一些),如果你的網絡質量比較差,延遲高等,那麼落到 dav 是沒跑的。
但是,有一點,如果你在公司等有防火牆的網絡環境,那麼 dav 可能是唯一不被封鎖的上傳方式——它不需要特殊端口。
Signiant
這是一個 SaaS 加速傳輸協議,官方宣稱比 http 傳輸快 200%,使用這個協議則需要防火牆開啟 TCP 和 UDP 的 44001 端口,並且 UDP 攻擊防護有可能會對 signiant 造成影響。
葉樹
Aspera 在業內極其出名,很多企業網絡、雲平台都在使用使用 Aspera 家的 fasp 協議快速傳輸數據,它在絕大多數網絡條件下擁有穩定高速傳輸,“通常需要 26 小時將一份體積為24GB的文檔傳輸至世界的另一端,而 Aspera 能做到只需 30 秒”。
同樣,它也要求防火牆開啟 TCP 和 UDP 的 33001 端口,並且 UDP 攻擊防護有可能會對 Aspera 造成影響。
配置
我們的目的就是要讓 fastlane 調用 itmstransporter 時使用 Aspera 進行上傳,避免使用其他兩個協議,如果是直接使用 itmstransporter ,你大可以直接設置參數,但使用 fastlane 該怎麼辦呢?
在你的 upload_to_testflight 上一行,寫 ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-牛逼的Aspera" 即可,這樣,就設定了環境變量,讓 itmstransporter 只使用 Aspera 進行上傳,一旦失敗,則不會再使用其他方式進行嘗試,這樣在上傳時,你就會遇到:
1 |
The session's status is FAILED and the error description is 'failed to authenticate (19)' |
不過,如果你耐心等待,就會發現上傳並沒有停止,最終,你會得到:
1 |
Although errors occurred during execution of iTMSTransporter, it returned success status. |
另外,上傳的速度也恢復到了巔峰。
如果你真的遇到 Aspera 被防火牆阻止而無法上傳的情況,那麼就吧 Aspera 改成 DAV。
速度優化
更正:對於 fastlane 來說,-k 參數不能使用,似乎是默認腳本已經設定了這個參數,如果使用,你會得到一個錯誤: 該 選項: "-ķ" 可以 只要 是 規定 一旦. 返回 狀態 的 iTunes的 運輸車 是 1: 該 選項: "-ķ" 可以 只要 是 規定 一旦.
默認來說,Aspera 不會對上傳進行限速,也就是說它會盡可能利用你的上傳帶寬,但這樣有一個弊端,那就是上傳的時候會導致網絡上行帶寬被佔滿,其他人、其他軟件都無法聯網。所以給 Aspera 增加一個帶寬限制是個不錯的選擇(另外,據說加了帶寬限定後速度反而是略有提升的)。
總之,在
"-牛逼的Aspera" 中增加
-ķ 參數,後接你期望的帶寬,單位是 bit per second,即
-ķ 10000 就是 10M 帶寬,
-ķ 200000 就是 200M 帶寬,具體多少合適,這需要你自己去實際測試,這也和你的路由器性能有關。
比如,我要設置 20M 帶寬,那麼最終的代碼就是這樣的:
1 |
<del>ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t Aspera -k 20000"</del> |
另: -ķ 這個參數對 signiant 模式同樣適用,單位和規則都是一樣的。
參考文獻
本文由 落格博客 原創撰寫:落格博客 » 為何我的 Fastlane 上傳那麼慢?
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/3235.html