4

我创建了一个包含两个文件的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 的桥接头?

4

1 回答 1

1

Podspecs 构建框架,框架不能包含桥接头。如果要将非模块化代码导入 Swift 框架,则需要使用自定义模块映射,例如MyLib/module.modulemap

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 项目中指定自定义模块映射(作为.xcconfigMODULEMAP_FILE文件中的设置,或作为目标的Build Settings的模块映射文件

现在,拼图的最后一块:podspec。您需要设置module_map

Pod::Spec.new do |s|
  # …
  s.module_map = 'MyLib/module.modulemap'
end

以上是SQLite.swift是如何分发自身的,既作为一个通用框架,也作为一个 pod。


编辑:好像我错过了原始问题的要点,正如在这个线程中所阐明的那样。OP 希望使用 pod 框架的桥接头自动将自身加载到安装项目的 Swift 代码中。这是不可能的。即使 Swift 框架确实支持桥接头,它们也只能将 Objective-C/C 代码(私有框架代码)加载到框架的 Swift 代码中。

于 2015-06-03T00:44:35.930 回答