CocoaPods:如何构建每个子规范作为自己的框架目标



我在为我的项目创建CocoaPods .podspec文件时遇到问题,以便在CocoaPods安装时,它以与原始项目相同的模块结构构建。

我正在构建一个包含多个框架的 SDK:

MyThingSDK.xcodeproj
-> Target: Framework "Core.framework"
Builds files in MyThing/Core/*.swift
-> Target: Framework "Designer.framework"
Builds files in MyThing/Designer/*.swift
-> Target: Framework "Runner.framework"
Builds files in MyThing/Runner/*.swift

在构建这个结束时,我有三个框架以每个目标命名

MyThingSDK.podspec 看起来像:

Pod::Spec.new do |s|
s.name         = "MyThingSDK"
s.version      = "0.1.1"
...
s.subspec "Core" do |spec|
spec.source_files   = "MyThing/Core/**/*.{h,m,swift}"
spec.public_header_files = "MyThing/Core/*.{h}"
spec.header_dir = "Core"
end
s.subspec "Designer" do |spec|
spec.source_files   = "MyThing/Designer/**/*.{h,m,swift}"
spec.public_header_files = "MyThing/Designer/*.{h}"
spec.header_dir = "Designer"
spec.dependency "MyThing/Core"
end
s.subspec "Runner" do |spec|
spec.source_files   = "MyThing/Runner/**/*.{h,m,swift}"
spec.public_header_files = "MyThing/Runner/**/*.{h}"
spec.header_dir = "Runner"
spec.dependency "MyThing/Core"
end
end

当我使用 pod install 在客户端项目中使用它时,我最终得到以下结构:

ClientProject.xcworkspace
ClientProject.xcproject
Pods.xproject
-> Target: Framework "MyThingSDK.framework"
Builds files from MyThing/Core/*.swift
Builds files from MyThing/Designer/*.swift
Builds files from MyThing/Runner/*.swift

Podfile 引用 SDK,如下所示:

pod 'MyThingSDK', :path => '/Volumes/Dev/src/MyThingSDK'

因此,当 CocoaPods 创建其 Pods 项目时,所有源文件都会进入一个框架,而不是每个子规范都有自己的框架。这会产生重复的定义问题。假设 Designer 和 Runner 都有一个名为 "Client" 的类——当它们是单独的框架时,这很好,但当它们合并成一个框架时就不行了。

如何为每个子规范保留一个框架?

子规范的主要目的之一是启用单个框架的配置。 如果你想要单独的框架,你应该为每个框架使用单独的podspec。

最新更新