Динамическая библиотека Swift Package Manager - PullRequest
2 голосов
/ 25 сентября 2019

Я недавно преобразовал кучу своих фреймворков в Swift Package Manager.Мой Package.swift выглядит примерно так:

// swift-tools-version:5.1
import PackageDescription

let package = Package(
    name: "MDFToolbox",
    platforms: [
        .macOS(.v10_13), .iOS(.v12), .tvOS(.v12), .watchOS(.v3)
    ],
    products: [
        .library(name: "MDFToolbox", targets: ["MDFToolbox"])
    ],
    dependencies: [
        .package(url: "git@github.com:Swinject/Swinject.git", from: "2.7.0"),
    ],
    targets: [
        .target(name: "MDFToolbox", dependencies: ["Swinject"]),
    ]
)

Поскольку библиотека раньше была фреймворком, я бы хотел связать ее в своем приложении как динамическую библиотеку (.dylib).В соответствии с определением продукта библиотеки в документации к пакету, я могу указать type моей библиотеки равным .dynamic, если я хочу:

Необязательный тип библиотеки, который используется для определениякак сделать ссылку на библиотеку.Не указывайте этот параметр, чтобы разрешить диспетчеру пакетов Swift выбирать между статическим или динамическим связыванием (рекомендуется).Если вы не поддерживаете оба типа связи, используйте для этого параметра .static или .dynamic.

Если я оставлю это как nil, Xcode по умолчанию будет создавать статическую библиотеку, когда я связываю этот пакет вмой проект приложения, который не то, что я хочу.

Если я установлю тип на .dynamic в Package.swift моей библиотеки, Xcode создаст .dylib, но он не будет встроен в приложение, что приведет к ошибке компоновщика:

dyld: Library not loaded: @rpath/libMDFToolbox.dylib
  Referenced from: /Users/mpdifran/Library/Developer/Xcode/DerivedData/Remind-eewbkbjpfrqbdwchjrbmrtxzsjew/Build/Products/Debug-maccatalyst/Remind.app/Contents/MacOS/Remind
  Reason: no suitable image found.  Did find:
    /Users/mpdifran/Library/Developer/Xcode/DerivedData/Remind-eewbkbjpfrqbdwchjrbmrtxzsjew/Build/Products/Debug-maccatalyst/libMDFToolbox.dylib: code signature in (/Users/mpdifran/Library/Developer/Xcode/DerivedData/Remind-eewbkbjpfrqbdwchjrbmrtxzsjew/Build/Products/Debug-maccatalyst/libMDFToolbox.dylib) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.

Я также не вижу простого способа добавления .dylib к этапу сборки копирования файлов ...

Итак, каков рекомендуемый способ попросить SPM построить и связать динамическую библиотеку через XCode?Это что-то, что еще не поддерживается?

...