
# Remove duplicated frameworks from OTHER_LDFLAGS of targets.
# Append script to a Podfile.
# https://github.com/CocoaPods/CocoaPods/issues/7126#issuecomment-399395611
post_install do |installer|
  # 1) Pods settings
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
      config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'NO' # force off
    end
  end

  # 2) UnityFramework / Unity-iPhone settings
  installer.aggregate_targets.map(&:user_project).uniq.each do |user_project|
    user_project.native_targets.each do |target|
      next unless ['UnityFramework', 'Unity-iPhone'].include?(target.name)

      target.build_configurations.each do |config|
        config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'NO' # force off
      end
    end
    user_project.save
  end
  
  applicationTargets = [
    'Pods-Unity-iPhone',
  ]
  libraryTargets = [
    'Pods-UnityFramework',
  ]

  embedded_targets = installer.aggregate_targets.select { |aggregate_target|
    libraryTargets.include? aggregate_target.name
  }
  embedded_pod_targets = embedded_targets.flat_map { |embedded_target|
    embedded_target.pod_targets
  }
  host_targets = installer.aggregate_targets.select { |aggregate_target|
    applicationTargets.include? aggregate_target.name
  }

  # We only want to remove pods from Application targets, not libraries
  host_targets.each do |host_target|
    host_target.xcconfigs.each do |config_name, config_file|
      host_target.pod_targets.each do |pod_target|
        if embedded_pod_targets.include? pod_target
          pod_target.specs.each do |spec|
            if spec.attributes_hash['ios'] != nil
              frameworkPaths = spec.attributes_hash['ios']['vendored_frameworks']
            else
              frameworkPaths = spec.attributes_hash['vendored_frameworks']
            end
            if frameworkPaths != nil
              frameworkNames = Array(frameworkPaths).map(&:to_s).map do |filename|
                extension = File.extname filename
                File.basename filename, extension
              end
              frameworkNames.each do |name|
                puts "Removing #{name} from OTHER_LDFLAGS of target #{host_target.name}"
                config_file.frameworks.delete(name)
              end
            end
          end
        end
      end
      xcconfig_path = host_target.xcconfig_path(config_name)
      config_file.save_as(xcconfig_path)
    end
  end
end
