Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 静态库与Swift_Ios_Iphone_Xcode_Swift_Ios8.3 - Fatal编程技术网

Ios 静态库与Swift

Ios 静态库与Swift,ios,iphone,xcode,swift,ios8.3,Ios,Iphone,Xcode,Swift,Ios8.3,所以我在Swift上做一个iOS项目,我想创建一个静态库,其中包含一些有用的东西 我的问题是,当我尝试在Xcode(版本6.3)中构建我的lib时,我遇到了一个“构建失败”,后跟:/Applications/Xcode.app/Contents/Developer/toolschains/XcodeDefault.xctoolschain/usr/bin/libtool:Xlinker中的未知选项字符“X” 我从未见过这个,这不是我的第一个静态库。所以我想我可能与我使用的是专门的Swift类这一

所以我在Swift上做一个iOS项目,我想创建一个静态库,其中包含一些有用的东西

我的问题是,当我尝试在Xcode(版本6.3)中构建我的lib时,我遇到了一个“构建失败”,后跟:
/Applications/Xcode.app/Contents/Developer/toolschains/XcodeDefault.xctoolschain/usr/bin/libtool:Xlinker中的未知选项字符“X”

我从未见过这个,这不是我的第一个静态库。所以我想我可能与我使用的是专门的Swift类这一事实有关

你们觉得怎么样? 提前谢谢你。

斯威夫特没有


尽管正确的方法应该是创建一个框架,但是有一个解决办法。

从Xcode 9 beta 4开始,Xcode本机支持带有Swift源的静态库。

如前所述,Apple确实允许从Xcode 9 beta 4开始在静态库中使用Swift

我们试图在一个现有的项目上使用基于Objective-C的目标和“子”静态库项目执行此操作,但始终遇到链接错误

ld: library not found for -lswiftSwiftOnoneSupport for architecture x86_64

这是因为主目标(应用程序)试图仅针对Objective-C进行构建,而静态库没有告诉它需要包含Swift库。这是因为在我们的应用目标的
构建阶段
编译源代码
部分中没有任何Swift文件

所以基本上您所要做的就是在编译列表中添加至少一个
.swift
文件,它将为您提供swift库。它甚至不需要任何代码或值,它可以是一个空文件

然后,您可以开始向“子”静态库项目添加Swift文件。我会让它先为您生成桥接头,然后您可以移动它并更改导入的内容(如果移动项目,请确保项目指向构建设置中的正确文件)

您仍然应该记住,在同一个静态库中使用Swift和Objective-C可能会有自己的问题。我建议阅读如何将Objective-C导入Swift(使用桥接头)以及如何在Objective-C代码中使用Swift文件(为您的库导入生成的
-Swift.h
)。

Swift consumer->Swift静态库 Xcode版本10.2.1

创建Swift静态库 创建库项目或创建库目标

File -> New -> Project... -> Cocoa Touch Static Library
//or
Project editor -> Add a Target -> Cocoa Touch Static Library 
添加文件
.swift

Select `.swift` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files
建造图书馆-⌘ 命令+B或
Product->Build

注意1:确保为与客户机代码相同的流程体系结构构建库
注2:使用
public
open
访问修饰符公开用户应能看到的API

查找生成的输出

添加
库搜索路径(库搜索路径)

将模块导入Swift客户端代码



这真让人讨厌。谢谢您的回答。您好,既然swift不支持静态库,我如何防止我的同事阅读我的代码?(这是关于加密数据的,所以知道的人越少越好)。我的应用程序也支持ios 7,所以我想我不能使用框架,对吗?可能需要更新到现在?swift现在同时支持框架和静态库?从objective c项目中,我们可以创建静态库,但从xcode 8开始,是否可以从swift项目中创建静态库swift 3中是否有使用静态库的解决方案,我有一个只有两个的加密库。供应商样本中的一个文件(用objective-c编写)是工作文件,当我尝试使用带有using Bridgeting header的库时(很明显,Bridgeting header配置很好,因为其他objective-c库也可以很好地工作),它不会抛出错误。任何人得到了关于这个问题的解决方案,然后请发布一些线索。我该怎么做才能启用它?当使用包含swift的静态库时,如何访问objective-c项目中的标题?@Harikramsingh我在一个单独的答案中回答了OP问题和您的问题。对我来说,在
pod更新后,这个问题再次出现在Xcode 9.2(9C40b)上。可能是我使用的swift pod改变了设置。在我的例子中,我看到了
ld:library not found for-lswiftCoreImage for architecture x86_64
。这个答案解决了我的链接问题。@afarnham我认为它几乎适用于Swift“核心”中的每个库,因为它在链接使用Swift的静态库中的内容时尝试与它们链接。我以前曾尝试手动将每个Swift库包含在目标依赖项和其他构建阶段中;不用说,这是一场噩梦……而且没有起作用。我希望苹果公司能将其作为一个项目设置,这样你就不必用一个虚拟文件来“欺骗”主要目标,但我想这目前是可行的。我只是有一个混合了objective-c和swift的静态库,我无法让项目(react native)编译:)太棒了,只需添加一个空的Swift文件,所有这些错误就会消失。谢谢你的帮助!我羡慕蒂鲍特诺。我已经有这个问题好几个星期了!万分感谢!公认的答案不再准确。从Xcode 9 beta 4开始,Swift可以在静态库中使用,尽管有些场景需要额外的配置。请看下面的答案。我已经在自己的独立项目中构建了静态框架。我看到
.a
文件和
.swiftmodule
文件夹。我应该将它们都拖到我的主机应用程序中,然后尝试查找路径。是吗?很抱歉问一下,但是有关于这个的任何注释吗?Hello@Honey,我会再次检查它并提供一个information@Honey,回答您的问题,在构建库之后,您应该执行3个步骤:1。将
.a
文件拖动到主机应用程序的
链接框架和库
部分下。2.在
库搜索路径
第3节下指定
.a
的路径。指定代码的路径
Select `.swift` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files
Products group -> lib<product_name>.a -> Show in Finder
Project editor -> select a target -> General -> Linked Frameworks and Libraries -> add -> Add Others... -> point to `lib<target_name>.a` file
//or
Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<target_name>.a` file
Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<target_name>.a` file
Project editor -> select a target -> Build Settings -> Swift Compiler - Search Paths -> Import Paths -> add path to a folder with `.swiftmodule`
import module_name