def METHOD_NAME(
        *,
        name = "xcodeproj",
        modes_and_suffixes = [("xcode", "bwx"), ("bazel", "bwb")],
        associated_extra_files = {},
        bazel_env = None,
        config = "rules_xcodeproj",
        default_xcode_configuration = None,
        extra_files = [],
        fail_for_invalid_extra_files_targets = True,
        top_level_targets = [],
        focused_targets = [],
        unfocused_targets = [],
        post_build = None,
        pre_build = None,
        project_options = None,
        schemes = None,
        scheme_autogeneration_mode = None,
        xcode_configurations = None):
    """Creates the fixture for an existing `xcodeproj` target.
    This will create an `xcodeproj` target for each `build_mode` option.
    Args:
        name: The name of the fixture. This will be the prefix of the .xcodeproj
            and spec files.
        modes_and_suffixes: A `list` of `tuple`s of `build_mode` and `suffix`.
            The `build_mode` will be pass to `xcodeproj.build_mode` and the
            `suffix` will be used as the suffix of the project and spec files.
        associated_extra_files: Maps to `xcodeproj.associated_extra_files`.
        bazel_env: Maps to `xcodeproj.bazel_env`.
        config: Maps to `xcodeproj.config`.
        default_xcode_configuration: Maps to
            `xcodeproj.default_xcode_configuration`.
        extra_files: Maps to `xcodeproj.extra_files`.
        fail_for_invalid_extra_files_targets: Maps to `fail_for_invalid_extra_files_targets`.
        post_build: Maps to `xcodeproj.post_build`.
        pre_build: Maps to `xcodeproj.pre_build`.
        project_options: Maps to `xcodeproj.project_options`.
        top_level_targets: Maps to `xcodeproj.top_level_targets`.
        focused_targets: Maps to `xcodeproj.focused_targets`.
        unfocused_targets: Maps to `xcodeproj.unfocused_targets`.
        schemes: Maps to `xcodeproj.schemes`.
        scheme_autogeneration_mode: Maps to
            `xcodeproj.scheme_autogeneration_mode`.
        xcode_configurations: Maps to `xcodeproj.xcode_configurations`.
    """
    for mode, suffix in modes_and_suffixes:
        fixture_name = "{}_{}".format(name, suffix)
        spec_name = "{}_spec.json".format(suffix)
        native.exports_files([spec_name])
        native.alias(
            name = fixture_spec_name(fixture_name),
            actual = spec_name,
            tags = ["manual"],
            visibility = ["//test:__subpackages__"],
        )
        xcodeproj(
            name = fixture_name,
            associated_extra_files = associated_extra_files,
            bazel_env = bazel_env,
            build_mode = mode,
            config = config,
            default_xcode_configuration = default_xcode_configuration,
            extra_files = extra_files,
            fail_for_invalid_extra_files_targets = fail_for_invalid_extra_files_targets,
            focused_targets = focused_targets,
            is_fixture = True,
            minimum_xcode_version = _MINIMUM_XCODE_VERSION,
            post_build = post_build,
            pre_build = pre_build,
            project_name = suffix,
            project_options = project_options,
            tags = ["manual"],
            top_level_targets = top_level_targets,
            scheme_autogeneration_mode = scheme_autogeneration_mode,
            schemes = schemes,
            unfocused_targets = unfocused_targets,
            xcode_configurations = xcode_configurations,
            visibility = ["//test:__subpackages__"],
        )
        native.filegroup(
            name = fixture_output_name(fixture_name),
            srcs = native.glob(
                ["{}.xcodeproj/**/*".format(suffix)],
                exclude = [
                    "{}.xcodeproj/**/xcuserdata/**/*".format(suffix),
                    "{}.xcodeproj/*.xcuserdatad/**/*".format(suffix),
                ],
                allow_empty = True,
            ),
            tags = ["manual"],
            visibility = ["//test:__subpackages__"],
        )