由于FBSDKCoreKit位码错误,FacebookCore无法链接

时间:2018-07-03 09:01:06

标签: objective-c swift xcode facebook bitcode

我正在尝试使用Facebook SDK in Swift。它会在模拟器中以及在我的设备上本地运行并编译。但是,尝试存档或构建发行版配置失败。

ld: bitcode bundle could not be generated because '/.../DerivedData/FacebookSwift-xyz/Build/Products/Release-iphoneos/FBSDKCoreKit.framework/FBSDKCoreKit' 
    was built without full bitcode. All frameworks and dylibs for bitcode must be 
    generated from Xcode Archive or Install build file '/.../DerivedData/FacebookSwift-xyz/Build/Products/Release-iphoneos/FBSDKCoreKit.framework/FBSDKCoreKit' 
    for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

如何复制

下载或克隆Facebook SDK in Swift项目,编辑FacebookCore方案以构建发行版配置。

运行迦太基以降低依赖性,facebook-ios-sdk等。

Set <code>FacebookCore</code> scheme to build the Release config

现在构建项目将出现错误; bitcode bundle could not be generated because '.../FBSDKCoreKit' was built without full bitcode

项目设置

  • FBSDKCoreKit子项目中的FBSDKCoreKit目标的“启用位码”设置为“是”。
  • FacebookCore目标还将“启用位码”设置为“是”。
  • FacebookCore目标具有2个目标依存关系;螺栓和FBSDKCoreKit都是动态框架版本。

调查

我尝试构建FBSDKCoreKit-Dynamic方案(在Release配置中),并且成功。生成的框架具有(据我所知)的位代码,正在运行:otool -l "/path/to/framework-binary" | grep -c __LLVM返回4。

在二进制文件上运行file会返回:

/.../FBSDKCoreKit.framework/FBSDKCoreKit: Mach-O universal binary with 2 architectures: [arm_v7:Mach-O dynamically linked shared library arm_v7] [arm64:Mach-O 64-bit dynamically linked shared library arm64]
/.../FBSDKCoreKit.framework/FBSDKCoreKit (for architecture armv7):  Mach-O dynamically linked shared library arm_v7
/.../Release-iphoneos/FBSDKCoreKit.framework/FBSDKCoreKit (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64

工具等

  • Xcode 9.4.1
  • facebook-sdk-swift是0.31版
  • facebook-ios-sdk(Objective-C)是版本4.34
  • 迦太基v0.30.1
  • 部署目标;适用于Facebook框架的iOS 8.0
  • 基本SDK:iOS 11.4(Latest iOS
  • LLVM v9.0

1 个答案:

答案 0 :(得分:3)

这已经有一段时间了,我记得几个月前对此进行了调查。您的问题很可能位于目标操作系统版本(8.0)中。在FBSDKCoreKit中,从iOS11.0启用了位码标志。您可以尝试关闭主要目标的位码以进行编译。 (或者将目标操作系统版本提高到11,但我认为这不是一个选择)