Framework not found AFNetworking
前段時間,接手新公司專案,發現換了電腦,svn下載程式碼,cocoapods以後,程式碼報錯。直接拷過來也報錯。於是就開始了漫長的除錯過程。
首先是pod install以後出現下面問題:
LKDBHelper報錯
這是pods資料夾裡面的東西,出現這個問題就很奇怪了。然後就該考慮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, 就沒有問題了。
具體一點的區別是,<> 是從系統目錄空間 (對應 Header Search Paths)中搜尋檔案, "" 是從使用者目錄空間(對應 User Header Search Paths)中搜尋檔案。如果你把路徑加到 User Header Search Paths 中,而 <> 無法從系統目錄空間中找到新加的路徑,從而報錯。
然後我解決了這個問題,但是問題來了報錯
Framework not found AFNetworking
這個問題還是真的比較難辦,看了一下Framework Search Paths 和Library Search Paths都沒啥問題。這個時候看了一個Build Active Architecture Only的屬性
然後我查了一下,答案都是一樣的,不知道誰是原創。就把內容整理出來吧。
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) 基本沒啥區別,都是指向*.xcodeproj所在的路徑
2.$(inherited): target 的Framework Search Paths新增$(inherited)引數會從PROJECT -> Build Settings -> Framework Search Paths裡面的路徑會被其繼承,沒有的話不會繼承。所以一個專案裡面有多個target,使用到了同一個庫(Library或Framework)那麼為了方便我們可以在target新增繼承引數,並且PROJECT統一中新增庫的路徑。繼承的優先順序:
Platform defaults
Project file (描述舉例用這個優先順序,比較常用)
xcconfig file for the Project file
Target
xcconfig file for the Target
3.recursive:遍歷該目錄,non-recursive:預設路徑設定;不遍歷該目錄。如果路徑的屬性為recursive,那麼編譯的時候在找庫的路徑的時候,會遍歷該目錄下的所有子目錄的庫檔案。PS:在搭建專案的時候,可以建立一個專門放庫檔案的資料夾並且設定其屬性為recursive。$(PROJECT_DIR)/**相當於遍歷專案檔案同級下的所有路徑(不推薦使用,專案大的話,影響編譯的速度)。
4.解決警告“ld: warning: directory not found for option”
從專案中刪除了某個目錄、檔案以後,編譯出現警告資訊:
ld: warning: directory not found for option“XXXXXX”
很奇怪,為什麼已經從專案中刪除了檔案和資料夾還是報這個警告呢?
去掉警告的辦法如下:
1)選擇工程, 編譯的 (targets)
2)選擇 Build Settings 選單
3)查詢 Library Search Paths 和 Framework Search Paths, 刪掉編譯報warning的路徑即OK
總結:
在開發中不遇到這些問題,很難去注意。第一篇簡書。爬坡階段,希望能堅持下去……
相關文章
- 原始碼閱讀:AFNetworking(十六)——UIWebView+AFNetworking原始碼UIWebView
- 原始碼閱讀:AFNetworking(十四)——UIProgressView+AFNetworking原始碼UIView
- 原始碼閱讀:AFNetworking(十三)——UIImageView+AFNetworking原始碼UIView
- 原始碼閱讀:AFNetworking(十一)——UIActivityIndicatorView+AFNetworking原始碼UIIndicatorView
- iOS12-Xcode12-Buildtime錯誤:framework not found Pods 或 No such module 'XXX'iOSXCodeUIFramework
- 原始碼閱讀:AFNetworking(十二)——UIButton+AFNetworking原始碼UI
- 原始碼閱讀:AFNetworking(十五)——UIRefreshControl+AFNetworking原始碼UI
- AFNetworking原始碼分析原始碼
- AFNetworking(二)AFNetworking對form-data請求體的處理ORM
- AFNetWorking原始碼之AFURLSessionManager原始碼Session
- AFNetworking 原始碼分析(一)原始碼
- AFNetWorking原始碼之AFURLRequestSerialization原始碼
- AFNetworking 3.0遷移指南
- AFNetworking 原始碼閱讀原始碼
- AFNetworking框架-詳細解析框架
- AFNetworking原始碼解析系列(1)原始碼
- AFNetworking原始碼解析系列(2)原始碼
- AFNetworking之AFURLSessionManager深入學習Session
- AFNetworking之AFSecurityPolicy深入學習
- AFNetworking之AFURLRequestSerialization深入學習
- AFNetworking之AFURLResponseSerialization深入學習
- iOS原始碼解析—AFNetworking(RequestSerializer)iOS原始碼
- AFNetWorking原始碼詳解(二)原始碼
- 原始碼閱讀:AFNetworking(二)——AFURLRequestSerialization原始碼
- 詳解AFNetworking的HTTPS模組HTTP
- iOS 第三方AFNetworkingiOS
- 原始碼閱讀:AFNetworking(三)——AFURLResponseSerialization原始碼
- 原始碼閱讀:AFNetworking(四)——AFSecurityPolicy原始碼
- AFNetworking之AFNetworkReachabilityManager深入學習
- 原始碼閱讀:AFNetworking(六)——AFURLSessionManager原始碼Session
- AFNetworking3.x Error Code:3840Error
- AFNetworking3.0 HTTPS請求HTTP
- iOS AFNetWorking原始碼詳解(一)iOS原始碼
- AFNetworking 支援cookies的解決方案Cookie
- Entity Framework Tutorial Basics(20):Persistence in Entity FrameworkFramework
- Entity Framework Tutorial Basics(2):What is Entity Framework?Framework
- 改造動態framework為靜態frameworkFramework
- pip: command not found