iOS 封装 Framework、 制作 SDK 、集成项目...

本文包含 :

Framework 介绍;

封装一个Framework 步骤;

封装 Framework 时 ,项目 配置 说明;

Framework 内部 引用 图片资源 ;

Framework 内部 引用 Xib;

Framework 外部 引用 Framework 中 的图片资源;

Framework 外部 引用 Framework 中 的Xib资源;

Framework 里面包含 UI控件,如一个小App ,小插件;

Framework 介绍:

iOS/Mac 开发 Framework 是一种库,

什么是库?

共享代码便是库,实现代码的复用,一般分为静态库和动态库。

静态库和动态库的区别?

静态库:链接时完整的拷贝到可执行文件,多次使用多次拷贝,造成冗余,使包变的更大。
动态库:链接时不复制,程序运行时由系统加在到内存中,供系统调用,系统加在一次,多次使用,共用节省内存。

iOS/Mac 中的静态库?

后缀为: .a和.framework 文件

iOS/Mac 中的动态库?

后缀为: .dylib和.framework 文件

iOS/Mac Framework 为什么即是动态又是静态?

系统的架构是动态的,我们自己创建的是静态的。

.a和.framework的区别是什么?

.a是单纯的二进制文件,.framework是二进制文件+资源文件。
其中.a不能直接使用,需要.h文件配合,而.framework则可以直接使用
.framework = .a + .h + sorrceFile(资源文件)

为什么要使用静态库?

共享代码,方便使用。
实现iOS 程序的模块化,固定的业务模块话,减少开发的重复劳动。
和别人分享代码,但又不想让别人知道代码的具体实现。
开发第三方SDK 的需要。
有时候集成其他项目的时候 也可以使用。

封装一个Framework 步骤:

1.新建工程选择iOS —> Cocoa Touch Framework

创建
命名Framework

2.Framwork库文件工程创建完成以后,会自动生成一个.h文件作为头文件使用。

我这里这个叫 testNewFramwork.h
当我们写好的源文件很多的时候,为了使用方便,往往我们会自己创建一个.h文件。当源文件中已经有了.h文件的时候,我们就不需要Framwork库文件自动生成.h文件。删除即可。
删除 系统自动生成的 testNewFramwork.h 文件。


删除 自动生成的 头文件

注意: 删除 系统自动生成的 testNewFramwork.h 文件 会有一个警告
原因是项目需要一个和工程名同名的头文件。


警告

添加一个同名文件即可


解决警告

3.引入 需要封装到 Framwork 工程文件

引入内 img 图片 并显示
引入内 xib 文件 并显示

因为 Framwork 工程是没有自动导入 系统的 UIKit.framwork ,我们Framwork里面是用到了UI控件的,所以需要手动导入 系统UI库。否则 封装完毕,调用该库的时候,里面的 UI控件是不可见的。

导入UIKit.framwork

最后 工程目录 如下:


工程目录

4.配置 Framwork

(1).Build Active Architecture Only 设置为NO的意思是当前打包的.framework支持所有的设备.否则打包时只能用当前版本的模拟器或真机运行.


配置

(2).Build Setting 搜索linking 设置Dead Code Stripping 为NO是编译选项优化,包瘦身,(可不改) Mach-O Type 选中StaticLibrary (静态库) Xcode默认是动态库.


配置

(3). 设置framework最低支持的版本.


配置

(4). 将需要呈现给来的头文件,直接从Project拖到Public中. 不想呈现出来的.h文件不建议拖到Private中. 放在project中即可


配置

5.编译 Framwork

进行编译之前应该设置为release模式


编译
编译

6.真机版本和模拟器版本framework 合并

XCode12之前:
编译模拟器静态库支持i386 x86_64两架构
编译真机静态库支持armv7 arm64两架构
使用lipo -create -output命令可以将两个库合并成一个支持模拟器和真机i386 x86_64 armv7 arm64四种架构的胖子库。

XCode12编译的模拟器静态库也支持了arm64,导致出现真机库和模拟器库不能合并的问题。

have the same architectures (arm64) and can't be in the same fat output file
模拟器编译时候:
设置Build Setting --> Excluded Architectures --> Release --> 添加上 arm64

来到工程目录树,Products下的文件都是红色的,现在我们选中.framework文件,分别真机和模拟器运行一遍(成功运行)
然后Show in Finder 找到对应的 .framework文件(上级目录可以看出是真机还是模拟器文件夹)
真机和模拟器运行成功的文件是在这俩个文件夹内的。

合并
合并

内部分为Debug版本和Release版本,同时两者有分为真机版本和模拟器版本framework(iphoneos后缀代表真机版本,iphonesimulator后缀代表模拟器)

(1).查看架构信息
打开终端使用命令行 lipo -info 查看framework架构信息
终端 命令行 lipo -info 空格 framework 地址

取地址

真机版本

取架构信息

模拟器版本

取架构信息

(2).合并真机模拟器版本
因为以上获取的framework只能在对应的版本上运行(即真机只能在设备上运行模拟器版本只能在模拟器上面运行使用)所以需要合并为通用版本
命令行语句:sudo lipo -create 空格 (此处请填写真机testNewFramework文件路径) 空格 (此处填写模拟器testNewFramework文件路径) 空格 -output 空格 自定义合成文件存储路径(合成文件的名字testNewFramework)

合并
合并

查看合成的testNewFramework架构信息


合并

替换

合并

小知识点 :

为啥要合并 ,架构信息 是什么意思 ?
首先了解一下什么是ARM,ARM是微处理器,而armv6, armv7, armv7s是ARM CPU的不同指令集,

armv6设备:iPhone, iPhone2, iPhone 3G,第一代、第二代iPod Touch

armv7设备:iPhone 3GS,iPhone 4,iPhone 4S,iPad ,iPad 2,iPod Touch 3G,iPod Touch 4

armv7s设备:iPhone 5,iPad4

arm64设备:iPhone 5S,iPad Air,iphone6,iphone6plus,iPhone6s,iPhone6s Plus等

至此 封装 Framework 完成。


Framework接入主程序

1.拖入主程序

拖入程序
拖入完成

2.引入Framework,否则取不到Framework的图片等资源

TARGETS —> Build Phases


引入

主程序 创建个导航控制器 然后点击ViewController 跳转到 Framework 中的 View1Controller 视图控制器

图例
图例
图例
图例

外部--主程序 --调用Framework中的资源

调用

至此 使用 Framework 完成。

END.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,937评论 3 118
  • 这是瓜甜的第一篇原创文章 起名叫做瓜甜,完全是因为小女孩时代,一个十分喜欢的男孩子给我起的绰号 我大名叫做田甜,...
    瓜田田的小世界阅读 268评论 0 1
  • 前几日,老公兴匆匆地告诉我,他的彩票中了五个数字,是三等奖,单注奖金是三千元,他中了三注,加起来是九千元,我顿时欢...
    路语旁集阅读 217评论 0 0
  • 2018年3月11日下午15时52分。人民大会堂会场顿时响起热烈的掌声,《中华人民共和国宪法修正案》通过,我们进入...
    李语昕阅读 399评论 0 1
  • 刚才突发奇想,想到“a.js中定义的函数可以在b.js中调用吗?”这个问题,于是亲自实验了一下。 写完这个demo...
    趁你还年轻233阅读 209评论 2 1