Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion .bazelversion
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7.1.0
8.0.0
8 changes: 4 additions & 4 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
strategy:
fail-fast: false
matrix:
bazel_version: [7.1.0]
bazel_version: [7.1.0, 8.0.0]
xcode_version: [15.2]
virtual_frameworks: [true, false]
sandbox: [true, false]
Expand Down Expand Up @@ -85,7 +85,7 @@ jobs:
strategy:
fail-fast: false
matrix:
bazel_version: [7.1.0]
bazel_version: [7.1.0, 8.0.0]
sandbox: [true, false]
xcode_version: [15.2]
env:
Expand Down Expand Up @@ -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: [7.1.0, 8.0.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 }}
Expand Down Expand Up @@ -164,7 +164,7 @@ jobs:
strategy:
fail-fast: false
matrix:
bazel_version: [7.1.0]
bazel_version: [7.1.0, 8.0.0]
xcode_version: [15.2]
env:
XCODE_VERSION: ${{ matrix.xcode_version }}
Expand Down
31 changes: 15 additions & 16 deletions BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
load("@bazel_skylib//lib:selects.bzl", "selects")

# Pull buildifer.mac as an http_file, then depend on the file group to make an
# executable
load("@build_bazel_rules_swift//swift/internal:feature_names.bzl", "SWIFT_FEATURE_USE_GLOBAL_INDEX_STORE")
load("//rules:features.bzl", "feature_names")
load("@bazel_skylib//lib:selects.bzl", "selects")

alias(
name = "buildifier",
Expand Down Expand Up @@ -135,34 +136,32 @@ selects.config_setting_group(
)

xcode_version(
name = "version15_2_0_15C500b",
name = "version16_4_0_16F6",
aliases = [
"15.2",
"15.2.0",
"15.2.0.15C500b",
"15C500b",
"16.4",
"16.4.0",
],
default_ios_sdk_version = "17.2",
default_macos_sdk_version = "14.2",
default_tvos_sdk_version = "17.2",
default_visionos_sdk_version = "1.0",
default_watchos_sdk_version = "10.2",
version = "15.2.0.15C500b",
default_ios_sdk_version = "18.5",
default_macos_sdk_version = "15.5",
default_tvos_sdk_version = "18.5",
default_visionos_sdk_version = "2.5",
default_watchos_sdk_version = "11.5",
version = "16.4.0.16F6",
)

xcode_config(
name = "host_xcodes",
default = ":version15_2_0_15C500b",
default = ":version16_4_0_16F6",
versions = [
":version15_2_0_15C500b",
":version16_4_0_16F6",
],
visibility = ["//visibility:public"],
)

available_xcodes(
name = "host_available_xcodes",
default = ":version15_2_0_15C500b",
default = ":version16_4_0_16F6",
versions = [
":version15_2_0_15C500b",
":version16_4_0_16F6",
],
)
11 changes: 6 additions & 5 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ module(
version = "0",
bazel_compatibility = [
">=7.0.0",
"<9.0.0",
],
compatibility_level = 1,
repo_name = "build_bazel_rules_ios",
Expand All @@ -17,7 +18,7 @@ module(
# Declare the bzlmod dependencies needed by rules_ios and users of rules_ios
bazel_dep(
name = "apple_support",
version = "1.15.1",
version = "1.21.1",
repo_name = "build_bazel_apple_support",
)
bazel_dep(
Expand All @@ -27,7 +28,7 @@ bazel_dep(
)
bazel_dep(
name = "rules_cc",
version = "0.0.10",
version = "0.0.16",
)
bazel_dep(
name = "rules_swift",
Expand All @@ -37,7 +38,7 @@ bazel_dep(
)
bazel_dep(
name = "bazel_skylib",
version = "1.4.2",
version = "1.7.1",
)

# Declare the development dependencies needed for rules_ios development
Expand All @@ -48,12 +49,12 @@ bazel_dep(
)
bazel_dep(
name = "rules_pkg",
version = "0.9.1",
version = "1.0.1",
dev_dependency = True,
)
bazel_dep(
name = "stardoc",
version = "0.6.2",
version = "0.7.2",
dev_dependency = True,
repo_name = "io_bazel_stardoc",
)
Expand Down
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ See the following table for supported release versions.

| Bazel release | Minimum supported rules version | Final supported rules version
|:-------------------:|:-------------------------:|:-------------------------:
| 8.* | 5.4.0 | current
| 7.* | 4.4.0 | current
| 6.* | 2.0.0 | 5.3.0
| 5.* | 1.0.0 | 3.2.2
Expand All @@ -49,6 +50,29 @@ See the following table for supported rules_apple release versions.
| 2.* | 2.* | 3.2.2
| 1.* | 1.0.0 | 3.2.2

## Bazel 8 Migration Guide

If you're upgrading from Bazel 7 to Bazel 8, please note the following changes:

### Important Changes
- The `apple_common.AppleDynamicFramework` provider has been removed in Bazel 8
- Several ObjcInfo provider fields have been removed, including:
- `force_load_library`
- `imported_library`
- `library`
- `static_framework_file`
- And others related to linking

### Required Updates
1. Update rules_ios to version 5.4.0 or later
2. Update your dependencies in MODULE.bazel:
- `apple_support` to 1.21.1 or later
- `rules_cc` to 0.0.16 or later
- `bazel_skylib` to 1.7.1 or later

### Compatibility
rules_ios 5.4.0+ maintains compatibility with both Bazel 7 and Bazel 8, so you can safely update before migrating to Bazel 8.

## Getting started

### Bzlmod setup
Expand Down
28 changes: 14 additions & 14 deletions rules/framework.bzl
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
"""Framework rules"""

load("//rules/framework:vfs_overlay.bzl", "VFSOverlayInfo", "make_vfsoverlay")
load("//rules:features.bzl", "feature_names")
load("//rules:library.bzl", "PrivateHeadersInfo", "apple_library")
load("//rules:plists.bzl", "process_infoplists")
load("//rules:providers.bzl", "AvoidDepsInfo", "FrameworkInfo")
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("@bazel_skylib//lib:partial.bzl", "partial")
load("@bazel_skylib//lib:paths.bzl", "paths")
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:apple_toolchains.bzl", "AppleMacToolsToolchainInfo", "AppleXPlatToolsToolchainInfo")
load("@build_bazel_rules_apple//apple/internal:features_support.bzl", "features_support")
load("@build_bazel_rules_apple//apple/internal:linking_support.bzl", "linking_support")
load("@build_bazel_rules_apple//apple/internal:outputs.bzl", "outputs")
load("@build_bazel_rules_apple//apple/internal:partials.bzl", "partials")
load("@build_bazel_rules_apple//apple/internal:platform_support.bzl", "platform_support")
load("@build_bazel_rules_apple//apple/internal:processor.bzl", "processor")
load("@build_bazel_rules_apple//apple/internal:providers.bzl", "AppleBundleInfo", "ApplePlatformInfo", "IosFrameworkBundleInfo", "new_applebundleinfo", "new_iosframeworkbundleinfo")
load("@build_bazel_rules_apple//apple/internal:resource_actions.bzl", "resource_actions")
load("@build_bazel_rules_apple//apple/internal:resources.bzl", "resources")
load("@build_bazel_rules_apple//apple/internal:rule_support.bzl", "rule_support")
load("@build_bazel_rules_apple//apple/internal:apple_toolchains.bzl", "AppleMacToolsToolchainInfo", "AppleXPlatToolsToolchainInfo")
load("@build_bazel_rules_apple//apple/internal:swift_support.bzl", "swift_support")
load("@build_bazel_rules_apple//apple/internal/utils:clang_rt_dylibs.bzl", "clang_rt_dylibs")
load("@build_bazel_rules_apple//apple/internal:providers.bzl", "AppleBundleInfo", "ApplePlatformInfo", "IosFrameworkBundleInfo", "new_applebundleinfo", "new_iosframeworkbundleinfo")
load("@build_bazel_rules_swift//swift:providers.bzl", "SwiftInfo", "create_clang_module_inputs", "create_swift_module_context", "create_swift_module_inputs")
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_clang_module_aspect")
load(
"@build_bazel_rules_apple//apple/internal/aspects:resource_aspect.bzl",
"apple_resource_aspect",
)
load("@build_bazel_rules_apple//apple/internal/utils:clang_rt_dylibs.bzl", "clang_rt_dylibs")
load("@build_bazel_rules_swift//swift:providers.bzl", "SwiftInfo", "create_clang_module_inputs", "create_swift_module_context", "create_swift_module_inputs")
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_clang_module_aspect")
load("//rules:features.bzl", "feature_names")
load("//rules:library.bzl", "PrivateHeadersInfo", "apple_library")
load("//rules:plists.bzl", "process_infoplists")
load("//rules:providers.bzl", "AvoidDepsInfo", "FrameworkInfo")
load("//rules:transition_support.bzl", "transition_support")
load("//rules:utils.bzl", "is_bazel_7")
load("//rules/framework:vfs_overlay.bzl", "VFSOverlayInfo", "make_vfsoverlay")
load("//rules/internal:objc_provider_utils.bzl", "objc_provider_utils")

_APPLE_FRAMEWORK_PACKAGING_KWARGS = [
"visibility",
Expand Down Expand Up @@ -1153,7 +1153,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(
Expand Down
72 changes: 72 additions & 0 deletions rules/internal/bazel_version.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
"""Utilities for detecting and handling Bazel version differences."""

def _parse_bazel_version(bazel_version):
"""Parse Bazel version string into major, minor, patch components.

Args:
bazel_version: String like "8.0.0" or "7.1.0"

Returns:
Tuple of (major, minor, patch) as integers
"""
# Handle development versions like "8.0.0-pre.20240101.1"
parts = bazel_version.split("-")[0].split(".")
major = int(parts[0]) if len(parts) > 0 else 0
minor = int(parts[1]) if len(parts) > 1 else 0
patch = int(parts[2]) if len(parts) > 2 else 0
return (major, minor, patch)

def _is_bazel_8_or_higher():
"""Check if running Bazel 8 or higher.

Returns:
True if Bazel version is 8.0.0 or higher, False otherwise
"""
if hasattr(native, "bazel_version"):
major, _, _ = _parse_bazel_version(native.bazel_version)
return major >= 8
return False

def _has_apple_dynamic_framework_provider():
"""Check if apple_common.AppleDynamicFramework provider is available.

Returns:
True if the provider exists, False otherwise (Bazel 8+)
"""
return hasattr(apple_common, "AppleDynamicFramework")

def _has_objc_provider_field(field_name):
"""Check if a specific ObjcInfo provider field is available.

Args:
field_name: Name of the field to check

Returns:
True if the field is available in ObjcInfo
"""
# In Bazel 8, many ObjcInfo fields were removed
# Available fields: direct_module_maps, direct_sources, j2objc_library,
# module_map, source, strict_include, umbrella_header
removed_in_bazel_8 = [
"force_load_library",
"imported_library",
"library",
"link_inputs",
"linkopt",
"sdk_dylib",
"sdk_framework",
"static_framework_file",
"weak_sdk_framework",
"dynamic_framework_file",
]

if _is_bazel_8_or_higher() and field_name in removed_in_bazel_8:
return False
return True

bazel_version = struct(
parse = _parse_bazel_version,
is_bazel_8_or_higher = _is_bazel_8_or_higher,
has_apple_dynamic_framework_provider = _has_apple_dynamic_framework_provider,
has_objc_provider_field = _has_objc_provider_field,
)
Loading
Loading