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

Cip*_*rau 8 objective-c cocoapods swift2

我使用以下命令创建了一个新的swift lib pod:pod lib create MixSwiftObjectiveC from https://guides.cocoapods.org/making/using-pod-lib-create.html

在这个pod lib中,我需要使用用Objective-C编写的代码.如果我有一个单独的"普通"项目,我只需在头文件中包含导入... -Bridging-Header.h.是否有一个pod lib的等价物?Swift和Objective-C可以在pod lib中混合使用吗?

作为一个例子,我创建了这个github:https://github.com/crarau/MixSwiftObjectiveC 为了运行这个例子,你需要XCode Version 7.0 beta 6和Swift 2.0

编译问题

谢谢你的帮助!

abh*_*y23 9

这在 cocoapod 中实际上非常简单。您只需在 .podspec 文件中定义这些行。

s.source_files = '{YOUR_POD}/Classes/**/*.{swift,h,m}'
s.public_header_files = '{YOUR_POD}/Classes/**/*.h'
Run Code Online (Sandbox Code Playgroud)

“s.public_header_files”会自动创建一个伞形标头,该标头也可用于桥接标头。就这样,您应该能够在 swift 类中使用 ObjC 类。

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

#import <YOUR_POD/YOUR_POD-Swift.h>
Run Code Online (Sandbox Code Playgroud)

只要依赖是一种方式,您就不会遇到任何问题。


axl*_*411 5

我确认了一个可行的解决方案,它是这样工作的:

  1. 它必须仅是iOS 8+(当然...)
  2. 使用Xcode创建一个Cocoa Touch框架
  3. 开发框架,根据需要混合使用swift代码和objc代码。确保将所有需要公开的swift类标记为public。您可能需要查阅文档
  4. 创建一个podspec文件,提供必要的信息(有关pod的外观,请参见此处)。特别要注意的一件事是,您需要source_files在podspec文件中包含Umbrella Header(在您的框架中用于将objc代码公开化)。创建框架项目时,Xcode会自动为框架创建一个伞形头。如果您的框架名称为NVMDummy,则标题为NVMDummy.h
  5. 推动pod并将pod作为框架集成到您的项目中。
  6. 测试您的pod lib。我创建了一个演示应用程序,添加了pod lib,然后在其中执行ViewController.m了以下操作:

    @import MyPodLibMixingOjbcAndSwift;
    
    // in viewDidLoad
    // use objc code in MyLib -> OK...
    // use swift code in MyLib -> OK...
    
    Run Code Online (Sandbox Code Playgroud)

该演示应用程序有效,因此我得出结论。

这是演示:https : //github.com/axl411/TestNVMDummy


den*_*lor 3

在你的.podspec你应该有类似的东西:

s.source_files = 'MixSwiftObjectiveC/Classes/*'

  • 转到MixSwiftObjectiveC/Classes/查找器中的目录文件夹以确保放置您的文件(objc 和 swift)
  • 清理构建文件夹
  • 导航到您的Example..文件夹并执行 a pod install(因为Podfile您的文件夹下应该有一个Example..包含您的MixSwiftObjectiveCPod 的文件夹)
  • 构建,你不应该再遇到这个问题