diff --git a/.bazelrc b/.bazelrc index bff0e9eb..adaf2fca 100644 --- a/.bazelrc +++ b/.bazelrc @@ -7,8 +7,6 @@ build --spawn_strategy=local # Setup Xcode configuration. build --xcode_version_config=//:host_xcodes -build --experimental_strict_conflict_checks - build --verbose_failures # Print the full command line for commands that failed build --test_output=errors # Prints log file output to the console on failure diff --git a/.bazelversion b/.bazelversion index a3fcc712..a2f28f43 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.1.0 +8.4.0 diff --git a/.bcr/presubmit.yml b/.bcr/presubmit.yml index 92aeb2f6..791561e8 100644 --- a/.bcr/presubmit.yml +++ b/.bcr/presubmit.yml @@ -1,5 +1,5 @@ matrix: - bazel: ["7.x"] + bazel: ["7.x", "8.x"] tasks: verify_build_targets_bazel_7: name: Verify Build targets on macOS with Bazel 7 @@ -9,3 +9,11 @@ tasks: - "@rules_ios//rules/..." build_flags: - "--repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1" + verify_build_targets_bazel_8: + name: Verify Build targets on macOS with Bazel 8 + platform: macos_arm64 + bazel: 8.x + build_targets: + - "@rules_ios//rules/..." + build_flags: + - "--repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e80ff1f6..0817d88c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - bazel_version: [7.1.0] + bazel_version: [7.1.0, 8.4.0] xcode_version: [15.2] virtual_frameworks: [true, false] sandbox: [true, false] @@ -28,8 +28,8 @@ jobs: env: XCODE_VERSION: ${{ matrix.xcode_version }} USE_BAZEL_VERSION: ${{ matrix.bazel_version }} - LATEST_RULES_SWIFT_VERSION: 3.0.2 - LATEST_RULES_APPLE_VERSION: 4.0.1 + LATEST_RULES_SWIFT_VERSION: 3.4.1 + LATEST_RULES_APPLE_VERSION: 4.3.3 GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 @@ -85,7 +85,7 @@ jobs: strategy: fail-fast: false matrix: - bazel_version: [7.1.0] + bazel_version: [7.1.0, 8.4.0] sandbox: [true, false] xcode_version: [15.2] env: @@ -131,7 +131,7 @@ jobs: strategy: fail-fast: false matrix: - bazel_version: [7.1.0] # Only run on latest Bazel version as stardoc changes between versions and produces different results + bazel_version: [8.4.0] # Only run on latest Bazel version as stardoc changes between versions and produces different results xcode_version: [15.2] env: XCODE_VERSION: ${{ matrix.xcode_version }} @@ -164,7 +164,7 @@ jobs: strategy: fail-fast: false matrix: - bazel_version: [7.1.0] + bazel_version: [7.1.0, 8.4.0] xcode_version: [15.2] env: XCODE_VERSION: ${{ matrix.xcode_version }} diff --git a/BUILD.bazel b/BUILD.bazel index f5194203..87505dce 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -150,19 +150,37 @@ xcode_version( version = "15.2.0.15C500b", ) +xcode_version( + name = "version16_2_0_16C5032a", + aliases = [ + "16.2", + "16.2.0", + "16.2.0.16C5032a", + "16C5032a", + ], + default_ios_sdk_version = "18.2", + default_macos_sdk_version = "15.2", + default_tvos_sdk_version = "18.2", + default_visionos_sdk_version = "2.2", + default_watchos_sdk_version = "11.2", + version = "16.2.0.16C5032a", +) + xcode_config( name = "host_xcodes", - default = ":version15_2_0_15C500b", + default = ":version16_2_0_16C5032a", versions = [ ":version15_2_0_15C500b", + ":version16_2_0_16C5032a", ], visibility = ["//visibility:public"], ) available_xcodes( name = "host_available_xcodes", - default = ":version15_2_0_15C500b", + default = ":version16_2_0_16C5032a", versions = [ ":version15_2_0_15C500b", + ":version16_2_0_16C5032a", ], ) diff --git a/MODULE.bazel b/MODULE.bazel index f91016e6..944e2c7d 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -8,7 +8,7 @@ module( name = "rules_ios", version = "0", bazel_compatibility = [ - ">=7.0.0", + ">=7.0.0", # Support both Bazel 7.x and 8.x ], compatibility_level = 1, repo_name = "build_bazel_rules_ios", @@ -17,12 +17,12 @@ module( # Declare the bzlmod dependencies needed by rules_ios and users of rules_ios bazel_dep( name = "apple_support", - version = "1.15.1", + version = "2.0.0", repo_name = "build_bazel_apple_support", ) bazel_dep( name = "rules_apple", - version = "4.0.1", + version = "4.3.3", repo_name = "build_bazel_rules_apple", ) bazel_dep( @@ -31,7 +31,7 @@ bazel_dep( ) bazel_dep( name = "rules_swift", - version = "3.0.2", + version = "3.4.1", max_compatibility_level = 3, repo_name = "build_bazel_rules_swift", ) diff --git a/README.md b/README.md index 19902fe7..ab45f752 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ See the following table for supported release versions. | Bazel release | Minimum supported rules version | Final supported rules version |:-------------------:|:-------------------------:|:-------------------------: +| 8.* | 7.0.0 | current | 7.* | 4.4.0 | current | 6.* | 2.0.0 | 5.3.0 | 5.* | 1.0.0 | 3.2.2 @@ -44,6 +45,7 @@ See the following table for supported rules_apple release versions. | rules_apple release | Minimum supported rules version | Final supported rules version |:-------------------:|:-------------------------:|:-------------------------: +| 4.3.3 | 7.0.0 | current | 3.15.0 | 5.3.0 | current | 3.* | 3.* | 4.2.1 | 2.* | 2.* | 3.2.2 diff --git a/docs/app_clip_doc.md b/docs/app_clip_doc.md index 0f2fb9b1..e39494f4 100755 --- a/docs/app_clip_doc.md +++ b/docs/app_clip_doc.md @@ -10,7 +10,7 @@ load("@rules_ios//rules:app_clip.bzl", "ios_app_clip") ios_app_clip(name, families, infoplists, infoplists_by_build_setting, xcconfig, - xcconfig_by_build_setting, kwargs) + xcconfig_by_build_setting, **kwargs) Builds and packages an iOS App Clip. diff --git a/docs/app_doc.md b/docs/app_doc.md index e2471398..64ef8352 100755 --- a/docs/app_doc.md +++ b/docs/app_doc.md @@ -10,7 +10,7 @@ load("@rules_ios//rules:app.bzl", "ios_application") ios_application(name, families, apple_library, infoplists, infoplists_by_build_setting, xcconfig, - xcconfig_by_build_setting, kwargs) + xcconfig_by_build_setting, **kwargs) Builds and packages an iOS application. diff --git a/docs/extension_doc.md b/docs/extension_doc.md index 27a5ee86..0cd7b0c4 100755 --- a/docs/extension_doc.md +++ b/docs/extension_doc.md @@ -10,7 +10,7 @@ load("@rules_ios//rules:extension.bzl", "ios_extension") ios_extension(name, families, infoplists, infoplists_by_build_setting, xcconfig, - xcconfig_by_build_setting, kwargs) + xcconfig_by_build_setting, **kwargs) Builds and packages an iOS extension. diff --git a/docs/framework_doc.md b/docs/framework_doc.md index 1566020e..d15f30f0 100755 --- a/docs/framework_doc.md +++ b/docs/framework_doc.md @@ -54,7 +54,7 @@ Packages compiled code into an Apple .framework package load("@rules_ios//rules:framework.bzl", "apple_framework") apple_framework(name, apple_library, infoplists, infoplists_by_build_setting, xcconfig, - xcconfig_by_build_setting, kwargs) + xcconfig_by_build_setting, **kwargs) Builds and packages an Apple framework. diff --git a/docs/import_middleman_doc.md b/docs/import_middleman_doc.md index 235fc36f..81801b54 100755 --- a/docs/import_middleman_doc.md +++ b/docs/import_middleman_doc.md @@ -54,7 +54,7 @@ can be updated to work without the other behavior
load("@rules_ios//rules:import_middleman.bzl", "find_imports")
-find_imports(name)
+find_imports()
Internal aspect for the `import_middleman` see below for a description.
@@ -71,8 +71,4 @@ Internal aspect for the `import_middleman` see below for a description.
**ATTRIBUTES**
-| Name | Description | Type | Mandatory | Default |
-| :------------- | :------------- | :------------- | :------------- | :------------- |
-| name | A unique name for this target. | Name | required | |
-
diff --git a/docs/library_doc.md b/docs/library_doc.md
index e8f0bfc1..e1112b2e 100755
--- a/docs/library_doc.md
+++ b/docs/library_doc.md
@@ -54,7 +54,7 @@ load("@rules_ios//rules:library.bzl", "apple_library")
apple_library(name, library_tools, export_private_headers, namespace_is_module_name,
default_xcconfig_name, xcconfig, xcconfig_by_build_setting, objc_defines, swift_defines,
- kwargs)
+ **kwargs)
Create libraries for native source code on Apple platforms.
diff --git a/docs/precompiled_apple_resource_bundle_doc.md b/docs/precompiled_apple_resource_bundle_doc.md
index 278ae416..63fcd79c 100755
--- a/docs/precompiled_apple_resource_bundle_doc.md
+++ b/docs/precompiled_apple_resource_bundle_doc.md
@@ -13,7 +13,7 @@ if this is ever fixed in bazel it should be removed
load("@rules_ios//rules:precompiled_apple_resource_bundle.bzl", "precompiled_apple_resource_bundle")
-precompiled_apple_resource_bundle(kwargs)
+precompiled_apple_resource_bundle(**kwargs)
diff --git a/docs/test_doc.md b/docs/test_doc.md
index 4d6c53b6..8c14ffdb 100755
--- a/docs/test_doc.md
+++ b/docs/test_doc.md
@@ -9,7 +9,7 @@
load("@rules_ios//rules:test.bzl", "default_test_factory")
-default_test_factory.make_named_split(name, split_kwargs, in_split)
+default_test_factory.make_named_split(name, split_kwargs, **in_split)
@@ -31,7 +31,7 @@ default_test_factory.make_named_split(name, runner, in_split)
+default_test_factory.make_runner_split(name, runner, **in_split)
@@ -53,7 +53,7 @@ default_test_factory.make_runner_split(name, test_rule, kwargs)
+default_test_factory.make_test(name, test_rule, **kwargs)
Helper to create an individual test
@@ -75,7 +75,7 @@ Helper to create an individual test
load("@rules_ios//rules:test.bzl", "default_test_factory")
-default_test_factory.make_test_suite(factory, name, test_rule, test_kwargs)
+default_test_factory.make_test_suite(factory, name, test_rule, **test_kwargs)
@@ -98,7 +98,7 @@ default_test_factory.make_test_suite(factory, name, in_kwargs)
+default_test_factory.make_test_suite_splits(factory, name, **in_kwargs)
Helper function to split up a test for named splits and runners splits
@@ -125,7 +125,7 @@ Finally - you can set the splits to be whatever you want.
load("@rules_ios//rules:test.bzl", "default_test_factory")
-default_test_factory.make_tests(factory, name, test_rule, kwargs)
+default_test_factory.make_tests(factory, name, test_rule, **kwargs)
Main entry point of generating tests"
@@ -148,7 +148,7 @@ Main entry point of generating tests"
load("@rules_ios//rules:test.bzl", "ios_ui_test")
-ios_ui_test(name, apple_library, test_factory, kwargs)
+ios_ui_test(name, apple_library, test_factory, **kwargs)
Builds and packages iOS UI Tests.
@@ -171,7 +171,7 @@ Builds and packages iOS UI Tests.
load("@rules_ios//rules:test.bzl", "ios_unit_snapshot_test")
-ios_unit_snapshot_test(name, apple_library, test_factory, kwargs)
+ios_unit_snapshot_test(name, apple_library, test_factory, **kwargs)
Builds and packages iOS Unit Snapshot Tests.
@@ -194,7 +194,7 @@ Builds and packages iOS Unit Snapshot Tests.
load("@rules_ios//rules:test.bzl", "ios_unit_test")
-ios_unit_test(name, apple_library, test_factory, kwargs)
+ios_unit_test(name, apple_library, test_factory, **kwargs)
Builds and packages iOS Unit Tests.
diff --git a/docs/xcconfig_doc.md b/docs/xcconfig_doc.md
index fa1577e2..c167bd3f 100755
--- a/docs/xcconfig_doc.md
+++ b/docs/xcconfig_doc.md
@@ -70,7 +70,7 @@ Struct with different copts behind 'select()' statements
load("@rules_ios//rules:xcconfig.doc.bzl", "merge_xcconfigs")
-merge_xcconfigs(xcconfigs)
+merge_xcconfigs(*xcconfigs)
Merges a list of xcconfigs into a single dictionary
diff --git a/rules/BUILD.bazel b/rules/BUILD.bazel
index 803c4f4f..c02f6890 100644
--- a/rules/BUILD.bazel
+++ b/rules/BUILD.bazel
@@ -11,6 +11,12 @@ genrule(
cmd = "touch $(OUTS)",
)
+bzl_library(
+ name = "utils",
+ srcs = ["utils.bzl"],
+ visibility = ["//visibility:public"],
+)
+
bzl_library(
name = "providers",
srcs = ["providers.bzl"],
@@ -79,7 +85,7 @@ bzl_library(
visibility = ["//visibility:public"],
deps = [
":transition_support",
- ":utils.bzl",
+ ":utils",
"@bazel_skylib//lib:partial",
"@bazel_skylib//lib:paths",
"@build_bazel_apple_support//lib:apple_support",
@@ -93,7 +99,7 @@ bzl_library(
visibility = ["//visibility:public"],
deps = [
":features",
- "//rules:utils.bzl",
+ ":utils",
"//rules/internal:objc_provider_utils",
"@build_bazel_rules_apple//apple",
],
@@ -107,7 +113,7 @@ bzl_library(
":hmap",
":import_middleman",
":precompiled_apple_resource_bundle",
- ":utils.bzl",
+ ":utils",
"//rules/framework:vfs_overlay",
"//rules/library:resources",
"//rules/library:xcconfig",
@@ -132,6 +138,7 @@ bzl_library(
":plists",
":providers",
":transition_support",
+ ":utils",
"//rules/framework:vfs_overlay",
"//rules/internal:objc_provider_utils",
"@bazel_skylib//lib:partial",
diff --git a/rules/framework.bzl b/rules/framework.bzl
index e36c27de..be634b0b 100644
--- a/rules/framework.bzl
+++ b/rules/framework.bzl
@@ -1169,7 +1169,7 @@ apple_framework_packaging = rule(
implementation = _apple_framework_packaging_impl,
toolchains = use_cpp_toolchain(),
cfg = transition_support.apple_rule_transition,
- fragments = ["apple", "cpp", "objc"],
+ fragments = ["apple", "cpp", "objc", "j2objc"],
output_to_genfiles = True,
attrs = {
"framework_name": attr.string(
diff --git a/rules/hmap.bzl b/rules/hmap.bzl
index 8e26bb7b..714ba225 100644
--- a/rules/hmap.bzl
+++ b/rules/hmap.bzl
@@ -27,7 +27,7 @@ def _make_hmap(actions, headermap_builder, output, namespace, hdrs_lists):
args.add("--output", output)
for hdrs in hdrs_lists:
- args.add_all(hdrs)
+ args.add_all(hdrs, expand_directories = False)
args.set_param_file_format(format = "multiline")
args.use_param_file("@%s")
diff --git a/rules/import_middleman.bzl b/rules/import_middleman.bzl
index f76c086f..b82c62f7 100644
--- a/rules/import_middleman.bzl
+++ b/rules/import_middleman.bzl
@@ -1,8 +1,8 @@
-load("//rules/internal:objc_provider_utils.bzl", "objc_provider_utils")
-load("//rules:utils.bzl", "is_bazel_7")
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain", "use_cpp_toolchain")
load("@build_bazel_rules_apple//apple/internal:bundling_support.bzl", "bundling_support")
load("@build_bazel_rules_apple//apple/internal:providers.bzl", "AppleFrameworkImportInfo", "new_appleframeworkimportinfo")
+load("//rules:utils.bzl", "is_bazel_7")
+load("//rules/internal:objc_provider_utils.bzl", "objc_provider_utils")
_FindImportsAspectInfo = provider(fields = {
"imported_library_file": "",
@@ -179,20 +179,8 @@ def _file_collector_rule_impl(ctx):
# This should be correctly configured upstream: see setup in rules_ios
fail("using import_middleman ({}) on wrong transition ({},{},is_device={})".format(ctx.attr.name, platform, arch, ctx.fragments.apple.single_arch_platform.is_device))
- merge_keys = [
- "sdk_dylib",
- "sdk_framework",
- "weak_sdk_framework",
- "force_load_library",
- "source",
- "link_inputs",
- "linkopt",
- "library",
- ]
-
objc_provider_fields = objc_provider_utils.merge_objc_providers_dict(
providers = [],
- merge_keys = merge_keys,
)
exisiting_imported_libraries = objc_provider_fields.get("imported_library", depset([]))
@@ -256,22 +244,43 @@ def _file_collector_rule_impl(ctx):
],
)
- objc = apple_common.new_objc_provider(
- **objc_provider_fields
- )
+ # Filter out fields that are no longer supported in Bazel 8
+ if is_bazel_7:
+ # Remove linking fields that were deprecated in Bazel 8
+ # Linking is now handled exclusively through CcInfo
+ # dynamic_framework_file is also no longer supported in ObjcInfo
+ objc_provider_fields_filtered = {
+ k: v
+ for k, v in objc_provider_fields.items()
+ if k not in ["imported_library", "linkopt", "link_inputs", "dynamic_framework_file"]
+ }
+ objc = apple_common.new_objc_provider(
+ **objc_provider_fields_filtered
+ )
+ else:
+ objc = apple_common.new_objc_provider(
+ **objc_provider_fields
+ )
dep_cc_infos = [dep[CcInfo] for dep in ctx.attr.deps if CcInfo in dep]
cc_info = cc_common.merge_cc_infos(cc_infos = dep_cc_infos)
if is_bazel_7:
# Need to recreate linking_context for Bazel 7 or later
# because of https://github.com/bazelbuild/bazel/issues/16939
+ # Collect all user link flags
+ user_link_flags = []
+ if len(all_replaced_frameworks):
+ # Add framework search paths for replaced frameworks
+ user_link_flags.extend(["\"\"\"-F" + "/".join(f.path.split("/")[:-2]) + "\"\"\"" for f in replaced_frameworks])
+ user_link_flags.extend(compat_link_opt)
+
cc_info = CcInfo(
compilation_context = cc_info.compilation_context,
linking_context = cc_common.create_linking_context(
linker_inputs = depset([
cc_common.create_linker_input(
owner = ctx.label,
- user_link_flags = compat_link_opt if len(all_replaced_frameworks) else [],
+ user_link_flags = user_link_flags,
libraries = depset([
cc_common.create_library_to_link(
actions = ctx.actions,
diff --git a/rules/internal/BUILD.bazel b/rules/internal/BUILD.bazel
index a356d6a6..15e58761 100644
--- a/rules/internal/BUILD.bazel
+++ b/rules/internal/BUILD.bazel
@@ -14,6 +14,7 @@ bzl_library(
":objc_provider_utils",
"//rules:providers",
"//rules:transition_support",
+ "//rules:utils",
"@bazel_skylib//lib:dicts",
"@bazel_skylib//lib:partial",
"@build_bazel_rules_apple//apple",
diff --git a/rules/internal/framework_middleman.bzl b/rules/internal/framework_middleman.bzl
index b8fa1673..44931e14 100644
--- a/rules/internal/framework_middleman.bzl
+++ b/rules/internal/framework_middleman.bzl
@@ -1,5 +1,13 @@
load("@bazel_skylib//lib:partial.bzl", "partial")
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain", "use_cpp_toolchain")
+load(
+ "@build_bazel_rules_apple//apple/internal:apple_product_type.bzl",
+ "apple_product_type",
+)
+load(
+ "@build_bazel_rules_apple//apple/internal:partials.bzl",
+ "partials",
+)
load(
"@build_bazel_rules_apple//apple/internal:providers.bzl",
"AppleResourceInfo",
@@ -7,32 +15,25 @@ load(
"new_applebundleinfo",
"new_iosframeworkbundleinfo",
)
-load(
- "@build_bazel_rules_apple//apple/internal:partials.bzl",
- "partials",
-)
load(
"@build_bazel_rules_apple//apple/internal:resources.bzl",
"resources",
)
load(
- "@build_bazel_rules_apple//apple/internal:apple_product_type.bzl",
- "apple_product_type",
+ "@build_bazel_rules_apple//apple/internal/providers:embeddable_info.bzl",
+ "AppleEmbeddableInfo",
+ "embeddable_info",
)
load(
"//rules:providers.bzl",
"AvoidDepsInfo",
)
-load(
- "@build_bazel_rules_apple//apple/internal/providers:embeddable_info.bzl",
- "AppleEmbeddableInfo",
- "embeddable_info",
-)
+load("//rules:transition_support.bzl", "transition_support")
+load("//rules:utils.bzl", "is_bazel_7")
load(
"//rules/internal:objc_provider_utils.bzl",
"objc_provider_utils",
)
-load("//rules:transition_support.bzl", "transition_support")
def _framework_middleman(ctx):
resource_providers = []
@@ -64,7 +65,9 @@ def _framework_middleman(ctx):
resource_providers.append(lib_dep[AppleResourceInfo])
if apple_common.Objc in lib_dep:
objc_providers.append(lib_dep[apple_common.Objc])
- if apple_common.AppleDynamicFramework in lib_dep:
+
+ # AppleDynamicFramework only exists in Bazel 7 and earlier
+ if is_bazel_7 and hasattr(apple_common, "AppleDynamicFramework") and apple_common.AppleDynamicFramework in lib_dep:
dynamic_frameworks.append(lib_dep)
dynamic_framework_providers.append(lib_dep[apple_common.AppleDynamicFramework])
@@ -77,15 +80,18 @@ def _framework_middleman(ctx):
_process_dep(lib_dep)
# Here we only need to loop a subset of the keys
- objc_provider_fields = objc_provider_utils.merge_objc_providers_dict(providers = objc_providers, merge_keys = [
- "dynamic_framework_file",
- ])
+ objc_provider_fields = objc_provider_utils.merge_objc_providers_dict(providers = objc_providers)
- # Add the frameworks to the objc provider for Bazel <= 6
+ # Add the frameworks to the objc provider
+ # Note: AppleDynamicFramework only exists in Bazel 7 and earlier
+ # In Bazel 8, dynamic_framework_file field was removed from ObjcInfo
dynamic_framework_provider = objc_provider_utils.merge_dynamic_framework_providers(dynamic_framework_providers)
- objc_provider_fields["dynamic_framework_file"] = depset(
- transitive = [dynamic_framework_provider.framework_files, objc_provider_fields.get("dynamic_framework_file", depset([]))],
- )
+
+ # Only add dynamic_framework_file if AppleDynamicFramework provider exists (Bazel 7 and earlier)
+ if hasattr(apple_common, "AppleDynamicFramework"):
+ objc_provider_fields["dynamic_framework_file"] = depset(
+ transitive = [dynamic_framework_provider.framework_files, objc_provider_fields.get("dynamic_framework_file", depset([]))],
+ )
objc_provider = apple_common.new_objc_provider(**objc_provider_fields)
# Add the framework info to the cc info linking context for Bazel >= 7
@@ -239,11 +245,11 @@ def _dep_middleman(ctx):
def _process_avoid_deps(avoid_dep_libs):
for dep in avoid_dep_libs:
- if apple_common.Objc in dep:
+ # Linking fields removed from ObjcInfo in Bazel 8 / rules_apple 4.x
+ # All linking information is now in CcInfo
+ if not is_bazel_7 and apple_common.Objc in dep:
for lib in dep[apple_common.Objc].library.to_list():
avoid_libraries[lib] = True
- for lib in dep[apple_common.Objc].force_load_library.to_list():
- avoid_libraries[lib] = True
for lib in dep[apple_common.Objc].imported_library.to_list():
avoid_libraries[lib.basename] = True
for lib in dep[apple_common.Objc].static_framework_file.to_list():
@@ -263,25 +269,8 @@ def _dep_middleman(ctx):
for lib_dep in dep[AvoidDepsInfo].libraries:
_collect_providers(lib_dep)
- # Construct & merge the ObjcProvider, the linking information is only used in Bazel <= 6
- objc_provider_fields = objc_provider_utils.merge_objc_providers_dict(providers = objc_providers, merge_keys = [
- "force_load_library",
- "imported_library",
- "library",
- "link_inputs",
- "linkopt",
- "sdk_dylib",
- "sdk_framework",
- "source",
- "static_framework_file",
- "weak_sdk_framework",
- ])
-
- # Ensure to strip out static link inputs
- _dedupe_key("library", avoid_libraries, objc_provider_fields)
- _dedupe_key("force_load_library", avoid_libraries, objc_provider_fields)
- _dedupe_key("imported_library", avoid_libraries, objc_provider_fields, check_name = True)
- _dedupe_key("static_framework_file", avoid_libraries, objc_provider_fields, check_name = True)
+ # Construct & merge the ObjcProvider
+ objc_provider_fields = objc_provider_utils.merge_objc_providers_dict(providers = objc_providers)
if "sdk_dylib" in objc_provider_fields:
# Put sdk_dylib at _end_ of the linker invocation. Apple's linkers have
diff --git a/rules/internal/objc_provider_utils.bzl b/rules/internal/objc_provider_utils.bzl
index 2fa7cfeb..d17175c0 100644
--- a/rules/internal/objc_provider_utils.bzl
+++ b/rules/internal/objc_provider_utils.bzl
@@ -22,12 +22,19 @@ def _merge_objc_providers_dict(providers, transitive = [], merge_keys = objc_mer
"providers": transitive,
}
for key in merge_keys:
- set = depset(
- direct = [],
- # Note: we may want to merge this with the below inputs?
- transitive = [getattr(provider, key) for provider in providers],
- )
- _add_to_dict_if_present(fields, key, set)
+ # In Bazel 8+, linking fields are not available in ObjcInfo (migrated to CcInfo)
+ # but can still be passed to apple_common.new_objc_provider()
+ # Only try to merge fields that actually exist in the providers
+ transitive_sets = []
+ for provider in providers:
+ if hasattr(provider, key):
+ transitive_sets.append(getattr(provider, key))
+ if transitive_sets:
+ set = depset(
+ direct = [],
+ transitive = transitive_sets,
+ )
+ _add_to_dict_if_present(fields, key, set)
return fields
def _merge_objc_providers(providers, transitive = []):
@@ -38,23 +45,24 @@ def _merge_objc_providers(providers, transitive = []):
return apple_common.new_objc_provider(**objc_provider_fields)
def _merge_dynamic_framework_providers(dynamic_framework_providers):
- fields = {}
- merge_keys = [
- "framework_dirs",
- "framework_files",
- ]
- for key in merge_keys:
- set = depset(
- direct = [],
- # Note: we may want to merge this with the below inputs?
- transitive = [getattr(dep, key) for dep in dynamic_framework_providers],
+ # Note: AppleDynamicFramework only exists in Bazel 7 and earlier
+ # Merge all dynamic framework providers into a single struct
+ if len(dynamic_framework_providers) == 0:
+ return struct(
+ framework_dirs = depset([]),
+ framework_files = depset([]),
+ objc = apple_common.new_objc_provider(),
)
- _add_to_dict_if_present(fields, key, set)
- fields["objc"] = apple_common.new_objc_provider()
- fields["cc_info"] = CcInfo()
+ framework_dirs = [provider.framework_dirs for provider in dynamic_framework_providers]
+ framework_files = [provider.framework_files for provider in dynamic_framework_providers]
+ objc_providers = [provider.objc for provider in dynamic_framework_providers]
- return apple_common.new_dynamic_framework_provider(**fields)
+ return struct(
+ framework_dirs = depset(transitive = framework_dirs),
+ framework_files = depset(transitive = framework_files),
+ objc = apple_common.new_objc_provider(providers = objc_providers),
+ )
objc_provider_utils = struct(
merge_objc_providers_dict = _merge_objc_providers_dict,
diff --git a/tests/ios/frameworks/mixed-source/only-source/BUILD.bazel b/tests/ios/frameworks/mixed-source/only-source/BUILD.bazel
index b87c3d12..5d117952 100644
--- a/tests/ios/frameworks/mixed-source/only-source/BUILD.bazel
+++ b/tests/ios/frameworks/mixed-source/only-source/BUILD.bazel
@@ -31,7 +31,6 @@ apple_framework(
testonly = True,
srcs = glob(
[
- "MixedSourceTest/**/*.h",
"MixedSourceTest/**/*.m",
"MixedSourceTest/**/*.swift",
],
diff --git a/tests/ios/frameworks/objc/BUILD.bazel b/tests/ios/frameworks/objc/BUILD.bazel
index 76ad8209..92da129d 100644
--- a/tests/ios/frameworks/objc/BUILD.bazel
+++ b/tests/ios/frameworks/objc/BUILD.bazel
@@ -30,7 +30,6 @@ ios_unit_test(
name = "ObjcFrameworkTests",
srcs = glob(
[
- "tests/**/*.h",
"tests/**/*.m",
],
),
diff --git a/tests/ios/frameworks/testonly/BUILD.bazel b/tests/ios/frameworks/testonly/BUILD.bazel
index 182b87f5..6c132139 100644
--- a/tests/ios/frameworks/testonly/BUILD.bazel
+++ b/tests/ios/frameworks/testonly/BUILD.bazel
@@ -34,7 +34,6 @@ apple_framework(
testonly = True,
srcs = glob(
[
- "MixedSourceTest/**/*.h",
"MixedSourceTest/**/*.m",
"MixedSourceTest/**/*.swift",
],