Drag and dropAbout(https://stackoverflow.com/a/59216377/4770877)将二进制文件导入Xcode项目 Embed dynamic binary(或不嵌入||链接静态二进制文件)Link vs Embed(https://stackoverflow.com/a/59216858/4770877) Library not loaded(https://stackoverflow.com/a/59216681/4770877)
//Xcode 11
Project editor -> select a target -> General -> Frameworks, Libraries, and Embedded Content -> path to `<product_name>.framework` -> Embed
//pre Xcode 11
Project editor -> select a target -> General -> Embedded Binaries -> path to `<product_name>.framework`
加上Framework Search paths(FRAMEWORK_SEARCH_PATHS)Module not found(https://stackoverflow.com/a/59216466/4770877) Recursive path(https://stackoverflow.com/a/57516845/4770877)
Project editor -> select a target -> Build Settings -> Search Paths -> Framework Search paths -> add path to the parent of `<product_name>.framework` file
2条答案
按热度按时间h79rfbju1#
首先要注意的是(这当然不是我第一次注意到!),你 * 不能 * 在iOS下使用静态库。Xcode不会让你在静态框架中使用Swift。试试吧。Xcode会拒绝你的愿望!
这是我最终的流程,我必须处理的两个主要问题是:(i)使Xcode链接到using项目中的框架而不出错,(ii)访问using项目中框架的头文件,在苹果开明的观点中,这两个问题是分开的,注意讽刺。).
1)使用Xcode创建一个
Cocoa Touch Framework
。我相信这可以在Xcode6和Xcode7中使用。使用:文件〉新建〉项目〉iOS〉框架和库〉Cocoa Touch框架
我碰巧正在使用Xcode7。(不要制作
Cocoa Touch Static Library
--就像我上面说的,Xcode不会让您将Swift合并到静态库中)。2)对于Swift类,确保成员和函数是 * public * 的。我没有做过这样的实验,但似乎public属性对于成员和函数对框架用户可见是必要的。
3)添加任何你想要的Swift类(和Objective-C)到你的框架。
4)关闭那个框架项目(同一个项目不能在Xcode中打开两次,接下来需要将框架合并到using项目中)。
5)在Xcode中打开你的using项目。对我来说,这是一个现有的通用应用项目。你可能正在创建一个新的using项目。无论如何,在Finder中将框架项目的. xcodeproj文件拖到你的using项目中。
6)在using项目中,打开框架项目,将框架文件拖到构建阶段的
Embed Frameworks
中(当我第一次开始我的实验时,构建阶段中没有Embed Frameworks
部分,我还不知道是什么魔法导致它出现!)。到目前为止,这些步骤应该可以让您在不实际集成库代码的情况下进行构建和链接(我使用https://github.com/RadiusNetworks/swift-framework-example进行了一些测试)。
7)现在是致命一击:在
Build Settings
下,搜索Framework Search Paths
。然后添加:(It似乎您 * 不必 * 将其标记为递归)。
8)在使用框架的Swift代码文件中,您需要在每个文件的顶部添加一个导入:
现在您应该可以使用新库进行构建和链接了!
9)还有一个问题:请确保您的框架
Deployment Target
与目标项目匹配。例如,如果您使用的项目构建版本适用于iOS7,请确保您的框架构建版本适用于iOS7或更早版本。10)第二个问题(2015年10月23日):我刚刚了解到我的框架必须有"App-Swift. h"(我使用的名称)作为构建设置中的Objective-C生成的接口头名称。当我把这个(Objective-C生成的接口头)去掉(试图修复另一个问题)时,我在App-Swift. h中遇到了一些有趣的问题。这些问题看起来像:"Cannot find interface declaration for NSObject"?
11)第三个问题(2015年10月29日):当我尝试将我的第一个应用程序上传到使用此框架的iTunes Connect时,我收到了一个上传错误。错误如下:
错误ITMS-90206:"无效的捆绑包。位于" Your.app/Frameworks/YourFramework.framework "的捆绑包包含不允许的文件" Frameworks'。"
各种SO和其他帖子都遇到过这种错误,对我来说,技巧是在构建设置中为Framework目标将"嵌入内容包含Swift代码"设置为NO。(我的应用构建设置已经将此标志设置为NO)。
https://github.com/crspybits/CocoaTouchFramework.git上的示例项目完成了其中的大部分步骤
4smxwvx52#
Swift消费者-〉Swift动态框架
Xcode版本10.2.1
创建Swift框架
创建框架项目或创建框架目标
将生成两个文件:
1.一个月一个月-一个月一个月
<product_name>.h
-Build Phases -> Headers
,为伞状头文件About(https://stackoverflow.com/a/57481319/4770877)添加文件
.swift
构建库-Command + B或
Product -> Build
注意:确保您构建的框架与客户机代码的流程架构相同。
查找生成的输出Build location(https://stackoverflow.com/a/57512068/4770877)
该框架包括
Info.plist
Modules
About(https://stackoverflow.com/a/59213694/4770877)文件夹,带有:module.modulemap
<product_name>.swiftmodule
.swiftdoc
Headers
文件夹,带有:Headers
节中的文件。存在公共接口/定义<product_name>-Swift.h
-Xcode生成的头文件About(https://stackoverflow.com/a/59217701/4770877)使用Swift框架的Swift消费者
Drag and drop
About(https://stackoverflow.com/a/59216377/4770877)将二进制文件导入Xcode项目Embed dynamic binary
(或不嵌入||链接静态二进制文件)Link vs Embed(https://stackoverflow.com/a/59216858/4770877) Library not loaded(https://stackoverflow.com/a/59216681/4770877)加上
Framework Search paths(FRAMEWORK_SEARCH_PATHS)
Module not found(https://stackoverflow.com/a/59216466/4770877) Recursive path(https://stackoverflow.com/a/57516845/4770877)将模块导入Swift客户端代码module_name(https://stackoverflow.com/a/57517400/4770877)
More examples here