升级Xcode与CocoaPods后Pod安装出现OneSignal框架命名冲突错误
问题描述
近期同时升级Xcode与CocoaPods后,执行pod update或pod install时出现以下错误:
[!] The 'Pods-TestApp' target has frameworks with conflicting names: onesignal.xcframework, onesignalcore.xcframework, onesignalextension.xcframework, and onesignaloutcomes.xcframework.
排查后发现Pods目录下同时存在OneSignal和OneSignalXcFramework两个目录,推测是文件名冲突导致,但此前误以为二者可同时使用。当前Podfile内容如下:
# Uncomment the next line to define a global platform for your project platform :ios, '16.0' target 'TestApp' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # Pods for TestApp pod 'Firebase/Analytics' pod 'Firebase/Auth' pod 'Firebase/Firestore' pod 'Firebase/Performance' pod 'Firebase/Messaging' pod 'Firebase/Storage' pod 'Firebase/InAppMessaging' pod 'Kingfisher' pod 'GoogleSignIn' pod 'SideMenu' pod 'Firebase/Database' pod 'FirebaseFirestoreSwift' pod 'EmptyDataSet-Swift' pod 'SwiftSpinner' pod 'OneSignal' pod 'BSImagePicker' pod 'SkeletonView' pod 'BulletinBoard' target 'OneSignalNotificationServiceExtension' do pod 'OneSignalXCFramework', '>= 3.0.0', '< 4.0' end target 'TestAppTests' do inherit! :search_paths # Pods for testing end target 'TestAppUITests' do # Pods for testing end end
已尝试过取消集成Pods并重新安装,但问题未解决。
解决方法
1. 统一OneSignal的Pod依赖
OneSignalXCFramework是OneSignal库的XCFramework分发版本,目前官方的OneSignal Pod已经默认采用XCFramework格式,无需再单独使用OneSignalXCFramework。修改Podfile,将Extension target中的依赖替换为OneSignal并统一版本:
target 'OneSignalNotificationServiceExtension' do pod 'OneSignal', '>= 3.0.0', '< 4.0' end
2. 彻底清理并重新安装Pods
执行以下命令完全清理Pods相关文件:
# 删除Pods目录 rm -rf Pods/ # 删除Podfile.lock文件 rm Podfile.lock # 删除Xcode项目的workspace文件 rm TestApp.xcworkspace # 清理Xcode缓存 xcodebuild clean -all
随后重新安装Pods:
pod install
3. 验证项目配置
打开生成的.xcworkspace文件,检查:
- 主App target和NotificationServiceExtension target的Build Phases中,是否只包含一份OneSignal相关的XCFramework
- 确认项目中没有重复的框架引用
内容的提问来源于stack exchange,提问作者Vandal
相关产品推荐
相关产品推荐

