diff --git a/.bcr/presubmit.yml b/.bcr/presubmit.yml
index 4652b9fec6..d367baad8a 100644
--- a/.bcr/presubmit.yml
+++ b/.bcr/presubmit.yml
@@ -1,7 +1,11 @@
+matrix:
+ bazel: ["7.x", "rolling"]
+
tasks:
verify_targets:
name: Verify build targets
- platform: macos
+ platform: macos_arm64
+ bazel: ${{ bazel }}
test_targets:
- '@rules_apple//examples/macos/CommandLine:ExamplesBuildTest'
test_flags:
diff --git a/MODULE.bazel b/MODULE.bazel
index 111a28cbb9..e6f781c452 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -6,7 +6,7 @@ module(
repo_name = "build_bazel_rules_apple",
)
-bazel_dep(name = "apple_support", version = "1.12.0", repo_name = "build_bazel_apple_support")
+bazel_dep(name = "apple_support", version = "1.14.0", repo_name = "build_bazel_apple_support")
bazel_dep(name = "bazel_skylib", version = "1.3.0")
bazel_dep(name = "platforms", version = "0.0.7")
bazel_dep(name = "rules_swift", version = "1.16.0", repo_name = "build_bazel_rules_swift")
diff --git a/apple/BUILD b/apple/BUILD
index 7bb43b8ef0..7bab0297f4 100644
--- a/apple/BUILD
+++ b/apple/BUILD
@@ -1,5 +1,5 @@
-load(":cc_toolchain_forwarder.bzl", "cc_toolchain_forwarder")
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+load(":cc_toolchain_forwarder.bzl", "cc_toolchain_forwarder")
package(default_visibility = ["//visibility:public"])
@@ -27,6 +27,7 @@ licenses(["notice"])
"watchos_arm64_32",
"watchos_x86_64",
"watchos_device_arm64",
+ "watchos_device_arm64e",
]
]
diff --git a/apple/internal/apple_framework_import.bzl b/apple/internal/apple_framework_import.bzl
index b5eb11d1b5..0b35bffd82 100644
--- a/apple/internal/apple_framework_import.bzl
+++ b/apple/internal/apple_framework_import.bzl
@@ -276,7 +276,11 @@ def _apple_dynamic_framework_import_impl(ctx):
deps = deps,
disabled_features = disabled_features,
features = features,
- framework_includes = _framework_search_paths(framework.header_imports),
+ framework_includes = _framework_search_paths(
+ framework.header_imports +
+ framework.swift_interface_imports +
+ framework.swift_module_imports,
+ ),
header_imports = framework.header_imports,
kind = "dynamic",
label = label,
diff --git a/apple/internal/bundling_support.bzl b/apple/internal/bundling_support.bzl
index 30f0dcccb8..0c96222a52 100644
--- a/apple/internal/bundling_support.bzl
+++ b/apple/internal/bundling_support.bzl
@@ -377,7 +377,7 @@ def _validate_bundle_id(bundle_id):
# handled by the split(), so just have to check for '-'.
for i in range(len(part)):
ch = part[i]
- if ch != "-" and not ch.isalnum():
+ if ch not in ["-", "_"] and not ch.isalnum():
fail("Invalid character(s) in bundle_id: \"%s\"" % bundle_id)
# Define the loadable module that lists the exported symbols in this file.
diff --git a/apple/internal/experimental_mixed_language_library.bzl b/apple/internal/experimental_mixed_language_library.bzl
index 3031f17eb3..ad0a2278a5 100644
--- a/apple/internal/experimental_mixed_language_library.bzl
+++ b/apple/internal/experimental_mixed_language_library.bzl
@@ -312,11 +312,13 @@ target only contains Objective-C files.""")
swift_copts += header_map_ctx.swift_copts
# Generate module map for the underlying Obj-C module
+ # This is the modulemap used exclusively by the swift_library
+ # as such we export all the headers including the private ones so they can be found in the Swift module.
objc_module_map_name = name + ".internal.objc"
textual_hdrs = kwargs.get("textual_hdrs", [])
_module_map(
name = objc_module_map_name,
- hdrs = hdrs,
+ hdrs = hdrs + private_hdrs,
module_name = module_name,
textual_hdrs = textual_hdrs,
testonly = testonly,
diff --git a/apple/internal/partials/app_intents_metadata_bundle.bzl b/apple/internal/partials/app_intents_metadata_bundle.bzl
index 02b81282af..008709210f 100644
--- a/apple/internal/partials/app_intents_metadata_bundle.bzl
+++ b/apple/internal/partials/app_intents_metadata_bundle.bzl
@@ -46,6 +46,9 @@ def _app_intents_metadata_bundle_partial_impl(
# This binary should only contain symbols for structs implementing the AppIntents protocol.
# Instead of containing all the application/extension/framework binary symbols, allowing
# the action to run faster and avoid depending on the application binary linking step.
+ #
+ # TODO(b/295227222): Avoid this linker step for Xcode 15.0+ when rules_swift supports the new
+ # swiftconstvalues-based manner of handling App Intents metadata.
link_result = linking_support.link_multi_arch_binary(
actions = actions,
cc_toolchains = cc_toolchains,
@@ -54,9 +57,16 @@ def _app_intents_metadata_bundle_partial_impl(
disabled_features = disabled_features,
features = features,
label = label,
- # Allow `_main` to be undefined since none of the AppIntents implementing dependencies
- # should include this entry point, and we only care about linking all AppIntents symbols.
- user_link_flags = ["-Wl,-U,_main"],
+ user_link_flags = [
+ # Force _NSExtensionMain, which exists on all Apple platforms, to
+ # be the main symbol for the binary, just so any main symbol will
+ # exist. Since this binary is discarded afterwards the main symbol
+ # doesn't actually matter. This can be removed when the TODO above
+ # is resolved.
+ "-Wl,-e,_NSExtensionMain",
+ # Force the binary to link Foundation to make the hack above work.
+ "-Wl,-framework,Foundation",
+ ],
)
fat_stub_binary = intermediates.file(
diff --git a/apple/internal/partials/debug_symbols.bzl b/apple/internal/partials/debug_symbols.bzl
index a7351a5d32..c2595f39ba 100644
--- a/apple/internal/partials/debug_symbols.bzl
+++ b/apple/internal/partials/debug_symbols.bzl
@@ -106,7 +106,7 @@ def _collect_linkmaps(
return outputs
-def _copy_dsyms_into_declared_bundle(
+def _generate_dsym_binaries(
*,
actions,
debug_output_filename,
@@ -303,13 +303,21 @@ def _bundle_dsym_files(
found_binaries_by_arch.update(dsym_binaries)
if found_binaries_by_arch:
- output_files = _copy_dsyms_into_declared_bundle(
+ generated_dsym_binaries = _generate_dsym_binaries(
actions = actions,
debug_output_filename = dsym_output_filename,
dsym_bundle_name = dsym_bundle_name,
found_binaries_by_arch = found_binaries_by_arch,
platform_prerequisites = platform_prerequisites,
)
+ output_files.extend(generated_dsym_binaries)
+ dsyms_command = (" && ".join([
+ "cp \"{dsym_path}\" \"${{OUTPUT_DIR}}/Contents/Resources/DWARF/{dsym_bundle_name}\"".format(
+ dsym_path = dsym_binary.path,
+ dsym_bundle_name = dsym_output_filename,
+ )
+ for dsym_binary in generated_dsym_binaries
+ ]))
# If we found any binaries, create the Info.plist for the bundle as well.
dsym_plist = _generate_dsym_info_plist(
@@ -334,9 +342,9 @@ def _bundle_dsym_files(
apple_support.run_shell(
actions = actions,
apple_fragment = platform_prerequisites.apple_fragment,
- inputs = [dsym_plist] + found_binaries_by_arch.values(),
+ inputs = generated_dsym_binaries + [dsym_plist] + found_binaries_by_arch.values(),
outputs = [dsym_bundle_dir],
- command = ("mkdir -p \"${OUTPUT_DIR}/Contents/Resources/DWARF\" && " + plist_command),
+ command = ("mkdir -p \"${OUTPUT_DIR}/Contents/Resources/DWARF\" && " + dsyms_command + " && " + plist_command),
env = {
"OUTPUT_DIR": dsym_bundle_dir.path,
},
diff --git a/apple/internal/rule_factory.bzl b/apple/internal/rule_factory.bzl
index 0749508bdf..0f404667fd 100644
--- a/apple/internal/rule_factory.bzl
+++ b/apple/internal/rule_factory.bzl
@@ -135,7 +135,7 @@ def _create_apple_rule(
cfg = cfg,
doc = doc,
executable = is_executable,
- fragments = ["apple", "cpp", "objc"],
+ fragments = ["apple", "cpp", "objc", "j2objc"],
toolchains = toolchains,
**extra_args
)
diff --git a/apple/repositories.bzl b/apple/repositories.bzl
index ee6b8d35c9..648ff39e3c 100644
--- a/apple/repositories.bzl
+++ b/apple/repositories.bzl
@@ -114,8 +114,8 @@ def apple_rules_dependencies(ignore_version_differences = False, include_bzlmod_
_maybe(
http_archive,
name = "build_bazel_apple_support",
- sha256 = "100d12617a84ebc7ee7a10ecf3b3e2fdadaebc167ad93a21f820a6cb60158ead",
- url = "https://github.com/bazelbuild/apple_support/releases/download/1.12.0/apple_support.1.12.0.tar.gz",
+ sha256 = "a8ba6fd09d0ffeba9b5f398f3a46262470fe0addddb4ef5afa7eab18d001a7b0",
+ url = "https://github.com/bazelbuild/apple_support/releases/download/1.14.0/apple_support.1.14.0.tar.gz",
ignore_version_differences = ignore_version_differences,
)
diff --git a/doc/frameworks.md b/doc/frameworks.md
index 1151877ad0..2c3bcb9fae 100644
--- a/doc/frameworks.md
+++ b/doc/frameworks.md
@@ -245,53 +245,3 @@ apple_dynamic_framework_import(
```
![Framework imports](frameworks4.png)
-
-## Migration
-
-`apple_dynamic_framework_import` and `apple_static_framework_import` are
-Starlark replacement rules for the native `objc_framework` rule, which is
-deprecated and slated to be removed in Q1-19. The following is an example of how
-migration will happen for `objc_framework` targets for Dynamic Frameworks:
-
-```build
-objc_framework(
- name = "MyPrebuiltDynamicFramework",
- framework_imports = glob(["MyPrebuiltDynamicFramework.framework/**"]),
- is_dynamic = 1,
- sdk_dylibs = [...],
- sdk_frameworks = [...],
- weak_sdk_frameworks = [...],
-)
-
-apple_dynamic_framework_import(
- name = "MyPrebuildDynamicFramework",
- framework_imports = glob(["MyPrebuiltDynamicFramework.framework/**"]),
-)
-```
-
-Notice that the `sdk_frameworks`, `weak_sdk_frameworks` and `sdk_dylibs` were
-removed. This is because Dynamic Frameworks are already linked, and this
-information should already be encoded in the binary. If your build starts
-failing after this change, it means that the import was masking another library
-that required an extra SDK framework/dylib. That library should be fixed
-instead.
-
-For Static Frameworks, migration would look like this:
-
-```build
-objc_framework(
- name = "MyPrebuiltStaticFramework",
- framework_imports = glob(["MyPrebuiltStaticFramework.framework/**"]),
- sdk_dylibs = [...],
- sdk_frameworks = [...]
- weak_sdk_frameworks = [...],
-)
-
-apple_static_framework_import(
- name = "MyPrebuildStaticFramework",
- framework_imports = glob(["MyPrebuiltStaticFramework.framework/**"]),
- sdk_dylibs = [...],
- sdk_frameworks = [...]
- weak_sdk_frameworks = [...],
-)
-```
diff --git a/examples/ios/HelloWorldSwift/BUILD b/examples/ios/HelloWorldSwift/BUILD
index 9c486b15d0..92f6a88071 100644
--- a/examples/ios/HelloWorldSwift/BUILD
+++ b/examples/ios/HelloWorldSwift/BUILD
@@ -8,11 +8,10 @@ licenses(["notice"])
swift_library(
name = "Sources",
srcs = [
- "Sources/AppDelegate.swift",
+ "Sources/BazelApp.swift",
],
data = [
"Resources/HelloWorldSwift.docc",
- "Resources/Main.storyboard",
],
module_name = "Sources",
tags = ["manual"],
@@ -49,7 +48,7 @@ ios_unit_test(
genrule(
name = "CreateTestCoverageManifest",
- srcs = ["Sources/AppDelegate.swift"],
+ srcs = ["Sources/BazelApp.swift"],
outs = [
"CoverageManifest.instrumented_files",
],
diff --git a/examples/ios/HelloWorldSwift/Info.plist b/examples/ios/HelloWorldSwift/Info.plist
index 4194cb6319..4d7195e512 100644
--- a/examples/ios/HelloWorldSwift/Info.plist
+++ b/examples/ios/HelloWorldSwift/Info.plist
@@ -2,35 +2,33 @@
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.0
- CFBundleVersion
- 1
- LSRequiresIPhoneOS
-
- UIMainStoryboardFile
- Main
- UIRequiredDeviceCapabilities
-
- armv7
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
diff --git a/examples/ios/HelloWorldSwift/Resources/Main.storyboard b/examples/ios/HelloWorldSwift/Resources/Main.storyboard
deleted file mode 100644
index 1bf5befe82..0000000000
--- a/examples/ios/HelloWorldSwift/Resources/Main.storyboard
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/ios/HelloWorldSwift/Sources/AppDelegate.swift b/examples/ios/HelloWorldSwift/Sources/BazelApp.swift
similarity index 55%
rename from examples/ios/HelloWorldSwift/Sources/AppDelegate.swift
rename to examples/ios/HelloWorldSwift/Sources/BazelApp.swift
index 6dc25a5a8b..a9d70174fd 100644
--- a/examples/ios/HelloWorldSwift/Sources/AppDelegate.swift
+++ b/examples/ios/HelloWorldSwift/Sources/BazelApp.swift
@@ -12,29 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-import UIKit
+import SwiftUI
-// Shim to compile with older Xcodes.
-#if !swift(>=4.2)
-extension UIApplication {
- typealias LaunchOptionsKey = UIApplicationLaunchOptionsKey
-}
-#endif
-
-/// The ``AppDelegate`` for the application.
-/// This class is the entry point for the application and is responsible for the lifecycle of it.
-@UIApplicationMain
-public class AppDelegate: NSObject, UIApplicationDelegate {
-
- /// The window of the application.
- public var window: UIWindow?
-
- /// The start of the application.
- public func application(
- _ application: UIApplication,
- didFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey : Any]?
- ) -> Bool {
- return true
+@main
+struct BazelApp: App {
+ var body: some Scene {
+ WindowGroup {
+ Text("Hello World")
+ .accessibility(identifier: "HELLO_WORLD")
+ }
}
/// A foo API to test DooC documentation generation.
diff --git a/examples/ios/HelloWorldSwift/Tests/Tests.swift b/examples/ios/HelloWorldSwift/Tests/Tests.swift
index 921828f8ad..9d5fa358f6 100644
--- a/examples/ios/HelloWorldSwift/Tests/Tests.swift
+++ b/examples/ios/HelloWorldSwift/Tests/Tests.swift
@@ -3,6 +3,6 @@ import XCTest
final class HelloWorldSwiftTests: XCTestCase {
func testInit() {
- XCTAssertNotNil(AppDelegate())
+ XCTAssertNotNil(BazelApp())
}
}
diff --git a/examples/ios/HelloWorldSwift/Tests/UITests.swift b/examples/ios/HelloWorldSwift/Tests/UITests.swift
index 0a7518164f..3a0192e07e 100644
--- a/examples/ios/HelloWorldSwift/Tests/UITests.swift
+++ b/examples/ios/HelloWorldSwift/Tests/UITests.swift
@@ -17,6 +17,6 @@ class HelloWorldSwiftUITests: XCTestCase {
}
func testIsActive() {
- XCTAssertTrue(application.staticTexts["Hello World"].exists)
+ XCTAssertTrue(application.staticTexts["HELLO_WORLD"].exists)
}
}
diff --git a/examples/multi_platform/MixedLib/BUILD b/examples/multi_platform/MixedLib/BUILD
index fc5e9077ee..58a9f95a99 100644
--- a/examples/multi_platform/MixedLib/BUILD
+++ b/examples/multi_platform/MixedLib/BUILD
@@ -10,6 +10,7 @@ experimental_mixed_language_library(
srcs = [
"MixedAnswer.m",
"MixedAnswer.swift",
+ "MixedAnswerPrivate.h", # private header support
],
hdrs = ["MixedAnswer.h"],
enable_modules = True,
diff --git a/examples/multi_platform/MixedLib/MixedAnswer.swift b/examples/multi_platform/MixedLib/MixedAnswer.swift
index 5e670c5a1d..6edee7e2c2 100644
--- a/examples/multi_platform/MixedLib/MixedAnswer.swift
+++ b/examples/multi_platform/MixedLib/MixedAnswer.swift
@@ -8,6 +8,11 @@ public class MixedAnswerSwift: NSObject {
"\(MixedAnswerObjc.mixedAnswerObjc() ?? "invalid")_swiftMixedAnswer"
}
+ public
+ static func swiftMixedAnswerPrivate() -> String {
+ "\(MixedAnswerPrivateObjc.mixedAnswerPrivateObjc() ?? "invalid")_swiftPrivateMixedAnswer"
+ }
+
@objc
public
static func swiftToObjcMixedAnswer() -> String {
diff --git a/examples/multi_platform/MixedLib/MixedAnswerPrivate.h b/examples/multi_platform/MixedLib/MixedAnswerPrivate.h
new file mode 100644
index 0000000000..e95268d59e
--- /dev/null
+++ b/examples/multi_platform/MixedLib/MixedAnswerPrivate.h
@@ -0,0 +1,7 @@
+@import Foundation;
+
+@interface MixedAnswerPrivateObjc : NSObject
+
++ (NSString *)mixedAnswerPrivateObjc;
+
+@end
diff --git a/platform_mappings b/platform_mappings
index 713740331a..da82b541dd 100644
--- a/platform_mappings
+++ b/platform_mappings
@@ -75,6 +75,14 @@ platforms:
--apple_platform_type=watchos
--cpu=watchos_arm64_32
+ @build_bazel_apple_support//platforms:watchos_device_arm64
+ --apple_platform_type=watchos
+ --cpu=watchos_device_arm64
+
+ @build_bazel_apple_support//platforms:watchos_device_arm64e
+ --apple_platform_type=watchos
+ --cpu=watchos_device_arm64e
+
flags:
--cpu=darwin_x86_64
--apple_platform_type=macos
diff --git a/test/apple_shell_testutils.sh b/test/apple_shell_testutils.sh
index 2744b2d10b..1d6df0b313 100755
--- a/test/apple_shell_testutils.sh
+++ b/test/apple_shell_testutils.sh
@@ -30,7 +30,7 @@ export MIN_OS_TVOS_NPLUS1="13.0"
export MIN_OS_MACOS="10.13"
export MIN_OS_MACOS_NPLUS1="10.14"
-export MIN_OS_WATCHOS="4.0"
+export MIN_OS_WATCHOS="7.0"
# Usage: assert_exists
#
@@ -384,7 +384,7 @@ function current_archs() {
value="$(echo "$option" | cut -d= -f2)"
else
# Eliminate `sim_` prefixes from `cpu`s as it is not part of the arch.
- value="$(echo "$option" | cut -d= -f2 | sed 's/sim_//g')"
+ value="$(echo "$option" | cut -d= -f2 | sed -e 's/sim_//g' -e 's/device_//g')"
fi
echo "$value" | tr "," "\n"
return
diff --git a/test/configurations.bzl b/test/configurations.bzl
index 47d83012bb..3f9b984bb4 100644
--- a/test/configurations.bzl
+++ b/test/configurations.bzl
@@ -79,7 +79,6 @@ WATCHOS_SIMULATOR_OPTIONS = COMPILATION_MODE_OPTIONS + [
]
WATCHOS_CONFIGURATIONS = {
- # TODO(b/251910608): Re-enable when platform_mappings are exposed to the test runner.
- #"device": WATCHOS_DEVICE_OPTIONS,
+ "device": WATCHOS_DEVICE_OPTIONS,
"simulator": WATCHOS_SIMULATOR_OPTIONS,
}
diff --git a/test/ios_application_test.sh b/test/ios_application_test.sh
index d36220fc6b..a61d333618 100755
--- a/test/ios_application_test.sh
+++ b/test/ios_application_test.sh
@@ -174,7 +174,7 @@ ios_application(
bundle_id = "my.bundle.id",
families = ["iphone"],
infoplists = ["Info.plist"],
- linkopts = ["-alias", "_main", "_linkopts_test_main"],
+ linkopts = ["-alias", "_main", "_linkopts_test_main", "-u", "_linkopts_test_main"],
minimum_os_version = "${MIN_OS_IOS}",
provisioning_profile = "@build_bazel_rules_apple//test/testdata/provisioning:integration_testing_ios.mobileprovision",
deps = [":lib"],
diff --git a/test/starlark_tests/apple_dynamic_xcframework_import_tests.bzl b/test/starlark_tests/apple_dynamic_xcframework_import_tests.bzl
index b0ef7575a6..72fa31b4c5 100644
--- a/test/starlark_tests/apple_dynamic_xcframework_import_tests.bzl
+++ b/test/starlark_tests/apple_dynamic_xcframework_import_tests.bzl
@@ -292,6 +292,24 @@ def apple_dynamic_xcframework_import_test_suite(name):
cpus = {"watchos_cpus": ["arm64_32"]},
macho_load_commands_contain = ["cmd LC_BUILD_VERSION", "platform WATCHOS"],
)
+ archive_contents_test(
+ name = "{}_links_watchos_device_arm64_macho_load_cmd_for_device_test".format(name),
+ build_type = "device",
+ target_under_test = "//test/starlark_tests/targets_under_test/watchos:app_with_imported_xcframework",
+ binary_test_file = "$BUNDLE_ROOT/Frameworks/generated_dynamic_watchos_xcframework.framework/generated_dynamic_watchos_xcframework",
+ binary_test_architecture = "arm64",
+ cpus = {"watchos_cpus": ["device_arm64"]},
+ macho_load_commands_contain = ["cmd LC_BUILD_VERSION", "platform WATCHOS"],
+ )
+ archive_contents_test(
+ name = "{}_links_watchos_device_arm64e_macho_load_cmd_for_device_test".format(name),
+ build_type = "device",
+ target_under_test = "//test/starlark_tests/targets_under_test/watchos:app_with_imported_xcframework",
+ binary_test_file = "$BUNDLE_ROOT/Frameworks/generated_dynamic_watchos_xcframework.framework/generated_dynamic_watchos_xcframework",
+ binary_test_architecture = "arm64e",
+ cpus = {"watchos_cpus": ["device_arm64e"]},
+ macho_load_commands_contain = ["cmd LC_BUILD_VERSION", "platform WATCHOS"],
+ )
# Verify tvos_application bundles XCFramework library for device and simulator architectures.
archive_contents_test(
diff --git a/test/starlark_tests/targets_under_test/macos/BUILD b/test/starlark_tests/targets_under_test/macos/BUILD
index 5c0f6a5b5b..ed0cfdefd3 100644
--- a/test/starlark_tests/targets_under_test/macos/BUILD
+++ b/test/starlark_tests/targets_under_test/macos/BUILD
@@ -2416,6 +2416,8 @@ macos_command_line_application(
"-alias",
"_main",
"_linkopts_test_main",
+ "-u",
+ "_linkopts_test_main",
],
minimum_os_version = common.min_os_macos.baseline,
tags = common.fixture_tags,
diff --git a/test/starlark_tests/targets_under_test/watchos/BUILD b/test/starlark_tests/targets_under_test/watchos/BUILD
index f07749e44b..829d3607e6 100644
--- a/test/starlark_tests/targets_under_test/watchos/BUILD
+++ b/test/starlark_tests/targets_under_test/watchos/BUILD
@@ -1120,8 +1120,10 @@ generate_dynamic_xcframework(
},
platforms = {
"watchos": [
- "armv7k",
+ "arm64",
"arm64_32",
+ "arm64e",
+ "armv7k",
],
"watchos_simulator": [
"x86_64",
diff --git a/test/starlark_tests/xcarchive_tests.bzl b/test/starlark_tests/xcarchive_tests.bzl
index ebd868c0a2..4c1f0f2130 100644
--- a/test/starlark_tests/xcarchive_tests.bzl
+++ b/test/starlark_tests/xcarchive_tests.bzl
@@ -53,6 +53,8 @@ def xcarchive_test_suite(name):
target_under_test = "//test/starlark_tests/targets_under_test/ios:app_minimal.xcarchive",
contains = [
"$BUNDLE_ROOT/dSYMs/app_minimal.app.dSYM",
+ "$BUNDLE_ROOT/dSYMs/app_minimal.app.dSYM/Contents/Resources/DWARF/app_minimal",
+ "$BUNDLE_ROOT/dSYMs/app_minimal.app.dSYM/Contents/Info.plist",
"$BUNDLE_ROOT/Info.plist",
"$BUNDLE_ROOT/Products/Applications/app_minimal.app",
],
@@ -76,6 +78,8 @@ def xcarchive_test_suite(name):
contains = [
"$BUNDLE_ROOT/dSYMs/app_with_ext_space_in_path.app.dSYM",
"$BUNDLE_ROOT/dSYMs/ext with space.appex.dSYM",
+ "$BUNDLE_ROOT/dSYMs/ext with space.appex.dSYM/Contents/Resources/DWARF/ext with space",
+ "$BUNDLE_ROOT/dSYMs/ext with space.appex.dSYM/Contents/Info.plist",
"$BUNDLE_ROOT/Info.plist",
"$BUNDLE_ROOT/Products/Applications/app_with_ext_space_in_path.app",
],