Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix wrong os in xcframework frameworks infoplist #2549

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
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
1 change: 1 addition & 0 deletions apple/internal/environment_plist.bzl
Original file line number Diff line number Diff line change
@@ -61,6 +61,7 @@ def _environment_plist_impl(ctx):
platform_type_string = str(ctx.fragments.apple.single_arch_platform.platform_type),
uses_swift = False,
xcode_version_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig],
environment = getattr(ctx.fragments.apple.single_arch_platform, "get_target_environment", None),
)
environment_plist_tool = ctx.attr._mac_toolchain[AppleMacToolsToolchainInfo].environment_plist_tool
platform = platform_prerequisites.platform
34 changes: 33 additions & 1 deletion apple/internal/platform_support.bzl
Original file line number Diff line number Diff line change
@@ -29,6 +29,13 @@ _DEVICE_FAMILY_VALUES = {
"mac": None,
}

# Align with migrated apple_common.platform to Starlark implementation
TARGET_ENVIROMENT = struct(
device = "device",
catalyst = "macabi",
simulator = "simulator",
)

def _ui_device_family_plist_value(*, platform_prerequisites):
"""Returns the value to use for `UIDeviceFamily` in an info.plist.

@@ -72,7 +79,8 @@ def _platform_prerequisites(
objc_fragment,
platform_type_string,
uses_swift,
xcode_version_config):
xcode_version_config,
environment = None):
"""Returns a struct containing information on the platform being targeted.

Args:
@@ -88,13 +96,37 @@ def _platform_prerequisites(
platform_type_string: The platform type for the current target as a string.
uses_swift: Boolean value to indicate if this target uses Swift.
xcode_version_config: The `apple_common.XcodeVersionConfig` provider from the current context.
environment: "device" or "simulator" environment of the current target. Optional.

Returns:
A struct representing the collected platform information.
"""
platform_type_attr = getattr(apple_common.platform_type, platform_type_string)
platform = apple_fragment.multi_arch_platform(platform_type_attr)
Copy link
Author

@themz themz Oct 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[review-note]
Here, we don't have an option to determine the correct platform for the simulator, as platform_type can only be ios or tvos, whereas platform for ios can be both ios_simulator and ios_device.


if environment == TARGET_ENVIROMENT.device:
if platform_type_attr == apple_common.platform_type.ios:
platform = apple_common.platform.ios_device
elif platform_type_attr == apple_common.platform_type.tvos:
platform = apple_common.platform.tvos_device
elif platform_type_attr == apple_common.platform_type.visionos:
platform = apple_common.platform.visionos_device
elif platform_type_attr == apple_common.platform_type.watchos:
platform = apple_common.platform.watchos_device
else:
platform = apple_common.platform.macos
elif environment == TARGET_ENVIROMENT.simulator:
if platform_type_attr == apple_common.platform_type.ios:
platform = apple_common.platform.ios_simulator
elif platform_type_attr == apple_common.platform_type.tvos:
platform = apple_common.platform.tvos_simulator
elif platform_type_attr == apple_common.platform_type.visionos:
platform = apple_common.platform.visionos_simulator
elif platform_type_attr == apple_common.platform_type.watchos:
platform = apple_common.platform.watchos_simulator
else:
# no `macos_simulator` exists
fail("Simulator environment is not supported for platform type: %s" % platform_type_string)
if explicit_minimum_os:
minimum_os = explicit_minimum_os
else:
5 changes: 5 additions & 0 deletions apple/internal/resource_rules/apple_core_data_model.bzl
Original file line number Diff line number Diff line change
@@ -78,6 +78,11 @@ def _apple_core_data_model_impl(ctx):
uses_swift = True,
xcode_version_config =
ctx.attr._xcode_config[apple_common.XcodeVersionConfig],
environment = getattr(
ctx.fragments.apple.single_arch_platform,
"get_target_environment",
None,
),
)

datamodel_groups = group_files_by_directory(
1 change: 1 addition & 0 deletions apple/internal/resource_rules/apple_core_ml_library.bzl
Original file line number Diff line number Diff line change
@@ -100,6 +100,7 @@ def _apple_core_ml_library_impl(ctx):
platform_type_string = str(ctx.fragments.apple.single_arch_platform.platform_type),
uses_swift = uses_swift,
xcode_version_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig],
environment = getattr(ctx.fragments.apple.single_arch_platform, "get_target_environment", None),
)

apple_mac_toolchain_info = ctx.attr._mac_toolchain[AppleMacToolsToolchainInfo]
2 changes: 2 additions & 0 deletions apple/internal/xcframework_rules.bzl
Original file line number Diff line number Diff line change
@@ -561,6 +561,7 @@ def _apple_xcframework_impl(ctx):
platform_type_string = link_output.platform,
uses_swift = link_output.uses_swift,
xcode_version_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig],
environment = link_output.environment,
)

overridden_predeclared_outputs = struct(
@@ -1045,6 +1046,7 @@ def _apple_static_xcframework_impl(ctx):
platform_type_string = link_output.platform,
uses_swift = link_output.uses_swift,
xcode_version_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig],
environment = link_output.environment,
)
resource_deps = _unioned_attrs(
attr_names = ["deps"],
24 changes: 24 additions & 0 deletions test/starlark_tests/apple_xcframework_tests.bzl
Original file line number Diff line number Diff line change
@@ -361,6 +361,30 @@ def apple_xcframework_test_suite(name):
tags = [name],
)

# Test checks respect to platform name with ios build for iphonesimulator.
archive_contents_test(
name = "{}_multiple_infoplist_test_platform_name_iphonesimulator".format(name),
build_type = "device",
target_under_test = "//test/starlark_tests/targets_under_test/apple:ios_dynamic_xcframework_multiple_infoplists",
plist_test_file = "$BUNDLE_ROOT/ios-x86_64-simulator/ios_dynamic_xcframework_multiple_infoplists.framework/Info.plist",
plist_test_values = {
"DTPlatformName": "iphonesimulator",
},
tags = [name],
)

# Test checks respect to platform name with ios build for iphoneos.
archive_contents_test(
name = "{}_multiple_infoplist_test_platform_name_iphoneos".format(name),
build_type = "device",
target_under_test = "//test/starlark_tests/targets_under_test/apple:ios_dynamic_xcframework_multiple_infoplists",
plist_test_file = "$BUNDLE_ROOT/ios-arm64/ios_dynamic_xcframework_multiple_infoplists.framework/Info.plist",
plist_test_values = {
"DTPlatformName": "iphoneos",
},
tags = [name],
)

# Tests that resource bundles and files assigned through "data" are respected.
archive_contents_test(
name = "{}_dbg_resources_data_test".format(name),