在自定义 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 Xcode 7 中删除单个框架 [重复]