使用 Objective C 将 Facebook SDK 15.x 与 iOS 集成是否可行

问题描述 投票:0回答:1

我们能够测试具有 Objective-C 接口的 FB iOS SDK 11.x,但是否可以对 FB iOS SDK 15.x 进行相同的测试,因为它似乎只包含 Swift 接口

ios swift objective-c facebook facebook-graph-api
1个回答
2
投票

虽然技术上可行,但 Facebook iOS SDK 的最低目标版本从 v11 中的 iOS 9 提升到 v15 中的 iOS 12。您可能希望确保最低目标版本匹配。

此外,自 v13 以来,许多类型已从 Objective-C 转换为 Swift。因此,开发人员在使用某些 Facebook SDK 模块时可能需要使用模块化导入语句,以避免在 Objective-C 中遇到编译错误。

// When importing a framework in this form:
#import <FBSDKShareKit/FBSDKShareKit.h>

// You may be need to update to this form when unknown symbol warnings appear:
@import FBSDKShareKit;

来源 - https://github.com/facebook/facebook-ios-sdk/blob/main/CHANGELOG.md#swift-conversions

本质上,您在 Objective-C 实现中使用的 Swift 源将通过生成的称为“桥接”标头的标头来访问。例如,正确配置后,

FBSDKCoreKit
会生成一个
FBSDKCoreKit-Swift.h
,让您可以访问 Swift 实现。请注意,当模块被模块化导入指令(例如
@import FBSDKCoreKit
)引用时,会自动使用此桥接标头。如果您使用 Cocoapods,这就是正确的方法。

否则,如果您想手动构建和引用模块,Swift 文档提供了有关您想要实现的目标的指导:

要在与 Objective-C 代码相同的框架目标中导入一组 Swift 文件,请将 Xcode 为 Swift 代码生成的标头导入到要使用 Swift 代码的任何 Objective-C .m 文件中。

由于生成的标头是框架公共接口的一部分,因此只有标有 public 或 open 修饰符的声明才会出现在框架目标的生成标头中。 Objective-C 运行时可以访问使用Internal 修饰符标记并在继承自Objective-C 类的类中声明的方法和属性。但是,它们在编译时无法访问,并且不会出现在框架目标的生成标头中。

将 Swift 代码导入同一框架内的 Objective-C 中:

  1. 在“构建设置”下的“打包”中,确保“定义模块” 该框架目标的设置设置为“是”。
  2. 使用此语法并替换适当的名称,将 Swift 代码从该框架目标导入到该目标内的任何 Objective-C .m 文件中:
  3. 使用桥接标头导入
    #import <ProductName/ProductModuleName-Swift.h>

来源 - https://developer.apple.com/documentation/swift/importing-swift-into-objective-c

© www.soinside.com 2019 - 2024. All rights reserved.