Ios Swift静态库

Ios Swift静态库,ios,swift,Ios,Swift,正在尝试创建在我公司的iOS应用程序之间共享的实用程序项目。我在以前的工作中做过,但那早于斯威夫特。很明显,我希望所有的实现都保持在swift中,而不是Obj-C 我尝试了cocoapod路线,使用,但在我开始在主项目中使用我的实用程序代码之前,存在构建问题 我现在只尝试使用一个“Cocoa Touch静态库”,它的语言很快,但仍然没有运气。我将整个.xcodeproj文件导入我的工作区。现在,我只有一个.swift文件,加上由XCode生成的头文件。 我的项目名为IosUtilsTest 特别

正在尝试创建在我公司的iOS应用程序之间共享的实用程序项目。我在以前的工作中做过,但那早于斯威夫特。很明显,我希望所有的实现都保持在swift中,而不是Obj-C

我尝试了cocoapod路线,使用,但在我开始在主项目中使用我的实用程序代码之前,存在构建问题

我现在只尝试使用一个“Cocoa Touch静态库”,它的语言很快,但仍然没有运气。我将整个
.xcodeproj
文件导入我的工作区。现在,我只有一个
.swift
文件,加上由XCode生成的头文件。 我的项目名为
IosUtilsTest

特别是,我的测试util文件:

extension UIBarButtonItem {
  class func flexible() -> UIBarButtonItem {
    return UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
  }
}
在我的应用程序中:

import IosUtilsTest
....
toolbar.items = [UIBarButtonItem.flexible(), centeredButton, UIBarButtonItem.flexible()]
....
我得到一个编译器错误,
flexible
不存在

我已尝试在桥接头中同时包含


基本上,这个扩展似乎没有包含在构建中。FWIW——我记得有一个问题,类别需要一个特殊的构建标志,所以我试着用一个我试图实例化的类来实现这个问题,这是相同的基本错误。

我们有一个项目,它包含许多swift框架模块,这些模块都被构建到一个应用程序中,所以我应该能够提供一些帮助

首先,您希望创建一个Cocoa Touch框架作为项目类型

第一个问题是,框架中的所有内容都必须声明为公共的,因为默认情况下它是内部的。好吧,至少是你想向客户端公开的部分API。因此,请使用:

public extension UIBarButtonItem {
  class func flexible() -> UIBarButtonItem {
     return UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
  }
}
您不需要做更多的事情,只需将模块导入.swift文件,并将框架包含在带有库的链接二进制文件中即可

我们也试过椰子荚,花了很多时间在上面,但都没有用。很多构建错误,所以我们放弃使用Git子模块。你是对的,它没有cocoapod设置那么好-但是它对我们来说很好,只是稍微多了一点开销。如果愿意,您可以在.gitmodules中将子模块标记为“自动获取”


要想让可可豆正常运行,需要注意的一点是,目前所有应用程序都必须使用相同版本的Xcode构建。因此,如果您有一个模块是使用旧版本的Xcode构建的,然后放入cocoa pod中,那么您需要确保在Xcode更新时重新构建它。这是由于与构建打包在一起的swift运行时造成的——有关更多详细信息,请参阅苹果swift博客

找到了一个可接受但不理想的解决方法。将util项目添加为子模块,并将包含我的swift文件的适当文件夹从Finder拖到我的应用程序中。它将创建适当的组,等等,并且应该正常工作,这样,如果我更新util项目中的某些内容,它将在下次它们获取/重新设置子模块的基础时更新工作区中的内容。仍然不如仅仅安装一个
pod
,但我接受它。Swift仍在经历巨大的变化。在尘埃落定之前,我不建议在Swift中构建静态库。目前,在当前的Xcode版本中,您甚至不能选择Swift作为库语言(您可以选择其他任何语言)。这和苹果说“嘿,你不应该制作Swift库!”的任何迹象一样清晰。@nhgrif这是不对的。您可以选择Swift作为cocoa touch框架的语言。此外,苹果给出的警告是关于二进制文件的,尤其是第三方swift二进制文件,它们可以使用不同版本的Xcode构建,并嵌入不同的swift运行时。您自己的框架很好,第三方也一样,只要它们都是使用相同的Xcode同时构建的。读我的答案。。。我正在使用它们,它们工作得很好。@bandejapaisa是框架,与Xcode中的库不同。我不知道具体的技术区别是什么,但是如果您选择一个库而不是一个框架,那么就不会给出Swift选项。你能把一个框架编译成一个独立的可分发文件吗?@nhgrif一个框架基本上是一个带有标题的很好的打包库。框架中的二进制文件可以是一个静态库。我想知道,从xcode 8开始,我们可以将swift项目转换为静态库吗?