首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不公开所有符号的情况下为iOS创建静态库

基础概念

静态库(Static Library)是一种包含可重用代码的文件格式,通常用于iOS开发中。它包含了编译后的目标文件(.o文件),可以在编译时链接到应用程序中。静态库的优点是可以减少应用程序的体积,因为代码被直接嵌入到应用程序中。

相关优势

  1. 减少应用体积:静态库中的代码被直接嵌入到应用程序中,不需要额外的运行时库。
  2. 简化部署:不需要担心运行时库的兼容性问题,因为所有需要的代码都在应用程序中。
  3. 提高性能:由于代码被直接嵌入到应用程序中,运行时不需要动态加载库,可以提高性能。

类型

  • 框架(Framework):一种特殊的静态库,包含资源文件和头文件,结构类似于应用程序包。
  • 普通静态库:只包含编译后的目标文件。

应用场景

  • 代码复用:将常用的功能封装成静态库,可以在多个项目中复用。
  • 模块化开发:将应用程序拆分成多个模块,每个模块可以单独开发和测试。

创建不公开所有符号的静态库

在不公开所有符号的情况下创建静态库,可以通过以下步骤实现:

  1. 创建静态库项目
    • 打开Xcode,选择创建一个新的Cocoa Touch Static Library项目。
  • 配置编译选项
    • 在项目的Build Settings中,找到Other Linker Flags,添加-ObjC-all_load选项。
    • 找到Enable Bitcode,将其设置为NO
  • 编写代码
    • 编写你想要封装的代码,并将其放在静态库项目中。
  • 隐藏符号
    • 在项目的Build Settings中,找到Symbols Hidden by Default,将其设置为YES
    • 使用__attribute__((visibility("hidden")))属性来隐藏特定的符号。例如:
    • 使用__attribute__((visibility("hidden")))属性来隐藏特定的符号。例如:
  • 构建静态库
    • 选择Product -> Build,构建静态库。
  • 使用静态库
    • 将生成的静态库文件(.a文件)和头文件添加到你的应用程序项目中。
    • 在应用程序项目的Build Settings中,找到Library Search Paths,添加静态库的路径。
    • 在应用程序项目的Build Phases中,添加静态库文件到Link Binary With Libraries

示例代码

假设你有一个简单的静态库项目,包含一个隐藏的函数:

代码语言:txt
复制
// MyLibrary.h
#import <Foundation/Foundation.h>

@interface MyLibrary : NSObject
+ (void)publicFunction;
@end

// MyLibrary.m
#import "MyLibrary.h"

__attribute__((visibility("hidden")))
void hiddenFunction() {
    NSLog(@"This function is hidden");
}

@implementation MyLibrary
+ (void)publicFunction {
    NSLog(@"This is a public function");
    hiddenFunction();
}
@end

参考链接

通过以上步骤,你可以创建一个不公开所有符号的静态库,并在你的iOS应用程序中使用它。

相关搜索:如何在不触及每个JSP文件的情况下为所有JSP设置pageEncoding?如何在不丢失列名的情况下为row_to_json的输入创建行?如何在不指定列名的情况下为任何查询动态创建下拉菜单Laravel -如何在没有数据库的情况下为API创建身份验证如何在不更改tomcat-users.xml的情况下为静态tomcat webapps提供基本的http身份验证?如何在不创建新的单独文件的情况下为页面的链接添加密码保护?如何在不为iphone和ipad创建单独的xib的情况下为所有ipad和iphone创建通用的xib?不是故事板Typescript :如何在不传递所有属性的情况下创建类型化对象如何在不声明所有参数的情况下在mySQL中创建存储过程?Scala -如何在不包装所有方法的情况下创建包装器类如何在不使用所有子节点中的XNamespace的情况下为子节点创建具有默认命名空间的XElement如何在不命名列的情况下,在所有其他列的函数中创建新列如何在不丢弃数据库本身的情况下删除数据库中的所有表?如何在不创建新环境的情况下使用yml文件安装python库列表如何在不更改源文件的情况下重新生成exe时自动链接新的静态库?如何在不访问存储库的情况下创建生成定义(在visual studio online中)如何在不创建文件的情况下通过外部库获取写入ostream的原始字节如何在mySql中不指定数据库名称的情况下获取当前数据库的所有列如何在不指定名称的情况下创建一个通用shell来运行所有C程序如何在不指定ID的情况下创建Loopback4模型、存储库和控制器
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

大型IM稳定性监测实践:手Q客户端性能防劣化系统的建设之路

大概的运行机制如下:此方案的优点:1)性能测试和性能报告创建审批左移到开发阶段;2)覆盖场景可拓展:测试用例云端独立管理派发;3)性能维度可拓展:支持 Instruments 所有模板;4)静态检查可拓展...[2] 原生符号扫描:原生符号扫描工具,帮助扫描工程所有依赖库中存在重复的库函数(符号) (主要关注 C 符号重复问题)。...这些实用方法库通常是广泛使用的基础实用库,如 FishHook、zip、libffi 等。...若有多个业务静态库都集成了同源的基础实用库,在链接 (ld) 生成可执行程序时,链接器会选择其中一份链接 (取决于链接先后顺序等因素,可以通过 LinkMap 确认选用的实现),它们虽然具有相同的符号...工具的工作流程是解析链接 (ld) 参数,遍历每一个参与链接的静态库,使用 nm 工具等工具读取它们包含的对外导出 (External & Defined) 符号。

11210

iOS 静态库详解与开发

导入头文件 导入UIKit的头文件,这是创建一个库所需要的。当你在创建不同的组成类时,你将会为它们添加到这个文件中,确保它们能够被库的使用者获取到。...33.png 如果不结合头文件,静态库是没有用的,静态库编译一组文件,在这些文件中类和方法都以二进制数据的形式存在。 在静态库中类分为两类,一类是公开的public,一类是私有的只能内部访问使用。...接下来,需要在build栏中添加新的phase,来包含所有头文件。...55.png 把FBYSDKDemo.h从项目中拖到Copy Headers下的Public部分。 这里是要保证用户可以使用库中公开的类或者接口。 ?...77.png 因为你创建好的静态文件供他人使用,最好禁掉无效代码和debug符号,让用户自己选择对自己的项目有利的部分使用。

75420
  • .NET周刊【12月第1期 2023-12-06】

    文章首先指出了之前方案的不足,如不同平台 URL 不统一、音视频文件无法播放、Windows 上大文件显示限制和 iOS/Mac 的跨域问题。...通过数字和特殊字符定义执行时间,如"*"代表所有值,"-"定义范围。...其次,要启用源代码单步执行,包括取消选择"启用仅我的代码",选择"启用源链接支持",并在"符号"下选择"Microsoft 符号服务器"。配置后,首次启动应用时会有符号加载时间。...如何在实际设备(例如 iPhone)上从仅在 Windows 上的 Visual Studio 调试和执行 .NET MAUI iOS 应用程序。...-jsinterop 了解如何在 .NET 8 中将静态服务器渲染 (SSR) 与 Blazor 结合使用时实现和运行自定义 JavaScript。

    26710

    Crash之防测漏篇

    1 APP闪退背后的秘密 以下画面相信负责过APP项目一定见过,它是怎么出现的呢? ? 以下为基于Android源码分析的完整代码调用关系: ?...日志信息中,比较关键的信是错误类型。这里带大家了解一下目前移动端关于异常的整体分类情况。 对Android来说主要有以下几种: ? iOS下crash大致可如下划分: ?...如图,栈信息及代码行可以很容易定位到出问题的子模块,排查起来难度不大。 ? 比较复杂的问题可能集中在crash的栈都是系统信息或者第三方库,或者多个模块存在耦合的代码,排查起来难度比较大。...以下是crash跟进总结过程中的一些可深入的点,如: 1 体验类问题 体验类问题,如保证异常后的恢复无明显异常: ?...调试之 crash log分析 http://www.jianshu.com/p/12a2402b29c2 12、 分析iOS Crash文件:符号化iOS Crash文件的3种方法 http://www.cocoachina.com

    1.4K81

    【腾讯TMQ】Crash 之防测漏篇

    日志信息中,比较关键的信是错误类型。这里带大家了解一下目前移动端关于异常的整体分类情况。...如图,栈信息及代码行可以很容易定位到出问题的子模块,排查起来难度不大。 比较复杂的问题可能集中在crash的栈都是系统信息或者第三方库,或者多个模块存在耦合的代码,排查起来难度比较大。...以下是crash跟进总结过程中的一些可深入的点,如: 1.体验类问题 体验类问题,如保证异常后的恢复无明显异常: 2.代码质量提升 crash分析总结中,可以把常见的坑,提取成静态扫描规则加入到代码扫描中...://woshijpf.github.io/2016/06/14/Android-NDK-Tombstone-Crash-分析/ 8、 分析iOS Crash文件:符号化iOS Crash文件的3种方法...调试之 crash log分析 http://www.jianshu.com/p/12a2402b29c2 12、 分析iOS Crash文件:符号化iOS Crash文件的3种方法 http://www.cocoachina.com

    2.1K00

    iOS开发静态库SDK指南: 搭建一个提高开发效率的静态库工程、混淆带有bitcode sectname 的静态库

    文章目录 引言 I、搭建一个提高开发效率的静态库工程 II、采用 `pod lib` 开发并打包静态库 III、iOS逆向与安全相关知识 3.1 iOS安全【Confusing static libraries...with Bitcode Sectname】 3.2 iOS逆向【动态库的注入原理】 IV、制作静态库的注意点 4.1 静态库中包含了Category的注意事项 4.2 合并真机和模拟器的.a文件...根据源代码的公开情况,库可以分为2种类型:1、开源库(公开源代码,能看到具体实现,比如SDWebImage、AFNetworking);2、闭源库(不公开源代码,是经过编译后的二进制文件,看不到具体实现...with Bitcode Sectname】 iOS安全:【混淆带有bitcode sectname 的静态库】 【代码混淆】1、基于编译器混淆静态库(StaticLib)2、字符串加密:使用clang-c...可以直接使用 多文件处理:如果静态库需要暴露出来的 .h 比较多,可以考虑创建一个主头文件(一般 主头文件 和 静态库 同名)在主头文件中包含所有其他需要暴露出来的 .h 文件,使用静态库时,只需要#import

    98020

    ​iOS Class Guard github用法、工作原理和安装详解及使用经验总结

    在编译期间内,所有定义在头文件内的symbol都会用对应的生成的不同的符号替换并编译。iOS-Class-Guard也提供了对cocoapod库的混淆。...注意 iOS-Class-Guard不混淆system symbol,所有如果在自定义类中的某些属性和方法与system symbol有相同的名字,则不会被混淆。...输出头文件路径,使用 -O参数, 如 -O SWTableView/symbols.hclass过滤ios-class-guard能够过滤出 不希望混淆的类。...比如,预编译的静态库。 iOS编码风格假定每个类都使用2-3个字符的前缀,可以利用这一点过滤进 或者 过滤出整个命名空间。举例,过滤出所有APH MC的命名空间 -F '!APH*' -F '!...使用--dsym参数,iOS Class Guard会替换提供的dSYM文件内的原符号和混淆符号。

    32610

    iOS15 安全漏洞分析:价值10万美元的漏洞曝光

    设备使用信息(不同情况下的设备取货、推送通知计数和用户操作等) 所有具有各自 bundle ID 的应用程序的屏幕使用时间信息和会话计数 有关设备配件及其制造商、型号、固件版本和用户分配名称的信息 应用程序崩溃时带有...),以及一些附件(如URL和文本)) 完整的文件系统读取对 Speed Dial 数据库和 Address Book(通讯录) 数据库的访问,包括联系人头像和其他元数据,如创建和修改日期(我刚刚在 iOS...作者在公开的漏洞源代码中,示例了动态调用苹果认为是私人 API 的一部分 C 函数,以免被静态分析检测到。...) (OpaquePointer, @escaping (OpaquePointer) -> Void) -> Void).self) 其中 dlopen 和 dlsym 系统库函数,它们允许加载动态库并解析其中的符号...因为每个 iOS 二进制文件都会有一个名为 dyld_stub_binder 的符号,它是从与 dlopen 和 dlsym 相同的库中导入的。

    1.4K20

    【Linux探索学习】第二十五弹——动静态库:Linux 中静态库与动态库的详细解析

    编译器会将库文件的所有目标文件内容复制到程序中,生成一个包含所有必要代码的可执行文件。 动态库的链接发生在程序运行时。动态链接器会在程序启动时加载所需的共享库,并将其中的符号解析并链接到程序中。...如何在 Linux 中创建静态库 创建静态库的步骤 编写源代码: 创建一个简单的 C 文件,定义一些函数: // mathlib.c #include int add(int a,...如何在 Linux 中创建动态库 创建动态库的步骤 编写源代码: // mathlib.c #include __attribute__((visibility("default"...动态库:动态库文件是一个共享对象,包含了可以在多个程序中共享的代码。操作系统通过动态链接器(如 Linux 上的 ld.so)负责加载动态库并解析符号。 8....链接器会根据符号表进行符号解析和重定位。 库的跨平台使用 动态库的跨平台使用通常依赖于编译时指定的架构和平台。使用如 autoconf、CMake 等工具可以帮助开发者更好地进行跨平台构建。

    13310

    《iOS Human Interface Guidelines》——Table View表视图

    NOTE 所有四个标准表单元格风格都允许额外的表视图元素,比如勾选符号和扩展指示器。添加这些元素会减少标题和子标题可使用的单元格宽度。 清晰而有效地使用表视图来显示大量或少量的信息。...查看UITableViewHeaderFooterView Class Reference来学习如何在你的代码中使用页眉页脚视图。...用户期待当他们点击列表条目时表中的行能简短地高亮一下。在点击之后,用户期待一个新视图的出现(或者行显示一个勾选符号)来表示条目被选中了。 如果表内容是冗长的或复杂的,不要等到所有数据都获取之后再显示。...即使这个技术不推荐用户那些频繁处理数据变更的app,它仍然可以帮助更多静态app立即给用户一些静态信息。当你决定这样做之前,计量数据改变的有多频繁以及有多少用户依赖于快速看到新数据。...如果数据加载的很慢或很复杂,告诉用户处理仍在继续。如果一个表只包含复杂数据,也许很难立即显示有用的数据。在这种情况下,避免显示空行很重要,因为空行表示你的app停止了。

    2.4K20

    Android开发快速入门iOS开发(概览)

    ) 静态库与动态库的区别主要在于在打包链接时的操作不一样; 4.3.1 静态库 静态库在打包生成可执行的目标文件时,会把汇编生成的目标文件.o与引用的库一起链接打包到目标文件中,静态库的特点: 在编译期完成对函数库的链接...运行时与函数库不再有关,可独立运行; 会比较占用空间(如果有函数库被多个静态库依赖,则这个函数库里会有多份拷贝) 更新麻烦,如果静态库A更新了,则所有依赖静态库A的库都需要重新编译,更新; 加载速度较动态库快...4.3.2 动态库 动态库与静态库类似,只是在打包时不用把所链接的文件全部拷贝进目标文件中,只是拷贝一些重定位和符号信息,这些信息在运行时可完成真正的链接,动态库的特点: 在运行时完成对函数库的链接(...不同应用程序调用相同的库,在内存里只需要有一份该库的实例); 运行时与函数库有关,需要依赖对应的函数库才可运行; 会比较省空间(只需要拷贝少量的符号与链接信息) 更新简单,只需要更新对应的动态库就可以了...在创建一个Helloword的 Demo时可直接利用Xcode创建项目的选项,一步步按照操作进行就可以了;虽然iOS也可以在.storyboard文件里进行界面的编写,但绝大部分时候都是需要使用代码来创建界面的

    1.1K20

    咋设计SDK?看这个基础教程攻略!

    我们会根据库的调用方法分为“静态库”和“动态库”两种: 静态连接:一般是指在创建应用程序的时候,将库集成进去,这样做的好处就是应用程序包自身可以独立运行,而不好的地方就是包会略显臃肿,库不能共享(静态库经常以....a 结尾); 动态连接:创建应用的时候只约定好与库之间的调用关系,而不彻底将库包集成进应用。...优劣与静态库相反,动态链接库需要库环境,但由于本身不集成库内容,会比较小,同时也为和其他应用共享库的使用提供了可能(常见的动态库是 Windows 下的 .dll,Linux 下的 .so,Mac 下的...,所以如果两个程序都用了某个静态库,那么每个二进制可执行文件里面,都会含有这份静态库的代码; 动态库:链接时不复制,而是在程序启动后动态加载,然后再进行符号决议(符号绑定)。...了解 iOS 的动态库(即被阉割的动态库) 有一个背景知识需要注意,iOS 官方规定不允许存在动态库,并且所有的 IPA 都需要经过 Apple 的私钥加密后才能用,即使你用了动态库也会因为签名错误而无法加载

    1K50

    iOS客户端启动速度优化实践

    动态链接库包括:iOS 中用到的所有系统 framework,加载OC runtime方法的libobjc,系统级别的libSystem,例如libdispatch(GCD)和libsystem_blocks...dylib 动态链接库 framework就是动态链接库和相应资源包含在一起的一个文件夹结构。 bundle 资源文件 只能用dlopen加载,不推荐使用这种方式加载。...所有动态链接库和我们App中的静态库.a和所有类文件编译后的.o文件最终都是由dyld(the dynamic link editor),Apple的动态链接器来加载到内存中。...C++静态全局变量的创建(通常是类或结构体)(non-trivial initializer) 比如一个全局静态结构体的构建,如果在构造函数中有繁重的工作,那么会拖慢启动速度 Objc的load函数和C...pods中的代码,不包含主端的业务逻辑代码,一次典型的冷启动基本接近2s iPhone6 iOS9.3.5系统测试主要时间在加载动态库,类/方法的初始化还有符号地址绑定阶段。

    1.9K10

    CMake简易指南

    :描述本地处理器类型为了跨平台差分使用方便,一般会在一个地方检测当前需要编译的平台变量,如:# 检测当前编译平台# iOS没有官方工具链,三方工具链部分设置的名称为iOS,部分为IOS,此处统一改成小写...链接选项有CMAKE_STATIC_LINKER_FLAGS / CMAKE_SHARED_LINKER_FLAGS / CMAKE_EXE_LINKER_FLAGS分别指静态库、动态库、可执行文件的链接选项...PRIVATE-隐式依赖:表示仅当前目标生效,依赖目标不生效。INTERFACE:用于INTERFACE类型的目标(如:导入库,空库),依赖目标生效,继承方式等同PUBLIC。..._ 开头的属性设置均适用该继承方式,一般来说,INTERFACE使用情况较少,通常用于符号导出等特殊场景。...几乎包含交叉编译中涉及的所有改动,iOS 由于没有 Apple 没有提供官方支持,仅有开源项目 ios-cmake 可用,下文为 Linux 下 ARM 编译工具链样例:# 指定目标系统名称,不指定时取

    87050

    iOS静态库SDK开发指南

    根据源代码的公开情况,库可以分为2种类型: 1、开源库(公开源代码,能看到具体实现,比如SDWebImage、AFNetworking);2、闭源库(不公开源代码,是经过编译后的二进制文件,看不到具体实现...本身已经包含了 .h 和 其它资源文件,可以直接使用 多文件处理:如果静态库需要暴露出来的 .h 比较多,可以考虑创建一个主头文件(一般 主头文件 和 静态库 同名)在主头文件中包含所有其他需要暴露出来的...https://kunnan.blog.csdn.net/article/details/73872024 III、采用 pod lib 开发并打包静态库 比我之前自己搭建的模板更方便,可利用iOS CocoaPods...with Bitcode Sectname】 iOS安全:【混淆带有bitcode sectname 的静态库】 不需要源代码就可以进行混淆https://blog.csdn.net/z929118967.../article/details/76671425 4.2 iOS逆向【动态库的注入原理】 (基于修改Mach-O 的Load Command、利用环境变量DYLD_INSERT_LIBRARIES、在挂载的进程上创建一个挂起的线程

    1.1K50

    如何设计编写一个 SDK

    我们会根据库的调用方法分为“静态库”和“动态库”两种: 静态连接:一般是指在创建应用程序的时候,将库集成进去,这样做的好处就是应用程序包自身可以独立运行,而不好的地方就是包会略显臃肿,库不能共享(静态库经常以....a 结尾); 动态连接:创建应用的时候只约定好与库之间的调用关系,而不彻底将库包集成进应用。...优劣与静态库相反,动态链接库需要库环境,但由于本身不集成库内容,会比较小,同时也为和其他应用共享库的使用提供了可能(常见的动态库是 Windows 下的 .dll,Linux 下的 .so,Mac 下的...,所以如果两个程序都用了某个静态库,那么每个二进制可执行文件里面,都会含有这份静态库的代码; 动态库:链接时不复制,而是在程序启动后动态加载,然后再进行符号决议(符号绑定)。...了解 iOS 的动态库(即被阉割的动态库) 有一个背景知识需要注意,iOS 官方规定不允许存在动态库,并且所有的 IPA 都需要经过 Apple 的私钥加密后才能用,即使你用了动态库也会因为签名错误而无法加载

    1.3K50

    静态拦截iOS对象方法调用的简易实现

    最近出现了几篇关于二进制重排启动优化的文章。所有方案中都需要事先统计所有的函数调用情况,并根据函数调用的频次来进行代码的重排。 这些函数调用中,OC对象的方法调用最多。...因为静态库其实只是一个编译阶段的中间产物,静态库目标文件中的所有引用的外部符号会保存到一张字符串表中,所有函数调用都只是记录了函数名称在字符串表的索引位置,在链接时会才会根据符号名称来替换为真实的函数调用指令...实现静态库符号替换的Run Script脚本。 这是最为关键的一步,我们可以实现一个符号替换的程序,然后在Run Script脚本中 执行这个符号替换程序。...符号替换程序的输入参数就是主工程中所链接的所有静态库的路径。至于这个符号替换程序如何编写则没有限制,你可以用ruby编写也可以用python也可以用C语言编写。...无论用何种方法实现,你都需要首先了解一下静态库.a的文件结构。你可以从:《深入iOS系统底层之静态库》一文中掌握到一个静态库文件的组成结构。

    1.8K30

    QQ 客户端性能稳定性防劣化系统 Hodor 技术方案

    原生符号扫描: 原生符号扫描工具,帮助扫描工程所有依赖库中存在重复的库函数(符号) (主要关注 C 符号重复问题)。...这些实用方法库通常是广泛使用的基础实用库,如 FishHook、zip、libffi 等。...若有多个业务静态库都集成了同源的基础实用库,在链接 (ld) 生成可执行程序时,链接器会选择其中一份链接 (取决于链接先后顺序等因素,可以通过 LinkMap 确认选用的实现),它们虽然具有相同的符号...通过原生符号扫描工具,扫描出重复的库函数,有助于标识出上述这样"存在多份重复选其一不兼容"的潜在风险。...工具的工作流程是解析链接 (ld) 参数,遍历每一个参与链接的静态库,使用 nm 工具等工具读取它们包含的对外导出 (External & Defined) 符号。

    83612

    GN语言和操作

    或.so只能在运行时加载source_set个轻量级的虚拟静态库(通常比真正的静态库更可取,因为它的构建速度会更快)static_library.lib或.a文件(通常你会想要一个source_set)...component源集或共享库,取决于构建类型test测试可执行文件 在移动设备上,这将为测试创建适当的本机应用程序类型app可执行文件或Mac / iOS应用程序android_apk制作一个APK。...您希望这些设置既适用于第三方库本身的编译,也适用于使用该库的所有目标。...您的.gni文件可以定义不导出到文件临时变量,通过使用名称中的前面的下划线来包含它,就像_this。 2. 路径处理 通常情况下,您需要创建一个文件名或相对于不同目录的文件名列表。...gn与Blaze的区别和相似之处 Blaze是Google的内部构建系统,现在已经作为Bazel公开发布。它启发了一些其他系统,如Pants和Buck。

    1.7K10

    保姆级教程:写出自己的移动应用和小程序(篇二)

    我们会根据库的调用方法分为“静态库”和“动态库”两种: 静态连接:一般是指在创建应用程序的时候,将库集成进去,这样做的好处就是应用程序包自身可以独立运行,而不好的地方就是包会略显臃肿,库不能共享(静态库经常以....a 结尾); 动态连接:创建应用的时候只约定好与库之间的调用关系,而不彻底将库包集成进应用。...优劣与静态库相反,动态链接库需要库环境,但由于本身不集成库内容,会比较小,同时也为和其他应用共享库的使用提供了可能(常见的动态库是 Windows 下的 .dll,Linux 下的 .so,Mac 下的...,所以如果两个程序都用了某个静态库,那么每个二进制可执行文件里面,都会含有这份静态库的代码; 动态库:链接时不复制,而是在程序启动后动态加载,然后再进行符号决议(符号绑定) 。...了解 iOS 的动态库(即被阉割的动态库) 有一个背景知识需要注意,iOS 官方规定不允许存在动态库,并且所有的 IPA 都需要经过 Apple 的私钥加密后才能用,即使你用了动态库也会因为签名错误而无法加载

    72400
    领券