ios framework通用库的制作
这篇文章是在史上最完整的iOS DIY framework 详细教程(一)的基础上加以修改
1、新建一个静态库工程:

2:取自己喜欢的名字:

3、删除向导所生成工程中的 Target:

3、删除TestFrameWork对应的工程文件夹:

5:删除bulid 关连项

选择左下角Manager Scheme

选中 Scheme,点击左下角的减号删除:

删除完成后,点击 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种都试过,都是可以的,如果我说的不对请指出。


如上图,给库取一个名字,保持默认的 Framework(CoreFoundation),然后点击 Finish。
6、修改新目标的工程设置。选中 TARGETS 中对应的目标, Build Settings 页:

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、修改预编译头:就是注释掉全部

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多了个替换的步骤)
ios framework通用库的制作的更多相关文章
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- ios .framework动态库重签名
真机上运行.framework时,如果报 dyld'dyld_fatal_error:dyld: Library not loaded: @rpath/XX.framework/XX Referenc ...
- iOS framework静态库中使用xib和图片资源详解
一.新建bundle 前2篇文章介绍了iOS 最新framework和.a静态库制作及使用全解 iOS 工程套子工程,主工程和framework工程或.a library静态库工程联调 我现在是在 ...
- iOS .a静态库的制作及使用
一.制作.a静态库 1.创建静态库工程,工程命名为BaseSDK,生成的.a文件名变成libBaseSDK.
- ios中静态库的创建和使用、制作通用静态库(Cocoa Touch Static Library)
创建静态库可能出于以下几个理由: 1.你想将工具类代码或者第三方插件快捷的分享给其他人而无需拷贝大量文件.2.你想让一些通用代码处于自己的掌控之下,以便于修复和升级.3.你想将库共享给其他人,但不想让 ...
- iOS开发之——制作framework静态库教程
环境: 硬件:macbook air 系统:OSX EI Capitan 版本:10.11.3 xcode : Version 7.2.1 (7C1002) 最近在做ios的静态库(据说framewo ...
- IOS .a静态库的和.framework制作
什么是库? 库是程序代码的集合,是共享程序代码的一种方式 根据源代码的公开情况,库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking 闭源库 不公 ...
- WWDC2014之iOS使用动态库 framework【转】
from:http://www.cocoachina.com/industry/20140613/8810.html JUN 12TH, 2014 苹果的开放态度 WWDC2014上发布的Xcode6 ...
- iOS 库文件制作
一.静态库和动态库的介绍 一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链 ...
随机推荐
- ASP.NET MVC 中将FormCollection与实体间转换方法 (转)
将Action动作中传递的FormCollection转变成对应的实体,可以使用Controller的TryUpdateModel()方法. [HttpPost] public ActionResul ...
- pow(x,n) leecode
https://oj.leetcode.com/problems/powx-n/ 提交地址 快速幂的使用,可以研究一下 public class Solution { public double po ...
- Bzoj 3450: Tyvj1952 Easy 期望/概率,动态规划
3450: Tyvj1952 Easy Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 431 Solved: 325[Submit][Status] ...
- C++11的资源管理:泛化的RAII
RAII被认为是c++资源管理的最佳范式,但是c++98中用RAII必须为要管理的资源写一个类,这样一来RAII的使用就有些繁琐了.C++11有了lambda和function后,我们就可以编写泛化的 ...
- IOS开发之内存管理--dealloc该写些什么
在非ARC开发环境中,dealloc是类释放前,清理内存的最后机会.到底那些变量和属性该释放呢,一些特殊的类(nstimer,observer)该怎么释放.需要注意的是不释放会引起内存泄露,过度释放也 ...
- Log接口的重新封装
闲来没事,看见当前的项目的日志形式有点冗余,每个类都需要声明确实有点繁琐, 因此重新将logback重新封装一下,供整个工程共享使用,版本是1.0.9. 代码如下: import java.lang. ...
- Flume 入门--几种不同的Sources
1.flume概念 flume是分布式的,可靠的,高可用的,用于对不同来源的大量的日志数据进行有效收集.聚集和移动,并以集中式的数据存储的系统. flume目前是apache的一个顶级项目. flum ...
- hdu4488 Faulhaber’s Triangle(模拟题)
Faulhaber’s Triangle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- TR069协议向导——一个帮助你了解TR069协议的简明教程(一)
您也能够到下面地址下载: http://download.csdn.net/source/993034 1.为什么须要TR069 随着VoIP.IPTV等越来越多IP终端设备的普及(尤其在家庭中 ...
- Android自定义属性时TypedArray的使用方法
有时候android传统的页面布局不足以满足我们的需求,常常需要自己定义view,通常继承View,然后重写构造方法以及onDraw等函数,再 具体实现自己定义的复杂view.我们知道在给控件赋属性时 ...