iOS入门之打包静态库

在项目开发中,或多或少的都会使用第三方库,有时候也会将自己项目中独立于业务的相关代码打包成库以供别人使用。在Android开发中,一般打包为aar或者jar文件以供第三方使用。iOS开发中,则可以直接打包为.a文件,iOS内置了Static Library的模板,所以使用上也是十分的方便。 在正式讲解打包.a静态库之前,首先来看一些概念:

什么是库?

所谓库就是程序代码的集合,是共享程序代码的一种方式。

库的分类

根据程序代码的开源情况,库可以分为两类:

开源库

源代码是公开的,第三方开发者可以看到具体实现。比如GitHub上比较出名的第三方框架AFNetworking、SDWebImage。

闭源库

不公开源代码,只公开调用的接口,看不到具体的实现,是一个编译后的二进制文件。这种常见于一些公司的SDK包,比如高德地图SDK、环信即时通讯SDK等等。而闭源库又分为两类:静态库和动态库。本篇重点要讲的便是其中的静态库。

静态库和动态库的区别

静态库

以”.a”或者“.framework”为文件后缀名。

动态库

以”.dylib”或者“.framework”为文件后缀名。

区别

静态库链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。形如:

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

苹果芯片架构

armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代)

armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2

armv7s: iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行)

**arm64:**iPhone7、iPhone7 Plus iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3

打包静态库

1,打开Xcode创建一个新的工程,这里以Xcode8.3为例。新建Static Library静态库工程。

2,创建工程完毕后,再创建一个工具类StaticLibTool,添加一个方法用于测试。

然后在.h文件中声明一个方法,并在.m文件中实现该方法,在方法内容输出一段日志。

3,运行工程进行打包,运行完毕后,会看到工程中Products文件夹下的StaticLib.a文件由红色变成了黑色。这就是我们打包好的.a静态文件了。

4,公开接口头文件和相关需要暴露的方法。依次选择targets->Build Phases->Copy Files->”+”->需要公开的头文件

或者

添加完成后, 需要手动将StaticLib文件拖入Public一栏中进行公开。

5,设置Scheme。即运行的环境,因为正是环境和debug环境所需要的库还不一样,需要分别打包。 选择Product->Scheme t-> Edit Scheme。再次运行即可。

如果需要合并模拟版本和真机版本的静态库。当debug环境和relase环境.a文件都打包好以后,选择libStaticLib.a,右键选择Show in Finder,进入Finder后,可以看到编译后的模拟器和真机版本的.a静态库。

合并终端命令如下:

lipo -create "真机版本.a静态库路径" "模拟器版本.a静态库路径" -output "合并后的.a静态库路径"

注意中间要有空格。

5,测试。新建一个可运行的工程,libStaticLib.a和StaticLib.h文件拖入工程即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

近期 Unity 提交苹果审核被拒的问题

游戏提交苹果审核,被打回。在 bugly 上没有查到崩溃信息,苹果给了 crash 日志也说明。

2472
来自专栏遊俠扎彪

如何使用Python中的帮助

其实学一门新语言,或是接触一个新东西,真的要注意其自带的帮助文档,比如各种manual、内嵌的帮助命令等等,尤其是是在Linux/UNIX领域。

2269
来自专栏deepfakes

fakeapp,faceswap等deepfakes换脸软件对比

目前用于深度换脸的程序基本都是用python编程语言基于tensorflow进行计算。以下列出几款常用的换脸程序优缺点浅析,用户可以根据自己的爱好和水平来选择,...

5.4K12
来自专栏张善友的专栏

WCF的追踪分析工具——SvcPerf

Microsoft最近发布了SvcPerf,它是一个端到端的基于Windows事件追踪(ETW)的追踪查看器,可用于基于清单的追踪。你能够通过这个工具查看ETL...

2086
来自专栏bboysoul

在linux终端下查看地图(MapSCII )

MapSCII 是一款很有趣的小工具,使用nodejs编写,可以在终端上显示世界地图 就像图片中的那样

1382
来自专栏IT米粉

我的Markdown的利器——Markdown Here、有道云笔记、iPic

网上有很多人推荐的Markdown的工具包括专业的Markdown工具,如Mou,macdown等,也有人用编辑器装上插件后就使用,sublime、atom、v...

47213
来自专栏恰童鞋骚年

Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器

  由于Linux/Unix等有更强的安全性、运行效率高、拥有大量优秀的开源组件,而.Net则有着其他语言无与伦比的开发效率,因此在非微软平台下运行.Net程序...

1704
来自专栏林德熙的博客

win10 uwp 如何开始写 uwp 程序 安装 VisualStudio创建应用启动流程显示 hellow

本文告诉大家如何创建一个 UWP 程序。 这是一系列的 uwp 入门博客,所以写的很简单

931
来自专栏Linux驱动

1.电源管理-4种休眠方式状态

2743
来自专栏me的随笔

ASP.NET Core远程调试

关于ASP.NET Core远程调试的具体做法可参考微软文档——Remote Debug ASP.NET Core on a Remote IIS Comput...

1823

扫码关注云+社区

领取腾讯云代金券