在自定义 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 依赖项获得“使用未声明的类型”的主要内容,如果未能解决你的问题,请参考以下文章