创建依赖于静态库的Pod

我正在尝试创建Pod,它依赖于静态库(.a文件+标题,其结构应该保留用于我的pod编译)并且我不想将我的静态库链接到将使用我的pod的Application,它只是内部依赖,没有标题或lib本身应暴露在Pod之外。 如何为这种情况创建podspec?

看起来这会有点混乱……一种方法是将静态库重新编译为dylib,然后根据需要加载符号。 通过这样做,您将不必触摸.podspec文件。 我假设您正在使用Swift 3并希望从库中加载C函数。

如果您没有源或无法重新编译静态库,则可以使用本指南将其转换为dylib。

我将添加一个关于如何从libcommonCrypto.dylib动态加载CCHmac函数的libcommonCrypto.dylib

 /// - Returns: A function pointer to CCHmac from libcommonCrypto private static func loadHMACfromCommonCrypto() -> CCHmac { let libcc = dlopen("/usr/lib/system/libcommonCrypto.dylib", RTLD_NOW) return unsafeBitCast(dlsym(libcc, "CCHmac"), to: CCHmac.self) } 

如果您不能/不会从头文件中加载符号,则必须自己定义它们。

 private typealias CCHmac = @convention(c) ( _ algorithm: CUnsignedInt, _ key: UnsafePointer, _ keyLength: CUnsignedLong, _ data: UnsafePointer, _ dataLength: CUnsignedLong, _ macOut: UnsafeMutablePointer ) -> Void 

我最终将带有标题的静态库包装到框架文件夹中,并将此框架添加到vendored_frameworks podspec字段并添加标题搜索路径

 s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(FRAMEWORK_SEARCH_PATHS)/FrameworkName.framework/Headers" } 

与CocoaPods一起,我能够将我的二进制文件和标题分别链接到Xcode框架目标并使用Carthage分发我的库