新項目高高興興進入了測試階段, 拉取了最新的代碼后, 依賴庫有更新...然后就死活拉不下來了. 測試的Bug數(shù)不停在增加...
卡住的 fetching...
永遠的 timeout...
本文僅用于記錄一次SPM拉取問題的所有嘗試方法,
對SPM不了解的朋友可以看看筆者的遠古探索:
Xcode 中如何使用 SwiftPM(Swift Package Manager)
將工程從 CocoaPods 遷移到到 SwiftPM上次用SPM都兩年前了···作孽啊
問題描述: 有梯子的場景下 僅Xcode 的 SPM無法拉取
方法1: 直接上梯子(全局模式)
任何與世界互聯(lián)網(wǎng)連接有障礙的場景下, 這是個百試百靈的方法
但這次失靈了.檢查了所有依賴庫的地址, 版本...除了有個庫較小眾, 基本都沒有問題.
眉頭逐漸緊鎖: 要么是本地環(huán)境有問題掏击、要么是未曾遇到過的麻煩
一種不詳?shù)念A(yù)感...
方法2: 改 Hosts
主要是通過類似IP查詢的網(wǎng)站查看指定地址的IP地址, 直接在hosts中指定需訪問路徑的絕對地址來避免某些屏蔽機制
進入到”/private/etc/“
路徑下, 打開hosts文件才發(fā)現(xiàn), 以前的有過類似的修改:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
185.199.108.133 raw.githubusercontent.com
Tips: hosts文件無法直接修改, 可通過命令行編輯, 或復(fù)制一份副本編輯后進行覆蓋(注意備份).
一般場景下, 這樣設(shè)置后瀏覽器就能夠正常訪問Github了. 結(jié)果在不開啟梯子的情況下還是超時...
此時我開始懷疑起了公司, 公司為了監(jiān)控網(wǎng)絡(luò), 層層設(shè)卡, 步步設(shè)防, 沒準(zhǔn)是哪一步出的問題
但是同事又可以, 速度快得都饞哭了...
那先把對公司的懷疑放在一邊, 試試其他方式
方法3: 手機使用移動網(wǎng)絡(luò)+梯子, 開啟熱點供電腦使用
這種方式主要應(yīng)用于規(guī)避電腦所在外部網(wǎng)絡(luò)環(huán)境的未知問題
曾數(shù)次扶大廈之將傾...
這次依舊不行
方法4-N:
此時, 依照網(wǎng)上類似問題的帖子,
使用了里面所有的方法, 均無效...這些方法基本都集中于梯子, 或Xcode的梯子...
退到原點:
似乎走遠了, 返回問題本身, 一步一步來分析均唉、排除:
- 在配置了絕對IP的情況下也只能通過公司的網(wǎng)絡(luò)工具或梯子來訪問 Github (電腦所在網(wǎng)絡(luò)環(huán)境存在限制)
- 在連接手機熱點+梯子的情況下, 依舊失敗(排除了電腦的網(wǎng)絡(luò)環(huán)境, 電腦本身自帶安全軟件影響? 或是Xcode本身的問題?)
- 瀏覽器可訪問Github、僅 Xcode 的 SPM 無法拉取更新. 新建了一個項目, 用SPM隨意添加個庫, 添加搜索查庫時都超時 (Xcode 你tm...)
- 同事的Xcode能正常使用 (誤會解除)
此時只能確定2點:
1. 只有我的設(shè)備的Xcode無法使用SPM
2. 設(shè)備所在外部網(wǎng)絡(luò)環(huán)境存在限制
突然, 思緒落在了“外部網(wǎng)絡(luò)環(huán)境存在限制!”
. 那內(nèi)部
呢? 公司對員工的關(guān)懷無微不至, 不僅僅只存在于網(wǎng)絡(luò)環(huán)境, 還深入到了員工的電腦, 軟件、配置可是搞過不少啊...方向有了, 開始排查...
- 打開了電腦的 WIFI設(shè)置-DNS:
這里的 DNS 前段時間被強制要求設(shè)置為公司的 DNS, 會不會...
- [重點]: 將 DNS 修改為我們的兩個老朋友
8.8.8.8
與114.114.114.114
, 并且確保梯子為全局模式
Tips: 修改DNS后, 訪問并不會馬上生效, 最好斷開重連下網(wǎng)絡(luò)
- 同時, 發(fā)現(xiàn)每次開啟梯子后, wifi代理欄的“忽略”中就會被添加上一大堆的蘋果服務(wù):
weather-data.apple.com,gateway.icloud.com.cn,193.168.0.0/24,localhost,*.icloud.com.cn,172.16.0.0/12,api.smoot.apple.com,captive.apple.com,guzzoni.apple.com,ocsp.apple.com,*.smoot.apple.cn,*.push-apple.com.akadns.net,xp.apple.com,*.local,smp-device-content.apple.com,127.0.0.1,192.168.0.0/16,10.0.0.0/8,gateway.icloud.com,100.64.0.0/10,inappcheck.itunes.apple.com,17.0.0.0/8,configuration.apple.com,*.push.apple.com,valid.apple.com,health.apple.com,*.ess.apple.com
經(jīng)測試后發(fā)現(xiàn)其會影響梯子的自動模式(全局模式不受影響), 所以使用自動模式時需包含蘋果相關(guān)服務(wù).部分梯子支持類似功能.
結(jié)論
主要問題是這個 DNS, 以及自己代理的機制, 外加公司網(wǎng)絡(luò)真的一言難盡, 三個原因混雜在一起, 加后來修改DNS后火急火燎的測試, 耽誤了不少時間. 作為一個開發(fā)者還是太浮躁了...
終于可以正常使用了:
都看到這里了, 老夫還有一個臨時續(xù)命的方法, 分文不取!
從能夠更新的同事(或另一臺正常的機器)將DerivedData
中對應(yīng)工程目錄下的SourcePackages
文件整個Copy一份到無法拉取的設(shè)備對應(yīng)的緩存目錄進行覆蓋即可.沒錯, SPM拉取的依賴庫都放在這里面
Tips: 有問題的設(shè)備提前運行下項目, 保證自動生成工程的緩存目錄