2

我的项目包含一个包含二进制目标的 Swift 包。通常,项目编译并正常工作,但是当我尝试归档项目时出现问题,我得到一个编译器错误说No such module 'MyFramework'.
Swift 包如下所示:

let package = Package(
    name: "MyPackage",
    platforms: [
        .iOS(.v13)
    ],
    products: [
        .library(name: "MyPackage", targets: ["MyPackage"]),
    ],
    dependencies: [
        // Product dependencies...
    ],
    targets: [
        .binaryTarget(name: "MyFramework", path: "MyFramework.xcframework"),
        .target(
             name: "MyPackage",
            dependencies: [
                "MyFramework"
                ...
            ],
            resources: [.process("Resources")]
         ),
        .testTarget(
            name: "MyPackageTests",
            dependencies: ["MyPackage"])
    ]
)

我尝试了许多解决方案,其中包括来自 Apple Developer 论坛的建议,我将框架添加到products另一个库中,然后在应用程序(项目/客户端)端添加了框架,这使它成功存档,但是当我尝试将存档上传到 App Store,但出现错误提示Found an unexpected Mach-O header code: 0x72613c21
现在,我主要在 Swift 论坛上尝试关注其他解决方案,但它们似乎都不适合我或不够清晰。
据我所知,这是一个Swift Bug,但我想知道现在是否有任何解决方法就足够了。

任何帮助将不胜感激。提前致谢!

4

2 回答 2

1

经过太多小时后,我们设法找到了一个(非常丑陋的)解决方法,可以正确存档。
基本上,我们需要将框架作为产品的库,如下所示:

let package = Package(
    name: "MyPackage",
    platforms: [.iOS(.v13)],
    products: [
        .library(name: "MyPackage", targets: ["MyPackage"]),
        .library(name: "MyFramework", targets: ["MyFramework"]),
    ], 
    ...
    targets: [
        ...
        .binaryTarget(name: "MyFramework", path: "MyFramework.xcframework") 
    ]
)

然后在Frameworks, Libraries and Embedded Content中链接项目上的框架。
虽然这本身还不够,因为该项目将存档但会抛出Found an unexpected Mach-O header code: 0x72613c21我在原始问题中提到的错误。为了解决这个问题,我们需要在项目方案中的ArchivePost-actions中添加以下脚本:

LOGFILE="${ARCHIVE_PATH}/static-frameworks.log"
echo "Removing static frameworks from ${WRAPPER_NAME} archive" > $LOGFILE
find "${ARCHIVE_PRODUCTS_PATH}/Applications/${WRAPPER_NAME}" -name '*.framework' -print0 | while IFS= read -r -d '' fm; do
    name=$(basename "${fm}" .framework)
    target="${fm}/${name}"
    echo "Checking: ${fm}" >> $LOGFILE
    if file "${target}" | grep -q "current ar archive"; then
        rm -rf "${fm}"
        echo "Removed static framework: ${fm}" >> $LOGFILE
    fi
done

现在项目存档成功,可以上传到 App Store。仍然显然不是一个理想的解决方案,期待听到苹果或其他可能的解决方案。

于 2021-03-03T18:13:59.957 回答
0

更新到 Xcode 12.5 进行修复。

更多细节和讨论在这里

于 2021-03-09T01:47:23.803 回答