我创建了一个带有两个文件的objective-c pod:
Source/SomeViewController.h
Source/SomeViewController.m
我还在pod中创建了一个桥接标题:
Source/Bridging-Header.h
内容:
#import "SomeViewController.h"
我的podspec看起来像这样:
Pod::Spec.new do |s|
s.name = 'TestLib'
s.version = '0.0.1'
s.license = 'MIT'
s.ios.deployment_target = '7.0'
s.source_files = 'Source/*.{h,m}'
s.requires_arc = true
s.xcconfig = { 'SWIFT_OBJC_BRIDGING_HEADER' => 'Source/Bridging-Header.h' }
end
我创建了一个演示项目pod init
并插入了我的pod。然后在pod install
后得到以下输出:
安装TestLib 0.0.1(原为0.0.1) 生成Pods项目 集成客户端项目
[!] The `TestLibProject [Debug]` target overrides the `SWIFT_OBJC_BRIDGING_HEADER` build setting defined in `Pods/Target Support Files/Pods-TestLibProject/Pods-TestLibProject.debug.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
[!] The `TestLibProject [Release]` target overrides the `SWIFT_OBJC_BRIDGING_HEADER` build setting defined in `Pods/Target Support Files/Pods-TestLibProject/Pods-TestLibProject.release.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
当我打开TestLibProject.xcworkspace
文件时,我发现pod已正确安装,但是pod中的桥接标头未正确安装。我试图做的Swift项目:
let vc: SomeViewController
这会产生错误,因为未安装来自pod的桥接标头。
如何配置podspec
以便正确安装pod的桥接标头?
答案 0 :(得分:1)
Podspecs构建框架,框架不能包含桥接头。如果要将非模块化代码导入Swift框架,则需要使用自定义模块映射,而不是例如 MyLib / module.modulemap :< / p>
framework module MyLib {
umbrella header "MyLib.h"
// Load an SDK header, e.g. CommonCrypto.h
header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/CommonCrypto/CommonCrypto.h"
export *
module * { export * }
}
在那里,您可以在Xcode项目中指定自定义模块映射(作为 .xcconfig 文件中的MODULEMAP_FILE
设置,或作为模块映射文件目标的构建设置。
现在,最后一块拼图:podspec。您需要设置module_map
:
Pod::Spec.new do |s|
# …
s.module_map = 'MyLib/module.modulemap'
end
上面是SQLite.swift如何分配自己,作为一般框架和pod。
编辑:似乎我错过了原始问题的重点,正如澄清in this thread。 OP希望使用pod框架的桥接头自动将其自身加载到安装项目的Swift代码中。这是不可能的。即使Swift框架 支持桥接头,它们也只能将Objective-C / C代码(即私有框架代码)加载到框架的Swift代码中。