iOS最新制作Framework总结

iOS 中 framework 和 bundle 的制作 我的博客原文地址 Framework Framework 是资源的集合,将静态库和其头文件包含到一个结构中,让 Xcode 可以方便地把它纳入到你的项目中。 在运行时,库中按你的想法暴露需要的头文件,整个工程都可以调用暴露出来的接口和参数,这样减少了内存消耗,提高了系统的性能。 为什么使用 framework 与别人分享自己开发的组件,有两种方式。 直接提供源代码。 将组件代码编译成静态库... 阅读详情
AI摘要

本文详细介绍了在Xcode中制作iOS静态库Framework的步骤,包括创建项目、设置权限、创建AggregateTarget、编写打包脚本以及验证Framework有效性的全过程。同时,文章探讨了如何在自定义Framework中处理外部依赖和内部依赖第三方库,例如引入高德地图SDK,并给出了具体的操作方法和注意事项。最后,通过创建测试项目验证了Framework的正确使用。

文章提纲.png

去年为公司开发了自己的SDK供外部客户使用,一直没来得及写个总结,最近时间稍微宽松点,写两篇文章总结一下iOS中Framework制作的流程。本文不会介绍iOS中静态库、动态库的基础知识,只是图文详解iOS中Framework的制作。(开发工具为Xcode14.0)

一、 Framework牛刀小试

1、新建一个iOS Project(Static Library制作大同小异,不在本文讨论范围内),随意取个中意的名字LMBaseKit。
新建Framework.png

如果上面不是选择iOS系统,而是macOS或者其它的系统,可在Xcode中【Targets】->【Build Settings】->【Base SDK】中切换为iOS系统,如下图所示。
修改Base SDK.png

修改Mach-O Type为Static Library(静态库)
修改Mach-O Type.png

2、导入或者新建几个类文件,公开需要给外部调用的头文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQHR4LZQ-1669694129987)(https://upload-images.jianshu.io/upload_images/284350-480ea38c1c30cb85.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

如上图所示在Xcode中【Targets】->【Build Phases】->【Headers】下Project中选择需要公开的头文件拖入到Public下面。比如此处简单写了三个类LMBaseKitManager、LMNetworkManager、LMLogManager,把前两个公开了。修改头文件权限类型还有一个方法,如下图所示。
改头文件权限类型.png

3、把Public中的头文件导入到项目头文件里(项目同名的头文件,系统自动生成)
导入头文件.png

4、创建Aggregate Target,如下图所示。Aggregate,翻译过来就是聚合的意思,在这里我们可以理解为模拟器和真机的聚合,即生成的Framework可供模拟器跟真机都可使用,而不用分别打模拟器和真机的独立包。
创建Aggregate.png

选中上图生成的LMBaseKitAggregate,为其添加依赖。
添加依赖.png

点击Target Dependencies下方的“+”,选中最开始创建的Framework对应的Target,点击“add”即可。
添加依赖.png

5、修改Target的Scheme
修改Scheme.png

分别把两个Target的Run模式的Build Configuration改为Release。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3VXf8IT5-1669694129993)(https://upload-images.jianshu.io/upload_images/284350-aed6709e201600a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

6、创建打包脚本。选中聚合Target,点击左上角的“+”,选中New Run Script Phase。
添加打包脚本.png

在Run Script中添加如下脚本。脚本的作用是将模拟器包和真机包合并成一个聚合包,并将聚合包放在项目根目录下的Products文件夹中。

    if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
 
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
 
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
 
 
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
 
mkdir -p "${INSTALL_DIR}"
 
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
 
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
 
#open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi

脚本.png

7、生成Framework。先选择Framework对应的Target分别在模拟器跟真机上都run一遍。这里分别选择了iPhone 14跟Any iOS Device(也可选择自己的真机)。
run.png

然后选中聚合Target也运行一遍,就生成了Framework啦,并在Finder中打开了。
生成Framework.png

8、检查Framework有效性。打开电脑终端,进入到所在目录。利用lipo命令输出.framework下的LMBaseKit文件信息。如下所示:lipo -info LMBaseKit,显示为fat file,则表明是模拟器和真机的聚合包。fat file,顾名思义,胖文件。相应的,非聚合包就是瘦文件,则输出Non-fat file: LMBaseKit is architecture: arm64之类的
检测Framework.png

9、使用Framework。创建一个测试项目LMBaseKitDemo,把上面生成的LMBaseKit.framework导入项目中,在AppDelegate导入framework的头文件。在模拟器跟真机上分别运行,都可达到预期效果。至此,一个完整的Framework算是制作完成。
真机效果.png

简单开启一下SDK的日志功能。
模拟器效果.png

二、Framework外部依赖第三方库

自定义Framework有时可能需要借助其它优秀的第三方库。自己的Framework使用第三方库分两种情况:外部依赖、内部依赖。通常我们建议那些最常用的第三库使用外部依赖,比如AFNetworking、高德地图SDK等。接下来,以外部依赖高德SDK为例,说明一下自定义Framework时如何引入第三库。

1、在上面的LMBaseKit项目中导入高德地图SDK,注意要取消勾选Add to targets,这是最关键的一步
导入第三方库.png

2、添加上面未加入Target的两个库的路径。如下图所示,注意如果是.a文件形式的第三方库则要加在Library Search Paths里。
添加Search Path.png

3、Framework内部导入第三方库需要用到的相应头文件。然后按照普通Framework的制作流程弄完导出就可以用了。
image.png

4、外部使用Framework。除了导入我们自定义的Framework(这里为LMBaseKit.framework)外;还要导入要依赖的第三方库以及第三库所需要的系统库,比如这里的高德SDK,像平时使用高德SDK一样正常接入。
使用framework.png

按需设置一些操作,比如此处第三库高德SDK,需在【Targets】->【Build Settings】->【Other Link Flags】中添加-ObjC。
添加必要设置.png

最后在测试项目中调用自定义Framework中高德定位相关的接口,得到预期结果。
调用.png

三、Framework内部依赖第三方库

自定义Framework时内部依赖第三方库比较简单,不是本文的重点,实际开发中很少这样操作。此处以自定义Framework内嵌AFNetworking为例说明一下如何处理。在自定义Framework工程中导入需要的第三方库的同时勾选上对应的Target就行。
内部依赖.png

然后在Framework工程中正常使用导入的第三库即可,此处用AFNetworking写了个get请求供外部使用。
内部依赖.png

正常导出自定义Framework后就可以直接使用了,而不需要额外再接入要依赖的第三库。如下所示,直接导入LMBaseKit.framework就可,而不用导入AFNetworking了。
内部依赖.png

下载好了神仙姐姐酷照~
神仙姐姐啦.png

最后附上代码地址,仅供参考。

Framework 制作 Framework 制作前言我们可以看出.a的封装和.framework的封装差不多,也有模拟器和真机合并的过程,通过上边的图片我们可以看出.a 和.framework的区别,就是.a+.h+soureFile=.framework。可以看出我们直接封装.framework其实是最好的。那么我们就来看看framework怎么封装的。实现步骤:一、新建 Project - Framework&amp... 阅读详情

相关推荐

iOS打包静态库framework,.a文件及bundle资源包的创建及使用

1.打包framework静态库 之前打包静态库好多步骤记不太清楚了,发现网上给的资料各种各样,好多坑不清楚,而且不太全面,所以自己整理了下资料,供大家参考,细节不足之处还望指正. 设置 Build Setting 中的 COMBINE_HIDPI_IMAGES 为 NO,否则 Bundle 中的图片就是 tiff 格式了。编译生成 Bundle 文件 • 我们分别选择 Generic iOS D.......................................

1692

iOS制作framework

ios 制作SDK , ios图文详解制作.framework

dingqk的博客 9830

iOS Framework制作流程

由于公司需求,需要制作自己的登录界面SDK和根据需求更换项目路径的SDK,所以研究了一下静态Framework的制作步骤,总结如下:(另外.a的制作其实与.framework的制作过程类似,可自行去研究和尝试) 新建工程选择iOS —> Cocoa Touch Framework 进入创建好的工程删除掉自带的工程同名头文件 ...

ZhongLv_HoneyMoon的博客 501

iOS制作Framework

开发中库是一种共享程序代码的一种方式一般分为静态库和动态库。在iOS开发中Framework是常用的一种代码重用机制。包含头文件和实现文件。可以用来封装通用功能。更加方便的在多个项目中共享相同的代码。独立模块更易于维护和管理。:链接完整的拷贝至可执行文件中,被多次使用就会有多分冗余拷贝。:链接时不复制,程序运行时由系统动态加载到内存中,供程序调用,系统只加载一次,多个程序公用,节省内存。。.a是一个纯的二进制文件,不能直接使用,至少要有.h文件配合。.framework中除了有二进制文件。

2401_89541653的博客 2593

从Live2D到Unreal Engine:2D与3D虚拟数字人核心技术实现路径解析

本文深入解析了从Live2D到Unreal Engine的2D与3D虚拟数字人核心技术实现路径,涵盖技术选型、制作流程与优化技巧。通过对比2D骨骼动画与3D建模渲染的差异,结合实战案例,帮助开发者根据项目需求选择合适方案,提升虚拟数字人的交互体验与视觉效果。

weixin_30379531的博客 149

睿尔曼复合机器人之底盘操作流程

控制键”按下后,可在键盘上通过‘i’(向前),‘k’(向后),‘j’(向左旋转),‘l’(向右旋转)四个按键对底盘进行运动控制。选中禁⾏线功能后,使⽤⿏标在界⾯内点击选择起点,继续在其他地⽅点击,两点之间会连成⼀条线,可以进⾏多次连续点击,形成连续线条。4)扫图完成后,软件会重新启动,返回到监控页面,点击“激光”可看到当前机器激光扫描的实时数据,在页面上表现为红色边界线,点击菜单栏“控制”键使底盘在一定范围内运动,扫描到尽可能多的边界线,可发现与实际地图的黑色边界线不同,需要进行手动校正。

realman_Rop的博客 1474

iOS制作Framework-2021最新最全教程-一图到底

iOS制作Framework,动态库静态库,真机和模拟器合并,一图到底,手把手嘴对嘴的教你。

wuwuFQ的博客 5291

ACL访问控制列表详解:原理、配置与应用

如果发现ACL规则没有达到预期效果,需要检查ACL规则配置是否正确,是否在正确的接口和方向上应用,以及规则顺序是否合理(ACL规则按顺序匹配,匹配到即停止)。其中,rule-id是规则的编号,用于确定规则的匹配顺序;例如,应该先配置针对特定主机和特定端口的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作,避免因规则顺序不当导致的访问控制失效。例如,应该先配置针对特定主机的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作。

彭大帅的博客 1047

iOS-制作Framework(最新)

前言 之前有很多的大神们已经写过framework的制作,但最近由于Xcode7的出现,很多之前的教程内容已经不符,对于初学者来说,找到一篇能够直接明了,简单易学的制作framework的文章比较困难。本文将基于Xcode7创建一个简单的工程,通过两种方法来教大家如何制作一个自己的framework。 简介 Mac OS X扩展了framework的功能,让我们能够利用它来共享代

ab351706354的专栏 353

PX4固件下VTOL固定翼的3种起飞方式对比:手抛vs弹射vs跑道

本文深度解析PX4固件下VTOL固定翼的三种起飞方式:手抛、弹射与跑道起飞,对比其技术差异与适用场景。通过详细的参数配置和工程实践指南,帮助开发者优化起飞性能,提升无人机在不同环境下的适应性和可靠性。文章特别针对PX4飞控系统的最新特性进行了技术探讨。

weixin_30296405的博客 87

信号完整性SI-PI

SI设计的主要难点在于需要综合信号的幅度、噪声、边沿、延时等影响信号质量的多种因素,并且这种因素常常相互依赖、互相影响,交叉在一起。1.1、信号过冲 (欠阻尼状态,可并联一个合适的电容):过冲会造成强烈的电磁干扰,另一方面会损伤后面的电路的输入及,甚至失效。信号完整性SI:是指电路系统中信号的质量,如果在要求的时间内,信号能不失真的从源端传输到接收端。优点:提供较慢的上升时间,减少反系量,产生更小的EMI,从而降低过冲,增加信号质量。导线之间的间距过小, 就会产生串扰,间距越小、串扰越大。

weixin_42304393的博客 4869

iOS开发-制作Framework(最新)

前言 之前有很多的大神们已经写过framework的制作,但最近由于Xcode7的出现,很多之前的教程内容已经不符,对于初学者来说,找到一篇能够直接明了,简单易学的制作framework的文章比较困难。本文将基于Xcode7创建一个简单的工程,通过两种方法来教大家如何制作一个自己的framework。 简介 Mac OS X扩展了framework的功能,让我们能够利用它来共享代码和资源

奋斗小青年的博客 566

手把手教学,Python 游戏编程之实现飞机大战(含源代码)

我想大家都是有玩过类似飞机大战的射击类游戏,也享受目标被消除通过后带来的愉悦感。那么如果用Python来实现飞机大战游戏?下面就跟大家一起用Python来做一个小游戏,不仅可以从中感受到乐趣,还可以提升自己的能力。

veratata的博客 1万+

系列:iOS开发-framework的制作与使用

系列:iOS开发:制作动态或静态framework作为一个iOS开发人员,无论是出于工作需要,还是出于保密需要… 我们都有可能或多或少的想要将一部分源码封装成静态或者动态库,以达到保密或者版权的效果 比如公司想要整理框架作为知识产权等销售,比如你做一个兼职工作,客户想要项目源码,涉及隐私你想要保护起来,比如你想要分享给一个同时一项功能,但是不想给源码…网上关于Framework制作的教程数不胜数

spicyShrimp的博客 912

AutoSAR系列讲解(深入篇)14.7-Mcal Adc配置(上)

详细讲解了ADC的各个配置项的作用

雪云飞星的博客 1万+

42、使用mmrotate中k3det进行旋转目标检测,并进行mnn部署和ncnn部署

基本思想:仍然是身份证分割,并进行ncnn和mnn的c++的部署开发

sxj731533730 5710

iPhone开发:iOS Framework制作研究

iOS上如何制作自己的Framework呢?(不是静态库) 请看stackoverflow上的提问: http://stackoverflow.com/questions/4065052/how-to-build-a-framework-or-library-for-othe

3075

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

iOS framework制作过程

我们使用一种变通的方法来制作 iOS framework,废话不多说,上步骤: 1.打开Xcode创建一个“Cocoa Touch Static Library”工程,并删除现有的target. 2.右键project选择添加New Target,在弹出的窗口中找到Cocoa ,在Cocoa右侧窗口中选择“Loadable Bundle”。 注意:到这步的时候不要选择fr

加勒比海兔的专栏 913

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ios 制作framework带xib

详细介绍一下如何生带有第三方、图片、plist文件,xib文件的.framework 一、制作.framework 1.首先,我们新建工程,选择Coco Touch Framework 创建工程 2.使用CocoaPods导入cordova,打开工程,可以看到我们的第三方已导入成功,接下来就要进行一些配置了。 3.我们把需要的打包的代码都放进去 4....

xisan_10的博客 1682

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ios 制作使用FrameWork

http://www.jianshu.com/p/ef3d5b7e7006  http://www.knowsky.com/884469.html  http://www.jianshu.com/p/6c033c39884a  http://my.oschina.net/u/856930/blog/196484  http://ios.jobbole.com/81583/  https:

Magic.F的专栏 2486

iOS Framework制作

iOS Framework Framework相比于动态/静态库,有如下优势: framework能将不同类型的资源打包在一起,包括nib文件、图片或者文档等;framework能够进行版本管理,这使得framework能不断更新并向后兼容;节省内存,系统在需要的时候把framework载入内存,在同一时间,即使有多个应用程序使用同一 framework,但在内存中只有一份 frame

开发点滴 3902

iOS制作.framework静态库

iOS制作.framework静态库。 库(Library)其实就是一段编译好的二进制代码,加上头文件就可以供别人使用,一般会有两种情况要用到库: 1.某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件。 2.对于某些不会进行大的改动的代码,比方说很多大公司常用且很少变动的模块都会编译成库,这样做的好处一是可以节省编译时间,二来对于代码的管理也非常方便。 ...

jia12216的专栏 1856

用cmake生成ios framework库

用cmake生成ios framework库 cmake ios framework 2019/5/5 代码下载 cmake-ios-demo 版本1 cmake-ios-demo 版本2 背景 如果你开发了一套c++代码,要在android和iphone两种手机上运行,就要在分别编译android和iphone两个平台下的动态库。 android开发目前是用 Android Studio(SDK...

zhaowd2001的博客 5950

iOS 制作framework(SDK)的流程

iOS 制作framework(SDK)的流程 项目需要写SDK,在这里整理一下方法和思路。 第一步:创建framwwork 第二步:随便取个名字:Hello,然后点击Next,指定一个你要存的位置 第三步:通过前两步骤会得到如下图效果 第四步:修改配置,其中有两处要修改 1、搜索:MACH_O_TYPE 选择Static Library (framework可以是动态库也可以是静...

zyc_chun的博客 855

iOS开发之制作framework

iOS开发之制作framework 什么是framework Framework是资源的集合,将静态库(iOS8以后可以是动态库)和其头文件包含到一个结构中,让Xcode可以方便地把它纳入到你的项目中。 分为真机—Debug(调试)版本、真机—Release(发布)版本、模拟器—Debug版本、模拟器—Release版本;开发中一般都打包Release

jianghai的博客 984

ios 制作自已的framework

ios中我们写的代码有时不愿意让别人看到,可能对它进行封装,生成一个静态库如典型的.a,还有一种就是和 苹果自带的库一样的后缀名为.framework的库,个人推荐使用.framework,因为.a不仅要装其添加进去,还要 将对应的头文件添加到项目中。 1.新建一个静态库工程。file--new--project,弹出框中选择Ios--framework&library中的coc

程序人生 2339
上一篇: 财富自由之路
下一篇: 学习位运算
FIRE-Lee
博客等级 码龄12年 75粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值