Xcode5製作Framework

Mac OS X 擴展了 Framework 的功能,讓我們能夠利用它來共享代碼和資源。通過 Framework 我們可以共享所有形式的資源,如動態共享庫,nib 文件,圖像字符資源以及文檔等。系統會在需要的時候將Framework 載入內存中,多個應用程序可以同時使用同一個 Framework,而內存中的拷貝只有一份。一個 Framework 同時也是一個 Bundle,我們可以在 Finder 裏瀏覽其內容,也可以在代碼中通過 NSBundle 訪問它。利用 Framework 我們可以實現動態或靜態庫的功能。


1.創建一個名爲PersonFramework 模板選擇“Cocoa Touch Static Library”

2.填寫項目名稱

3.清理工程無用文件( Target 、  PersionFramework、 PersionFrameworkTests

4.刪除舊的Target的編譯設置:

5.我們把Target刪除後 需要添加一個新的Target

6.修改新的Target編譯配置

a. Architectures 改爲 Standard architectures (armv7, armv7s)根據需要修改

b.在 Deployment 下,將 “Mac OS X Deployment Target”改爲”Compiler Default”,將 “Targeted Device Family”改爲需要的,此處改成了”iPhone/iPad”,同時可以根據需要修改 “iOS Deployment Target”,此處改爲了 “iOS 7.1”(更具需求來,你需要支持到最低系統版本是多少就選多少):

c.在 Linking 中,將 “Dead Code Stripping” 改爲 “NO”,將 “Link with Standard Libraries” 改爲 “NO”,將 “Mac-O Type” 改爲 “Relocatable Object File”:

d. Packaging 中,將 “Wrapper Extention” 改爲“framework”:

e.修改 Info,將 “Bundle OS Type Code” 改爲 “FMWK”(Framework )

f.修改預編譯頭文件,註釋其中代碼

到此爲止,基本的配置就算完成了,可以看到現在的 Products中的文件爲 DemoFrame.Framework,這個就是其它項目需要使用的Framwwork,但在這之前首先編寫一些 DemoLibrary.framework 中的內容,然後把接口提供給其它工程。

7.給調用該Framework的項目提供API

首先建一個名叫FrameDemo的Class

不要忘記選Target

導出頭文件

20

開始添加

21

選中.h文件

22

添加後效果

23

 

到這裏,大功告成,但這個地方有一個細節要注意,當前選擇Build生成的Framework要選擇iOS Device,不要選擇你當前鏈接的真機,否則會出現在打包的Framework在別的機器上使用時出錯。

24

另外,當前的Framework適合真機,如果要做模擬器的Framework,要修改成模擬器版本

25

好了,現在可以Build  FrameworkHome 工程了

26

我們要的FrameWork出現了

如果要模擬器的 講運行環境設置爲模擬器 在編譯就好了

其中Debug-iphoneos中的framework就是真機版本的,下邊的文件夾就是模擬器版本的。

 

測試Framework

新建一個iOS項目

導入Framework

編寫代碼:

QQ20140510-1

有沒有看到效果?

好了 製作Framework的教程完成了。

補充

1.讀取文件

Framework中的代碼就要這樣讀取文件了,當然還有其他的初始化路徑方法,有需要的可以以後補充。

示例代碼如下:

NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@”Resource” withExtension:@”bundle”]];

UIImage *img = [UIImage imageWithContentsOfFile:[bundle pathForResource:@"testImg" ofType:@"png"]];

[viewCtr.view addSubview:[[UIImageView alloc] initWithImage:img]];

2.建立一個真機和模擬器通用的Framework

首先用Finder找到Framework所在的位置

然後找到Framework中的文件,例如這裏的 Kalagame-library,並且紀錄其路徑 os_frame_path

同樣方法打開另一個文件夾,紀錄其中庫的路徑,simulator_frame_path

然後打開控制檯,輸入 lipo -create os_frame_path simulator_frame_path -output newframe

這樣就完成了模擬器和真機版本framework的合併,用finder找到這個newframe,然後把newframe改名字,並放回到framework文件夾中,替換原來的文件就可以了。

3.錯誤1

在製作framework或者lib的時候,如果使用了category ,則使用該FMWK的程序運行時會crash,此時需要在該工程中 other linker flags 添加兩個參數  -ObjC -all_load

4.警告

編譯出Framework是,需要把 GenerateDebugSymbols =NO,project與target都要設置下,否則會出現很多 warning:

類似

warning: (armv6) /Users/myuser/Library/Developer/Xcode/DerivedData/ ….build/Objects-normal/armv6/ImageRequest.o unable to open object file

 轉自Anselz's Blog


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