Back to Tuist

雜湊{#hashing}

server/priv/docs/zh_Hant/guides/features/projects/hashing.md

4.191.83.0 KB
Original Source

雜湊{#hashing}

<LocalizedLink href="/guides/features/cache">快取</LocalizedLink>或選擇性測試執行等功能需要一種方法來判斷目標是否已變更。Tuist 會為依賴圖表中的每個目標計算雜湊值,以判斷目標是否已變更。哈希值是根據下列屬性計算出來的:

  • 目標的屬性(例如名稱、平台、產品等)
  • 目標的檔案
  • 目標的相依性雜湊值

快取屬性{#cache-attributes}

此外,在計算 <LocalizedLink href="/guides/features/cache">caching</LocalizedLink> 的散列值時,我們也會對下列屬性進行散列。

Swift 版本{#swift-version}

我們散列執行指令/usr/bin/xcrun swift --version 所獲得的 Swift 版本,以防止因目標與二進檔之間的 Swift 版本不匹配而導致編譯錯誤。

[!NOTE] Module Stability

先前版本的二進位緩存依賴BUILD_LIBRARY_FOR_DISTRIBUTION 建立設定來啟用 module stability 並使用任何編譯器版本的二進位檔。然而,這會在不支援模組穩定性的目標專案中造成編譯問題。產生的二進位檔會與用來編譯的 Swift 版本綁定,而 Swift 版本必須與用來編譯專案的版本相符。

組態{#configuration}

-configuration 這個旗號背後的想法是要確保 debug binaries 不會被用在 release builds 中,反之亦然。然而,我們仍然缺少一個機制來移除專案中的其他配置,以防止它們被使用。

除錯{#debugging}

如果您在跨環境或調用使用快取時發現非決定性的行為,這可能與跨環境的差異或散列邏輯中的錯誤有關。我們建議按照以下步驟來調試問題:

  1. 執行tuist hash cachetuist hash selective-testing (哈希值為 <LocalizedLink href="/guides/features/cache"> 二进制快取</LocalizedLink><LocalizedLink href="/guides/features/selective-testing"> 選擇性測試</LocalizedLink>),複製哈希值,重新命名專案目錄,再執行一次指令。哈希值應該相符。
  2. 如果哈希值不匹配,很可能是生成的專案取決於環境。在兩種情況下執行tuist graph --format json 並比較圖形。或者,生成專案,並使用 Diffchecker 等差異工具比較它們的project.pbxproj 檔案。
  3. 如果哈希值相同,但在不同的環境(例如 CI 與本機)下有所不同,請確定各處都使用相同的 configurationSwift 版本。Swift 版本與 Xcode 版本相關,因此請確認 Xcode 版本相符。

如果哈希值仍然是非確定的,請告訴我們,我們可以協助除錯。

[!NOTE] Better Debugging Experience Planned

改善我們的除錯經驗在我們的路線圖中。print-hashes 指令缺乏瞭解差異的上下文,將被更容易使用的指令取代,該指令使用樹狀結構來顯示哈希值之間的差異。