ADAL iOS 与 CocoaPods v0.38 使用 Swift 没有桥接头
Posted
技术标签:
【中文标题】ADAL iOS 与 CocoaPods v0.38 使用 Swift 没有桥接头【英文标题】:ADAL iOS with CocoaPods v0.38 using Swift without Bridging Header 【发布时间】:2015-08-09 13:40:35 【问题描述】:我正在构建一个使用 ADAL 连接到 Office365 的 Swift 应用程序。几个月前,在 Podfile 中,我只有一行:
pod 'ADALios', '~> 1.0.1'
当我定义一个包含以下内容的桥接头时,一切正常:
#import "ADALiOS/ADAuthenticationContext.h"
最后,在我的 Swift 代码中,我只需要添加
import ADALiOS
但我也想开始使用 SwiftyJSON,它是一个 Swift 框架,所以我在我的 Podfile 中添加了几行代码:
pod 'ADALiOS', '~> 1.2.4'
pod 'SwiftyJSON'
use_frameworks!
更新到 CocoaPods V0.38 允许使用带有 Objective-C 库 (ADALiOS) 的框架。根据文档,不再需要 Bridging 标头,因此我将其删除。
现在,一切编译正常,但是当我调用 ADAL 代码时,它失败并出现以下错误:
ADALiOS [2015-08-09 13:01:07 - C621BB01-686A-4064-9455-A4B55C11E0E8]
ERROR: Error raised: 18. Additional Information:
Domain: ADAuthenticationErrorDomain
ProtocolCode:(null)
Details:The required resource bundle could not be loaded. Please read the ADALiOS readme on how to build your application with ADAL provided authentication UI resources..
ErrorCode: 18.
我假设因为它可以很好地编译/链接,所以这与桥接头无关,而是与其他东西有关。
有什么线索吗?
【问题讨论】:
【参考方案1】:我终于解决了这个问题。如果其他人遇到相同“类型”的错误,这就是我所做的。
我从头开始了一个新项目,并使用 CocoaPod 安装了 ADALiOS,没有使用 use_framework!并手动将库 libADALiSO.a 添加到项目中,以及带有#import“ADAuthenticationContext.h”的桥接头。我什至使用了旧版本的 ADALiOS (V1.0.2)。在尝试运行这个项目(应该可以运行)时,我收到了奇怪的警告,指出我在 Xcode 使用的一些隐藏文件夹中存在重复的函数:
~/Library/developer/xcode/DerivedData
~/Library/developer/xcode/CoreSimulator/Device
无论如何,它是有效的,因为它需要一个副本来运行程序。然后我只是删除了其中包含我的项目名称的文件夹/文件并重建了程序。警告消失了,它又开始工作了。
然后,我在我的 Podfile 中包含了所需的 PromiseKit 和 use_frameworks,重新构建了应用程序并再次运行。我删除了不需要的桥接头,但只在我的 swift 代码中添加了以下行:
import ADALiOS
它仍然按照最初的预期工作。
最后,我用我的所有代码打开了我的原始项目,它也构建并运行,没有任何错误。所以我浪费了 3 个小时从头开始重试一切,以为 Cocoapods V0.38 或 aven ADALiOS 是罪魁祸首,最终发现它可能只是 Xcode 中的东西。
所以我不知道为什么这些文件会导致问题,我可以添加一个解释,那就太好了。
【讨论】:
【参考方案2】:根据 ADAL GitHub 存储库,这应该在 ADAL 2.1 中得到修复
【讨论】:
【参考方案3】:如果您在 Objective-C 项目中使用 pod。然后请使用 pod 版本 2.5.1,因为这是可用的最新版本。但不幸的是,这个版本在任何地方都没有提到,帖子和帮助博客仍然显示 2.2 版本,这会导致编译器错误。
但是,如果您在初始阶段使用过 2.2 版本,请不要担心,只需“更新”您的项目,然后重新打开相应的工作区。这将使您的代码编译没有任何错误。
【讨论】:
【参考方案4】:尝试将 SwiftyJSON 框架拖到您的项目中。 不要使用 cocoaPods,而是下载 zip 文件,然后解压缩并将 swift 文件拖到您的项目中。 像这样不需要在你的 PodFile 中添加 use_frameworks 并且一切都应该正常工作。 (我已经在另一个库中做到了这一点,并且成功了)
【讨论】:
是的,这可能是一种解决方法,但我希望继续使用 Cocoapods 来管理依赖项。以上是关于ADAL iOS 与 CocoaPods v0.38 使用 Swift 没有桥接头的主要内容,如果未能解决你的问题,请参考以下文章