繁体   English   中英

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

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

我的主要目标是制作一个 swift package 具有两种状态,由一个标志打开和关闭。

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

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

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

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

(我的 swift 包中的代码)

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

但是,这不起作用,并且出现错误,因为我的 package 不知道我的其他项目中的代码。 我的第一个想法是将它作为本地依赖添加到这个 package 中。 我的项目有一个 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 拖放到我的其他项目中。 我的 package 中没有任何错误,但该项目不知道我刚刚加入的 package 中的代码。

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

我的项目

我的 swift package

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

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

或者,或者,重构 package,使其不需要调用任何外部事物,而是外部事物调用 package。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM