如何在我的 Xcode 主项目中添加引用 类 的 Swift 包?

How do I add a Swift package that references classes in my main Xcode project?

我的主要目标是制作一个 swift 包,其中包含两个状态,由一个标志打开和关闭。

其中一个状态启用引用 类 的代码和我导入此包的另一个项目中定义的变量。这些代码部分是我自己的库的个人版本,具有特定于我的项目的特殊功能。另一个状态禁用那些代码部分并启用允许包用作一般库的代码 public.

我尝试这样做的方法是使用预处理器宏打开和关闭代码段。以下标志在我将此包添加到其他项目时使用的包的自定义分支中定义:

(Package.swift 文件在我的 swift 包中)

swiftSettings: [
  .define("FULL_WEEKDAY_PICKER"),
]),

(我的 swift 包中的代码)

#if FULL_WEEKDAY_PICKER
// use code referenced in my other project
#else
// do other thing
#endif

但这不起作用,而且我收到错误,因为我的包不知道我其他项目中的代码。我的第一个想法是将它作为本地依赖项添加到这个包中。我的项目有一个 git 存储库。

dependencies: [
    // Dependencies declare other packages that this package depends on.
    .package(path: "../HueCircadianSchedule"), // <--- name of my other project
],

.target(
    name: "DayOfWeekCollectionView",
    dependencies: ["Sol"], //<--- target of my other project

但即使添加这些设置也会让我崩溃 Xcode,所以我认为这不是正确的步骤。

或者,我尝试将我的包拖放到我的其他项目中。我的包中没有任何错误,但项目不知道我刚放入的包中的代码。

如何在我的包中引用我的项目中定义的代码,然后在我的项目中使用该包?我的项目中需要 Package.swift 吗?我应该采用不同的方法来完成我想做的事情吗?你可以在这里查看我的项目:

My project

My swift package

听起来你的包不是一个合适的独立包。将其重新设计为真正的独立包,即,将所有必需的代码从您的其他项目移至包中,或者允许包的用户以某种方式扩展包的功能。

基本上不是直接引用外部内容的包,而是允许外部内容让包的一般服务知道它自己。例如,在包中定义一个协议,在你的项目中定义符合该协议的实体(数据源、UI、委托或其他任何东西)。然后你在使用包的时候提供那个东西,包只需要知道协议中定义的接口即可。

或者,或者,以不需要调用任何外部事物的方式重构包,而是外部事物调用包。