簡體   English   中英

我如何在 Xcode 中找到所有不是目標成員的文件

[英]How do I find all files in Xcode that are NOT a member of a target

我遇到的多個目標最常見的問題之一是忘記將文件添加到所有目標。 導入文件很容易,不用勾選所有框...

許多目標

在構建階段有一個“編譯源”視圖,它是為每個目標編譯的文件列表。 然而,沒有簡單的方法來比較目標以查看一個文件中有哪些文件而另一個文件中沒有。

有沒有辦法找到不屬於特定目標的文件? 也許是劇本?

假設您的 MyProject.xcodeproj 在您的工作目錄中,並且您的所有源代碼都在您的工作目錄中或以下,您可以使用這樣的 hack* 來查找不屬於任何目標的 .m 文件:

find . -name "*.m" -exec basename '{}' \; | xargs -I '{}' sh -c 'grep "{} in Sources" MyProject.xcodeproj/project.pbxproj > /dev/null; echo "$?\c"; echo " {}"' | grep "^1"

從項目中刪除文件后,您可以使用以下類似腳本從 git 存儲庫中刪除它們——以及其他不再從項目中引用的 objc 源文件:

find . -name "*.[hm]" -exec basename '{}' \; | xargs -I '{}' sh -c 'grep {} MyProject.xcodeproj/project.pbxproj > /dev/null; echo "$?\c"; echo " {}"' | grep "^1" | cut -c3- | xargs -I '%' find . -name '%' -exec git rm '{}' \;

* hack 在某種意義上取決於 Xcode 文件格式的實現細節。

我不知道編寫腳本的方法,但是對於一個文件,您可以查看所有目標的列表,並選中相關目標,並且可以選中或取消選中該列表中的目標。

打開“實用程序”窗格並選擇“文件檢查器”。 然后選擇一個文件,相關的目標將出現在文件檢查器的目標成員資格區域中。

您甚至可以選擇多個文件,並且與某些但不是所有選定文件相關聯的目標將標記為“-”。 如果您選中一個目標,則所有選定的文件都將添加到該目標。

我構建了一個工具,可以讓你提取目標中的文件

https://github.com/ConfusedVorlon/ProjectFileTool

您可以將此與在項目目錄中搜索 .m 文件進行比較。

在 Xcode 8 中,列出 Target -> Build Phases -> Compile Sources 中的文件給出了每個目標的文件列表,但沒有簡單的方法可以找到丟失的文件。 選擇所有文件並復制它們允許將物理文件的副本粘貼到臨時目錄中。 在對兩個目標執行此操作后,將其放入單獨的文件夾中,然后可以刪除重復項,直到每個文件夾中只剩下另一個目標中丟失的文件。

我剛剛遇到了一個“此類不符合密鑰的鍵值編碼”的崩潰,這是由於目標中沒有包含一個文件而導致的,所以我不得不找到丟失的文件。 這不是一個有效或優雅的解決方案,但它完成了工作。

如果您不知道將哪些文件添加到目標中,可以轉到構建階段->編譯源(或您有差異的任何部分)。 然后選擇所有內容並點擊復制。 將其粘貼到差異程序中,選擇另一個目標並重復。

我不知道(完全)快速簡便的方法,但如果您正在尋找腳本,我有一個可以在此處執行此操作的庫: https ://github.com/jasperblues/XcodeEditor

Xcode 組裝了一些 env 變量,其中之一具有您要查找的目錄:

LINK_FILE_LIST_normal_x86_64 ,對於 x86_64 目標,它指向LinkFileList ,但是您可以從 basedir 獲得您可能想要的帶有 FileLists 的實際目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM