Swift Framework 编译成动态链接库和静态链接库

1. 静态库和动态库

ⅰ. 区别

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

ⅱ. iOS/Mac 中的静态库

.a和.framework 文件

ⅲ. iOS/Mac 中的动态库

.dylib和.framework 文件

ⅳ. 使用静态库的原因

  • 共享代码,方便使用。
  • 实现iOS 程序的模块化,固定的业务模块话,减少开发的重复劳动。
  • 和别人分享代码,但又不想让别人知道代码的具体实现。
  • 开发第三方SDK 的需要。

2. 打包时注意要点

  1. AppDelegate

AppDelegate 不能打包进静态库,所以 AppDelegate.m 文件在编译的文件列表中要撤选,在 AppDelegate 中做的一些操作要全部封装成接口暴露出去

  1. 第三方库

项目中的第三方库优先使用 CocoaPods 管理,可以不用打包进自己的静态库。如果我们打包整个工程的时候没有把用到的第三方框架一起打包,那么提供静态库的时候,要说明依赖哪些第三方的库。

  1. 资源文件

默认情况下,静态库只会打包代码文件,像图片、xib、storyboard、plist文件等都不会被打包,就需要创建一个bundle 文件夹,把所有的图片、plist 文件、Images.xcassets、xib、storyboard 都打包进去,而且项目中用到图片的时候,只能通过 bundle/xxx.png 文件名的方式来设置。

3. 打包步骤

a. 创建Framework

1. 首先打开xcode新建项目选择Framework

2. 在Product Name 和 Organization Identifier中填写需要的名称,在Language中选择Swift。然后点击创建。

3. 在创建完成后高于xcode12的版本会默认隐藏Products文件。需要找到项目的文件目录,找到其中.xcodeproj文件,右键选择显示包文件。

然后点击project.pbxproj文件将其中mainGroup的值赋给productRefGroup,如下图所示。

4. 然后创建一个swift文件,创建一个类将方法写入其中。其中注意要写带 public init(),且所有方法都要加上public下图为例

5. 然后点击项目的根目录,找到Build Settings如下图所示

6. 將 下图红框中的Debug 改成 Yes,將Release 改成 No

7. 将下图红框中的Dead Code Stripping 改成 No,Mach-O Type 改成 Static Library

8. 然后按command+B构建Framework包但是需要真机和模拟机各构建一份,两者不能通用。

9. 然后找到/Users/用户名/Users/xuyi/Library/Developer/Xcode/DerivedData/你的Framework项目/Build/Products。这里面有构建的真机和模拟机的文件,再将里面的Framework文件导入到需要该Framework的项目中。到此完成。

4. 静态 Linux SDK

静态 Linux SDK 可以在 Swift 编译器和包管理器支持的任何平台上使用;这意味着您可以在 macOS 上开发和测试您的程序,然后构建并部署到基于 Linux 的服务器(无论是在本地运行还是在云端的某个地方运行)

参考官方文档:

Swift.org

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值