如何将Objective-C和Swift混合使用以构建cocoapods框架

Vah*_*hid 4 frameworks objective-c cocoapods podspec 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
Run Code Online (Sandbox Code Playgroud)

objc.hobjc.m包含的文件Objc类。我已经使用这个ObjcMyFramework.swift

在标准应用程序(非框架)中,我做了一个头桥并导入了objc.h文件,因此可以访问Objc类。

我如何在Objc这里使用课程?

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

如何在这里制作标题桥?

小智 5

我意识到回答您的问题可能有点晚了,但是我最近不得不做与您相同的事情-创建一个Swift Framework的cocoapod,其中混合了一些Objective C代码。

当您在Xcode(我使用的8.2或更高版本)中创建基于Swift的框架时,它会生成称为伞头文件(.h)的文件,该文件与目标名称相同。因此,如果您的框架目标称为“ MyFrameworkTarget”,则Xcode添加的伞形标头称为“ 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
Run Code Online (Sandbox Code Playgroud)

在这个特定示例中,我有Swift和Objective C文件,这些文件构成了为iOS和macOS构建的框架,位于文件夹“ Shared”中,并在podspec中由“ s.source_files”引用。然后在“ s.ios.source_files”和“ s.osx.source_files”中引用Xcode生成并为我的两个框架目标iOS(我称为MyFrameworkMobile)和macOS(我称为MyFrameworkMac)编辑的框架伞文件,分别。在我的示例中,它们针对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
Run Code Online (Sandbox Code Playgroud)

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