一个pod包含第三方框架无法在swift

时间:2015-08-20 16:14:51

标签: ios swift cocoapods

我想创建一个只包含其他公司开放平台提供的框架和捆绑资源的pod。但是我遇到了一些问题。

在Objective-C项目中

第一次,我刚创建了一个podspec文件,它只使用s.ios.vendored_frameworks和捆绑资源来包含框架。当我运行pod spec lint时它会通过验证。然后我导入了它是podfie中的Objective-C项目,当我运行pod install时它可以工作,我可以使用#import <xxx/xxx.h>

将框架导入到我的代码中

enter image description here

但我发现在 xcworkspace 项目文件中,它会自动生成一个方案,如上图所示。似乎生成的方案是mac的目标。 称之为情境A

如果我在pod中添加一个名为Version.h和Version.m的自定义新类,并使用s.source_files = "Classes", "Version/*.{h,m}"更新podspec文件,那么当我运行pod install时,它会生成静态图书馆,这就是我想要的,也是我认为的结果。 称之为情境B

所以问题是:

  • 为什么当我没有包含任何自定义类文件时,pod会为mac生成一个方案,并且最重要吗?

  • 为什么在我提到自定义类时pod会生成静态库?

在快速项目中

第二部分是我还需要将pod导入一个快速项目。我也遇到了类似的问题。

目前,我在podfie中使用use_frameworks!关键字。

情况A:我无法导入框架,没有这样的模块xxx ,来自编译器的错误。

在情况B:无法构建Objective-C moulde xxx ,来自编译器的错误,我尝试清理并删除DerivedData目录,但它不起作用。它不会生成modulemap和xx-umbrella.h文件。当我使用谷歌广告sdk

时,我发现了同样的问题
pod 'Google-Mobile-Ads-SDK', "~> 7.4.0"

在情况A中,当pod生成pods项目时,它不会从我的pod安装目标。在情况B中,它从我的pod安装目标。比如pod中的以下日志

//situation b
- Creating Pods project
- Adding source files to Pods project
- Adding frameworks to Pods project
- Adding libraries to Pods project
- Adding resources to Pods project
- Linking headers
- Installing targets
- Installing target `AliPay` iOS 8.0

//situation a
- Creating Pods project
- Adding source files to Pods project
- Adding frameworks to Pods project
- Adding libraries to Pods project
- Adding resources to Pods project
- Linking headers
- Installing targets
- Installing target `Pods-NewCategory` iOS 8.0
  - Generating Info.plist file at `Pods/Target Support
  Files/Pods-NewCategory/Info.plist`
  - Generating module map file at `Pods/Target Support
  Files/Pods-NewCategory/Pods-NewCategory.modulemap`
  - Generating umbrella header at `Pods/Target Support
  Files/Pods-NewCategory/Pods-NewCategory-umbrella.h`
- Running post install hooks
  • 那么为什么pod无法使用swift项目,我是否可以使用pod或框架来做一些工作。

我在github创建了主持人,在情境A上创建了标记0.0.1,在情境B上创建了标记0.0.2。

1 个答案:

答案 0 :(得分:1)

对于情况A,

您应该在pod规范中指定pod所用的平台,如下所示:

s.platform     = :ios
s.development_target = '8.0'

对于情况B,

在swift中你不能使用静态库,这就是为什么cocoa pods引入了属性use_frameworks!

要摆脱找不到模块的错误,您必须指定一个包含伞头的模块映射文件。