iOS 封装.framework 以及使用

.framework是什么?

这个问题相信做iOS的都知道答案。 在我们的日常开发中,经常会用到各种已经封装好的库,比如支付宝、微信SDK等等中的库,这些库可以给我们的开发带来很大的便利。有的时候,由于工作的需要,我们需要对自己的项目进行封装,生成库,方便别人的使用。在这里就边参考好点的博客,边总结一下我们经常看到的.framework。

那什么是“库”呢?

“库”是共享程序代码的一种方式!同行总结的这句话很简单也很好的说明了它的作用!

一般的分为“静态库”和“动态库”。

“静态库”和“动态库”有什么区别?

“静态库” 链接时候完整的拷贝至可执行文件中,被多次使用就会有多次拷贝。

“动态库” 链接时候不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存!

iOS里静态和动态库形式

静态库形式: .a和.framework

动态库形式: .dylib和.framework

.a与.framework有什么区别

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

.a + .h + sourceFile = .framework。

所以我们建议用.framework.

下面我们通过实际的例子自己制作一下

我们首先得创建这个FrameWork,按照下图:

我们创建了这个FrameWork,看看这个 FrameWork的结构:

我们再里面简单的添加了一个ShowNSlog的类,并且我们添加了一个 FrameWorkTest.boundle文件,看看我们在这个类里面写了什么内容:

#import` `"ShowNSLog.h"

@implementation ShowNSLog

+(void)showLog{

NSLog(@"你使用了我们的静态库");

}

+(NSString *)showLogWithReturn{

return` `@"zhouzhou.jpg";

}

@end

接下来对我们的这个.framework静态库进行一些简单的设置,如下图所示:

1、首先是Dead Code Stripping设置为NO,网上对此项的解释如下,大致意思是如果开启此项就会对代码中的”dead”、”unreachable”的代码过滤,不过这个开关是否关闭,似乎没有多大影响,不过为了完整还原framework中的代码,将此项关闭也未曾不可。

2、然后将Link With Standard Libraries关闭,我想可能是为了避免重复链接

3、最后将Mach-O Type设为Static Library,framework可以是动态库也可以是静态库,对于系统的framework是动态库,而用户制作的framework只能是静态库。

接下里就是设置我们有那些头文件是需要公开的,如下图设置:

还要记得把要公开的类添加到我们的FrameWorkTest.h中,比如下面是我们例子中的:

#import

//! Project version number for FrameWorkTest.

FOUNDATION_EXPORT double FrameWorkTestVersionNumber;

//! Project version string for FrameWorkTest.

FOUNDATION_EXPORT const` `unsigned char FrameWorkTestVersionString[];

// In this header, you should import all the public headers of your framework using statements like #import

// 导入要公开的头文件

#import

最后要做的就是打包制作我们这个FrameWork了:

command+B 按照我们下图的选择,打包出这个FrameWork:

这个时候你就会看到FrameWork项目里的Products文件多了我们的.framework文件。你Show in Finder一下就会看到下面这样的两个文件夹了,一个就是真机一个就是模拟机的:

接下来就是生成我们.framework文件的最后一步了:利用终端把模拟机和真机的文件我们合并成一份:

把上图中我们标注的FrameWorkTest文件进行下面的操作:

在终端中输入命令:lipo -create 模拟机和真机的FrameWorkTest文件路径(直接拉到终端就会显示)-output 一个输出路径

具体的例子我们看下面我们终端中的信息:

注意:随后生成的可以看到是一个.lipo文件,这时候你需要做的就是改了它的名称(包括去掉后缀)然后去随便覆盖你的真机或者模拟机的之前我们合并时候的文件!

然后就是它的使用了

我们的.framework文件就算是制作完成了,那使用我相信大家也都知道,把它拉到我们的项目中,我们看看我们的使用情况,证明我们的是OK的:

顺便这里说一下.boundle文件的制作,新建一个文件,把它后缀名改为.boundle文件,这时候你要是直接打开这个文件的不行的,那就“显示包内容”给里面添加资源文件就可以!

我们再看我们的项目中我们拉进来的文件:

我们在我们的.boundle文件中添加了一张图片,我们再具体看看这个图片的使用以及我们这个.framework静态库是不是能成功使用:

一:导入我们的静态库:

二:具体的使用:

三:看看我们的打印日志:

上面的哪张我们使用的图片也是能够正常出现的,我们这里就不再截图发了,有兴趣的可以自己试试。

最后需要总结的:

1、在制作framework或者lib的时候,如果使用了category,则使用改FMWK的程序运行时会crash,此时需要在该工程中 other linker flags添加两个参数 -ObjC -all_load。(这点没有亲测)

2、带有图片资源的需要把图片打包成Bundle文件,和framework一起拷贝到相应的项目中。

3、公开的类中如果引用的private的类,打包以后对外会报错,找不到那个private的类,可以把那个private的.h放到(也没亲测)

4、namespace 冲突。静态库用了某第三方库,项目也用了同样的第三方库,在编译的时候就会有 duplicate symbol 错误,因为有两份同样的第三方库。解决办法就是把用到的第三方库加上自定义前缀,包括类名、delegate 协议、常量名,尤其需要注意 Category 的方法名要修改。

原文https://zhuanlan.zhihu.com/p/35944449

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi Bluetooth.framework是一个用于Delphi编程语言的蓝牙开发框架。该框架可以在IOS上实现基于蓝牙的设备通信,并提供了简单易用的API接口。使用该框架进行蓝牙开发,可以快速实现设备之间的数据传输、设备控制等功能。Delphi Bluetooth.framework支持IOS平台上的蓝牙4.0以上版本,包括BLE(Bluetooth Low Energy)协议,可以有效地降低能耗,提高设备的续航能力。此外,该框架还具备很好的扩展性和可定制性,可以根据不同需求自定义蓝牙开发功能。总之,Delphi Bluetooth.framework是一个效率高、开发简单的蓝牙开发框架,可以满足各种蓝牙应用场景的需求。 ### 回答2: Delphi是一种基于Object Pascal语言的编程环境,广泛应用于Windows和macOS平台的应用程序开发。而Bluetooth.Framework是针对macOS平台的,用于支持开发蓝牙相关功能的框架。 Delphi在macOS平台上使用Bluetooth.Framework可以轻松实现如蓝牙设备扫描、连接、数据传输等操作。开发者可以使用Delphi提供的编程接口,直接调用蓝牙框架库中的相关方法,从而达到实现蓝牙功能的目的。 Delphi与Bluetooth.Framework的结合,可以为开发者节省大量的开发时间和精力,使得他们能够更快速地开发出可靠、高效的蓝牙应用程序。总的来说,使用Delphi与Bluetooth.Framework的组合可以大大简化蓝牙开发的难度,提高开发效率和质量。 ### 回答3: Delphi Bluetooth.framework是一个专为iOS应用程序设计者开发的框架,它使开发者可以在iOS设备上使用蓝牙技术来进行数据传输和通信。 Delphi Bluetooth.framework是一个非常灵活和易于使用的框架,使开发者能够很方便地实现蓝牙传输功能,而不必自己编写和实现复杂的蓝牙协议。 框架中包含许多有用的和方法,可以用于检测和管理蓝牙设备,并建立和维护蓝牙连接等。开发者可以使用这些方法来实现各种功能,例如拍照、数据传输、蓝牙打印等。 Delphi Bluetooth.framework支持通用的蓝牙协议,例如RFCOMM、L2CAP、GATT等,这使得它可以连接几乎所有支持蓝牙的设备。此外,它还支持低功耗蓝牙(BLE),这使得它可以与许多低功耗设备连接。 总体而言,Delphi Bluetooth.framework是一个非常优秀的蓝牙传输框架,可节省开发人员时间和精力,使他们能够专注于应用程序的核心功能开发。它不仅易于使用,而且还为开发者提供了许多有用的功能,可帮助他们实现各种蓝牙传输任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值