ios 重复引用 静态库_Swift 制作静态库

ce96b8d6f4518a4715dc6809dab07064.png

Github地址:https://github.com/LINGLemon/LXFSwiftApp


Swift不支持.a的静态库,因此只能制作.framework的静态库


动态库和静态库的区别

库: 一段二进制文件+加头文件,使用场景一个是供别人使用,一个是在代码改动较小,减少编译时间,因为只是一段二进制文件,Link一下,即可使用.

Framework: 一种打包方式,简单将二进制文件、头文件和其他一些信息聚合在一起。

iOS中的Framework分类:

  • 系统级别: Dynamic Framework, 系统提供的framework都是动态库,比如UIKit.framework,系统的framwork不需要拷贝目标程序。
  • 用户级别:Static Framwork和Dynamic Framework(Embeded Framework)

Static Framwork: 二进制文件+头文件+资源文件


Embeded Framework: 用户可以制作的动态库,收到iOS平台的沙盒机制和签名机制限制,具有部分动态特性,可以在Extension可执行文件和APP可执行文件中执行,不能在不同app进程中共享,而且需要拷贝到目标程序。

定义优点缺点
静态库一般以.dylib或者.framework结尾,在编译时候,只拷贝一份之后就不会再改变了目标程序没有外部依赖,可以直接运行目标程序体积大
动态库一般以.dylib或者.framework结尾, 并且不会别拷贝到目标程序, 目标程序只会存储指向动态库的指引,等到程序运行,才会被加载同一个份库可供多个程序使用, 运行载入特性使得目标程序体积小1.动态载入会带来一部分的性能损失2.依赖外部环境,如果动态库缺失或者版本错误,就会导致程序无法运行

iOS设备CPU架构


模拟器:i386, x86_64
真机: arm7, arm7s, arm64,最新的设备基本都是arm64


静态库制作


新建Static Framework
Xcode -> Project -> Targets -> + -> 选中 iOS -> Framework

9cceb1616347185cea7457767442686c.png


这里创建StaticFrameworkSDK的工程
新建swift文件

b54873cf80e6887b0efae98165619f34.png


工程配置

  1. Mach-O Type设置(Static Library)

7f54e6e33c9e3ff177a504814b280aef.png


2.version设置

853f14cc19a2bd5bec3482f9bcf37a71.png


3.Build Active Architecture Only(NO,适配所有设备)

853f14cc19a2bd5bec3482f9bcf37a71.png
  1. Dead Code Stripping(NO, 可选)

主要是目的是瘦包

abc7cf76f9a6d149fac2e90090c4ddb6.png


调试
方式一:
分别选择在真机和模拟器command+b编译文件,然后选择Product->这里创建StaticFrameworkSDK的工程.framework showInFinder显示如图俩个文件夹,分别是真机和模拟器, 分别执行

$ lipo -info /Users/wujian/Library/Developer/Xcode/DerivedData/StaticFrameworkSDK-bnsiapbkckebfyefumdziltevphd/Build/Products/Debug-iphoneos/StaticFrameworkSDK.framework/StaticFrameworkSDK  
Non-fat file: /Users/wujian/Library/Developer/Xcode/DerivedData/StaticFrameworkSDK-bnsiapbkckebfyefumdziltevphd/Build/Products/Debug-iphoneos/StaticFrameworkSDK.framework/StaticFrameworkSDK is architecture: arm64
 
lipo -info /Users/wujian/Library/Developer/Xcode/DerivedData/StaticFrameworkSDK-bnsiapbkckebfyefumdziltevphd/Build/Products/Debug-iphonesimulator/StaticFrameworkSDK.framework/StaticFrameworkSDK 
Non-fat file: /Users/wujian/Library/Developer/Xcode/DerivedData/StaticFrameworkSDK-bnsiapbkckebfyefumdziltevphd/Build/Products/Debug-iphonesimulator/StaticFrameworkSDK.framework/StaticFrameworkSDK is architecture: x86_64

可以看出StaticFrameworkSDK文件分别描述设备的CPU架构分别是arm64, x86_64

接下来就要对这俩部分进行合并处理, $ lipo -create [目标文件1] [目标文件2] [输出文件]

lipo -create /Users/wujian/Library/Developer/Xcode/DerivedData/StaticFrameworkSDK-bnsiapbkckebfyefumdziltevphd/Build/Products/Debug-iphoneos/StaticFrameworkSDK.framework/StaticFrameworkSDK /Users/wujian/Library/Developer/Xcode/DerivedData/StaticFrameworkSDK-bnsiapbkckebfyefumdziltevphd/Build/Products/Debug-iphonesimulator/StaticFrameworkSDK.framework/StaticFrameworkSDK -output ~/Desktop/StaticFrameworkSDK.lipo


这里将StaticFrameworkSDK替换真机的StaticFrameworkSDK的文件
接着把模拟器文件夹中的StaticFrameworkSDK.swiftmodule的文件和真机的文件合并

3a242521d428b23d9679fab12f09165c.png


最后将真机的这里将StaticFrameworkSDK.framework托人Demo中,进行测试

02177ee6181b310bd72740bd25848f56.png


方式二:
方式一调试起来很麻烦,每次都要进行重新操作才能重新调试。方式二比较推荐
1.首先将SDK工程放入Demo如图目录

8e9f35b5ee3a6defe13037ed50375771.png
  1. Target -> Framwork, Library and embeded content -> + -> addOther -> StaticFrameworkSDK.xcodeproj, 添加流程和显示结果如下

1150634e1397ad0d6afdbc41bb445ea4.png

6e9dbea64706a1317800989f8965aef8.png

bd00c505aa6bb760f7bc59c03e4b9b73.png


3.新建target

09fabd35ba8549cb3d8877abd1681513.png

29d89df5b334ca16432e82a72547b406.png


4.添加脚本
将脚本地址copy到如下图位置

c086ceb1219ab23c952ea8f1de856266.png


将脚本中的${PROJECT_NAME}替换成自身的framework名
编译一下,lipo -info 会发现支持的CPU架构为i386 armv7 x86_64 arm64。
然后项目就在集成在一起,修改起来就很方便了


原文作者:哈尔滨的酸柠檬
原文地址:https://blog.csdn.net/sinat_31177681/article/details/107460600

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值