John Safwat
12/31/2025, 11:22 AM# Define global platform
platform :ios, '15.0'
install! 'cocoapods', :disable_input_output_paths => true
abstract_target 'SharedPods' do
use_frameworks!
# ==============================================================================
# Explicitly listing these forces CocoaPods to create a SINGLE target for them,
# preventing the "Multiple commands produce ... GoogleUtilities.framework" error.
# ==============================================================================
pod 'GoogleUtilities'
pod 'FirebaseCore'
pod 'FirebaseInstallations'
# 2. Your Main App Target
target 'iosApp' do
pod 'composeApp', :path => '../composeApp'
end
# 3. Your Extension Target
target 'ImageNotification' do
pod 'Firebase/Messaging'
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# Keep these fixes for build stability
config.build_settings['DISABLE_MANUAL_TARGET_ORDER_BUILD_WARNING'] = 'YES'
config.build_settings['INFO_PLIST_OTHER_PREPROCESSOR_FLAGS'] = '-traditional'
# Ensure deployment target is consistent
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
# [CRITICAL FIX] Force dSYM generation for Release builds
# This fixes "Upload Symbols Failed" for all Pods (Firebase, Netfox, etc.)
if config.name == 'Release'
config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf-with-dsym'
end
end
# Bundle deduplication (Handles the .xcprivacy file collision)
if target.respond_to?(:product_type) && target.product_type == "com.apple.product-type.bundle"
target.build_phases.each do |build_phase|
if build_phase.respond_to?(:name) && build_phase.name == 'Copy Files'
build_phase.files.each do |file|
if file.file_ref.path.include?("PrivacyInfo.xcprivacy")
file.file_ref.remove_from_project
build_phase.remove_file_reference(file.file_ref)
end
end
end
end
end
end
end