3

我在将可可豆荚(CocoaLumberjack在本例中)集成到 iOS 应用程序和我自己的框架时遇到问题。

Podfile看起来像这样:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, "8.0"

target "CommonModule" do
    use_frameworks!
    # CocoaLumberjack wasn't officially released with Swift support yet
    # pod 'CocoaLumberjack'
    pod 'CocoaLumberjack', :git => 'git@github.com:CocoaLumberjack/CocoaLumberjack.git', :commit => '6882fb5f03696247e394e8e75551c0fa8a035328'
    xcodeproj 'CommonModule/CommonModule.xcodeproj'
end

我有这样的模块层次结构(动态框架):

  • CommonModule
  • ModelsModule(有依赖CommonModule

最后,主应用程序:

  • MySwiftApp(依赖两者ModelsModuleCommonModule

现在,CocoaLumberjack在几个文件中使用CommonModule并按预期工作。但是,每次我import CommonModule在 中的任何文件中执行操作时ModelsModule,都会出现以下编译错误:

~/Developer/ModelsModule/ModelsModule/SomeFile.swift:2:8: error: missing required module 'CocoaLumberjack'
import CommonModule
       ^

知道如何解决这个问题吗?

更新: 有些人推荐使用Carthage。如果可能的话,我想避免这种情况。

4

2 回答 2

1

您还需要确保CommonModule.frameworkCocoaLumberjack.framework(以及任何其他框架)列在应用程序目标的嵌入式二进制文件部分中。

所有新的 iOS 8 风格的动态框架都必须嵌入到你的应用程序中——即使是那些你不直接使用的,但它们是你的依赖项的依赖项——所以你最终可能会看到对你不认识的项目的引用。

顺便说一句,如果您在与 Swift 的 CocoaLumberjack 交互时遇到问题,有一个名为 CleanroomLogger 的新的基于 Swift 的日志记录引擎可能会让事情变得更容易。

于 2015-05-13T19:19:34.820 回答
0

我假设 CommonModule 是 swift 并且你也使用 CocoaPods 0.36,因为我看到你的电话use_frameworks!。我还假设您正在使用 CocoaLumberjack 的 Obj-C 版本,并尝试将它与 Swift 一起使用。该use_frameworks!标志告诉 CocoaPods 生成 pod 的框架,以便在您的 Xcode 项目中链接。所以你需要在课堂上说

import CocoaLumberjack

而不是使用 Swift-Bridging-Header

这是cocoapods.org上的博客文章,他们讨论了如何为新use_frameworks!标志创作 pod。向下滚动到Common Header Pitfalls部分

也可能是您的 podspec 创建了一个使用 CocoaLumberjack 的依赖项,并且当链接到您的项目 CocoaLumberjack 和 CommonModules 时,但 Common Module 没有在库中正确引用它。为了克服这一点,您需要在将其导入到 Objective-C 库时将其称为框架

#import <CocoaLumberjack/CocoaLumberjack.h>

于 2015-04-15T17:23:09.563 回答