如何将Swift Package Manager集成到现有的Xcode项目中?

3
我已经有一个适用于MacOS应用程序的Xcode项目。然而,我想使用Swift Package Manager从Github添加一个Swift框架。
我在项目文件夹中运行了"swift package init"。然后我更新了Package.swift文件。之后我运行了"swift package resolve"。
但是,当我尝试构建时,它仍然抱怨没有这样的模块。
由于我已经有一个工作项目,如果我运行"swift package generate-xcodeproj",它会搞乱文件夹结构并删除storyboard。
我该如何告诉Xcode使用Swift Package Manager下载到项目中的模块呢?
谢谢!
4个回答

3
所有这里的答案都非常陈旧和过时,所以我决定添加一些现代上下文,以防有人像我一样遇到这个问题。
苹果已经对Xcode进行了一些非常棒的升级,以原生支持Swift Package Manager。以下图片显示了我本地的软件包(我构建和维护)与git存储库中包含的演示项目合并在一起。导航到此页面(3),然后单击“+”按钮(4)将打开对话框,以从git存储库添加远程软件包。这可以使用任何.xcproj文件完成。

Xcode Swift Package Manager Support

苹果还有很多关于如何自己构建和支持Swift包,或者如何将它们整合到您的应用程序中的精彩文档。
根据文档,将代码组织成本地包依赖关系是非常好的实践 Swift packages是一种方便且轻量级的解决方案,用于创建模块化应用程序架构,并在您的应用程序或与其他开发人员共享代码。随着时间的推移,您可能希望与您的应用程序一起开发已发布的Swift package,或者创建一个示例应用程序来展示其功能。要与应用程序一起开发Swift package,您可以利用本地package覆盖具有相同名称的package依赖项的行为:
1. 将Swift package作为包依赖项添加到您的应用程序中,而不是作为本地package,如编辑本地包依赖项所述。 2. 同时开发您的应用程序和Swift package,并将更改推送到它们的存储库。 3. 如果您发布了新版本的Swift package或者想要停止使用本地package,请从项目中删除它以再次使用包依赖项。
请参阅苹果官方的Swift Package Manager文档获取更多最新信息。
许多爱!<3

3
从SPM生成的Xcode项目与您的应用程序的Xcode项目/工作区不同。
您应该在另一个目录(例如“ Dependencies”)中生成该Xcode项目。然后将其拖入到您的应用程序中,并添加链接的框架。我编写了一个完整的逐步指南

这对我很有效。需要注意的是,Xcode中构建的应用第一次失败了,但第二次成功了(可能是因为它需要再次检查依赖项以确认它们已经存在)。 - Paul Gowder

1

截至本文撰写时(2017年12月),macOS、iOS、tvOS和watchOS不支持Swift Package Manager。因此,您将需要直接将软件包中的文件添加到您的项目中。

我建议在您的项目中创建一个名为Dependencies的组,并在该组下创建一个软件包名称的子组:

enter image description here

然后将文件添加到该组中:

enter image description here

enter image description here

我无法让它在添加文件夹的情况下正常工作,所以如果您想保持包的结构,请将所有文件添加到组中。不过,我可能做错了。您可以像自己编写代码一样访问代码,无需导入。

enter image description here


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) 运行您的项目并享受 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接