Build Static Library in Xcode 4

Cocoa Touch Static Library

寫程式總是一直提醒自己要 DRY - Don't Repeat Yourself,上從 Class Name 到 Method Name 到寫程式的邏輯都要謹記在心。因為當重複撰寫一樣的邏輯,在維護上就會變成做重複事情,一來浪費自己的時間,二來如果自己疏忽會造成忘記要修改,三來也會造成一起開發夥伴的困擾。

伴隨著 Project 的開發,會發現有些程式是可以模組化,讓它獨立出來變成單一 Xcode Project,除了維持它核心功能外,還能產生 Static Library 讓需要用到它的 Project 可以引用。如此一來 Static LIbrary 也可以重複使用在更多更多的 Project 上。


在 Xcode 的 Project Template 可以輕鬆完成這樣的設定,
將整個 Project 包裝起來成為 *.a 檔案,如此搭配釋放出的 Header Files,Client 端只要看懂 Header Files 不用知道實做細節,也就可以使用。操作步驟:
  • 選擇 Cocoa Touch Static Library。
  • 在 Build Phases 加入 Copy Headers 步驟,將要 Release 的 Header Files 挑選出來,放置在 Public 區塊。 
  • 回到 Build Settings 找到 Packing > Public Headers Folder Path,這邊是告知在包裝時候會將 Headers Files 放置位置。 
  • 因為 Xcode project 建置好的位置路徑很深,如果每次路徑要走那麼遠取用檔案也很不方便,於是在 Build Phases 可以加入 Run Script,在裡面撰寫將檔案取出來放置在桌面上的 Scripts。


當以上設定完畢,程式碼撰寫完,跑 Build & Run 就可以將整個 Project 的程式包裝產生 Static Library 了。

引用方的 Xcode Project

到 Build Phases > Link Binary With Libraries 將這份 libXXX.a 加入進去。在 Build Settings 在 Library Search Paths 加入  "$(SRCROOT)/XXXSDK" 設定,讓編譯時候找得到 Library。

透過以上拆分,即可以將常用或是核心的功能獨立出來成為新的 Project,維護上和重複使用上更佳理想。而建立 Static Library 的 Project 就要思考如何在維護更新上將文件寫的更明確,讓引用方可以更瞭解現在手頭上的版本跟最新版的差異,才能進入持續開發、發佈、使用的開發週期。


TODO: 會發現這樣在發佈程式時候,隨著 Header Files 會越來越多,在引用方也要維護與攜帶這些 Headers 檔案,似乎應該還要找更好的包裝方式。

Comments