如何将Swift Package Manager合并到现有的Xcode项目中?

时间:2017-11-19 01:56:00

标签: swift xcode

我已经有一个适用于MacOS App的Xcode项目。但是,我想使用Swift Package Manager从Github添加一个Swift框架。

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

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

由于我已经有了一个工作项目,如果我运行“swift package generate-xcodeproj”,它会搞乱文件夹结构以及删除故事板。

如何告诉Xcode使用swift包管理器下载到项目中的模块?

谢谢!

3 个答案:

答案 0 :(得分:1)

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

我建议您在项目中创建一个Dependencies组,并在包含名称的下面创建一个组:

enter image description here

然后将文件添加到组中:

enter image description here

enter image description here

如果我添加了文件夹,我无法使其工作,因此如果要维护包的结构,则应将所有文件添加到组中。我可能会以错误的方式做到这一点。

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

enter image description here

答案 1 :(得分:1)

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

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

(empty file)

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

MACOSX_DEPLOYMENT_TARGET = 10.14

3)创建 Package.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

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

echo "Building SPM Dependencies"
BASE_DIR="${PROJECT_DIR}/Dependencies"
cd ${BASE_DIR}

rm -fr Dependencies.xcodeproj
swift package update
swift package generate-xcodeproj --xcconfig-overrides Sources/ios.xcconfig

sleep 3

until [ -d "Dependencies.xcodeproj" ]
do
echo "File not found"
sleep 0.1
done
echo "File found"
exit

macOS

echo "Building SPM Dependencies"
BASE_DIR="${PROJECT_DIR}/Dependencies"
cd ${BASE_DIR}

rm -fr Dependencies.xcodeproj
swift package update
swift package generate-xcodeproj --xcconfig-overrides Sources/macos.xcconfig

sleep 3

until [ -d "Dependencies.xcodeproj" ]
do
echo "File not found"
sleep 0.1
done
echo "File found"
exit

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

答案 2 :(得分:0)

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

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

然后将其拖动到您的应用程序中,并添加链接的框架。我写了full step-by-step