如何在其他项目中重用Swift代码?

时间:2014-08-27 02:33:54

标签: ios xcode swift

我在Swift写了一个类。我想在我写的两个独立的iOS应用程序项目中使用此代码。共享代码和应用程​​序都是用Swift编写的。这样做的最佳方式是什么?

我尝试在Swift中创建框架和库,然后将其作为子项目添加到我的应用程序中。在这两种情况下,我无法让应用程序看到模块。我试图将共享模块添加到" Target Dependencies"和#34;链接二进制文件库和#34;主应用程序的目标。没有运气 - 应用程序仍然无法看到共享模块的类。

目前使用Xcode6 Beta6。

解决方案

正如Konstantin Koval和Heliem指出的那样,我所需要的只是在共享模块中的类和方法声明中使用public。现在一切正常,如果我使用工作区,并且我将模块添加为子项目。

更新

我刚刚找到了一个很好的简单解决方案,可以在Swift中重用项目之间的代码。它被称为迦太基(https://github.com/Carthage/Carthage)。这不是插件,因为我不以任何方式与它有任何联系,我真的很喜欢它。它适用于iOS 8 +。

3 个答案:

答案 0 :(得分:28)

  1. 为您的可重用代码创建一个新项目(iOS Cocoa Touch Framework)
  2. 将您的课程移至该框架项目
  3. 标记您的方法和类,其他人应该可以将其视为public
  4. 创建工作区。
    您可以在步骤1中创建工作区。当您创建新的Framework项目时,Xcode将询问您是否要创建新工作区并将该项目添加到工作区。这是最好的方法
  5. 将项目和框架添加到工作区
  6. 选择项目目标 - >常规选项卡。添加框架和库(在此处添加库)
  7. 如果要在swift文件中使用库中的代码,请使用import 'LibTargetName'
  8. 导入它

答案 1 :(得分:3)

您可以使用 SWM (Swift模块)采用更加编程的方法:https://github.com/jankuca/swm

它与 npm (node.js包管理器)或 bower (客户端模块管理器)非常相似;您在swiftmodule.json文件中声明您的依赖项,如下所示。它没有像两个提到的JS解决方案那样的中央模块注册表,它只接受git URL。

{
  "name": "ProjectName",
  "dependencies": {
    "Dependency": "git://github.com/…/….git"
  }
}

...运行swm install并将Dependency模块(编译成*.swiftmodule二进制文件)准备好在.modules/目录中导入。

import Dependency

如果您希望跳过Xcode进行应用开发,您还可以使用swm build构建整个应用(项目自述文件中的详细信息)。

该项目仍处于早期阶段,但它至少对我有用。它提供了创建可导入模块的最干净(最清晰)的方法。

答案 2 :(得分:2)

以下是一段非常简单的视频:http://eonil-observatory.tumblr.com/post/117205738262/a-proper-way-to-add-a-subproject-to-another-xcode

该视频适用于OS X而非iOS。但是你会得到它并找出iOS的过程。

我们假设AppA需要重用SharedProject中的代码。

以下过程适用于Xcode 7 Beta:

  1. 创建SharedProject。项目类型必须为Framework,而不是Application。您在此项目中编写公共代码,并将代码标记为public
  2. 在Xcode中打开AppA,在Finder中打开包含SharedProject的文件夹。从Finder中拖动SharedProject的.xcodeproj文件,并将其放入Xcode Project Navigator中AppA的根文件夹中。
  3. AppA - > Build Phases - > Link Binary with Libraries。添加SharedProject
  4. import SharedProject并重复使用SharedProject
  5. 中的代码

    修改

    现在我建议您使用Carthage。它比上面的自制解决方案更好。