SDK中.a包過大,單獨作為一個項目,功能項目引入SDK項目文檔 及Search Paths相關參數說明
SDK包過大,單獨作為一個項目
項目中使用第三方的SDK包(例如所有的.a文件1G多),導致項目整體過大,這個時候就可以把第三方的.a文件單獨作為一個項目。
每次自動化打包都要從git拉去項目,不用每次都拉去第三方的項目。
首先在TEST文件夾中創建一個Demo,在demo 中使用到了幾個xxx.a文件,如下圖所示:
在Demo同級的文件夾中創建文件夾Demo-sdk文件夾,裏面放入demo 中使用到了幾個xxx.a文件,如下圖所示:
第一種方法:
打開Demo 在General中Linked Frameworks and Libraries中添加.a文件,點擊+號,選擇add other選中Demo-sdk文件夾中的.a文件,如下圖所示
這時候Linked Frameworks and Libraries中會成功添加.a文件,在查看Build Settings中Search Path - Library Search Paths中會指向.a所在文件夾,如下圖所示:
這個時候.a文件已經可以正常引用。
第二種方法:
打開項目,找到Build Settings中Search Path - Library Search Paths,在Library Search Paths後面雙擊,再打開Demo及Demo-sdk所在的文件夾,把Demo-sdk文件夾直接拖拽到Library Search Paths添加路徑界面,如下圖所示:
拖拽成功後,會出現指向路徑,如下圖:
這個時候.a文件已經可以正常引用。
Search Paths相關參數說明
-
- 導入庫的時候自動生成的的路徑:$(PROJECT_DIR)/xxx/xxx/xxx,手動拖拽的路徑"$(SRCROOT)/../xxx/xxx/xxx", 手動拖得有雙引號,雙引號的作用是如果在路徑中有空格,可以識別該路徑。沒有雙引號但是路徑中有空格,我們發現它會自動變成兩個路徑。
- 路徑中有空格必須要加雙引號
- 多個路徑可以用空格隔開,不用雙引號包住
- $(SRCROOT)/ $(PROJECT_DIR)基本沒啥區別,都是指向*.xcodeproj所在的路徑
- 通過../來調到上一層路徑,返回上上層文件夾用../../
- $(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
- recursive:遍歷該目錄,non-recursive:默認路徑設置;不遍歷該目錄。如果路徑的屬性為recursive,那麽編譯的時候在找庫的路徑的時候,會遍歷該目錄下的所有子目錄的庫文件。PS:在搭建項目的時候,可以創建一個專門放庫文件的文件夾並且設置其屬性為recursive。$(PROJECT_DIR)/**相當於遍歷項目文件同級下的所有路徑(不推薦使用,項目大的話,影響編譯的速度)。
- Header Search Paths 、User Header Search Paths的參數設置與其相同
- 導入庫的時候自動生成的的路徑:$(PROJECT_DIR)/xxx/xxx/xxx,手動拖拽的路徑"$(SRCROOT)/../xxx/xxx/xxx", 手動拖得有雙引號,雙引號的作用是如果在路徑中有空格,可以識別該路徑。沒有雙引號但是路徑中有空格,我們發現它會自動變成兩個路徑。
參考
Search Paths相關參數說明 --->https://www.jianshu.com/p/9f9c1fd2e8b5
SDK中.a包過大,單獨作為一個項目,功能項目引入SDK項目文檔 及Search Paths相關參數說明