iOS創建子工程

碼頭工人 8年前發布 | 16K 次閱讀 IOS iOS開發 移動開發

實際開發中,我們可能會同時開發好幾個端,比如樓主目前開發的家教平臺,需要老師端,家長端,助教端三個端。有很多工具方法,或者封裝的自定義控件都是可以復用的。我們就可以把公用的代碼抽取出去,新建一個工程,統一管理。同步維護一份代碼,不需要在各個端各自維護。

創建子工程很簡單:

1 假設你已經有了自己的工程demo.xcodeproj,首先我們需要創建一個子工程,(File->new->project),我們要選擇靜態庫。如圖

iOS創建子工程

點擊下一步,給子工程起名字:subProject

iOS創建子工程

點擊下一步:選擇Add to自己的工程

iOS創建子工程

到此,第一步就結束了,我們創建了一個子工程,而且也添加到了自己的工程里面,但是,這樣在自己工程中還是無法引用子工程的類。我們還需要設置一下自己工程的環境變量。

2 設置環境變量:

自己的工程demo下,選擇Bulid Settings ,找到User Header Search Paths。設置自己工程的絕對路徑,然后設置遞歸查找文件夾。

3.添加target的依賴關系

我們要保證編譯demo的時候先編譯subProject。

選中demo Target,然后選中其Build phases選項,添加subProject target

iOS創建子工程

還有生成的.a文件也得添加進來。選擇Link Binary With Libraries

iOS創建子工程

這時候一些基本的方法已經可以用起來了。

4、如果子工程中有圖片或者依賴文件怎么辦?

要把相關的依賴圖片copy出去:選中subProject target,進入Build phases選項,找到最下面的copy file欄,添加相關的文件:

iOS創建子工程

 

5 如果存在category的時候,在demo工程Other Linker Flags里面添加編譯的命令:

注意:在ios5以及以上版本中,引入別的工程(如上)或者靜態庫,
并且StoryBoards中使用了【引入的外部類(外部工程或者靜態庫里面的類)】,
那么Other Linker Flags 里面必須加上-ObjC,否則,會console會報錯
error:Unknown class <外部的類名> in Interface Builder file.

引用: http://developer.apple.com/library/mac/#qa/qa1490/_index.html
 
-ObjC,This flag causes the linker to load every object file in the library that defines an Objective-C class or category
意思是,使用這個標識,會把靜態庫中,定義了Objective-C class的文件或者定義了category類別的文件,全部加載進來。
因為你的靜態庫里面擴展了一個已存在的類的category,那么這個category是不會加載進來的。
在程序運行中,調用此類別的方法,就會報錯“selector not recognized”。
 
Important: For 64-bit and iPhone OS applications, there is a linker bug that prevents -ObjC from loading objects files from static libraries that contain only categories and no classes. The workaround is to use the -all_load or -force_load flags. 
上面的意思是說
對于64位操作系統或者ios系統,-Objc存在一個bug,就是只包含categories ,而沒有任何class的靜態庫,是不會被加載進來。
拮據額這個bug:使用標識符:-all_load 或者 -force_load
 
子工程導入完成。整個框架瞬間高大上起來了。參考文章: https://www.ganlvji.com/xcode_subproject_project_dependency/

 

來自:http://www.cnblogs.com/6duxz/p/5105947.html

 本文由用戶 碼頭工人 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!