# 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.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end

    iss.subspec "ic_feedback" do |ss|
      ss.public_header_files = "components/private/Icons/icons/ic_feedback/src/*.h"
      ss.source_files = "components/private/Icons/icons/ic_feedback/src/*.{h,m}"
      ss.resource_bundles = {
        "MaterialIcons_ic_feedback" => [
          "components/private/Icons/icons/ic_feedback/src/MaterialIcons_ic_feedback.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      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.xcassets",
        ]
      }
      ss.dependency "#{Pathname.new(ss.name).dirname}/Base"
    end
  end
end
