Facebook SDK v4.7 的 CocoaPods v0.39.0 错误

Posted

技术标签:

【中文标题】Facebook SDK v4.7 的 CocoaPods v0.39.0 错误【英文标题】:CocoaPods v0.39.0 errors with Facebook SDK v4.7 【发布时间】:2016-01-10 05:32:26 【问题描述】:

旧 Cocoapods 配置

我正在使用 Xcode 7 Beta 4。最初我使用的是 Cocoapods 版本 0.38.2,当我在终端中运行 pod install --verbose 时,它说它下载了 Bolts、FBSDKCoreKit、FBSDKLoginKit、FBSDKShareKit、FBSDKMessengerShareKit 和 Pods 的依赖项iOS 8.1。通过此设置,我的应用程序编译成功。下面是我用来导入 Facebook SDK 的 Podfile 和 Objective-C 桥接文件(因此 Swift 可以识别其引用的方法和 Objective-C 类)。请注意,我的 Podfile 中显示的特定版本也是安装的版本,即使我在撰写本文时没有明确指定它们。

播客文件

xcodeproj '/Users/<my_username>/MyApp/MyApp.xcodeproj'
pod "FBSDKCoreKit", "~> 4.7.0";
pod "FBSDKLoginKit", "~> 4.7.0";
pod "FBSDKShareKit", "~> 4.7.0";
pod "FBSDKMessengerShareKit", "~> 1.3.1";

MyAppObjCBridging.h

#ifndef MyAppObjCBridging_h
#define MyAppObjCBridging_h

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
#import <FBSDKMessengerShareKit/FBSDKMessengerShareKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>

#endif

更新到 Cocoapods v0.39.0(从 v0.38.2)时遇到的问题

控制台显示消息“CocoaPods 0.39.0 可用。要更新使用:gem install cocoapods。在我们达到 1.0 版本之前,CocoaPods 的功能可以并且将会改变。我们强烈建议您始终使用最新版本.",所以我通过在终端中执行sudo gem install cocoapods 安装了最新版本的 Cocoapods 0.39.0。

但是当我编译我的应用程序时,它给了我以下错误:

/Users//MyApp/MyApp/MyAppObjCBridging.h:14:9: 'FBSDKCoreKit/FBSDKCoreKit.h' 文件未找到

在 Xcode I “Product > Clean” (CMD+SHIFT+K) 中,但这并没有任何区别。所以我在终端中运行sudo gem uninstall cocoapods(其中列出了当前安装的版本为 0.38.2 和 0.39.0)并从列表中选择版本 0.39.0 以卸载最新版本并恢复为 0.38.2。然后我跑了pod install --verbose。当我尝试编译我的应用程序时,它成功编译并再次在模拟器中运行。

问题 1

当我使用 Cocoapods 0.39.0 版本而不是旧版本 0.38.2 时,为什么会出现找不到“FBSDKCoreKit/FBSDKCoreKit.h”的错误?

问题 2

如果在使用 Cocoapods 版本 0.38.2(与我的应用程序一起编译的版本)时,我决定将 platform :ios, '9.0' 添加到我的 Podfile 的第一行(在其现有内容之上)并在终端中运行 pod install --verbose,终端消息告诉我它为 iOS 9.0(而不是 iOS 8.1)安装了每个 pod 目标(即- Installing targetFBSDKCoreKitiOS 9.0)。 然后当我运行我的应用程序时,它会成功编译并在模拟器中打开,并显示一些与 iOS9 相关的新警告,其中大部分是我理解的。但是我不明白为什么会出现这个。为什么会出现这个警告?:

ld:警告:找不到选项“-L/Users/Ls/code/swift/FreeWifiSearch/FreeWifiSearch/build/Debug-iphoneos”的目录

问题 3

当使用 Cocoapods 版本 0.38.2(与我的应用程序一起编译的版本)时,如果我决定将 use_frameworks! 添加到我的 Podfile 的第一行,并将 platform :ios, '9.0' 添加到我的 Podfile 的第二行(在其上方)现有内容),然后在终端中运行 pod install --verbose,终端消息告诉我它为 iOS 9.0(而不是 iOS 8.1)安装了每个 pod 目标。

当我运行我的应用程序时,出现以下错误:

使用未解析的标识符“FBSDKLoginButton” 使用未解析的标识符“FBSDKLoginManager” 使用未解析的标识符“FBSDKLoginBehaviour”

为什么在我的 Podfile 顶部添加 use_frameworks! 会阻止我使用 Facebook SDK 标识符? (请注意,当我的 Podfile 顶部没有 use_frameworks! 时,我的应用程序成功编译并在 Xcode Simulator 中运行,并且我可以成功检索 Facebook SDK 访问令牌并登录到 Facebook)

【问题讨论】:

【参考方案1】:

自发布原始问题以来,执行了以下操作并且没有导致编译器错误:

通过从 App Store 下载最新版本从 Xcode 7 Beta 4 更新到 Xcode 7.1.1 在 Podfile 顶部添加了 use_frameworks!platform :ios, '9.0' 将部署目标更改为 iOS 9.0:项目设置 > 目标 > 常规 > 部署信息 > 部署目标 > 9.0 使用sudo gem install cocoapods 将 CocoaPods 更新到 v0.39 使用pod update --verbose 重新安装 pod 在包含 Facebook SDK 方法的类上方添加了 import FBSDKLoginKit 在 Xcode 中执行清理 (Shift+CMD+K) 和运行 (CMD+R) 以在设备上进行测试

【讨论】:

【参考方案2】:

在构建设置中目标的标头搜索路径中添加"$PODS_ROOT/Headers/Public/FBSDKCoreKit/FBSDKCoreKit"

现在对我来说没问题(CocoaPods 0.39,FBSDK 4.10)

【讨论】:

以上是关于Facebook SDK v4.7 的 CocoaPods v0.39.0 错误的主要内容,如果未能解决你的问题,请参考以下文章

静态 cocoa/cocoa-touch 库应该基于啥样的 SDK?

NSJsonSerialzation 未解析来自 Facebook 的结果 - Cocoa 错误 3840 [重复]

在项目 SDK Cocoa Touch 框架中使用 Firebase Analytics 时崩溃

Cocoa iPhone SDK 开发 - 如果 UIImageView 附加了 CABasicAnimation,则 touchesBegan 方法不起作用

cocoa pods报错The dependency `Reveal-iOS-SDK` is not used in any concrete target.

Facebook iOS SDK 返回错误“com.facebook.sdk 错误 4”