我知道回答你的问题可能有点晚了,但是最近我也需要做和你一样的事情——创建一个混合了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