如何在pod库中混合使用Swift和Objective-C?

如何在pod库中混合使用Swift和Objective-C?,objective-c,cocoapods,swift2,Objective C,Cocoapods,Swift2,我已经使用命令创建了一个新的swift lib pod:pod lib create MixSwiftObjectiveC found from 在这个pod库中,我需要使用一个用Objective-C编写的代码。 如果我有一个单独的“普通”项目,我只会在头文件中包含导入…-bridgeing header.h。 pod库是否有一个等价物?Swift和Objective-C能在pod库中混合使用吗 例如,我创建了这个github: 为了运行该示例,您需要XCode版本7.0 beta 6和Swi

我已经使用命令创建了一个新的swift lib pod:pod lib create MixSwiftObjectiveC found from

在这个pod库中,我需要使用一个用Objective-C编写的代码。 如果我有一个单独的“普通”项目,我只会在头文件中包含导入…-bridgeing header.h。 pod库是否有一个等价物?Swift和Objective-C能在pod库中混合使用吗

例如,我创建了这个github: 为了运行该示例,您需要XCode版本7.0 beta 6和Swift 2.0


谢谢你的帮助

我确认了一个有效的解决方案,下面是它的工作原理:

  • 它必须是iOS 8+版本(当然…)
  • 使用Xcode创建Cocoa Touch框架
  • 开发框架,根据需要混合使用swift代码和objc代码。确保将所有需要公开的swift类标记为
    public
    。您可能需要咨询
  • 创建一个podspec文件,提供必要的信息(请参阅以了解pod的外观)。特别需要注意的是,您需要在podspec文件的
    source\u文件中包含伞形头(在框架中用于向swift公开objc代码)。当您创建一个框架项目时,Xcode会自动为您的框架创建一个伞形标题。如果框架名称为
    NVMDummy
    ,则标题为
    NVMDummy.h
  • 推动pod并将pod作为框架集成到项目中
  • 测试你的pod库。我创建了一个演示应用程序,添加了我的pod库,并在我的
    ViewController.m
    中执行了以下操作:

    @import MyPodLibMixingOjbcAndSwift;
    
    // in viewDidLoad
    // use objc code in MyLib -> OK...
    // use swift code in MyLib -> OK...
    
  • 演示应用程序可以工作,所以我认为它可以工作

    下面是演示:

    在你的
    .podspec
    中,你应该有如下内容:

    s.source\u文件='MixSwiftObjectiveC/Classes/*'

    • 转到finder中的
      MixSwiftObjectiveC/Classes/
      目录文件夹,确保并放入您的文件(objc和swift)
    • 清理生成文件夹
    • 导航到您的
      Example..
      文件夹并进行
      pod安装
      (因为您的
      Example..
      文件夹下应该有一个
      pod文件
      ,其中包含您的
      MixSwiftObjectiveC
      pod)
    • 你不应该再有这个问题了

      • 这在cocoapod中实际上是非常直接的。您只需要在.podspec文件中定义这些行

        s.source_files = '{YOUR_POD}/Classes/**/*.{swift,h,m}'
        s.public_header_files = '{YOUR_POD}/Classes/**/*.h'
        
        “s.public_头文件”会自动创建一个伞形头文件,该文件也可用于桥接头文件。就这样,您应该能够在swift类中使用ObjC类

        您还可以在ObjC中使用swift类。您只需要在ObjC文件中导入-swift头

        #import <YOUR_POD/YOUR_POD-Swift.h>
        
        #导入
        

        只要依赖关系是单向的,你就不会面临任何问题。

        刚刚遇到这个问题,现在有更新吗?不幸的是,我不得不在Pod库中不混合使用这两种语言。太遗憾了。。。我有一个用objc编写的私有pod库,它足够大,不可能一下子用Swift重写。我现在还得用objc。你能澄清一下第4步吗?在podspec文件中会是什么样子?你能在你的示例项目中添加一个吗?干杯@adrian schönig编辑了我的答案。在我的回答中使用演示程序确认它可以工作后,我停止了研究,因为我还需要支持iOS 7一段时间。还有一些问题需要调查。我在我的回购协议中记录了演示,我们可以在那里继续讨论这个问题。谢谢!在我按照您的指示操作之后,我仍然不断收到关于我的Swift类未被找到的相同错误,但事实证明,我错过了文档中的重要步骤,即“确保在Swift
        中公开您需要在Objective-C中访问的内容”。这起到了作用!非常感谢。对我来说,关键是模块的@import,现在我可以看到objective-c和swift类