|
|
1
141
更简单、更健壮的方法是创建一个名为“CommonCryptoModuleMap”的聚合目标,并在运行脚本阶段自动生成模块映射,并使用正确的Xcode/SDK路径:
运行脚本阶段应包含以下bash:
使用shell代码和
创建此目标后,使用目标依赖项使库/框架依赖于它:
这将确保在构建框架之前生成模块映射。
macOS注释
:如果您支持
接下来,添加模块映射的父目录,
记得添加
就这样,你现在应该能够
更新Xcode 10 Xcode 10现在附带了一个CommonCrypto模块映射,因此不需要这种解决方法。如果您希望同时支持Xcode 9和10,可以在运行脚本阶段检查模块映射是否存在,例如。
|
|
|
2
95
实际上,您可以构建一个“只起作用”的解决方案(无需复制
模块.模块映射
和
您现在应该能够构建、运行和
例如,请参见 SQLite.swift 使用虚拟对象 sqlite3.框架 . |
|
|
3
84
我发现了一个在Swift框架中成功使用CommonCrypto的GitHub项目: SHA256-Swift 。此外,本文关于 the same problem with sqlite3 是有用的。 基于上述内容,步骤如下:
1) 创建
2) 在生成设置中,在
Swift编译器-搜索路径
,添加
3) 最后,将CommonCrypto作为其他模块导入Swift文件中。例如:
局限性
在另一个项目中使用自定义框架在编译时失败,出现错误
模块映射不是独立于平台的(它当前指向一个特定的平台,即iOS 8模拟器)。我不知道如何使标头路径相对于当前平台。 iOS 8更新<=我们应该把这条线去掉 链接“CommonCrypto” ,以获得成功的编译。 更新/编辑 我一直收到以下构建错误:
除非我拔掉了电话线
|
|
|
4
52
这个答案讨论了如何使其在框架内工作,以及如何与Cocoapods和迦太基合作 模块映射法
我使用
对于那些得到
带模块映射方法的Cocoapods
公共标头方法
带有公共标头方法的椰子
有趣的相关帖子 |
|
|
5
46
好消息!Swift 4.2(Xcode 10)最终提供了CommonCrypto!
只需添加
|
|
|
6
7
警告:iTunesConnect可能 reject 使用此方法的应用程序。 我团队中的新成员意外地打破了一个顶级答案给出的解决方案,因此我决定将其整合到一个名为 CommonCryptoModule 。您可以手动或通过Cocoapods安装:
然后,您所要做的就是在需要的地方导入模块
希望其他人觉得这很有用。 |
|
|
7
5
我认为我对迈克·韦勒的出色工作有所改进。
在
该脚本在正确的位置构建了一个带有module.map的裸框架,然后依赖于Xcode的自动搜索
我将最初的CommonCryptoinclude文件夹链接为框架的Headers文件夹,因此结果也应适用于Objective C项目。 |
|
|
8
5
对于任何使用 雨燕4.2 具有 X代码10 : CommonCrypto模块现在由系统提供,因此您可以像任何其他系统框架一样直接导入它。
|
|
|
9
4
@莫格斯塔德非常友善地将@斯蒂芬塞利斯的解决方案包装成可可酱: pod'libCommonCrypto' 其他可用的吊舱对我不起作用。 |
|
10
4
modulemap解决方案可能很好,并且对SDK的更改很健壮,但我发现它们在实践中很难使用,而且在向其他人分发东西时不如我希望的那样可靠。为了使这一切更加简单,我采取了不同的方式: 只需复制标题。 我知道,脆弱。但苹果几乎从未对CommonCrypto进行过重大更改,我一直梦想着,如果不最终将CommonCrypto成为模块化标头,他们将不会以任何重大方式对其进行更改。 所谓“复制头”,我的意思是“像预处理器一样,将您需要的所有头剪切并粘贴到项目中的一个大型头中。” RNCryptor.h . 请注意,所有这些文件都是根据APSL 2.0许可的,这种方法有意维护版权和许可声明。我的连接步骤在麻省理工学院许可,这只适用于下一个许可通知)。 我并不是说这是一个漂亮的解决方案,但到目前为止,它似乎是一个对实现和支持都非常简单的解决方案。 |
|
|
11
2
我知道这是个老问题。但我找到了在Swift项目中使用库的另一种方法,这可能对那些不想导入这些答案中介绍的框架的人有所帮助。 在Swift项目中,创建Objective-C桥接头,在Objective-C中创建NSData类别(或使用库的自定义类)。唯一的缺点是必须用Objective-C编写所有实现代码。 例如:
然后在objective-c桥接头中添加
然后在Swift类中做类似的事情:
它按预期工作。 |
|
|
12
2
我在jjrcott的答案中添加了一些cocapods魔法,以防您需要在cocapods库中使用CommonCrypto。 1) 将此行添加到podspec中:
2) 将其保存在库文件夹中或您喜欢的任何位置(但是不要忘记相应地更改script_phase…)
像符咒一样工作:) |
|
|
13
0
我不确定Xcode 9.2是否有所改变,但现在实现这一点要简单得多。我唯一需要做的就是在我的框架项目目录中创建一个名为“CommonCrypto”的文件夹,并在其中创建两个文件,其中一个文件名为“cc.h”,如下所示:
另一个名为module.modulemap:
(我不知道为什么不能在modulemap文件中直接引用来自SDKROOT区域的头文件,但我无法使其工作) 第三件事是找到“导入路径”设置并设置为$(SRCROOT)。 事实上,如果您不希望CommonCrypto文件夹位于根级别,您可以将其设置为任何您想要的文件夹。 在此之后,您应该能够使用
在任何swift文件和所有类型/功能等中。可用。 不过需要提醒的是,如果你的应用程序使用libCommonCrypto(或libcoreCrypto),那么一个不太老练的黑客非常容易将调试器连接到你的应用,并找出传递给这些函数的密钥。 |
|
|
14
0
如果您遇到以下问题:
在Xcode 10中,Swift 4.0。CommonCrypto是框架的一部分。 添加
去除
这对我有用! |
|
|
15
-1
更新Xcode后,我也遇到了同样的情况。 我尝试了我能做的一切,比如重新安装cocapods和清理项目,但都没有成功。 现在它已经解决了 重新启动 系统。 |
|
|
16
-14
这很简单。添加
到.h文件(项目的桥接头文件)。按照惯例,您可以将其称为YourProjectName Bridging Header.h。 然后转到项目Build Settings,查找Swift编译器-代码生成。在它下面,将桥接标头的名称添加到条目“Objetive-C桥接标头”。 你完了。您的Swift代码中不需要导入。这个桥接头文件中列出的任何公共Objective-C头对Swift都是可见的。 |
|
|
Tom · SwiftUI.sheet导致背景白色闪烁 1 年前 |
|
|
Danil · 种子/填充核心数据的最佳实践?[关闭] 1 年前 |
|
|
Robin · LazyVGrid项目预计不会击中测试区域 1 年前 |
|
|
Saurabh Saini · 结构下标 1 年前 |
|
|
Alex Smith · 移动到下一个视图控制器后如何显示警报? 1 年前 |