Xcode之Build Phases小記

今天在項目中引入了:SBJson.xcodeproj他會編譯出一個SBJson.framework(for Mac)文件和一個sbjson-ios.a(for IOS)文件,編譯報錯:

Undefined symbols for architecture x86_64:

  "_OBJC_CLASS_$_SBJson4Parser", referenced from:

      objc-class-ref in DataFetcher.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

這表明文件找到了,即文件路徑配置(header search)沒問題,但是鏈接的時候出錯了,找不到導入的目標文件或找不到鏈接的靜態庫。

如果是直接用的源文件就在Compile Sources添加相應的.m

如果是用的工程或者.a文件就在Link Binary With Libraries裏面添加.a文件




1、Target Dependencies:編譯依賴關係 

將lib工程的target加入到裏面,告訴主工程當lib工程發生變化的時候自動編譯它。

2、 Copy Bundle Resources:複製綁定資源

在源文件編譯和連接庫之後,創建一個可執行文件,並放置在應用程序的綁定中,其實就是一個文件夾。其中資源文件將和可執行文件一起添加到綁定(bundle)中。這些資源文件是數據文件,應用程序在運行時需要使用,如XIB 文件和圖像文件、聲音文件等等。默認情況下,添加到項目中的文件,如不是源代碼文件,將添加到這個構建階段(Build Phase)。

一般情況下,在Compile Sources階段,將發現錯誤,但有時也會在Link Binary With Libraries 階段出現錯誤。在這些階段出現的錯誤,一般容易診斷和糾正。

3、Compile Sources:編譯源文件

這個階段編譯所有的源文件;默認情況下,項目中添加任何一個源文件,也將添加到編譯列表中。

4、Link Binary With Libraries:連接二進制文件和庫

在完成源文件的編譯之後,連接框架(或庫),這樣代碼就可以使用這些框架類了。


預處理(Preprocessing)

Compile Sources 構建階段分爲兩步:預處理(Preprocessing)和編譯(Compiling)。預處理階段的目標是爲每一個實現文件(.m)創建中間文件(intermediate file)。中間文件仍然類似實現文件的Objective-C代碼,但是中間文件會變得非常大。

在創建中間文件時,預處理器負責處理實現文件(.m)中所有的預處理指令(preprocessor directives)。預處理指令是所有以 # 開頭的語句,如 #import。#import 語句將替換爲實際引用文件的內容。

例如,一個實現文件 ***.m 引用了 ***.h 頭文件;爲 .m 創建的中間文件將包含 ***.h和 ***.m文件。還不止這些,並且 ***.h 頭文件引用了其他 2 個文件 UIKit.h和CoreLocation.h,還有可能這 2 個文件引用了其他的頭文件 .h,這些頭文件將全部包含在該實現文件***.m 創建的中間文件中(intermediate file)。


5、Copy File(複製一些文件),功能暫時未知,請大神們賜教了


發佈了33 篇原創文章 · 獲贊 30 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章