我有一个有多个目标的项目,比如一个iOS应用程序,一个watchOS应用程序和一些框架。如何将相同的Swift包分配给所有目标?Xcode只允许我选择一个:
如果我尝试再次添加Swift包,以便将其分配给项目中的另一个目标,我会得到一个错误:
正确的做法是什么?下面是Swift包中的包清单的样子。在这方面有什么需要做的吗?或者在Xcode中有什么需要做的吗?
import PackageDescription
let package = Package(
name: "Alamofire",
platforms: [
.macOS(.v10_12),
.iOS(.v10),
.tvOS(.v10),
.watchOS(.v3)
],
products: [
.library(
name: "Alamofire",
targets: ["Alamofire"])
],
targets: [
.target(
name: "Alamofire",
path: "Source")
],
swiftLanguageVersions: [.v5]
)
6条答案
按热度按时间s6fujrry1#
我遇到了同样的问题,我只找到了两个解决方案:
首先,将包添加到第一个目标:
然后,第一个选项将转到另一个目标“常规”选项卡,并在“框架”、“库”和“嵌入式内容”中按+,选择包并按“添加”:
另一个选项是构建Phases,并在Link Binary With Libraries中重复类似的方式:
目前,我只知道这个选项,我希望将来苹果可以通过多重检查来改进这一点。
bqucvtff2#
除了diego-carrera给出的解决方案外,我还必须重置swift包缓存,以使该包可用于框架对话框中的所有目标。
在Xcode中:File -> Swift Packages -> Reset Package Caches
t2a7ltrp3#
我在尝试将新的Numerics包添加到我的项目时遇到了同样的问题,该项目包含一个名为CreativeCoding的iOS目标和一个名为mandelbrot的Mac命令行目标。
我以Xcode中的正常方式将包添加到第一个目标。然后我退出Xcode,在编辑器(当然是vi)中打开项目.pbxproj文件。然后,我下到 / 开始PBXNativeTarget部分 / 注解,找到了我的CreativeCoding目标,并从packageProductDependencies容器中复制了3行新的Numerics包(Numerics、ComplexModule、RealModule),并将它们粘贴到我的mandelbrot命令行目标的packageProductDependencies容器中。
这对我来说可能更容易一点,因为我已经在我的第二个目标上有了ArgumentParser包,我只是追加了3个新行。但是,您可以执行相同的操作,并向第二个目标添加一个临时包。
然后我进入Xcode,像正常一样构建了两个目标,它工作了。
wswtfjt74#
如果在添加依赖项之后添加新目标,则必须从项目中移除依赖项,然后再将其添加回。否则,库将不会显示在框架选择器中。
令人恼火的是,Xcode可以用Swift包管理器做的一件可靠的事情就是崩溃。因此,请确保您有项目的备份,因为它可能会进入一种状态,只要打开它就会崩溃Xcode。
jbose2ul5#
最新版本是Xcode 14.2。我看不到我想添加到目标的框架,但更新到最新的Xcode 14.3.1解决了这个问题。我能够看到我想添加到第二个目标的Swift包,并成功添加它。
我使用了Diego的答案https://stackoverflow.com/a/58079416/2929892来添加缺少的框架。
zrfyljdw6#
在Xcode 12中,你只需要选择第二个目标并添加依赖项(swift包)。