↩️

Cocoapods Compile

CocoaPods 编译问题

支持@import导入

  1. podfile中对target下的某个依赖指定:modular_headers => true
  2. podfile中对target整体使用use_modular_header!,(这里的!是必须的意思),可以使用:modular_headers => false对部分进行排除

指定使用library库还是framework框架

框架 = 库(静态库/动态库)+ .h(头文件) + bundle(资源包)
.tbd 文件本质上是一个 YAML 文本文件,其描述了需要链接的动态库信息,其主要目的是 减小应用程序的下载大小
对于 OSX/iOS,静态库的后缀是 .a,动态库的后缀是 .dylib;在 UNIX 中,静态库的后缀是 .a,动态库的后缀是 .so
在 OSX/iOS 中,库采用 Mach-O 格式进行存储;在 UNIX 中,库采用 ELF 格式进行存储。
  1. use_frameworks!强制使用框架而不是库的形式
  2. 可以再其后主动使用:link: => :dynamic或static形式

👆更正!!! ↩️

为什么会有use_framework!

Xcode9之前,不支持swift静态库编译,所以swift不得不使用framework[应该是embed framework]的形式进行编译;大量使用动态库会导致应用启动时间变长。 Xcode9之后开始支持swift静态库编译,所以在CocoaPods1.5.0以后,podfile已经不需要强制使用动态库编译。

为什么OC的pod要使用modular_headers!

如果一个swift pod 依赖了一个oc的pod,开启了modular headers后,就是讲pod转化为Modular,而Modular可以再swift中直接import,不再需要经过bridging-header进行桥接,从而简化了swift引用OC的方式。

CococPods编译

module.modulemap 是一个模块映射文件,能够使框架支持模块(以及子模块),在编译时也能够利用模块编译的优势进行加速

会将每个pod转换为UmbrellaFramework并添加modulemap使其支持模块 每个pod的SupportFile中会有两个对应文件PodName-umbrella.hPodName.modulemap

© 2023 WANG   •  Powered by Apple