Xcode 12.5 无法使用 M1 上的 .systemLibrary 目标解析 SwiftPackageDependency

问题描述

带有 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.modulemapshim.h 文件进行了良好配置。

Xcode error

我检查了 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