此更改日志(facebook change-log)中指出,swift不需要objective-c桥接头。
但是当我在 AppDelegate.swift 中import FBSDKCoreKit
时,会发生以下错误:
FBSDKAppLinkResolver.h
/用户/ [用户名] /Documents/FacebookSDK/FBSDKCoreKit.framework/Headers/FBSDKAppLinkResolver.h:21:9: 在框架模块中包含非模块化头 ' FBSDKCoreKit.FBSDKAppLinkResolver'
AppDelegate.swift
/Users/ashrafkholeif/Projects/xcode/TabbedApplicationTemplate/TabbedApplicationTemplate/TabbedApplicationTemplate/AppDelegate.swift:10:8: 无法构建Objective-C模块' FBSDKCoreKit'
编辑:我甚至将框架模块中允许的非模块化标头设置为 YES 。
答案 0 :(得分:7)
我遇到了完全相同的问题,在https://stackoverflow.com/a/29457503/425682上建议的一个Objective-C项目的解决方案可以直接用于我的Swift项目:
在Bolts.framework / Modules / module.modulemap下的Facebook SDK文件夹中写一个新文件,其中包含以下内容:
framework module Bolts {
umbrella header "Bolts.h"
export *
module * { export * }
explicit module BFAppLinkResolver {
header "BFAppLinkResolver.h"
link "BFAppLinkResolver"
export *
}}
这没有桥接标题(在OP提到的SDK 4.0.1版本中不再需要),并且不需要更改构建设置。
编辑:此bug现已修复,自Facebook SDK版本4.1起,该库无需进行任何更改即可运行。
答案 1 :(得分:2)
这是一个错误,Facebook目前正在将此分配给相应的团队"。
要获取此问题的更新,请点击以下链接:
https://developers.facebook.com/bugs/362995353893156/
并点击订阅。
希望它不会花费太长时间来修复。
此处还有最近在SO上发布的相关问题:
issue using FBSDK in swift iOS application
有些人使用此链接上的答案找到了成功(没有一个对我有用):
答案 2 :(得分:2)
对我有用的修复:
rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/
重复其他框架。
来源:https://developers.facebook.com/docs/ios/troubleshooting#xcode_link
答案 3 :(得分:1)
创建一个新的头文件并导入您正在使用的任何Objective-c代码,如下所示..
#ifndef RJv1_RJBridge_h
#define RJv1_RJBridge_h
#import "NSMutableString+Obfuscated.h"
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
#endif
然后转到构建设置,查找Install Objective-C Compability Header
,并确保设置为Yes
,然后在字段Objective-C Bridging Header
中添加头文件的相对路径。
希望它有效!