我有一个本地swift包 Foo,它提供了两个不同的库 Foo 和 FooB。现在我想在另一个本地包 *Bar * 中使用它们。我只能通过路径声明获得整个包。是否有一种方法来命名/指定应该使用哪个库?我想在我的Bar套餐中使用FooB。
let package = Package(
name: "Foo",
products: [
.library(name: "Foo", targets: ["Foo"]),
.library(name: "FooB", targets: ["FooB"])
]
...)
let package = Package(
name: "Bar",
dependencies: [
.package(path: "Foo"),
.package(path: "FooB") // this one does not work
],
...)
// inside package Bar
import Foo
import FooB // this is throwing "no such module 'FooB'"
2条答案
按热度按时间wwtsj6pe1#
这里有一个具体的例子:
Foo
播放
Foo
,IGListKit Package.swift摘录:
...
酒吧
在
Bar
的角色中,整体而言:剪枝包
导入后,
Foo
的Package.swift在Package Dependencies部分只声明:似乎Xcode / SPM正在修剪导入的包,使其只包含该包中三个库中的一个。(最初,第二个库的代码丢失,一个my my语法导致它被拉出来,但第一个库没有被看到。他们现在都在那里,但只看到一个。
我不能确定一个语法来使它把这两个。
当前错误
Xcode 15.0测试版(15 A5160 n)
其他想法
package(name:url:_:)(以及
Package.Dependency
的name
属性)已被弃用,但您需要在特定的目标依赖项中使用包依赖项的名称。这让我相信应该使用一种更新的语法。
解析
Instagram不完全支持IGListKit的Swift包管理器
4.0.0
标签和仓库的HEAD之间有191个提交;已经3年多了,因为发布了。)*在这种情况下的问题是,最新的标记(截至2023年6月)是
4.0.0
标记,而Package.swift
文件的版本实际上是我收到的缩写版本。当我更新时,一切都正常,并简化了描述,以查看添加支持的提交。(本可以使用
main
分支,但它会不断变化。lb3vh1jj2#
以下是你如何实现它:如果你想在另一个包中使用它,请指定依赖于本地Swift包中特定库的目标。
为了正确地本地打包Foo,每个库都必须在单独的目标中表示。为了实现这一点,请按以下方式将您的Package.swift修改为Foo:
Foo和FooB是定义的两个目标,其中FooB依赖于Foo。
然后你可以通过重新排列文本在Bar包中指定对FooB的依赖。
Bar目标依赖于FooB库,通过使用product函数指向包“Foo”及其库“FooB”来指定。
现在,您的Bar包可以通过导入FooB库来使用它。
从Foo包正确导入FooB库可以通过对Bar包进行特定更改来完成。
根据项目的目录结构和包名称,确保相应地调整路径和包名称。:)