#ios #swift #swift-package-manager
#iOS #swift #swift-package-manager
Вопрос:
Идея проста. Я хочу создать target в SPM, который имеет некоторые зависимости и может быть импортирован в конечный продукт как отдельный модуль.
Так, например, у меня есть модуль под названием «Core», который имеет 2 зависимости: «утилиты» и «расширения». Чтобы знать, как использовать Core, вы также должны импортировать «утилиты» и «расширения», подобные этому:
import Core
import Utilities
import Extensions
Чего я хочу, так это сделать так, чтобы это выглядело как в Cocoapods (спецификации и подвиды).
import Core
Пример Package.swift
let package = Package(
name: "SomeFramework",
platforms: [.iOS(.v13)],
products: [
.library(
name: "Core",
targets: ["Core"]
),
.library(
name: "Utilities",
targets: ["Utilities"]
),
.library(
name: "HandyExtensions",
targets: ["HandyExtensions"]
),
],
targets: [
// Core
.target(
name: "Core",
dependencies: [
"HandyExtensions",
"Utilities"
],
path: "Core",
exclude: ["Info.plist"]
),
// Utilities
.target(
name: "Utilities",
path: "Utilities",
exclude: ["Support files/Info.plist"]
),
// HandyExtensions
.target(
name: "HandyExtensions",
path: "HandyExtensions",
exclude: ["Support files/Info.plist"]
)
]
Ответ №1:
Я до сих пор не нашел решения своей проблемы, но вот что я сделал.
Я посмотрел на подход, который использует Firebase. Идея состоит в том, чтобы разделить все Cocoapods
подмодули на отдельные Cocoapods
фреймворки и добавить их как подмодули с зависимостями в main podspec
. Это решит проблему с одной кодовой базой для SPM и Cocoapods.
К сожалению, в коде вам все равно нужно использовать Core
, Utilities
, HandyExtension
отдельно.