diff --git a/apple/internal/resource_actions/plist.bzl b/apple/internal/resource_actions/plist.bzl index 2095b23847..ae6816d3d6 100644 --- a/apple/internal/resource_actions/plist.bzl +++ b/apple/internal/resource_actions/plist.bzl @@ -341,19 +341,20 @@ def merge_root_infoplists( else: plist_key = "MinimumOSVersion" - input_files.append(environment_plist) platform = platform_prerequisites.platform sdk_version = platform_prerequisites.sdk_version platform_with_version = platform.name_in_plist.lower() + str(sdk_version) - forced_plists.extend([ - environment_plist.path, + if environment_plist: + input_files.append(environment_plist) + forced_plists.append(environment_plist.path) + forced_plists.append( struct( CFBundleSupportedPlatforms = [platform.name_in_plist], DTPlatformName = platform.name_in_plist.lower(), DTSDKName = platform_with_version, **{plist_key: platform_prerequisites.minimum_deployment_os} - ), - ]) + ) + ) output_files = [output_plist] if output_pkginfo: diff --git a/apple/internal/transition_support.bzl b/apple/internal/transition_support.bzl index 113f23255a..398f67a5da 100644 --- a/apple/internal/transition_support.bzl +++ b/apple/internal/transition_support.bzl @@ -41,6 +41,10 @@ load( "@build_bazel_rules_apple//apple/build_settings:build_settings.bzl", "build_settings_labels", ) +load( + "@bazel_skylib//lib:types.bzl", + "types", +) _supports_visionos = hasattr(apple_common.platform_type, "visionos") _is_bazel_7 = not hasattr(apple_common, "apple_crosstool_transition") @@ -346,9 +350,16 @@ def _command_line_options_for_xcframework_platform( """ output_dictionary = {} for target_environment in target_environments: - if not platform_attr.get(target_environment): + is_platform_attr_dict = types.is_dict(platform_attr) + + if is_platform_attr_dict and not platform_attr.get(target_environment): continue - for arch in platform_attr[target_environment]: + elif is_platform_attr_dict: + platform_attr = platform_attr[target_environment] + else: + platform_attr = platform_attr + + for arch in platform_attr: resolved_environment_arch = _resolved_environment_arch_for_arch( arch = arch, environment = target_environment, diff --git a/apple/internal/xcframework_rules.bzl b/apple/internal/xcframework_rules.bzl index 4d053c441c..1558972e1a 100644 --- a/apple/internal/xcframework_rules.bzl +++ b/apple/internal/xcframework_rules.bzl @@ -864,6 +864,11 @@ built for those platform variants (for example, `x86_64`, `arm64`) as their valu A dictionary of strings indicating which platform variants should be built for the tvOS platform ( `device` or `simulator`) as keys, and arrays of strings listing which architectures should be built for those platform variants (for example, `x86_64`, `arm64`) as their values. +""", + ), + "macos": attr.string_list( + doc = """ +A list of strings indicating which architecture should be built for the macOS platform (for example, `x86_64`, `arm64`). """, ), "minimum_deployment_os_versions": attr.string_dict( diff --git a/doc/rules-apple.md b/doc/rules-apple.md index b9849012df..bd89fb5a6d 100755 --- a/doc/rules-apple.md +++ b/doc/rules-apple.md @@ -279,7 +279,7 @@ The `lipo` tool is used to combine built binaries of multiple architectures.
apple_xcframework(name, deps, data, additional_linker_inputs, bundle_id, bundle_name, codesign_inputs, codesignopts, exported_symbols_lists, extension_safe, - families_required, infoplists, ios, linkopts, minimum_deployment_os_versions, + families_required, infoplists, ios, linkopts, macos, minimum_deployment_os_versions, minimum_os_versions, public_hdrs, stamp, tvos, umbrella_header, version)@@ -304,6 +304,7 @@ Builds and bundles an XCFramework for third-party distribution. | infoplists | A list of .plist files that will be merged to form the Info.plist for each of the embedded frameworks. At least one file must be specified. Please see [Info.plist Handling](https://github.com/bazelbuild/rules_apple/blob/master/doc/common_info.md#infoplist-handling) for what is supported. | List of labels | required | | | ios | A dictionary of strings indicating which platform variants should be built for the iOS platform ( `device` or `simulator`) as keys, and arrays of strings listing which architectures should be built for those platform variants (for example, `x86_64`, `arm64`) as their values. | Dictionary: String -> List of strings | optional | `{}` | | linkopts | A list of strings representing extra flags that should be passed to the linker. | List of strings | optional | `[]` | +| macos | A list of strings indicating which architecture should be built for the macOS platform (for example, `x86_64`, `arm64`). | List of strings | optional | `[]` | | minimum_deployment_os_versions | A dictionary of strings indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0") as values, with their respective platforms such as `ios` as keys. This is different from `minimum_os_versions`, which is effective at compile time. Ensure version specific APIs are guarded with `available` clauses. | Dictionary: String -> String | optional | `{}` | | minimum_os_versions | A dictionary of strings indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "8.0") as values, with their respective platforms such as `ios`, or `tvos` as keys:
-provisioning_profile_repository_extension = use_extension("@rules_apple//apple:apple.bzl", "provisioning_profile_repository_extension") +provisioning_profile_repository_extension = use_extension("@build_bazel_rules_apple//apple:apple.bzl", "provisioning_profile_repository_extension") provisioning_profile_repository_extension.setup(fallback_profiles)diff --git a/test/starlark_tests/targets_under_test/apple/BUILD b/test/starlark_tests/targets_under_test/apple/BUILD index b32a5ef42c..000fdff83f 100644 --- a/test/starlark_tests/targets_under_test/apple/BUILD +++ b/test/starlark_tests/targets_under_test/apple/BUILD @@ -1530,3 +1530,29 @@ apple_metal_library( hdrs = ["@build_bazel_rules_apple//test/testdata/resources:metal_hdrs"], tags = common.fixture_tags, ) + +apple_xcframework( + name = "ios_and_macos_dynamic_xcframework", + bundle_id = "com.google.example", + extension_safe = True, + infoplists = [ + "//test/starlark_tests/resources:Info.plist", + ], + ios = { + "simulator": ["x86_64"], + "device": ["arm64"], + }, + macos = [ + "arm64", + "x86_64", + ], + minimum_os_versions = { + "ios": common.min_os_ios.baseline, + "macos": common.min_os_macos.baseline, + }, + public_hdrs = [ + "//test/starlark_tests/resources:shared.h", + ], + tags = common.fixture_tags, + deps = [":fmwk_lib"], +)