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 没有桥接头的主要内容,如果未能解决你的问题,请参考以下文章

配置 iOS ADAL Azure SDK 故事板

ADAL iOS 重定向 URI 必须是 http(s)?

即使在注销后,适用于 iOS 应用程序的 ADAL for .NET 也可以对以前的用户进行身份验证

iOS之深入解析Cocoapods的工作原理与源码分析

iOS之深入解析Cocoapods的工作原理与源码分析

CocoaPods 是不是使用_frameworks!与 iOS 7 一起工作?