通过带有 Swift 支持的 Carthage 将 MailCore2 添加到 Xcode

Posted

技术标签:

【中文标题】通过带有 Swift 支持的 Carthage 将 MailCore2 添加到 Xcode【英文标题】:Adding MailCore2 via Carthage with Swift Support to Xcode 【发布时间】:2016-08-29 05:11:37 【问题描述】:

在这里尽我所能:

新建项目->OS X->应用程序->语言(Swift)名称(MailCoreTest) 关闭项目 将 Cartfile 添加到项目的根目录,其中包含一行:github "MailCore/mailcore2" 从项目的根目录运行 carthage update --platform macosx 收到一些警告,但没有真正的问题:

/Users/theuser/Documents/XCode/MailCoreTest/Carthage/Checkouts/mailcore2/src/async/imap/MCIMAPAsyncSession.cpp:793:66: warning: 'gmailUserDisplayName' is deprecated [-Wdeprecated-declarations]
/Users/theuser/Documents/XCode/MailCoreTest/Carthage/Checkouts/mailcore2/src/async/imap/MCIMAPAsyncSession.cpp:793:66: warning: 'gmailUserDisplayName' is deprecated [-Wdeprecated-declarations]

在 Xcode 中再次打开项目 在应用程序目标的“常规”设置选项卡上,在“嵌入式​​二进制文件”部分,我拖放 Carthage 构建的 MailCore.framework。 我还将 dSYM 添加到产品目录复制文件阶段 在这个阶段应用程序构建成功,但是当我添加时:

#import <MailCore/MailCore.h>
#import <MailCore/MCOConstants.h>

到 Swift-Bridging-Header.h 文件并将其添加到 Objective-C Bridging Header Build Setting 我收到大量构建错误:

MailCoreTest Group
/Users/theuser/Documents/XCode/MailCoreTest/Carthage/Build/Mac/MailCore.framework/Headers/MCIndexSet.h
/Users/theuser/Documents/XCode/MailCoreTest/Carthage/Build/Mac/MailCore.framework/Headers/MCIndexSet.h:15:10: Include of non-modular header inside framework module 'MailCore.MCIndexSet'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCIMAPConnectOperation.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCIMAPNoopOperation.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCMainThread.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCMXRecordResolverOperation.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCNNTPCheckAccountOperation.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCONNTPDisconnectOperation.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCOPOPNoopOperation.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCOSMTPLoginOperation.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCPOPNoopOperation.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCSizeFormatter.h'
/Users/theuser/Documents/XCode/MailCoreTest/<module-includes>:1:1: Umbrella header for module 'MailCore' does not include header 'MCSMTPNoopOperation.h'
/Users/theuser/Documents/XCode/MailCoreTest/MailCoreTest/Swift-Bridging-Header.h
/Users/theuser/Documents/XCode/MailCoreTest/MailCoreTest/Swift-Bridging-Header.h:12:9: Could not build module 'MailCore'
Failed to import bridging header '/Users/theuser/Documents/XCode/MailCoreTest/MailCoreTest/Swift-Bridging-Header.h'

奇怪的是我在另一个项目中工作。我什至可以针对它运行 carthage update 并且没有任何问题。经过数小时尝试重现一个有效的新项目后,我似乎无法让它工作。我一定是遗漏了一些东西,但我不知道它是什么,甚至不知道该往哪里看。

在测试中,我尝试了“目标”下的构建设置,并将“允许框架模块中的非模块化包含”设置为“是”,但得到了相同的结果——在另一个工作项目中,我将其设置为“否”。

【问题讨论】:

【参考方案1】:

Carthage 需要检查最新的提交。将购物车文件更改为:

github "MailCore/mailcore2" "master"

变魔术

【讨论】:

是的,它确实有帮助并清除了一堆警告和潜在的内存泄漏等。第一,我删除了我拥有的 MC2,检查了 master 并按照 Readme.md 中的说明重新添加了它

以上是关于通过带有 Swift 支持的 Carthage 将 MailCore2 添加到 Xcode的主要内容,如果未能解决你的问题,请参考以下文章

将 swift 更新到 4.0 版后 Carthage Build 失败

SwiftyJson 无法导入在 3.0.2 中使用 Carthage 编译的 Swift 3.1 模块中

简陋的swift carthage copy-frameworks 辅助脚本

简陋的swift carthage copy-frameworks 辅助脚本

iOS支持Swift包管理器吗?[已关闭]

让自己的项目支持 Carthage