问题描述
带有 M1 的 MBP 上的 Xcode 12.5 无法解析与 .systemLibrary 目标的包依赖关系。在没有 Rosseta 的情况下运行 Xcode。
该项目设置了 2 个 spm 包。它们都添加到项目 .xcworkspace 中,并且其中只有一个链接在应用程序中。这两个包都是本地依赖项。
A
包具有 B
包作为依赖项,而 B
包具有 libgit2
作为 .systemLibrary 依赖项。
然后,如果我打开项目,Xcode 找不到 pkg-config 并且无法解析 libgit2 依赖项。
如果我使用 pbxproj
生成 A swift package generate-xcodeproj
,则不会发生这种情况,在这种情况下,项目解决得很好,我可以毫无问题地构建它。
A Package.swift
是:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "A",platforms: [
.macOS(.v11)
],products: [
.library(
name: "A",targets: ["A"]
),],dependencies: [
.package(path: "../B")
],targets: [
.target(
name: "A",dependencies: ["B"]
),.testTarget(
name: "ATests",dependencies: ["A"]
),]
)
B Package.swift
是:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "B",products: [
.library(
name: "B",targets: ["B"]
)
],dependencies: [],targets: [
.systemLibrary(
name: "Clibgit2",pkgConfig: "libgit2",providers: [
.brew(["libgit2"])
]
),.target(
name: "B",dependencies: [
.target(name: "Clibgit2")
]
),.testTarget(
name: "BTests",dependencies: ["B"]
)
]
)
Clibgit2
目标使用 module.modulemap
和 shim.h
文件进行了良好配置。
我检查了 pkg-config
是否已安装并且具有 pkg-config --list
的 libgit2 软件包信息
此外,我在英特尔 mac 上打开了该项目,并且工作正常。
libgit2 由 brew 安装。
解决方法
感谢 NeoNach !!
Xcode 只关注 /opt/brew
和 /usr/local
。 M1 芯片的自制位置位于 /opt/homebrew
,因此您可以使用 com.apple.dt.Xcode.IDEHombrePrefixPath
设置自定义路径。
defaults write com.apple.dt.Xcode IDEHomebrewPrefixPath /opt/homebrew
推文参考:https://twitter.com/NeoNacho/status/1412514541343166467