# This file was automatically generated by running ./scripts/sync_icons.sh
# Do not modify directly.
def registerIcons(s)

  s.subspec "Icons" do |iss|
    iss.subspec "Base" do |ss|
      ss.public_header_files = "components/private/Icons/src/*.h"
      ss.source_files = "components/private/Icons/src/*.{h,m}"
    end

    iss.test_spec 'UnitTests' do |unit_tests|
      unit_tests.source_files = [
        "components/private/Icons/tests/unit/*.{h,m,swift}"
      ]
    end

    iss.subspec "ic_arrow_back" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_arrow_back/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_arrow_back/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_arrow_back" => [
          "components/private/Icons/icons/ic_arrow_back/src/MaterialIcons_ic_arrow_back.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_check" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_check/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_check/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_check" => [
          "components/private/Icons/icons/ic_check/src/MaterialIcons_ic_check.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_check_circle" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_check_circle/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_check_circle/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_check_circle" => [
          "components/private/Icons/icons/ic_check_circle/src/MaterialIcons_ic_check_circle.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_chevron_right" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_chevron_right/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_chevron_right/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_chevron_right" => [
          "components/private/Icons/icons/ic_chevron_right/src/MaterialIcons_ic_chevron_right.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_color_lens" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_color_lens/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_color_lens/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_color_lens" => [
          "components/private/Icons/icons/ic_color_lens/src/MaterialIcons_ic_color_lens.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_help_outline" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_help_outline/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_help_outline/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_help_outline" => [
          "components/private/Icons/icons/ic_help_outline/src/MaterialIcons_ic_help_outline.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_info" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_info/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_info/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_info" => [
          "components/private/Icons/icons/ic_info/src/MaterialIcons_ic_info.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_more_horiz" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_more_horiz/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_more_horiz/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_more_horiz" => [
          "components/private/Icons/icons/ic_more_horiz/src/MaterialIcons_ic_more_horiz.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_radio_button_unchecked" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_radio_button_unchecked/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_radio_button_unchecked/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_radio_button_unchecked" => [
          "components/private/Icons/icons/ic_radio_button_unchecked/src/MaterialIcons_ic_radio_button_unchecked.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_reorder" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_reorder/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_reorder/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_reorder" => [
          "components/private/Icons/icons/ic_reorder/src/MaterialIcons_ic_reorder.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_settings" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_settings/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_settings/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_settings" => [
          "components/private/Icons/icons/ic_settings/src/MaterialIcons_ic_settings.bundle/*.png",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end
  end
end
