在自定义 cocoapod 框架中使用 Pod 依赖项获得“使用未声明的类型”

Posted

技术标签:

【中文标题】在自定义 cocoapod 框架中使用 Pod 依赖项获得“使用未声明的类型”【英文标题】:Using Pod dependencies in custom cocoapod framework getting "use of undeclared type" 【发布时间】:2018-01-25 17:09:28 【问题描述】:

我已将 Rollbar 添加为我的 cocoapod 的依赖项。在我的 podspec 中,我有:

s.dependency 'Rollbar'

构建和运行包含我的 cocoapod 作为依赖项的应用程序工作正常,但如果我打开我的框架项目 Xcode 会抱怨,因为它没有导入 Rollbar 依赖项。

这会导致以下行出现“使用未解析的标识符 'Rollbar'”错误:

Rollbar.initWithAccessToken("XXX")

我完全理解发生了什么,我的框架项目不知道 Rollbar 依赖项,所以它不会加载这些类。但这会影响我测试我的框架的方式,因为如果我保留它就不会编译就这样吧。

我还要注意,在我的桥接头中,我已经用 __has_include 包装了必要的 Rollbar __has_include 以允许编译桥接头。

#if __has_include("Rollbar/Rollbar.h")
#import <SystemConfiguration/SystemConfiguration.h>
#import <Rollbar/Rollbar.h>
#endif

当我收到此错误时,似乎无法在我的 Swift 文件中执行类似的操作:

RollbarSetup.swift:2:5: Unexpected platform condition (expected 'os', 'arch', or 'swift')

这让我相信这种类型的条件是不允许的。如果 Rollbar 依赖项不存在,我希望我可以在框架中创建一些模拟对象。


在编写使用单独的 cocoapod 依赖项的 cocoapod 时,有没有其他人遇到过这种情况?我觉得这是任何人在这种情况下都会遇到的事情。

我可以做些什么来让我的框架项目编译?

【问题讨论】:

【参考方案1】:

我有一个 Swift 的 cocoapod SDK,我按照以下步骤完成了

    首先将滚动条添加到podspec文件中 s.dependency 'Rollbar', '1.8.1' 在视图控制器中添加import Rollbar,您必须在其中设置错误消息 在为 SDK 创建的示例项目上运行 pod install 命令。 您现在可以使用滚动条了。 RollBar SDK 初始化
let configuration = RollbarConfiguration()
configuration.crashLevel = "critical"
configuration.environment = "production"
Rollbar.initWithAccessToken("POST_CLIENT_ITEM_ACCESS_TOKEN", configuration: configuration)
Rollbar.error("Error Message")

您已完成 Rollbar 集成。

【讨论】:

【参考方案2】:

Podspec 文件应该由 pod 的作者编写,要向您的项目添加 pod,您需要在您的 Podfile 中添加 pod 'Rollbar'。此外,#if __has_include 仅在文件已导入时执行,因此在此语句中导入它会执行任何操作。由于您使用的是 Swift,一个简单的 import Rollbar 就可以解决问题,不需要桥接头。

【讨论】:

我是我的 pod 的作者。让我们将此 pod 称为“Framework-X”,它依赖于“Rollbar”cocoapod,并在其 podspec 中定义了这种关系。当我使用 Podfile 将“Framwork-X”添加到应用程序项目时,Rollbar 传递依赖项会正确安装并且应用程序会运行。我的问题是,当我在应用程序项目环境之外开发“Framework-X”时,我的框架将无法编译,因为它不包含 Rollbar 依赖项。这并不会过多地阻碍我的开发,但它会让测试变得很痛苦,因为我无法将某些文件包含到这个目标中。 哦,抱歉,我以为您正在尝试在您的应用中实现 Pod。你试过here的步骤吗? 是的,我想是的,这就是我在我的 podspec 中将 rollbar 设置为依赖项的方式。 spec.dependency 'Rollbar' 你在你的问题中说s.dependency,所以我以为你写的是s而不是spec 我想知道如果没有 cocoapod 工作区的上下文,我是否不能再开发我的框架,因为独立项目没有 cocoapod 依赖项。

以上是关于在自定义 cocoapod 框架中使用 Pod 依赖项获得“使用未声明的类型”的主要内容,如果未能解决你的问题,请参考以下文章

通过 Cocoapods 中的开发 pod 功能测试静态框架

创建通用 Cocoapods 框架

如何从 Cocoapods Xcode 7 中删除单个框架 [重复]

在 Cocoapod 中导入 Kotlin/Native 框架

使用 CocoaPods 有啥好处?

CocoaPods 安装旧版框架