這篇文章是在史上最完整的iOS DIY framework 詳細教程(一)的基礎上加以修改
1、新建一個靜態庫工程:
2:取自己喜歡的名字:
3、刪除嚮導所生成工程中的 Target:
3、刪除TestFrameWork對應的工程文件夾:
5:刪除bulid 關連項
選擇左下角Manager Scheme
選中 Scheme,點擊左下角的減號刪除:
刪除完成後,點擊 OK 返回。
5、增加一個新目標。點擊 “Add Target”
在File => New => Target中創建新target.
在彈出的對話框中選擇 Mac OS X 下的 Bundle:
其實這個Bundle選擇Ios中的也行,我這2種都試過,都是可以的,如果我說的不對請指出。
如上圖,給庫取一個名字,保持默認的 Framework(CoreFoundation),然後點擊 Finish。
6、修改新目標的工程設置。選中 TARGETS 中對應的目標, Build Settings 頁:
7.target 上右鍵get Info 在Build Settings下面設置下面的幾項內容
1: Build Settings => Architectrues => 修改3項:
(1)Architectures => Standard(armv6 armv7[armv7s]) (不這樣編譯會報錯).
(2)Base SDK => 選擇Latest IOS (IOS5.1).
(3)Build Active Architecture Only => 選擇 NO.
2: Build Settings => Deployment => 修改3項。
(1)OS X Deployment Target => 修改爲“Compiler Default”.
(2)Targeted Device Family => 修改爲“iPhone/iPad”.
(3)IOS Deployment Target => 修改爲 “IOS 6.0”.
3: Build Settings => Linking 修改 3項
(1)Dead Code Stripping => 修改爲“NO”。
(2)Link With Standard Libraries => 修改爲 "NO".
(3)Mach-O Type => 修改爲 "Relocatable Object File".(這個設置指定編譯器作爲一個可以重定位的文件捆綁,通過這樣做,可以把函數設置包裝在框架內)。
4:Build Settings => Packaging 修改1項
(1)Wrapper Extension => 默認的bundle 修改爲 framework (這裏將bundle修改爲framework, 在xcode,框架只是一個擴展的文件夾。框架裏面包含了一個或多個編譯的二進制源、資源和一些文件夾。文件夾通常被成爲“Headers”,包含了所有的公共頭文件)。
10、向工程中添加一個類:
10、在myTestClass。h添加一個方法testFounction:
11、在myTestClass。m中實現方法testFounction:
12.打開Build Phases選項卡,右下角點擊Add Build Phase–Add copy Headers,然後界面就會多出來一個Copy Headers的菜單,然後添加源文件。完成後如圖所示:(Compile Sources 添加.m文件)
點擊右下角的 “Add copy Headers”:
添加完成後,展開 “Copy Headers”:點擊加號:
選中需要暴露的頭文件,此處我們選擇 “myTestClassA.h”:
點擊 Add 按鈕完成添加:此時,我們看到導出的文件在 Project 下,這樣是不能暴露給別人使用的,將其移動到 Public 下:
12.然後Build & Run ,
裏成功很近了 ,哈哈!
13.下面隨便把我們在上面生成的framework 導入到其他的工程就可以使用了,哈哈!
找到剛纔我們FrameWork 的工程目錄的Bulid->Products->Debug-iphonesimuator->TestFrameWork.farmework
14.下在你想用的地方導入頭文件
#import
用法如下:[html] view plaincopy
- myTestClass* vc1=[[myTestClass alloc]init];
- [vc1 testFounction];
-
[vc1 release]; 15.Bulid&Run
16 補充說明
在Build的時候,你會發現有 Run Test Profile3個選項,一般情況下我們用的是Build for run,所以你只需要配置下Run這個選項就可以了。
這個Build Configuration 選擇Dubug 和Release 都可以Build成功,個人理解爲:這個包是在用在Debug模式下還是Release模式下,最常見的就是在Debug模式下我們打印些日誌,而在Release模式下我們需要把打印日誌的功能隱藏。
但是有些小問題注意下:
如果導出庫Build Configuration 爲Release,那麼需要把引用這個導出庫的項目的Build Configuration 爲Release。
如果導出庫Build Configuration 爲Debug,那麼需要把引用這個導出庫的項目的Build Configuration 爲Debug。
也就是說你自己項目儘量和這個庫的Build Configuration 一致。(如果說的不對,請指出錯誤)
17 製作通用的framework
1、選擇模擬器Build下
2、選擇IOS Device Build下,這樣你就會得到2個framework
3、和製作通用靜態庫xx.a文件一樣,用命令 lipo -create file1 file2 -output file3
特別注意,我們製作xx.a通用庫的時候,是用lipo -create ../xx.a ../xxx.a -output xxxx.a
但是製作framework的時候用得是AA.framework裏的AA,比如MyFrameWork.framework裏的MyFrameWork文件,而不是MyFrameWork.framework這個文件
比如 lipo -create ../Release-iphoneos/MyFrameWork.framework/MyFrameWork ../Release-iphonesimulator/MyFrameWork.framework/MyFrameWork
-output ../NewFrameWork
這個你就會得到一個NewFrameWork文件,然後把這個NewFrameWork文件重命名MyFrameWork,用這個文件把
Release-iphoneos(iphonesimulator)/MyFrameWork.framework裏的MyFrameWork 替換掉,再然後你就可以使用這個庫了。
(其實你可以導出的時候,導出爲MyFrameWork,然後用這個導出的文件替換,這裏只是舉個例子,.framework製作比.a多了個替換的步驟)