Swift 包管理器 - 复制动态依赖项的文件构建阶段

问题描述

我正在开发一个 iOS 应用程序,我们将把它的核心作为一个独立的 Swift 包开源给其他开发者。

Swift 包依赖于钠 (https://github.com/jedisct1/swift-sodium)。使用 SPM 时,此库存在一个问题,即在存档期间(有时在 Xcode 本地编译期间)将无法找到嵌入的 CLibrary,如果使用此包或拥有它,则无法发布到应用程序商店嵌入你自己的。 (这在 SPM / Xcode 中被记录为一个错误,但需要一些时间来修复)

有人制作了一个 Fork 来解决一些问题 here。他们通过将 Clibrary 拆分为托管在其他地方的单独 .xcframework 解决了这个问题。然后创建一个新的 Package.swift 将其作为外部依赖项导入。此更新的钠包已设置为动态类型。

将它包含在我的 Swift 包中,然后将我的包包含在我的 iOS 应用程序中......它构建良好,在 Xcode 中运行良好,在模拟器上运行良好,在导出或上传到 TestFlight 时不会抛出任何错误

但是从 TestFlight 下载后,我收到此错误消息,说无法找到钠框架

Termination Description: DYLD,dyld: Using shared cache: <hash> | dependent dylib `@rpath/sodium.framework/sodium` not found for <path-to-ipa>/<appname> tried but didn't find <path-to-sodium>

使用其他依赖管理工具,解决方案通常是在iOS应用的xcode项目中添加一个copy Files Build Phase”并添加框架。如果我尝试在我的 Xcode 项目中执行此操作,我将找不到钠框架,也找不到告诉 SPM 将框架复制到 Package.swift 内的方法

如何更新我的 Package.swift 以便它为使用它的任何应用复制此框架?

如果那不可能,我如何将它复制到 Xcode 项目中?它在下拉列表中不可见

目前我的 Package.swift 看起来像这样:

import PackageDescription

let package = Package(
    name: "<package-name>",platforms: [.iOS(.v14)],products: [
        .library(name: "<package-name>",targets: ["<package-name>"]),],dependencies: [
        .package(url: "https://github.com/attaswift/BigInt.git",from: "5.2.1"),.package(name: "sodium",url: "https://github.com/junelife/swift-sodium.git",.branch("spm"))
    ],targets: [
        .target(
            name: "<package-name>",dependencies: [
                "sodium","BigInt",]
        ),.testTarget(
            name: "<package-name>Tests",dependencies: ["<package-name>"]
        ),]
)

解决方法

暂时的解决方法:

如果我也将动态包导入到 iOS 应用程序中,我会在目标的常规选项卡下的 Frameworks,Libraries,and Embedded Content 下的钠框架旁边看到“嵌入和签名”选项。这迫使它进入捆绑包。

注意:
我尝试使我的包动态化,看看包含它是否会自动嵌入所有内容,并避免向用户提供单独嵌入的说明。但它没有用。它只嵌入了我的包,而不是动态依赖项。

如果有人有办法修改 Package.swift 以强制它嵌入动态依赖项......或者知道如何完全清理这个烂摊子。请评论

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...