前段時間,接手新公司項目,發(fā)現(xiàn)換了電腦乍构,svn下載代碼矗烛,cocoapods以后撮胧,代碼報錯。直接拷過來也報錯。于是就開始了漫長的調試過程。
首先是pod install以后出現(xiàn)下面問題:
LKDBHelper報錯
這是pods文件夾里面的東西待逞,出現(xiàn)這個問題就很奇怪了。然后就該考慮User Header Search Paths 與Header Search Paths的問題了网严。
首先要知道识樱,Header Search Paths 顧名思義就是用來存放 Project 中頭文件的搜索根源,沒有被add到項目里的頭文件震束,可以通過配置Header Search Paths 來引入頭文件怜庸,這樣的好處可以不讓project 包含的文件太多,便于管理垢村。
也就是說割疾,編碼時候通過 #import 引入頭文件的方式有兩種 <> 和 ""。<> 是只從 Header Search Paths 中搜索肝断, 而 "" 則能從 ?Header Search Paths 和 ?User Header Search Paths 中搜索。換言之 驰凛,假如你把 路徑加到 ?User Header Search Paths 中胸懈,那么 你用 #import的方式去引入對應的頭文件,就會報錯恰响。 如果加到 ?Header Search Paths, ?就沒有問題了趣钱。
具體一點的區(qū)別是,<> 是從系統(tǒng)目錄空間 (對應 Header Search Paths)中搜索文件胚宦, "" 是從用戶目錄空間(對應 User Header Search Paths)中搜索文件首有。如果你把路徑加到 User Header Search Paths 中,而 <> 無法從系統(tǒng)目錄空間中找到新加的路徑枢劝,從而報錯井联。
然后我解決了這個問題,但是問題來了報錯
Framework not found AFNetworking
這個問題還是真的比較難辦您旁,看了一下Framework Search Paths 和Library Search Paths都沒啥問題烙常。這個時候看了一個Build Active Architecture Only的屬性
然后我查了一下,答案都是一樣的鹤盒,不知道誰是原創(chuàng)蚕脏。就把內容整理出來吧侦副。
Architectures
這代表,在這個項目里你想要Xcode編譯的目標設備列表驼鞭。
Build Active Architecture Only
這個屬性設置為yes秦驯,是為了debug的時候編譯速度更快,它只編譯當前的architecture版本挣棕。
而設置為no時译隘,會編譯所有的版本。
這個是設備對應的architecture:
armv6:iPhone 2G/3G穴张,iPod 1G/2G
armv7:iPhone 3GS/4/4s细燎,iPod 3G/4G,iPad 1G/2G/3G
armv7s:iPhone5, iPod5
arm64:iPhone5s皂甘,ipad air,ipad mini2
編譯出的版本是向下兼容的玻驻,比如你設置此值為yes,用iphone4編譯出來的是armv7版本的偿枕,iphone5也可以運行璧瞬,但是armv6的設備就不能運行。
所以渐夸,一般debug的時候可以選擇設置為yes嗤锉,release的時候要改為no,以適應不同設備墓塌。
這里是重點:
你檢查一下你項目的pods里的設置 和你工程的target的設置是否一樣
我設置完了以后瘟忱,項目就好了。苫幢。访诱。如果你有什么問題的話,可以留言我們一起探討一下韩肝。触菜。
題外話:
1.$(SRCROOT) / $(PROJECT_DIR) 基本沒啥區(qū)別,都是指向*.xcodeproj所在的路徑
2.$(inherited): target 的Framework Search Paths添加$(inherited)參數會從PROJECT -> Build Settings -> Framework Search Paths里面的路徑會被其繼承哀峻,沒有的話不會繼承涡相。所以一個項目里面有多個target,使用到了同一個庫(Library或Framework)那么為了方便我們可以在target添加繼承參數剩蟀,并且PROJECT統(tǒng)一中添加庫的路徑催蝗。繼承的優(yōu)先級:
? Platform defaults
? Project file (描述舉例用這個優(yōu)先級,比較常用)
? xcconfig file for the Project file
? ?Target
? ? xcconfig file for the Target
3.recursive:遍歷該目錄育特,non-recursive:默認路徑設置生逸;不遍歷該目錄。如果路徑的屬性為recursive,那么編譯的時候在找?guī)斓穆窂降臅r候槽袄,會遍歷該目錄下的所有子目錄的庫文件烙无。PS:在搭建項目的時候,可以創(chuàng)建一個專門放庫文件的文件夾并且設置其屬性為recursive遍尺。$(PROJECT_DIR)/**相當于遍歷項目文件同級下的所有路徑(不推薦使用截酷,項目大的話,影響編譯的速度)乾戏。
4.解決警告“l(fā)d: warning: directory not found for option”
? ?從項目中刪除了某個目錄迂苛、文件以后,編譯出現(xiàn)警告信息:
? ?ld: warning: directory not found for option“XXXXXX”
? ?很奇怪鼓择,為什么已經從項目中刪除了文件和文件夾還是報這個警告呢三幻?
? ?去掉警告的辦法如下:
? 1)選擇工程, 編譯的 (targets)
? 2)選擇 Build Settings 菜單
? 3)查找 Library Search Paths 和 Framework Search Paths, 刪掉編譯報warning的路徑即OK
總結:
在開發(fā)中不遇到這些問題呐能,很難去注意念搬。第一篇簡書。爬坡階段摆出,希望能堅持下去……