通過 Framework 可以在物理上實現 iOS 程式的模組化。
好處:
1、如果模組間介面定義的比較完善,模組化的程式具有很好的可擴充性與內聚性;
2、物理上的模組化便於開發過程的管理與測試,尤其是在程式規模相對大。
3、如果可以使用膠水語言作為粘合劑,程式可以用很少的代價適應未來的變化。
不足:
1、由於是靜態庫,應該不會有什麼運行時的損失,但是沒實驗過,不確定。
2、資源的載入這部分,不知道會不會佔用更多記憶體,沒實驗,不確定。
1、建立一個靜態庫工程:
2、刪除嚮導所產生工程中的 Target:
刪除目標前工程狀態
刪除目標後工程狀態
3、刪除舊目標對應的工程檔案夾:
刪除前
刪除後
4、刪除舊目標對應的編譯設定(Product菜單| Edit Scheme命令):
點擊左下角的 Manage Schemes 按鈕:
選中舊的 Scheme,點擊左下角的減號刪除:
刪除完成後,點擊 OK 返回。
5、增加一個新目標。點擊 “Add Target”:
在彈出的對話方塊中選擇 Mac OS X 下的 Bundle:
如,給庫取一個名字,保持預設的 Framework(CoreFoundation),然後點擊 Finish。
6、修改新目標的工程設定。選中 TARGETS 中對應的目標, Build Settings 頁:
在 Architectures 下,將”Base SDK”改為”Latest iOS”,然後將 “Architectures” 改為 “Standard”:
在 Deployment 下,將 “Mac OS X Deployment Target”改為”Compiler Default”,將 “Targeted Device Family”改為需要的,此處改成了”iPhone/iPad”,同時可以根據需要修改 “iOS Deployment Target”,此處改為了 “iOS 3.0”:
在 Linking 中,將 “Dead Code Stripping” 改為 “NO”,將 “Link with Standard Libraries” 改為 “NO”,將 “Mac-O Type” 改為 “Relocatable Object File”:
在 Packaging 中,將 “Wrapper Extention” 改為“framework”:
7、修改目標的 Info。點擊 Info:
將 “Bundle OS Type Code” 改為 “FMWK”(Framework 的意思):
8、修改先行編譯頭:
修改前
修改後
9、向工程中添加一個類(ViewController 與 Xib):
結果如下:
10、匯出相關檔案。選中 Target,點擊 Build Phases:
點擊右下角的 “Add Build Phase”:
在彈出的菜單中選擇 “Add Copy Headers”,添加完成後,展開 “Copy Headers”:
點擊加號:
選中需要暴露的標頭檔,此處我們選擇 “ClassA.h”:
點擊 Add 按鈕完成添加:
此時,我們看到匯出的檔案在 Project 下,這樣是不能暴露給別人使用的,將其拖動到 Public 下:
關於 Framework 的詳細說明參考蘋果的線上文檔:http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Frameworks.html#//apple_ref/doc/uid/10000183-SW1
11、編譯項目,查看結果:
12、這是手工製作 Framework 的方法,網上有人製作了工程模版,可以直接產生 Framework 工程:
https://github.com/kstenerud/iOS-Universal-Framework