在Xcode 11中添加本地Swift包的依赖关系

18
我正在尝试在我的Xcode项目中添加对本地Swift包的依赖项。(我不想使用文件URL file://me/dev/app/package 添加依赖项,因为这不能共享到其他环境)
我尝试将包拖放到目标中。这会在项目中创建对包的引用,我能够在“链接二进制文件与库”构建阶段中添加该引用,但仍找不到库。
No such module 'Analytics'

我的原始配置

enter image description here

拖放后

enter image description here

以下是我的软件包配置:

// swift-tools-version:5.1
import PackageDescription

let package = Package(
    name: "Analytics",
    products: [
        .library(name: "Analytics", targets: ["Analytics"]),
    ],
    dependencies: [
        .package(path: "../SomeOtherPackage"),
    ],
    targets: [
        .target(name: "Analytics", dependencies: [
            "SomeOtherPackage",
        ]),
    ]
)

我也已经将{{Package}}包含在目标链接的二进制文件和/或捆绑资源和/或编译源代码中,但没有任何效果:

enter image description here

我已经阅读了这个漫长的讨论, 但似乎并没有得出结论。

以下是我正在尝试的简单示例: https://github.com/gsabran/SPM_Xcode_test

1个回答

33

以下是我实际操作并成功运行的步骤... Xcode 11.2

I. 准备软件包

  1. 文件 > 新建 > Swift Package > 选择空文件夹 (或创建新文件夹) > 输入库名称 (MyLibrary)

  2. 在项目中找到 MyLibrary.swift 并将其设为 public 结构和变量,以便可以在应用程序中使用(我创建了静态常量并修复了 UT)

  3. 生成 > OK > 关闭项目

II. 准备项目

  1. 文件 > 新建 > 项目 > iOS > 单视图应用程序 > 输入名称 (MyApp) > 下一步 > 选择与上面相同的文件夹(默认设置) > 创建

  2. 生成 > OK

  3. 从 Finder 中将 MyLibrary 文件夹拖动到 Xcode 项目导航器中项目名称的下方

  4. 生成 > OK

  5. 单击项目导航器中的 MyApp 项目图标 > 选择 MyApp 应用程序目标 > 部分框架、库等,单击 + > 在最上面的 Workspace 部分选择 MyLibrary > 添加

  6. 清理 > 构建 > OK

  7. 打开 ContentView.swift > 输入 import MyLibrary(自动完成已经看到它) 将“Hello,World”替换为 “(MyLibrary.text)”

  8. 生成和运行 > OK

就是这样。

若要验证使用的相对路径,请在 TextEdit 中打开 project.pbxproj 文件,如下图所示:

Swift package relative path

更新:
注1 - 我已经考虑到了清理后软件包解析的一些延迟,因此在一段时间内(大约1-2分钟),构建会准确地失败并报告错误,但在这段延迟之后,可以看到索引重启并且随后构建成功。
注2 - 在图中添加第二个依赖包(MyApp> MyLibrary> AnotherLibrary)是相同的。


谢谢你的好回答。在执行几个步骤后,我不得不退出Xcode,才能使库出现为添加选项。 - Womble
1
此外,还有这个:https://developer.apple.com/documentation/swift_packages/developing_a_swift_package_in_tandem_with_an_app - Womble
1
还有这个:https://developer.apple.com/documentation/swift_packages/editing_a_package_dependency_as_a_local_package - Womble
我想知道是否有一种方法可以将软件包指定为可选的,类似于“Build Phase -> Link Binary with Libraries”中的“Required”和“Optional”状态。 - Heuristic

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