一、流程记录
- 报错记录:
Undefined symbols for architecture arm64:
"__swift_FORCE_LOAD_$_swiftCompatibility50", referenced from:
__swift_FORCE_LOAD_$_swiftCompatibility50_$_FirebaseAnalytics in FirebaseAnalytics[17](Analytics+StoreKit.o)
"__swift_FORCE_LOAD_$_swiftCompatibility51", referenced from:
__swift_FORCE_LOAD_$_swiftCompatibility51_$_FirebaseAnalytics in FirebaseAnalytics[17](Analytics+StoreKit.o)
"__swift_FORCE_LOAD_$_swiftCompatibility56", referenced from:
__swift_FORCE_LOAD_$_swiftCompatibility56_$_FirebaseAnalytics in FirebaseAnalytics[17](Analytics+StoreKit.o)
"__swift_FORCE_LOAD_$_swiftCompatibilityConcurrency", referenced from:
__swift_FORCE_LOAD_$_swiftCompatibilityConcurrency_$_FirebaseAnalytics in FirebaseAnalytics[17](Analytics+StoreKit.o)
"__swift_FORCE_LOAD_$_swiftCompatibilityDynamicReplacements", referenced from:
__swift_FORCE_LOAD_$_swiftCompatibilityDynamicReplacements_$_FirebaseAnalytics in FirebaseAnalytics[17](Analytics+StoreKit.o)
ld: symbol(s) not found for architecture arm64
- 最开始是问chatgpt去解决的,根据gpt给的方案一顿改,最终也没能改好
- 然后gpt推荐我把firebase库从cocoapods移除,改成用SPM,firebase-ios-sdk的方式去安装
- 当我一顿操作后,报错:
xcode26 framework 'FirebaseAppCheckInterop' not found
- 又是根据gpt给的指示一顿操作,最终得出结论FirebaseAppCheckInterop是firebase内部库无法引用,也基本没有解决方案,
- 这时我gpt的额度用完了
- 于是我把代码回退了,把firebase库重新从SPM的方案改成了cocoapods,还是继续报错,
- 这回我选择了使用Google浏览器自带AI模式
https://www.google.com/search
二、解决方案
(我不确定其中具体哪步是有用的哪步是多余的,反正全部操作后可用,因为我2个项目是基本相同的代码,项目2重复按此步骤操作可行)
1、Swift Language Version
NotificationService 的 Build Settings 里,Swift Language Version 选中跟主target同样的swift版本,我这里是选择swfit5
2、Validate Built Product
Build Settings - Validate Built Product = NO
3、Enable Testability
Build Settings - Enable Testability = NO
4、精准修复 Library Search Paths
Build Settings 中手动填入绝对路径(替代变量):
找到 Library Search Paths。
删除所有现有内容,只保留 $(inherited)。
依次手动点击 + 号添加(确保是 non-recursive):
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos
(注意:如果你的 Xcode 重命名了,请修改 /Applications/Xcode.app/ 为实际路径)
5、修改 Other Linker Flags (强制弱引用)
如果 Firebase 还在寻找这些符号,我们需要告诉链接器:如果找不到就忽略,不要报错。
在
NotificationService -> Build Settings -> Other Linker Flags。
添加以下标志:
-Wl,-undefined,dynamic_lookup
-Wl,-no_compact_unwind (Xcode 26 针对旧版库的常用补丁)
6、最后
在你的 Podfile post_install 中加入这段,强制 Pods 寻找正确的路径:
# 合并后的 post_install 逻辑,放在 Podfile 最底部
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# 1. 统一所有 Pods 的部署版本(解决版本不一致导致的符号丢失)
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
# 2. 强制添加 Xcode 26 缺失的 Swift 兼容库搜索路径
# 这里的顺序很重要:$(inherited) 必须在第一位
config.build_settings['LIBRARY_SEARCH_PATHS'] ||= ['$(inherited)']
config.build_settings['LIBRARY_SEARCH_PATHS'] << '$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)'
config.build_settings['LIBRARY_SEARCH_PATHS'] << '$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)'
# 3. 针对 Extension 的特殊设置:允许非模块化头文件(Firebase 常需)
config.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'
# 4. 修复 Xcode 26 自动精简符号的问题
config.build_settings['DEAD_CODE_STRIPPING'] = 'NO'
end
end
end