如何混合使用Objective-C和Swift来创建一个CocoaPods框架。

5

我将创建一个Swift框架,并想在框架中使用Objective-C类。

我使用pod lib create frameworkName命令创建库。

这是我的podspec文件:

http://guides.cocoapods.org/syntax/podspec.html

Pod::Spec.new do |s|
s.name             = 'MyFramework'
s.version          = '0.1.0'
s.summary          = 'A short description of RadiantSensorsRSPOS.'

s.description      = <<-DESC
TODO: Add long description of the pod here.
                   DESC
s.license          = { :type => 'MIT', :file => 'LICENSE' }
s.ios.deployment_target = '8.0'

s.source_files = 'MyFramework/Classes/**/*'
s.public_header_files = 'Pod/Headers/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'CocoaAsyncSocket'
end

我有一个包含Objc类的objc.hobjc.m文件。我需要在MyFramework.swift中使用这个Objc类。

在标准应用程序(非框架)中,我创建了一个头文件桥接并导入了objc.h文件,这样我就可以访问Objc类了。

我应该把objc.hobjc.m文件放在哪里?

如何在这里创建头文件桥接?

1个回答

8

我知道回答你的问题可能有点晚了,但是最近我也需要做和你一样的事情——创建一个混合了Objective C代码的Swift Framework的Cocoapod。

当你在Xcode中创建一个基于Swift的框架(我使用的是8.2或更高版本),它会生成一个称为“Umbrella Header File(.h)”的文件,该文件与目标文件同名。因此,如果您的框架目标名为'MyFrameworkTarget',则Xcode添加的Umbrella Header就被称为'MyFrameworkTarget.h'。重要的是,将这个头文件与其他Swift和Objective C源代码文件一起包含在你的Cocoapod中。

作为示例,以下是一个有效的podspec文件,将Swift和Objective C源文件组合成一个定位于iOS和macOS的框架:

Pod::Spec.new do |s|

s.name         = "MyFramework"
s.version      = "1.0.0"
s.summary      = "Example cocoapod spec for a mixed language framework"
s.description  = <<-DESC
  Example cocoapod spec for a mixed language framework that targets both iOS and macOS.
DESC

s.homepage     = "https://github.com/username/MyFramework"

s.license      = "Apache License, Version 2.0"

s.author       = { "My Name" => "info@code.myname.com" }

s.ios.deployment_target = "9.0"
s.osx.deployment_target = "10.11"

s.source       = { :git => "https://github.com/username/MyFramework.git", :tag => "#{s.version}" }

s.source_files       = 'Shared/*.{swift,h,m}'
s.ios.source_files   = 'MyFrameworkMobile/*.h'
s.osx.source_files   = 'MyFrameworkMac/*.h'

end

在这个例子中,我有Swift和Objective C文件,它们构成了iOS和macOS的框架,并存储在“Shared”文件夹中,并在podspec中通过“s.source_files”进行引用。然后,Xcode生成的框架组合文件并编辑为我的两个框架目标iOS(我命名为MyFrameworkMobile)和macOS(我命名为MyFrameworkMac)在“s.ios.source_files”和“s.osx.source_files”中分别进行引用。在我的例子中,它们对于iOS和macOS是分开的,因为我有两个目标。实际的标头在“MyFrameworkMobile”和“MyFrameworkMac”文件夹中。
这是我实际的磁盘项目文件夹布局,以帮助可视化podspec所指向的内容:
MyFramework.podspec
MyFramework.xcodeproj

MyFrameworkMac
  MyFrameworkMac.h
  Info.plist

MyFrameworkMobile
  MyFrameworkMobile.h
  Info.plist

Shared
  MyFramework.swift
  MyFramework.h
  MyFramework.m

希望这些信息能有所帮助。在GitHub上,有一个很好的示例项目,演示了如何为Swift和Objective C文件混合项目创建pod文件:https://github.com/axl411/NVMDummyTestPod


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接