[錯誤] resource fork, Finder information, or similar detritus not allowed

這個錯誤訊息在使用 VS Code 建置 Xamarin.iOS 或 .NET MAUI iOS 應用程式時出現,表示您的應用程式套件中 有一個或多個檔案包含了在 macOS 上程式碼簽署過程中不允許的擴展屬性 (extended attributes)。
這是一個 Apple 在 iOS 10、macOS Sierra、watchOS 3 和 tvOS 10 中引入的安全強化措施。程式碼簽署過程現在嚴格禁止應用程式套件中的任何檔案包含帶有資源分叉 (resource forks) 或 Finder 資訊的擴展屬性。這是一個 Apple 在 iOS 10、macOS Sierra、watchOS 3 和 tvOS 10 中引入的安全強化措施。程式碼簽署過程現在嚴格禁止應用程式套件中的任何檔案包含帶有資源分叉 (resource forks) 或 Finder 資訊的擴展屬性。

錯誤原因:
這些擴展屬性可能透過多種方式被添加到檔案中,包括:
透過 Finder 複製檔案: 使用 Finder 複製檔案,特別是從外接硬碟或網路共享,有時會連帶複製這些額外的屬性。
版本控制系統: 在某些情況下,您的 Git 儲存庫或其他版本控制系統可能會保留這些屬性。
檔案系統問題: 某些檔案系統可能以不同的方式處理擴展屬性。
建置過程: 偶爾,建置工具或腳本可能會無意中添加這些屬性。
解決方案:

解決此問題的主要方法是 從受影響的檔案中移除這些擴展屬性。以下是如何操作:

  1. 識別問題檔案 (可選但建議):
    雖然您可以嘗試移除所有檔案的屬性,但識別哪些檔案導致問題會很有幫助。您可以使用 Mac Build Host 上的「終端機」應用程式中的 xattr 指令來完成此操作。
    在您的 Mac 上開啟「終端機」。
    導航到您的 iOS 專案的根目錄或 VS Code 錯誤輸出中提到的特定資料夾(如果提供了路徑)。
    執行以下指令以列出擴展屬性:
    Bash
    find . -print0 | xargs -0 -n 1 xattr -l
    find . -print0 | xargs -0 -n 1 xattr -l | grep FinderInfo (單獨列出有問題的檔案)
    這個指令會遍歷目前目錄及其子目錄中的所有檔案,並列出它們擁有的任何擴展屬性。尋找類似 com.apple.FinderInfo 或任何其他非標準屬性的項目。
  2. 移除擴展屬性:
    一旦您了解了哪些檔案有問題,或者您想徹底執行,可以使用 xattr 指令來移除有問題的屬性。
    在「終端機」中導航到您的 iOS 專案的根目錄。
    執行以下指令以遞迴地移除所有擴展屬性:
    Bash
    find . -type f -print0 | xargs -0 xattr -cr
    指令說明:
    find . -type f -print0: 從目前目錄 (.) 開始尋找所有常規檔案 (-type f),並以 null 字元 (-print0) 分隔列印它們的名稱。這樣可以正確處理包含空格或特殊字元的檔案名稱。
    |: 將 find 指令的輸出管道傳輸到下一個指令。
    xargs -0: 從輸入中讀取以 null 字元分隔的檔案名稱。
    -cr: 移除所有 (-c) 資源分叉和其他擴展屬性 (-r 用於遞迴,但在這種情況下,find 已經處理了遞迴)。
    或者,如果您知道特定的檔案,您可以針對它們:
    Bash
    xattr -cr path/to/your/file.png

重要注意事項:
在您的 Mac Build Host 上執行 xattr 指令: 這個指令需要在執行程式碼簽署過程的電腦上執行。
使用 xattr -cr . 時要小心: 雖然有效,但請確保您在正確的專案目錄中執行它,因為它會移除所有檔案的所有擴展屬性。對於大多數專案資產來說,這通常是安全的,但如果您有保留特定擴展屬性的特殊原因,請注意。
檢查版本控制: 如果問題仍然存在,您的版本控制系統可能會重新引入這些屬性。您可能需要配置您的 VCS 以忽略或剝離這些屬性。
檢查您的建置過程: 如果問題持續發生,請檢查您的建置腳本或您使用的任何工具,看看它們是否可能正在添加這些擴