ios - 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。
推荐阅读
- python - 带有 Python SSL 套接字的自签名证书
- docker - docker-compose 无法识别 sudoers 容器文件
- reactjs - React App 中的多个子域 + 入口点
- python - 基于数据框的 INSERT INTO SELECT
- llvm - LLVM - 如何将参数传递给函数调用| 错误:调用签名错误的函数
- .net - 在 dotnet core 中添加类库作为项目引用也会导致访问其依赖项
- android - 如何从 recyclerView 中删除项目?
- python - 给出公差比较列表中的浮点数
- php - 为前端选择网站架构/逻辑/结构以及如何实现它
- azure - Azure Functions:为什么我在 Kudu 中看到两个 w3wp 进程?