如何创建一个静态库文件,并打包在模拟器和真机上都可以使用。

本文详细介绍了如何通过控制台将为iOS应用开发的静态库文件(.a文件)进行合并,使其能够在模拟器和真机上均正常运行。通过创建静态库文件、分别针对模拟器和真机进行编译,并利用lipo命令合并不同架构的静态库文件,最终实现了一个通用的静态库文件,适用于多种设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发过程中我们往往会遇到这种情况,我们从网上down的静态库文件(.a文件)在模拟器上运行但是在真机上会报错说缺少arm7  arm64 。也有在模拟器上出现问题说缺少 x86_64  或者缺少i386.这种问题怎么解决呢?

 一般情况下在从网上下载静态库的时候里面会有真机的一个.a文件 模拟器的一个.a文件。我们在测试的时候不可能不停地替换两者。有没有一种好的解决方案来解决这个问题呢。答案是肯定的,我们可以通过控制台来把两者合并成一个通用的.a文件 让他既能在模拟器上正常运作也能在真机上正常运行。

ok 我们先来创建一个静态库文件。

第一步:

Xcode New一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static Library。直接next去建立一个MtimeLibrary这样的工程。


第二步:工程建立以后,删除默认的.h .m 文件,然后自己创建要打包的.h  .m 文件。

选择move to Trash 永久性删除文件。


这里添加了一个具有NSUserdefaults 功能的SKUserfefaults 可以根据自己的需要自行添加.

 第三步:选择模拟器 ,Command + B 编译,我们可以在Products下面找到我们编译生成一个模拟器上可运行的libTestPointA.a这个文件,然后选择真机(如下图)再编译一次,这样会生成一个可以真机运行的libTestPointA.a库。 


ok 下面我们通过命令行进入到我们编译的.a文件查看一下.a文件的信息.

//打包后保存.a的地址我们可以通过上图中的show in finder 来找到 然后 找到该地址 

命令行进入到里面:

cd /Users/username/Desktop/TestPointA/Build/Products/Debug-iphoneos

然后查看里面打包.a文件的信息

lipo -info libTestPointA.a 

命令行的操作台会打印出:Architectures in the fat file: libTestPointA.a are: armv7 arm64 

这表明我们打包的.a文件支持arm7 和arm64.

 然后我们进入模拟器打包的.a文件

cd /Users/username/Desktop/TestPointA/Build/Products/Debug-iphonesimulator

然后查看信息

lipo -info libTestPointA.a 

操作台打印出了

libTestPointA.a is architecture: i386


OK,我们通过编译 已经做好了两个.a文件 那么这样就可以使用了吗?

 答案是NO。因为iPhone4s  iPhone5 模拟器支持的是architecture i386 而 iPhone5s iPhone 6  iPhone6 Plus 支持的是architecture x86_64. 真机上是 arm7 和arm64 。我们打包的真机的.a在真机上运行是没问题的。

看下我们模拟器运行的效果


啊  我模拟器上打包怎么会出问题。 好吧 !问题来了!正如上面所说因为iPhone4s  iPhone5 模拟器支持的是architecture i386 而 iPhone5s iPhone 6  iPhone6 Plus 支持的是architecture x86_64. 真机上是 arm7 和arm64 。

刚在包打的只是 iPhone4s iPhone5 上面的i386 。x86_64我们还没打包呢。那怎么办呢 。ok 我们把刚才编译的.a文件拉出来 放到一个文件夹里。然后再在模拟器iPhone5s 或者6 或者6plus 重新编译一下。ok 现在我们已经有了 三个.a文件。一个真机的两个模拟器的。难道我们使用的时候要三个来回不停的切换吗?答案是否定的。

 第四步:ok 下面来讲一下我们如何 将这三个打包成一个通用的.a文件。

通过lipo -create 命令来合并3个静态库文件。( -output  后面的"/Users/username/Desktop/TestPointA/Build/libTestPointA.a" 是合并后的路径和文件名字)

lipo -create "/Users/username/Desktop/TestPointA/Build/Products/Debug-iphoneos/libTestPointA.a" "/Users/username/Desktop/TestPointA/Build/Products/Debug-iphonesimulator/libTestPointA.a" "/Users/username/Desktop/TestPointA/Build/Products/libTestPointA.a" -output "/Users/username/Desktop/TestPointA/Build/libTestPointA.a"

通过这里我们可以看到我把三个.a文件合并成了一个.a文件。下面我们来通过命令行来查看一下 我们刚才打包合并的3合一的.a文件怎么样。

lipo -info libTestPointA.a 
Architectures in the fat file: libTestPointA.a are: armv7 i386 x86_64 arm64

ok 通过上面我们可以看到我们打包的3合一.a文件已经成功搞定。支持了我们所需要的模拟器和真机.

第五步:使用

我们新建一个工程把我们三合一.a文件和我们的.h文件拉到我们的工程里。


然后使用:


ok 。运行一下完全没问题。真机和模拟器 都没问题。 好了。我们已经做了一个能在模拟器和真机同时运行的.a文件,还等什么,你也来试试创建自己的第一个静态库文件吧!just do it!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值