集成Facebook SDK的iOS/Catalyst应用归档缺Framework符号链接如何修复
问题修复方案
该报错是Facebook SDK的CocoaPods发布包针对Catalyst/macOS架构打包时,未按苹果要求生成框架对应符号链接导致,可通过以下方式修复:
方案1:添加Podfile自动修复脚本(最稳定,适配所有SDK版本)
在你的Podfile末尾添加如下脚本,之后执行pod install即可实现构建时自动补全缺失的符号链接:
post_install do |installer| # 所有需要修复的Facebook相关框架名 fb_frameworks = %w[FBAEMKit FBSDKCoreKit FBSDKCoreKit_Basics FBSDKLoginKit] installer.pods_project.targets.each do |target| next unless fb_frameworks.include? target.name target.build_configurations.each do |config| # 保留框架的Versions层级结构,禁止扁平化 config.build_settings['DEFINES_MODULE'] = 'YES' config.build_settings['SKIP_INSTALL'] = 'NO' end end # 生成归档后执行的符号链接修复脚本 project_name = installer.metadata[:target_definition].name script_path = "Pods/Target Support Files/Pods-#{project_name}/fix-fb-framework.sh" fix_script = <<~EOF #!/bin/sh FW_DIR="${ARCHIVE_PRODUCTS_PATH}/Applications/${WRAPPER_NAME}/Contents/Frameworks" for FW in #{fb_frameworks.join(' ')}; do FW_PATH="${FW_DIR}/${FW}.framework" [ ! -d "${FW_PATH}" ] && continue cd "${FW_PATH}" # 修复Versions目录的Current链接 cd Versions && ln -sf A Current && cd .. # 修复根目录二进制文件链接 ln -sf Versions/Current/${FW} ${FW} # 修复根目录Resources链接 ln -sf Versions/Current/Resources Resources done EOF File.write(script_path, fix_script) system("chmod +x #{script_path}") end
脚本添加完成后需要配置Xcode Scheme触发修复逻辑:
- 点击Xcode顶部菜单栏的Product -> Scheme -> Edit Scheme
- 展开左侧Archive选项,选择Post-actions
- 点击+号选择New Run Script Action
- 在脚本输入框中填写:
${PODS_ROOT}/Target Support Files/Pods-你的项目名/fix-fb-framework.sh
请将内容中的「你的项目名」替换为你实际的主target名称,同时将「Provide build settings from」下拉选择你的主target,保存后重新归档即可。
方案2:升级SDK版本
Facebook官方在16.0及以上版本的SDK中已经修复了该框架结构问题,你可以直接修改Podfile指定版本:
pod 'FBSDKLoginKit', '~> 16.3'
修改完成后执行pod update FBSDKLoginKit更新SDK后重新归档即可。
方案3:手动临时修复
如果不需要频繁打包,可以在归档完成后手动补全符号链接:
- 打开Xcode Organizer,右键对应归档包选择Show in Finder
- 右键归档包选择显示包内容,进入Products/Applications/你的应用.app/Contents/Frameworks
- 对每个报错的Facebook框架依次操作:
- 进入.framework/Versions目录,执行
ln -sf A Current - 回到.framework根目录,执行
ln -sf Versions/Current/框架名 框架名 - 根目录下执行
ln -sf Versions/Current/Resources Resources
修复完成后重新导出归档包上传即可。
- 进入.framework/Versions目录,执行
内容的提问来源于stack exchange,提问作者gklka
相关产品推荐
相关产品推荐

