【问题标题】:A pod include a third party framework can't import in swift包含第三方框架的 pod 无法快速导入
【发布时间】:2015-08-20 16:14:50
【问题描述】:

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

在 Objective-C 项目中

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

但我发现在xcworkspace项目文件中,它自动生成了一个scheme,如上图。生成的scheme似乎是mac的目标。 称之为情况 A

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

所以问题是:

  • 当我没有包含任何自定义类文件时,为什么 pod 会为 mac 生成方案,这有关系吗?

  • 当我包含自定义类时,为什么 pod 会生成静态库?

在swift项目中

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

此时,在podfie中我使用了use_frameworks!关键字。

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

情况 B:无法构建 Objective-C moulde xxx,编译器出错,我尝试清理并删除 DerivedData 目录,但没有成功。而且它不会生成modulemap和xx-umbrella.h文件。我在使用google ad 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 上创建的 pod,在情况 A 上创建的标签 0.0.1,在情况 B 上创建的标签 0.0.2。

【问题讨论】:

  • 解决了您的问题吗?
  • @Loegic 感谢您的回答。当我将这些 pod 用作我的项目的本地 pod(项目内的 pod 规范文件)时,objective-c 项目中的情况 A 解决了。但是情况B还是没有解决。
  • 你做了我写的所有改变吗?你现在有什么问题?

标签: ios swift cocoapods


【解决方案1】:

对于情况A,

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

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

对于情况B,

在swift中你不能使用静态库,这就是cocoa pods引入属性use_frameworks!的原因

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

【讨论】:

  • 我不确定我是否关注你,我有几乎相同的问题,我在一个使用 xcode 7、swift 2.0 的项目中,我正在添加我自己的 objc pod,我确实设置了“use_frameworks!”从我的 podfile 开始。当我尝试运行时,我失败了,因为编译器找不到我的 pod 中使用的 3rd 方 SDK。但是这个 SDK 在源代码中,它是 #import 不起作用......我不知道为什么,所以我想这是你正在谈论的那个模块映射文件,我错过了...知道我应该怎么做才能让它工作吗?
  • 也许您只需将#import 更改为#import,有时它可以工作
  • 是的,我的错实际上已经是#import 并且它不起作用,我尝试使用#import 但它也不起作用。 ..我正在努力寻找解决方案,但我现在碰壁了
  • 究竟是什么错误?您应该创建另一个问题,因为这不是同一个问题
  • 是的,这就是我正在考虑的。更清楚一点,我有一个名为 myPodForSDKLib 的 pod,它只包含一个 myPodForSDKManager.h/.m 和 SDK.frameworks。 myPodForSDKManager.h 有一个#import ,当我将所有这些添加到我的 swift 项目中并尝试编译项目时,我在 #import 行上出现错误:'SDK/SDK.h ' 找不到文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 2019-08-05
相关资源
最近更新 更多