如何将Swift软件包管理器合并到现有的Xcode项目中?

如何将Swift软件包管理器合并到现有的Xcode项目中?,swift,xcode,Swift,Xcode,我已经有了一个MacOS应用程序的Xcode项目。但是,我想使用Swift Package Manager从Github添加一个Swift框架 我在项目文件夹中运行了“swift package init”。然后我更新了Package.swift文件。然后我运行了“swift包解析” 然而,当我尝试构建时,它仍然抱怨没有这样的模块 因为我已经有了一个工作项目,如果我运行“swiftpackagegeneratexcodeproj”,它会弄乱文件夹结构并删除脚本 如何告诉Xcode使用swift

我已经有了一个MacOS应用程序的Xcode项目。但是,我想使用Swift Package Manager从Github添加一个Swift框架

我在项目文件夹中运行了“swift package init”。然后我更新了Package.swift文件。然后我运行了“swift包解析”

然而,当我尝试构建时,它仍然抱怨没有这样的模块

因为我已经有了一个工作项目,如果我运行“swiftpackagegeneratexcodeproj”,它会弄乱文件夹结构并删除脚本

如何告诉Xcode使用swift package manager下载到项目中的模块


谢谢大家!

撰写本文时(2017年12月),macOS、iOS、tvOS和watchOS不支持Swift软件包管理器。相反,您必须将包中的文件直接添加到项目中

我建议在您的项目中创建一个
依赖项
组,并在该组下面创建一个包名为:

然后将文件添加到组中:

如果我添加了文件夹,则无法使其正常工作,因此如果要维护包的结构,则应将所有文件添加到组中。不过我可能做得不对

然后,您可以像通常自己编写代码时那样访问代码。没有进口


2019年实现Swift Package Manager和XCode集成的步骤:

1) 创建依赖项.swift文件 /yourproject/Dependencies/Sources/Dependencies.swift

(empty file)
2) 创建macos.xcconfig文件 /yourproject/Dependencies/Sources/macos.xcconfig

MACOSX_DEPLOYMENT_TARGET = 10.14
SDKROOT = iphoneos
SUPPORTED_PLATFORMS = iphonesimulator iphoneos
IPHONEOS_DEPLOYMENT_TARGET = 10.0

ARCHS = $(ARCHS_STANDARD)
VALID_ARCHS = $(ARCHS_STANDARD)

VALIDATE_PRODUCT = YES
LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks
TARGETED_DEVICE_FAMILY = 1, 2
3) 创建包.swift文件 /yourproject/Dependencies/Package.swift

// swift-tools-version:4.2
import PackageDescription

let package = Package(
    name: "Dependencies",
    products: [
        .library(name: "Dependencies", type: .static, targets: ["Dependencies"])
    ],
    dependencies: [
        .package(url: "https://github.com/YourDependency/here.git", .upToNextMinor(from: "0.1.0"))
    ],
    targets: [
        .target(name: "Dependencies", dependencies: ["YourDependency"])
    ]
)
4) 生成Dependencies.xcodeproj并拖放到现有项目中

swift package generate-xcodeproj --xcconfig-overrides Sources/macos.xcconfig
5) 导入您的依赖项

import YourDependency
这足以让它工作,但你可以让你的生活更容易一些额外的步骤

其他(可选)步骤:

6) 创建ios.xcconfig文件 /yourproject/Dependencies/Sources/ios.xcconfig

MACOSX_DEPLOYMENT_TARGET = 10.14
SDKROOT = iphoneos
SUPPORTED_PLATFORMS = iphonesimulator iphoneos
IPHONEOS_DEPLOYMENT_TARGET = 10.0

ARCHS = $(ARCHS_STANDARD)
VALID_ARCHS = $(ARCHS_STANDARD)

VALIDATE_PRODUCT = YES
LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks
TARGETED_DEVICE_FAMILY = 1, 2
7) 将预构建操作添加到主项目的iOS和macOS方案中

iOS

马科斯


8) 运行您的项目并享受:)

从SPM生成的Xcode项目与应用程序的Xcode项目/工作区不同

您应该在另一个目录中生成该Xcode项目,例如“Dependencies”

然后将其拖动到应用程序中,并添加链接的框架。我写了一封信


这对我很有效。请注意,xcode中的应用程序构建第一次失败,但第二次成功(可能它必须对依赖项进行另一次传递才能意识到它们在其中)。