framework制作及使用

转载 2016年08月29日 17:26:21

1.新建framework项目

2.加一些我们实用的类进来

3.文件刚拉进来时如下图,只有APPBaseSDK.h是默认放在public中,我们还要把project中需要暴露给外面用的.h文件移到public中去

4.然后设置编译模式,打开Xcode菜单Product--->Scheme--->Edit Scheme,改为release模式,因为最终打包是要用release模式

5.设置最低支持版本

6.设置编译出的静态库包含的指令集

模拟器:iPhone4s~5 : i386 iPhone5s~6plus : x86_64
真机:iPhone3gs~4s : armv7 iPhone5~5c : armv7s iPhone5s~6plus : arm64
如果Build Active Architecture Only设置为YES,那么编译出来的静态库就只包含当前设备的指令集。
举个例子:如果我们选择iPhone 5模拟器编译,则编译出来的静态库只能用iPhone4s~5模拟器跑程序,用iPhone5s~6plus,则会报找不到x86_64的APPBaseSDK库。
设置为NO,则会把所有指令集的都打包合并。因此静态库有个缺点就是静态库包比源码大很多。

7.最后修改生成的Mach-O格式

8.编译生成静态库

编译时,需要用模拟器和真机各编译一次,这样Products目录下的APPBaseSDK.framework静态库才会变为黑色,右键show in Finder,可以进入Products目录下。

9.合并静态库文件

要让真机和模拟器都可用该静态库,需要将两种静态库合并。framework静态库合并的不是framework,而是framework下的一个二进制文件,即上图中标记的待合并文件。lipo -create 第一个framework下二进制文件的绝对路径 第二个framework下二进制文件的绝对路径 -output 最终生成合并的二进制文件路径(我把它放桌面上)。
打开终端使用的命令如下:

lipo -create /Users/zhanglinfeng/Library/Developer/Xcode/DerivedData/APPBaseSDK-dpqdspcdgwsrxgdihiaxpqpkvali/Build/Products/Release-iphoneos/APPBaseSDK.framework/APPBaseSDK /Users/zhanglinfeng/Library/Developer/Xcode/DerivedData/APPBaseSDK-dpqdspcdgwsrxgdihiaxpqpkvali/Build/Products/Release-iphonesimulator/APPBaseSDK.framework/APPBaseSDK -output /Users/zhanglinfeng/Desktop/APPBaseSDK

如果觉得敲文件路径好麻烦,可以将该文件拖入终端即键入了该文件的路径。如果报错建议将上图中Release-iphoneos和Release-iphonesimulator中的APPBaseSDK.framework删掉,重新用模拟器和真机分别编译一次再试。

真机的或者模拟器中随便选一个framework,将该framework中的二进制文件APPBaseSDK(也就是上图中待合并的文件)替换成刚刚合并的文件(刚生成在桌面上的)。好了,此framework就是我们需要的。

10.使用framework

将framework拖入新建的一个UseFrameworkTest工程,我这里拖到下图箭头所指的UseFrameworkTest文件夹目录下,如果你要拖到其他目录,就要改Library Search Paths,后面我会介绍Library Search Paths路径相关知识

将framework中比较常用的头文件import到APPBaseSDK.h中(如下图画圈的),这样在外面只需要#import <APPBaseSDK/APPBaseSDK.h>,就可以引用到下图中画圈的文件。如果不想将太多文件都import到APPBaseSDK.h中,在外面就像这样引用#import <APPBaseSDK/MBProgressHUD+Easy.h>(虽然能使用但会报警告,所以还是import到APPBaseSDK.h中吧)

使用代码,如下图可以正常调用将汉字转拼音方法并打印结果了

注意:如果要用到framework中的category方法,需要设置Other Linker Flags为-ObjC(注意大小写,有些资料里大小写搞错了坑死我了)。引入了-ObjC标志,它的作用就是将静态库中所有的和对象相关的文件都加载进来本来这样就可以解决问题了,不过在64位的Mac系统或者iOS系统下,链接器有一个 bug,会导致只包含有类别的静态库无法使用-ObjC标志来加载文件。变通方法是使用-all_load 或者-force_load标志,它们的作用都是加载静态库中所有文件,不过all_load作用于所有的库,而-force_load后面必须要指定具 体的文件。

ios 制作使用FrameWork

http://www.jianshu.com/p/ef3d5b7e7006  http://www.knowsky.com/884469.html  http://www.jianshu.com/...

Xcode8.0 制作.framework

最近公司要整理框架,想制作成静态库.framework,自己在也网上看了相关的资讯,在这里记录下自己操作步骤,自己没有做过多版本的测试,如果大家在制作和使用过程中遇到了其他的问题,希望可以留言一起讨论...

使用Mono Runtime Bundle制作安装包让C#桌面应用程序脱离net framework

之前有一个C#版本和ios版本(支持下载学生名单,点名等更多功能,该版本未上app store)的教辅助手帮助学校老师提交成绩到教务系统(浙大正方web版),一直打算用mfc写一个vc++版本的可以方...
  • educast
  • educast
  • 2012年08月07日 09:34
  • 2947

InstallShield使用介绍之三:InstallShield集成.net Framework的安装包制作

InstallShield集成.net Framework的安装包制作 .net Framework出现之前,一直用inno setup,setupfactory等工具打包,...

ios oc 使用系统库 制作framework NSXmlKit

为了开发方便或者是版权问题,我们在开发过程中,避免不了要采用framework来封装我 们实现的一些功能,这个也是开发过程中比较常见的一种策略,如果要生成的framework是独立的、即压根没有引用系...

Swift - Framework的制作与使用教程2(引用第三方库

在我们创建的自定义框架中,也是可以再引用其它第三方的框架库。本文以实现一个网络定时请求的 framework 为例,其内部使用到了 Alamofire。关于 Alamofire 的详细介绍,可以参考我...

Xcode8.3制作动态及静态framework 笔记

在实际的开发中除了经常需要集成第三方的动态库或者静态库之外,我们也需要自己制作动态库或者静态库。 制作动态库,新建工程选择Cocoa Touch Framework 如图:...

Framework的制作

Framework的作用就不用阐述了,我们直接进入Framework的制作。 我这里是用了一个静态库框架模板iOS Universal Framework Mk 8进行的制作。 这是一个Xco...

IOS制作framework动态SDK库

制作动态库工程主要要提取原工程的几部分文件: 1.图片等资源文件; 2.核心类文件,包括第三方插件类文件和自定义类文件; 3.预编译头文件; 4.导入和原工程一样的用到的系统库; 一....
  • cordova
  • cordova
  • 2016年07月20日 00:02
  • 2323

ios framework 通用库的制作

1、新建一个静态库工程: 2:取自己喜欢的名字: 3、删除向导所生成工程中的 Target: 3、删除TestFrameWork对应的工程文件夹: 5:删除bul...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:framework制作及使用
举报原因:
原因补充:

(最多只允许输入30个字)