移除framework 中的bitcode

,

由于 xcode16 不支持 framework开启bitcode,使用5.10.4 之前的IM SDK 可能会遇到打包问题。

如何查看framework 是否支持bitcode?

  • otool -l framwork路径下的实体文件 | grep __LLVM | wc -l

说明: 使用otool 工具 查看framework文件的load commands内容,然后搜索load commands中的__LLVM个数。

如果上述命令的输出结果有__LLVM的个数大于0,那么就说明,所用的framework或.a开启了 bitcode,否则没有开启。

 otool -arch arm64 -l RongIMKit | grep __LLVM | wc -l
       0 

如何移除framework中的bitcode?

如果您使用的是 podfile,请添加以下设置:


post_install do |installer|
  bitcode_strip_path = `xcrun --find bitcode_strip`.chop!
  
  def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
        framework_path = File.join(Dir.pwd, framework_relative_path)
        command = "#{bitcode_strip_path} #{framework_path} -r -o #{framework_path}"
        puts "Stripping bitcode: #{command}"
        system(command)
  end

  RongCloudIM_Frameworks = [
  "RongChatRoom",
  "RongContactCard",
  "RongCustomerService",
  "RongDiscussion",
  "RongIMKit",
  "RongIMLib",
  "RongIMLibCore",
  "RongLocation",
  "RongLocationKit",
  "RongPublicService",
  "RongSight",
  "RongSticker"
  ]

  RongCloudIM_Frameworks.each do |framework_name|
    framework_relative_path ="Pods/RongCloudIM/RongCloudIM/#{framework_name}.xcframework/ios-arm64_armv7/#{framework_name}.framework/#{framework_name}"
    strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
  end
end

其中, RongCloudIM_Frameworks 请根据具体使用情况设置,该脚本会移除对应 framework 的bitcode,使 Xcode 16 的打包可以通过验证。

参考链接: Fix Bitcode Error in Xcode 16 for iOS Builds | Medium