Skip to content

Commit

Permalink
Merge branch 'MobileNativeFoundation:main' into pennig/calculate-outp…
Browse files Browse the repository at this point in the history
…ut-groups
  • Loading branch information
pennig authored Jun 6, 2024
2 parents 8df9065 + 4b19da2 commit 85f52b3
Show file tree
Hide file tree
Showing 47 changed files with 1,704 additions and 607 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ the ruleset.
- Cash App
- Envoy Mobile
- Ergatta
- Faire Wholesale
- Gojek
- Lyft
- [Mercari](https://engineering.mercari.com/en/blog/entry/20221215-16cdd59909/)
Expand All @@ -65,6 +66,7 @@ the ruleset.
- [Slack](https://www.youtube.com/watch?v=wy3Q38VJ5uQ)
- Snap
- Spotify
- Square
- SwiftLint
- Ten Ten
- Tinder
Expand Down
5 changes: 4 additions & 1 deletion buildbuddy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ x_templates:
USE_BAZEL_VERSION: 7.x
- &bazel_head
env:
USE_BAZEL_VERSION: last_green
# See https://github.com/MobileNativeFoundation/rules_xcodeproj/pull/3029
#
# Temporary change to make CI pass until the fix is in `last_green`
USE_BAZEL_VERSION: dd2464a5933e0a5a6765024573832717b71989bf

- &normal_resources
resource_requests: { memory: 6GB }
Expand Down
32 changes: 29 additions & 3 deletions docs/bazel.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ load("@rules_xcodeproj//xcodeproj:defs.bzl", "xcodeproj")
- [`xcschemes.env_value`](#xcschemes.env_value)
- [`xcschemes.pre_post_actions.build_script`](#xcschemes.pre_post_actions.build_script)
- [`xcschemes.pre_post_actions.launch_script`](#xcschemes.pre_post_actions.launch_script)
- [`xcschemes.autogeneration_config`](#xcschemes.autogeneration_config)
- [Custom Xcode schemes (Legacy generation mode)](#custom-xcode-schemes-legacy-generation-mode)
- [`xcode_schemes.scheme`](#xcode_schemes.scheme)
- [`xcode_schemes.build_action`](#xcode_schemes.build_action)
Expand Down Expand Up @@ -60,9 +61,10 @@ load("@rules_xcodeproj//xcodeproj:defs.bzl", "xcodeproj")
<pre>
xcodeproj(<a href="#xcodeproj-name">name</a>, <a href="#xcodeproj-adjust_schemes_for_swiftui_previews">adjust_schemes_for_swiftui_previews</a>, <a href="#xcodeproj-associated_extra_files">associated_extra_files</a>, <a href="#xcodeproj-bazel_path">bazel_path</a>, <a href="#xcodeproj-bazel_env">bazel_env</a>,
<a href="#xcodeproj-build_mode">build_mode</a>, <a href="#xcodeproj-config">config</a>, <a href="#xcodeproj-default_xcode_configuration">default_xcode_configuration</a>, <a href="#xcodeproj-extra_files">extra_files</a>,
<a href="#xcodeproj-fail_for_invalid_extra_files_targets">fail_for_invalid_extra_files_targets</a>, <a href="#xcodeproj-focused_targets">focused_targets</a>, <a href="#xcodeproj-generation_mode">generation_mode</a>, <a href="#xcodeproj-install_directory">install_directory</a>,
<a href="#xcodeproj-ios_device_cpus">ios_device_cpus</a>, <a href="#xcodeproj-ios_simulator_cpus">ios_simulator_cpus</a>, <a href="#xcodeproj-minimum_xcode_version">minimum_xcode_version</a>, <a href="#xcodeproj-post_build">post_build</a>, <a href="#xcodeproj-pre_build">pre_build</a>,
<a href="#xcodeproj-project_name">project_name</a>, <a href="#xcodeproj-project_options">project_options</a>, <a href="#xcodeproj-scheme_autogeneration_mode">scheme_autogeneration_mode</a>, <a href="#xcodeproj-schemes">schemes</a>, <a href="#xcodeproj-target_name_mode">target_name_mode</a>,
<a href="#xcodeproj-fail_for_invalid_extra_files_targets">fail_for_invalid_extra_files_targets</a>, <a href="#xcodeproj-focused_targets">focused_targets</a>, <a href="#xcodeproj-generation_mode">generation_mode</a>,
<a href="#xcodeproj-import_index_build_indexstores">import_index_build_indexstores</a>, <a href="#xcodeproj-install_directory">install_directory</a>, <a href="#xcodeproj-ios_device_cpus">ios_device_cpus</a>, <a href="#xcodeproj-ios_simulator_cpus">ios_simulator_cpus</a>,
<a href="#xcodeproj-minimum_xcode_version">minimum_xcode_version</a>, <a href="#xcodeproj-post_build">post_build</a>, <a href="#xcodeproj-pre_build">pre_build</a>, <a href="#xcodeproj-project_name">project_name</a>, <a href="#xcodeproj-project_options">project_options</a>,
<a href="#xcodeproj-scheme_autogeneration_mode">scheme_autogeneration_mode</a>, <a href="#xcodeproj-scheme_autogeneration_config">scheme_autogeneration_config</a>, <a href="#xcodeproj-schemes">schemes</a>, <a href="#xcodeproj-target_name_mode">target_name_mode</a>,
<a href="#xcodeproj-top_level_targets">top_level_targets</a>, <a href="#xcodeproj-tvos_device_cpus">tvos_device_cpus</a>, <a href="#xcodeproj-tvos_simulator_cpus">tvos_simulator_cpus</a>, <a href="#xcodeproj-unfocused_targets">unfocused_targets</a>,
<a href="#xcodeproj-visionos_device_cpus">visionos_device_cpus</a>, <a href="#xcodeproj-visionos_simulator_cpus">visionos_simulator_cpus</a>, <a href="#xcodeproj-watchos_device_cpus">watchos_device_cpus</a>, <a href="#xcodeproj-watchos_simulator_cpus">watchos_simulator_cpus</a>,
<a href="#xcodeproj-xcode_configurations">xcode_configurations</a>, <a href="#xcodeproj-xcschemes">xcschemes</a>, <a href="#xcodeproj-kwargs">kwargs</a>)
Expand Down Expand Up @@ -108,6 +110,7 @@ xcodeproj(
| <a id="xcodeproj-fail_for_invalid_extra_files_targets"></a>fail_for_invalid_extra_files_targets | Optional. Determines wether, when processing targets, invalid extra files without labels will fail or just emit a warning. | `True` |
| <a id="xcodeproj-focused_targets"></a>focused_targets | Optional. A `list` of target labels as `string` values.<br><br>If specified, only these targets will be included in the generated project; all other targets will be excluded, as if they were listed explicitly in the `unfocused_targets` argument. The labels must match transitive dependencies of the targets specified in the `top_level_targets` argument. | `[]` |
| <a id="xcodeproj-generation_mode"></a>generation_mode | Optional. Determines how the project is generated.<br><br><ul> <li> `incremental`: The project is generated in pieces by multiple Bazel actions and then combined together. This allows for incremental generation where some of those pieces can be reused in subsequent project generations.<br><br> The way information is collected and processed has also changed compared to legacy generation mode. This has resulted in some bug fixes and improvements that don't exist in legacy generation mode.<br><br> **Note:** Only `build_mode = "bazel"` is supported in this mode.<br><br> **Note:** The [`xcschemes`](#xcodeproj-xcschemes) attribute is used instead of [`schemes`](#xcodeproj-schemes) in this mode. </li> <li> `legacy`: The project is generated by a monolith Bazel action.<br><br> This mode is deprecated and will be removed in a future version of **rules_xcodeproj**. </li> </ul> | `"incremental"` |
| <a id="xcodeproj-import_index_build_indexstores"></a>import_index_build_indexstores | Optional. Whether to import the index stores generated by Index Build.<br><br>This is useful if you want to use the index stores generated by Index Build to speed up Xcode's indexing process. You may not want this enabled if the additional work (mainly disk IO) of importing the index stores is not worth it for your project.<br><br>This only applies when using `generation_mode = "incremental"`. | `True` |
| <a id="xcodeproj-install_directory"></a>install_directory | Optional. The directory where the generated project will be written to.<br><br>The path is relative to the workspace root.<br><br>Defaults to the directory that the `xcodeproj` target is declared in (e.g. if the `xcodeproj` target is declared in `//foo/bar:BUILD` then the default value is `"foo/bar"`). Use `""` to have the project generated in the workspace root. | `None` |
| <a id="xcodeproj-ios_device_cpus"></a>ios_device_cpus | Optional. The value to use for `--ios_multi_cpus` when building the transitive dependencies of the targets specified in the `top_level_targets` argument with the `"device"` `target_environment`.<br><br>**Warning:** Changing this value will affect the Starlark transition hash of all transitive dependencies of the targets specified in the `top_level_targets` argument with the `"device"` `target_environment`, even if they aren't iOS targets. | `"arm64"` |
| <a id="xcodeproj-ios_simulator_cpus"></a>ios_simulator_cpus | Optional. The value to use for `--ios_multi_cpus` when building the transitive dependencies of the targets specified in the `top_level_targets` argument with the `"simulator"` `target_environment`.<br><br>If no value is specified, it defaults to the simulator cpu that goes with `--host_cpu` (i.e. `sim_arm64` on Apple Silicon and `x86_64` on Intel).<br><br>**Warning:** Changing this value will affect the Starlark transition hash of all transitive dependencies of the targets specified in the `top_level_targets` argument with the `"simulator"` `target_environment`, even if they aren't iOS targets. | `None` |
Expand All @@ -117,6 +120,7 @@ xcodeproj(
| <a id="xcodeproj-project_name"></a>project_name | Optional. The name to use for the `.xcodeproj` file.<br><br>If not specified, the value of the `name` argument is used. | `None` |
| <a id="xcodeproj-project_options"></a>project_options | Optional. A value returned by `project_options`. | `None` |
| <a id="xcodeproj-scheme_autogeneration_mode"></a>scheme_autogeneration_mode | Optional. Specifies how Xcode schemes are automatically generated:<br><br><ul> <li> `auto`: If no custom schemes are specified, via `schemes`, an Xcode scheme will be created for every buildable target. If custom schemes are provided, no autogenerated schemes will be created. </li> <li> `none`: No schemes are automatically generated. </li> <li> `all`: A scheme is generated for every buildable target even if custom schemes are provided. </li> </ul> | `"auto"` |
| <a id="xcodeproj-scheme_autogeneration_config"></a>scheme_autogeneration_config | Optional. A value returned by [`xcschemes.autogeneration_config`](#xcschemes.autogeneration_config).<br><br>Allows further configuration of `scheme_autogeneration_mode`. | `{}` |
| <a id="xcodeproj-schemes"></a>schemes | Optional. A `list` of values returned by `xcode_schemes.scheme`.<br><br>This and the `scheme_autogeneration_mode` argument together customize how schemes for targets are generated, when using `generation_mode = "legacy"`.<br><br>Target labels listed in the schemes need to be from the transitive dependencies of the targets specified in the `top_level_targets` argument. | `[]` |
| <a id="xcodeproj-target_name_mode"></a>target_name_mode | Optional. Specifies how Xcode targets names are represented:<br><br><ul> <li> `auto`: Use the product name if it is available and there is no collision. Otherwise select the target name from the label. And if there is a collision, use the full label. </li> <li> `label`: Always use full label for Xcode targets names. </li> </ul> | `"auto"` |
| <a id="xcodeproj-top_level_targets"></a>top_level_targets | A `list` of a list of top-level targets.<br><br>Each target can be specified as either a `Label` (or label-like `string`), a value returned by `top_level_target`, or a value returned by `top_level_targets`. | none |
Expand Down Expand Up @@ -236,6 +240,28 @@ Defines a command-line argument.
| <a id="xcschemes.arg-literal_string"></a>literal_string | Whether `value` should be interpreted as a literal string.<br><br>If `True`, any spaces will be escaped. This means that `value` will be passed to the launch target as a single string. If `False`, any spaces will not be escaped. This is useful to group multiple arguments under a single checkbox in Xcode. | `True` |


<a id="xcschemes.autogeneration_config"></a>

## xcschemes.autogeneration_config

<pre>
xcschemes.autogeneration_config(<a href="#xcschemes.autogeneration_config-scheme_name_exclude_patterns">scheme_name_exclude_patterns</a>)
</pre>

Creates a value for the [`scheme_autogeneration_config`](xcodeproj-scheme_autogeneration_config) attribute of `xcodeproj`.

**PARAMETERS**


| Name | Description | Default Value |
| :------------- | :------------- | :------------- |
| <a id="xcschemes.autogeneration_config-scheme_name_exclude_patterns"></a>scheme_name_exclude_patterns | A `list` of regex patterns used to skip creating matching autogenerated schemes.<br><br>Example:<br><br><pre><code class="language-starlark">xcodeproj(&#10; ...&#10; scheme_name_exclude_patterns = xcschemes.autogeneration_config(&#10; scheme_name_exclude_patterns = [&#10; ".*somePattern.*",&#10; "^AnotherPattern.*",&#10; ],&#10; )&#10;)</code></pre> | `None` |

**RETURNS**

An opaque value for the [`scheme_autogeneration_config`](xcodeproj-scheme_autogeneration_config) attribute of `xcodeproj`.


<a id="xcschemes.diagnostics"></a>

## xcschemes.diagnostics
Expand Down
2 changes: 2 additions & 0 deletions examples/integration/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ load(
"FAIL_FOR_INVALID_EXTRA_FILES_TARGETS",
"PRE_BUILD",
"PROJECT_OPTIONS",
"SCHEME_AUTOGENERATION_CONFIG",
"SCHEME_AUTOGENERATION_MODE",
"UNFOCUSED_TARGETS",
"XCODEPROJ_TARGETS",
Expand Down Expand Up @@ -68,6 +69,7 @@ string_flag(
pre_build = PRE_BUILD,
project_name = "Integration",
project_options = PROJECT_OPTIONS,
scheme_autogeneration_config = SCHEME_AUTOGENERATION_CONFIG,
scheme_autogeneration_mode = SCHEME_AUTOGENERATION_MODE,
schemes = get_xcode_schemes(),
tags = ["manual"],
Expand Down
18 changes: 18 additions & 0 deletions examples/integration/Lib/UndesiredSchemes/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
"""Targets meant to match scheme auto-generation exclude patterns"""

load(
"@build_bazel_rules_swift//swift:swift.bzl",
"swift_library",
)

swift_library(
name = "UndesiredScheme_Swift",
srcs = ["UndesiredScheme.swift"],
visibility = ["//iOSApp/Source:__pkg__"],
)

swift_library(
name = "UnwantedScheme_Swift",
srcs = ["UnwantedScheme.swift"],
visibility = ["//iOSApp/Source:__pkg__"],
)
Empty file.
Empty file.
2 changes: 2 additions & 0 deletions examples/integration/iOSApp/Source/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ swift_library(
tags = ["manual"],
visibility = ["//iOSApp/Test:__subpackages__"],
deps = [
"//Lib/UndesiredSchemes:UndesiredScheme_Swift",
"//Lib/UndesiredSchemes:UnwantedScheme_Swift",
"//UI",
"//iOSApp/Source/CoreUtilsMixed/MixedAnswer",
"//iOSApp/Source/CoreUtilsObjC",
Expand Down
Loading

0 comments on commit 85f52b3

Please sign in to comment.