Cocoapods - Swift 具有内部静态库依赖性的框架
Cocoapods - Swift framework with internal static library dependency
我正在实施基于 Swift 编写的 iOS 框架。该框架内部依赖于基于 C 的静态库。为了让它工作并基于一些教程,我制作了一个类似于这样的模块映射:
framework module Module {
umbrella header "Module.h"
explicit module ModuleDep {
private header "header1.h"
}
export *
}
基于此,我可以像这样在 Swift 中包含 C 代码:
import Module.ModuleDep
当手动导出框架时,一切似乎都运行良好。可以肯定的是,我希望 Cocoapods 支持我的框架并具有代码可见性(更易于调试)。使它起作用的 podspec 是这样的(省略了一些部分):
Pod::Spec.new do |s|
s.platform = :ios
s.ios.deployment_target = '12.0'
s.module_map = "Module.modulemap"
s.source_files = "Module/*.{h,swift}", "ModuleDep/*.h"
s.vendored_libraries = "ModuleDep/*.a"
s.swift_version = "5.1"
end
根据我的理解,当这是您提供给用户的工件时使用 vendored_libraries
,这就是我不喜欢这个解决方案的原因。
我也试过这个规格变体:
Pod::Spec.new do |s|
s.platform = :ios
s.ios.deployment_target = '12.0'
s.module_map = "Module.modulemap"
s.source_files = "Module/*.{h,swift}", "ModuleDep/*.h", "ModuleDep/*.a"
s.swift_version = "5.1"
end
但它无法编译。
那么正确的做法是什么?或者我做错了什么?
由于您使用静态库作为依赖项,因此您必须在 podspec 文件中将其指定为库。这就是为什么您的第二种方法不起作用的原因,因为它是库而不是源文件。
如 docs vendored_libraries
中所述,适用于 Pod 附带的库。同样在您的情况下,基于 C 的静态库是必须随 Pod 一起提供的依赖项。因此,在您的情况下使用 vendored_libraries
应该没问题。
我正在实施基于 Swift 编写的 iOS 框架。该框架内部依赖于基于 C 的静态库。为了让它工作并基于一些教程,我制作了一个类似于这样的模块映射:
framework module Module {
umbrella header "Module.h"
explicit module ModuleDep {
private header "header1.h"
}
export *
}
基于此,我可以像这样在 Swift 中包含 C 代码:
import Module.ModuleDep
当手动导出框架时,一切似乎都运行良好。可以肯定的是,我希望 Cocoapods 支持我的框架并具有代码可见性(更易于调试)。使它起作用的 podspec 是这样的(省略了一些部分):
Pod::Spec.new do |s|
s.platform = :ios
s.ios.deployment_target = '12.0'
s.module_map = "Module.modulemap"
s.source_files = "Module/*.{h,swift}", "ModuleDep/*.h"
s.vendored_libraries = "ModuleDep/*.a"
s.swift_version = "5.1"
end
根据我的理解,当这是您提供给用户的工件时使用 vendored_libraries
,这就是我不喜欢这个解决方案的原因。
我也试过这个规格变体:
Pod::Spec.new do |s|
s.platform = :ios
s.ios.deployment_target = '12.0'
s.module_map = "Module.modulemap"
s.source_files = "Module/*.{h,swift}", "ModuleDep/*.h", "ModuleDep/*.a"
s.swift_version = "5.1"
end
但它无法编译。
那么正确的做法是什么?或者我做错了什么?
由于您使用静态库作为依赖项,因此您必须在 podspec 文件中将其指定为库。这就是为什么您的第二种方法不起作用的原因,因为它是库而不是源文件。
如 docs vendored_libraries
中所述,适用于 Pod 附带的库。同样在您的情况下,基于 C 的静态库是必须随 Pod 一起提供的依赖项。因此,在您的情况下使用 vendored_libraries
应该没问题。