ADAL iOS 与 CocoaPods v0.38 使用 Swift 无桥接 Header
ADAL iOS with CocoaPods v0.38 using Swift without Bridging Header
我正在构建一个 Swift 使用 ADAL 连接到 Office365 的应用程序。几个月前,在 Podfile 中,我只有一行:
pod 'ADALiOS', '~> 1.0.1'
当我定义桥接 Header 时一切正常,其中包括:
#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) 一起使用。根据文档,不再需要桥接 header,所以我将其删除。
现在,一切都可以正常编译,但是当我调用 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.
我假设因为 compiles/links 很好,这与桥接 header 无关,而是其他原因。
有线索吗?
尝试将 SwiftyJSON Framework 拖到您的项目中。
不要使用 cocoaPods,而是下载 zip 文件,然后解压缩并将 swift 文件拖到项目中。
这样就无需在您的 PodFile 中添加 use_frameworks,一切都应该可以正常工作。
(我已经用另一个库完成了它并且有效)
我终于解决了这个问题。以防其他人得到相同的 "type" 错误,这就是我所做的。
我从头开始了一个新项目并使用 CocoaPod 安装了 ADALiOS,没有 use_framework!并手动添加库 libADALiSO.a 到项目,以及桥接 Header 和 #import "ADAuthenticationContext.h"。我什至使用了旧版本的 ADALiOS (V1.0.2)。当尝试 运行 这个项目(应该有效)时,我收到了 st运行ge 警告,指出我在 Xcode:
使用的一些隐藏文件夹中有重复的函数
~/Library/developer/xcode/DerivedData
~/Library/developer/xcode/CoreSimulator/Device
在任何情况下,它都有效,因为它使用了一个副本来运行程序。然后我只是删除了其中包含我的项目名称的 folders/files 并重建了程序。警告消失了,它又起作用了。
然后,我在我的 Podfile 中包含了所需的 PromiseKit 和 use_frameworks,重新构建了应用程序,它再次运行。我删除了不需要的桥接 header,但只在我的 swift 代码中添加了以下行:
import ADALiOS
它仍然像最初预期的那样工作。
最后,我用我的所有代码打开了我的原始项目,它也构建并且 运行 没有任何错误。所以我浪费了 3 个小时从头开始重试一切,认为 Cocoapods V0.38 或 aven ADALiOS 是罪魁祸首,最终发现它可能只是 Xcode.
中的东西
所以我不知道为什么这些文件会导致这些问题,如果有人可以添加解释,那就太好了。
根据 ADAL GitHub 存储库,这应该在 ADAL 2.1
中得到修复
如果您将 pods 与 Objective-C 项目一起使用。那么请使用 pod 版本 2.5.1,因为这是可用的最新版本。但不幸的是这个版本没有在任何地方提到,帖子和帮助博客仍然显示 2.2 版本,这会导致编译错误。
但是如果您在初始阶段使用的是 2.2 版本,那么请不要担心,只需 'pod update' 您的项目,然后重新打开相应的工作区。这将使您的代码编译无误。
我正在构建一个 Swift 使用 ADAL 连接到 Office365 的应用程序。几个月前,在 Podfile 中,我只有一行:
pod 'ADALiOS', '~> 1.0.1'
当我定义桥接 Header 时一切正常,其中包括:
#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) 一起使用。根据文档,不再需要桥接 header,所以我将其删除。
现在,一切都可以正常编译,但是当我调用 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.
我假设因为 compiles/links 很好,这与桥接 header 无关,而是其他原因。
有线索吗?
尝试将 SwiftyJSON Framework 拖到您的项目中。 不要使用 cocoaPods,而是下载 zip 文件,然后解压缩并将 swift 文件拖到项目中。 这样就无需在您的 PodFile 中添加 use_frameworks,一切都应该可以正常工作。 (我已经用另一个库完成了它并且有效)
我终于解决了这个问题。以防其他人得到相同的 "type" 错误,这就是我所做的。
我从头开始了一个新项目并使用 CocoaPod 安装了 ADALiOS,没有 use_framework!并手动添加库 libADALiSO.a 到项目,以及桥接 Header 和 #import "ADAuthenticationContext.h"。我什至使用了旧版本的 ADALiOS (V1.0.2)。当尝试 运行 这个项目(应该有效)时,我收到了 st运行ge 警告,指出我在 Xcode:
使用的一些隐藏文件夹中有重复的函数~/Library/developer/xcode/DerivedData
~/Library/developer/xcode/CoreSimulator/Device
在任何情况下,它都有效,因为它使用了一个副本来运行程序。然后我只是删除了其中包含我的项目名称的 folders/files 并重建了程序。警告消失了,它又起作用了。
然后,我在我的 Podfile 中包含了所需的 PromiseKit 和 use_frameworks,重新构建了应用程序,它再次运行。我删除了不需要的桥接 header,但只在我的 swift 代码中添加了以下行:
import ADALiOS
它仍然像最初预期的那样工作。
最后,我用我的所有代码打开了我的原始项目,它也构建并且 运行 没有任何错误。所以我浪费了 3 个小时从头开始重试一切,认为 Cocoapods V0.38 或 aven ADALiOS 是罪魁祸首,最终发现它可能只是 Xcode.
中的东西所以我不知道为什么这些文件会导致这些问题,如果有人可以添加解释,那就太好了。
根据 ADAL GitHub 存储库,这应该在 ADAL 2.1
中得到修复如果您将 pods 与 Objective-C 项目一起使用。那么请使用 pod 版本 2.5.1,因为这是可用的最新版本。但不幸的是这个版本没有在任何地方提到,帖子和帮助博客仍然显示 2.2 版本,这会导致编译错误。
但是如果您在初始阶段使用的是 2.2 版本,那么请不要担心,只需 'pod update' 您的项目,然后重新打开相应的工作区。这将使您的代码编译无误。