簡體   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