繁体   English   中英

如何在 xcode 13 中添加 Swift package 管理器作为动态库?

[英]How to add a Swift package manager as a dynamic library in xcode 13?

我目前正在将项目的依赖项管理器从 Carthage 切换到 Swift Package 管理器,

例如,我们有 realm 依赖项,它在使用 Carthage 构建时曾经是一个动态框架,

但是在 SPW 中,当我尝试添加 realm 时,默认情况下它会给出 realm static 框架,但我找不到切换到动态的方法,

由于我们的项目中有一些子模块相互依赖,因此试图链接 static 库会出现duplicate symbols错误。

如果我可以像 Carthage 一样直接下载 realm 作为动态框架,我会容易得多,

没有可供选择的选项在此处输入图像描述

在此处输入图像描述

有谁知道该怎么做?

在此先感谢您的帮助:)

包可以生成动态库,但它们必须明确告诉 Xcode 他们希望将库制成动态库。 Realm 不这样做。 取而代之的是,Realm go 中的人们使用默认行为让 Xcode 决定是构建 ZA81259CEF8E5E59D26C 还是动态库。 据我所知,Xcode 总是选择构建一个 static 库。

为了解决这个问题,您可以创建自己的 package ,其中包括 Realm package 作为依赖项,并显式使您的库动态化。 您可以找到很多教程,向您展示如何制作 package,所以我不会在这里讨论。

If you create a package and load the following content into your Package.swift file, then import the package into your project, you will have solved your problem. 我将我的 package 命名为“RealmUmbrella”,但您可以随意称呼您的。

import PackageDescription

let package = Package(
    name: "RealmUmbrella",
    platforms: [.iOS(.v14)],
    products: [
        .library(
            name: "RealmUmbrella",
            type: .dynamic,
            targets: ["RealmUmbrella"]
        ),
    ],
    dependencies: [
        .package(name: "Realm", url: "https://github.com/realm/realm-cocoa", "10.0.0"..<"11.0.0")
    ],
    targets: [
        .target(
            name: "RealmUmbrella",
            dependencies: [.product(name: "RealmSwift", package: "Realm")]
        ),
    ]
)

请注意我在此处指定.dynamic的方式:

        .library(
            name: "RealmUmbrella",
            type: .dynamic,
            targets: ["RealmUmbrella"]
        ),

一旦我将我的 package 添加到我的项目中,我在项目导航器中单击项目文件,选择我的目标,然后导航到“常规”选项卡并向下滚动到“框架、库和嵌入式内容”。 然后我在我的 package 的“嵌入”列中指定了“嵌入和签名”。

在此处输入图像描述

就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM