ios framework通用库的制作
2015-08-05 11:45
603 查看
这篇文章是在史上最完整的iOS DIY framework 详细教程(一)的基础上加以修改
1、新建一个静态库工程:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094206119.png)
2:取自己喜欢的名字:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094206120.png)
3、删除向导所生成工程中的 Target:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094207121.png)
3、删除TestFrameWork对应的工程文件夹:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094207122.png)
5:删除bulid 关连项
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094207123.png)
选择左下角Manager Scheme
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094208124.png)
选中 Scheme,点击左下角的减号删除:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094208125.png)
删除完成后,点击 OK 返回。
5、增加一个新目标。点击 “Add Target”
<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CjxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094208126.png" alt="\">
在弹出的对话框中选择 Mac OS X 下的 Bundle:
其实这个Bundle选择Ios中的也行,我这2种都试过,都是可以的,如果我说的不对请指出。
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094209129.png)
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094209130.png)
如上图,给库取一个名字,保持默认的 Framework(CoreFoundation),然后点击 Finish。
6、修改新目标的工程设置。选中 TARGETS 中对应的目标, Build Settings 页:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094209131.png)
7.target 上右键get Info 在Build Settings下面设置下面的几项内容
a.Base SDK选择Latest IOS(IOS 5.1)
b.Build Active Architecture Only选择NO
c.Dead Code Stripping设置为NO
d.Mach-O Type 为Relocatable Object File (这个设置指定编译器作一个可以重定位的文件捆绑,通过这样做,可以把函数设置包装在框架内)
e.Link With Standard Libraries为NO
f.Wrapper Extension修改为:默认的bundle改成framework(这里将bundle修改为framework,在xcode,框架只是一个扩展的文件夹。框架里面包含了一个或多个编译的二进制源、资源和一些文件夹。文件夹通常背称为"Headers",包含了所有的公共头文件)
g.在Architectures选项选择Standard(armv6 armv7[armv7s]) (不这样编译会报错)
h.工程Info中将Bundle OS Type code的值BNDL改为:FMWK
在 Deployment 下,将 “Mac OS X Deployment Target”改为”Compiler Default”,
将 “Targeted Device Family”改为需要的,此处改成了”iPhone/iPad”,
同时可以根据需要修改 “iOS Deployment Target”,此处改为了 “iOS 3.0”:
8、修改预编译头:就是注释掉全部
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094210133.png)
10、向工程中添加一个类:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094210134.png)
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094210135.png)
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094211136.png)
[b]10、在myTestClass。h添加一个方法testFounction:
[/b]
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094211137.png)
[b]11、在myTestClass。m中实现方法testFounction:
[/b]
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094211140.png)
12.打开Build Phases选项卡,右下角点击Add Build Phase–Add copy Headers,然后界面就会多出来一个Copy Headers的菜单,然后添加源文件。完成后如图所示:(Compile Sources 添加.m文件)
点击右下角的 “Add copy Headers”:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094212141.png)
添加完成后,展开 “Copy Headers”:点击加号:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094219150.png)
选中需要暴露的头文件,此处我们选择 “myTestClassA.h”:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094219151.png)
点击 Add 按钮完成添加:此时,我们看到导出的文件在 Project 下,这样是不能暴露给别人使用的,将其移动到 Public 下:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094219152.png)
12.然后Build & Run ,
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094220153.png)
里成功很近了 ,哈哈!
13.下面随便把我们在上面生成的framework 导入到其他的工程就可以使用了,哈哈!
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094220154.png)
找到刚才我们FrameWork 的工程目录的Bulid->Products->Debug-iphonesimuator->TestFrameWork.farmework
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094220155.png)
14.下在你想用的地方导入头文件
#import
用法如下:
[html] view plaincopy
myTestClass* vc1=[[myTestClass alloc]init];
[vc1 testFounction];
[vc1 release]; 15.Bulid&Run
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094221156.png)
16 补充说明
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094221157.jpg)
在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
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094221158.jpg)
特别注意,我们制作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多了个替换的步骤)
1、新建一个静态库工程:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094206119.png)
2:取自己喜欢的名字:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094206120.png)
3、删除向导所生成工程中的 Target:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094207121.png)
3、删除TestFrameWork对应的工程文件夹:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094207122.png)
5:删除bulid 关连项
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094207123.png)
选择左下角Manager Scheme
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094208124.png)
选中 Scheme,点击左下角的减号删除:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094208125.png)
删除完成后,点击 OK 返回。
5、增加一个新目标。点击 “Add Target”
<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CjxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094208126.png" alt="\">
在弹出的对话框中选择 Mac OS X 下的 Bundle:
其实这个Bundle选择Ios中的也行,我这2种都试过,都是可以的,如果我说的不对请指出。
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094209129.png)
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094209130.png)
如上图,给库取一个名字,保持默认的 Framework(CoreFoundation),然后点击 Finish。
6、修改新目标的工程设置。选中 TARGETS 中对应的目标, Build Settings 页:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094209131.png)
7.target 上右键get Info 在Build Settings下面设置下面的几项内容
a.Base SDK选择Latest IOS(IOS 5.1)
b.Build Active Architecture Only选择NO
c.Dead Code Stripping设置为NO
d.Mach-O Type 为Relocatable Object File (这个设置指定编译器作一个可以重定位的文件捆绑,通过这样做,可以把函数设置包装在框架内)
e.Link With Standard Libraries为NO
f.Wrapper Extension修改为:默认的bundle改成framework(这里将bundle修改为framework,在xcode,框架只是一个扩展的文件夹。框架里面包含了一个或多个编译的二进制源、资源和一些文件夹。文件夹通常背称为"Headers",包含了所有的公共头文件)
g.在Architectures选项选择Standard(armv6 armv7[armv7s]) (不这样编译会报错)
h.工程Info中将Bundle OS Type code的值BNDL改为:FMWK
在 Deployment 下,将 “Mac OS X Deployment Target”改为”Compiler Default”,
将 “Targeted Device Family”改为需要的,此处改成了”iPhone/iPad”,
同时可以根据需要修改 “iOS Deployment Target”,此处改为了 “iOS 3.0”:
8、修改预编译头:就是注释掉全部
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094210133.png)
10、向工程中添加一个类:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094210134.png)
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094210135.png)
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094211136.png)
[b]10、在myTestClass。h添加一个方法testFounction:
[/b]
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094211137.png)
[b]11、在myTestClass。m中实现方法testFounction:
[/b]
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094211140.png)
12.打开Build Phases选项卡,右下角点击Add Build Phase–Add copy Headers,然后界面就会多出来一个Copy Headers的菜单,然后添加源文件。完成后如图所示:(Compile Sources 添加.m文件)
点击右下角的 “Add copy Headers”:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094212141.png)
添加完成后,展开 “Copy Headers”:点击加号:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094219150.png)
选中需要暴露的头文件,此处我们选择 “myTestClassA.h”:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094219151.png)
点击 Add 按钮完成添加:此时,我们看到导出的文件在 Project 下,这样是不能暴露给别人使用的,将其移动到 Public 下:
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094219152.png)
12.然后Build & Run ,
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094220153.png)
里成功很近了 ,哈哈!
13.下面随便把我们在上面生成的framework 导入到其他的工程就可以使用了,哈哈!
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094220154.png)
找到刚才我们FrameWork 的工程目录的Bulid->Products->Debug-iphonesimuator->TestFrameWork.farmework
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094220155.png)
14.下在你想用的地方导入头文件
#import
用法如下:
[html] view plaincopy
myTestClass* vc1=[[myTestClass alloc]init];
[vc1 testFounction];
[vc1 release]; 15.Bulid&Run
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094221156.png)
16 补充说明
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094221157.jpg)
在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
![](http://www.2cto.com/uploadfile/Collfiles/20140303/20140303094221158.jpg)
特别注意,我们制作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多了个替换的步骤)
相关文章推荐
- 史上最完整的iOS DIY framework 详细教程(二)
- iOS 在一个TableView内使用不同的Cell
- iOS 获取应用当前定位授权状态
- ios8后点击通讯录跳转
- iOS 9之New System Fonts(San Francisco 字体)
- iOS 8显示应用角标
- iOS开发中的测试框架
- iOS 调用另一个程序
- iOS开发之获取沙盒路径
- iOS开发之沙盒机制(SandBox)
- IOS开发-内存管理
- iOS开发之NSString的几条实用技巧
- iOS学习笔记10- IOS MagicRecord 详解
- iOS开发之保存照片到自己创建的相簿
- iOS 定位时出现 kCLErrorDomain error 2错误
- iOS开发之layoutSubviews的作用和调用机制
- 自己动手构建表单验证功能【iOS】
- ios工程中ARC与非ARC的混合
- iOS 自定义控件 progressView(环形进度条)
- iOS 使用cocoapods遇见头文件找不到