如何将演示应用程序目标添加到 Swift 包?

Posted

技术标签:

【中文标题】如何将演示应用程序目标添加到 Swift 包?【英文标题】:How can I add a demo app target to a Swift Package? 【发布时间】:2020-01-18 11:15:44 【问题描述】:

我希望包含一个演示应用程序,其中包含一个自定义控件的 Swift 包,其中显示了每个控件的实现演示。有没有办法可以将它包含在 Swift 包中(也可以通过这种方式直接在包中开发/测试控件)?

【问题讨论】:

【参考方案1】:

什么样的应用程序? SwiftPM 仅直接支持 macOS/Linux 可执行文件。

如果您想要一个 ios/tvOS/watchOS,您将需要一个 Xcode 项目,该项目使用相对路径链接来查找您的包。这是通过创建示例应用程序并将包的包含目录拖到 Xcode 项目中来完成的。然后,您可以链接库。如果您将此示例应用程序与软件包一起放入存储库中,那么它将与克隆该软件包的任何人一起分发。

当我自己这样做时,我注意到的一件重要的事情(这几乎可以肯定是 Xcode 中的一个错误)是 Package.swiftExample.xcodeproj 不能在同一个目录中。您必须将 Xcode 项目嵌套到另一个目录中,否则它会在很多时候出现构建/链接问题。因此,如果您在使用我的建议时遇到任何问题,也可以试试这个创可贴。

我在 GitHub here 创建了一个适用于 Xcode 11.3 的示例。

【讨论】:

是的,希望有一个 macOS 演示,但 iOS 可以工作。也许这只是一个 Xcode 错误,因为我也看到了类似的东西。您介意提供您的 Package.swift 文件吗? 带有可执行文件的 Package.swift 示例或使用包的 xcodeproj 示例,同时与包在同一个仓库中? 两者?真的很高兴看到一个你已经开始工作的示例包,它还构建了一个使用包内容的二进制文件。如上所述,想象一个框架包,但我也希望能够在使用该框架的演示可执行文件中构建和工作。 也刚刚意识到:鉴于您的方法基本上是在 repo 中包含一个单独的项目,然后在项目中本地使用该包(是的?)这对某人来说不是一个问题容易将包包含在他们自己的项目中(因为它有嵌入式 Xcode 项目)? 我会把它们放在一起。至于嵌入式 Xcode 项目问题。我们一直在将它与我们在我工作的地方制作的一些新软件包一起使用,尽管我们在这些项目中只有一个可执行文件,但它并没有引起任何问题。如果那些也有框架目标,它可能会导致问题吗?我也必须检查一下。【参考方案2】:

最好的方法是使用“Xcode 工作区”。 它是如何工作的?

1.创建您的工件

创建一个目录。

在里面创建一个 Xcode 工作区(Xcode: File: New: Workspace)。然后创建您的库(包),并在同一目录中创建您的应用程序(无论类型)。

这一步只要把包和app放在上面的目录下,马上关闭即可。

它应该看起来像这样。

2。链接您的工件

打开您的 .xcworkspace 文件。

在左下角,点击“+”号。

选择“将文件添加到 your_workspace_name”,然后:

a) 用于演示应用

导航到应用的目录,选择Your_app.xcodeproj并点击添加。

b) 用于包裹

导航到包的目录,并仅选择包目录。在点击添加按钮之前,请确保选中“为任何添加的文件夹创建文件夹引用”。

您的整个工作区现在应该是这样的。您可以立即在您的应用中导入该库,然后就可以开始使用了。

【讨论】:

试过这种方式,但无法在我的演示应用中访问包文件。【参考方案3】:

以下是在 Xcode 13 上对我有用的步骤:

    创建一个名为MyLibrary的包

    在包目录下新建一个项目应用MyLibraryDemo

    打开项目的.xcodeproj文件

    转到PROJECT > MyLibraryDemo > Add packages

    Add Local 并选择包含您的包的目录

    转到应用程序的TARGET > General > Frameworks, Libraries and Embeded Content,然后按“添加”

    从列表中选择您的包裹

    现在您可以将您的 MyLibrary 包导入到您的示例应用中

【讨论】:

谢谢,它适用于 Xcode 13.1

以上是关于如何将演示应用程序目标添加到 Swift 包?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 导入本地 Swift 包并从应用程序构建

如何将数据从应用程序显示到Today Extension Swift

如何在没有 Cocoapods 的情况下手动将包添加到 Swift

如何将列添加到 Azure 演示 iOS 应用程序的简易表(待办事项列表)

如何使用 swift 将相同的背景图像添加到我的 ios 应用程序中的所有视图?

Swift EventKit的初学者指南–请求权限