ios_app_clip(name, deps, resources, additional_linker_inputs, app_icons, bundle_id, bundle_id_suffix, bundle_name, codesign_inputs, codesignopts, entitlements, entitlements_validation, executable_name, exported_symbols_lists, families, frameworks, infoplists, ipa_post_processor, launch_storyboard, linkopts, locales_to_include, minimum_deployment_os_version, minimum_os_version, platform_type, provisioning_profile, shared_capabilities, stamp, strings, version)
Builds and bundles an iOS App Clip.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
deps | A list of dependent targets that will be linked into this target's binary(s). Any resources, such as asset catalogs, that are referenced by those targets will also be transitively included in the final bundle(s). | List of labels | optional | [] |
resources | A list of resources or files bundled with the bundle. The resources will be stored in the appropriate resources location within the bundle. | List of labels | optional | [] |
additional_linker_inputs | A list of input files to be passed to the linker. | List of labels | optional | [] |
app_icons | Files that comprise the app icons for the application. Each file must have a containing directory named *..xcassets/*..appiconset and there may be only one such ..appiconset directory in the list. |
List of labels | optional | [] |
bundle_id | The bundle ID (reverse-DNS path followed by app name) for this target. Only use this attribute if the bundle ID is not intended to be composed through an assigned base bundle ID rule found within signed_capabilities . |
String | optional | "" |
bundle_id_suffix | A string to act as the suffix of the composed bundle ID. If this target's bundle ID is composed from a base bundle ID rule found within signed_capabilities , then this string will be appended to the end of the bundle ID following a "." separator. |
String | optional | "bundle_name" |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
codesign_inputs | A list of dependencies targets that provide inputs that will be used by codesign (referenced with codesignopts ). |
List of labels | optional | [] |
codesignopts | A list of strings representing extra flags that should be passed to codesign . |
List of strings | optional | [] |
entitlements | The entitlements file required for device builds of this target. If absent, the default entitlements from the provisioning profile will be used. The following variables are substituted in the entitlements file: $(CFBundleIdentifier) with the bundle ID of the application and $(AppIdentifierPrefix) with the value of the ApplicationIdentifierPrefix key from the target's provisioning profile. |
Label | optional | None |
entitlements_validation | An entitlements_validation_mode to control the validation of the requested entitlements against the provisioning profile to ensure they are supported. |
String | optional | "loose" |
executable_name | The desired name of the executable, if the bundle has an executable. If this attribute is not set, then the name of the bundle_name attribute will be used if it is set; if not, then the name of the target will be used instead. |
String | optional | "" |
exported_symbols_lists | A list of targets containing exported symbols lists files for the linker to control symbol resolution. Each file is expected to have a list of global symbol names that will remain as global symbols in the compiled binary owned by this framework. All other global symbols will be treated as if they were marked as __private_extern__ (aka visibility=hidden ) and will not be global in the output file.See the man page documentation for ld(1) on macOS for more details. |
List of labels | optional | [] |
families | A list of device families supported by this rule. At least one must be specified. | List of strings | required | |
frameworks | A list of framework targets (see ios_framework ) that this target depends on. |
List of labels | optional | [] |
infoplists | A list of .plist files that will be merged to form the Info.plist for this target. At least one file must be specified. Please see Info.plist Handling for what is supported. | List of labels | required | |
ipa_post_processor | A tool that edits this target's archive after it is assembled but before it is signed. The tool is invoked with a single command-line argument that denotes the path to a directory containing the unzipped contents of the archive; this target's bundle will be the directory's only contents. Any changes made by the tool must be made in this directory, and the tool's execution must be hermetic given these inputs to ensure that the result can be safely cached. |
Label | optional | None |
launch_storyboard | The .storyboard or .xib file that should be used as the launch screen for the app clip. The provided file will be compiled into the appropriate format (.storyboardc or .nib ) and placed in the root of the final bundle. The generated file will also be registered in the bundle's Info.plist under the key UILaunchStoryboardName . |
Label | optional | None |
linkopts | A list of strings representing extra flags that should be passed to the linker. | List of strings | optional | [] |
locales_to_include | A list of locales to include in the bundle. Only *.lproj directories that are matched will be copied as a part of the build. This value takes precedence (and is preferred) over locales defined using --define "apple.locales_to_include=..." . |
List of strings | optional | [] |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
provisioning_profile | The provisioning profile (.mobileprovision file) to use when creating the bundle. This value is optional for simulator builds as the simulator doesn't fully enforce entitlements, but is required for device builds. |
Label | optional | None |
shared_capabilities | A list of shared apple_capability_set rules to represent the capabilities that a code sign aware Apple bundle rule output should have. These can define the formal prefix for the target's bundle_id and can further be merged with information provided by entitlements , if defined by any capabilities found within the apple_capability_set . |
List of labels | optional | [] |
stamp | Enable link stamping. Whether to encode build information into the binary. Possible values: * stamp = 1 : Stamp the build information into the binary. Stamped binaries are only rebuilt when their dependencies change. Use this if there are tests that depend on the build information. * stamp = 0 : Always replace build information by constant values. This gives good build result caching. * stamp = -1 : Embedding of build information is controlled by the --[no]stamp flag. |
Integer | optional | -1 |
strings | A list of .strings files, often localizable. These files are converted to binary plists (if they are not already) and placed in the root of the final bundle, unless a file's immediate containing directory is named *.lproj , in which case it will be placed under a directory with the same name in the bundle. |
List of labels | optional | [] |
version | An apple_bundle_version target that represents the version for this target. See apple_bundle_version . |
Label | optional | None |
ios_application(name, deps, resources, additional_linker_inputs, alternate_icons, app_clips, app_icons, app_intents, bundle_id, bundle_id_suffix, bundle_name, codesign_inputs, codesignopts, entitlements, entitlements_validation, executable_name, exported_symbols_lists, extensions, families, frameworks, include_symbols_in_bundle, infoplists, ipa_post_processor, launch_images, launch_storyboard, linkopts, locales_to_include, minimum_deployment_os_version, minimum_os_version, platform_type, primary_app_icon, provisioning_profile, sdk_frameworks, settings_bundle, shared_capabilities, stamp, strings, version, watch_application)
Builds and bundles an iOS Application.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
deps | A list of dependent targets that will be linked into this target's binary(s). Any resources, such as asset catalogs, that are referenced by those targets will also be transitively included in the final bundle(s). | List of labels | optional | [] |
resources | A list of resources or files bundled with the bundle. The resources will be stored in the appropriate resources location within the bundle. | List of labels | optional | [] |
additional_linker_inputs | A list of input files to be passed to the linker. | List of labels | optional | [] |
alternate_icons | Files that comprise the alternate app icons for the application. Each file must have a containing directory named after the alternate icon identifier. | List of labels | optional | [] |
app_clips | A list of iOS app clips to include in the final application bundle. | List of labels | optional | [] |
app_icons | Files that comprise the app icons for the application. Each file must have a containing directory named *..xcassets/*..appiconset and there may be only one such ..appiconset directory in the list. |
List of labels | optional | [] |
app_intents | List of dependencies implementing the AppIntents protocol. | List of labels | optional | [] |
bundle_id | The bundle ID (reverse-DNS path followed by app name) for this target. Only use this attribute if the bundle ID is not intended to be composed through an assigned base bundle ID rule found within signed_capabilities . |
String | optional | "" |
bundle_id_suffix | A string to act as the suffix of the composed bundle ID. If this target's bundle ID is composed from a base bundle ID rule found within signed_capabilities , then this string will be appended to the end of the bundle ID following a "." separator. |
String | optional | "_" |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
codesign_inputs | A list of dependencies targets that provide inputs that will be used by codesign (referenced with codesignopts ). |
List of labels | optional | [] |
codesignopts | A list of strings representing extra flags that should be passed to codesign . |
List of strings | optional | [] |
entitlements | The entitlements file required for device builds of this target. If absent, the default entitlements from the provisioning profile will be used. The following variables are substituted in the entitlements file: $(CFBundleIdentifier) with the bundle ID of the application and $(AppIdentifierPrefix) with the value of the ApplicationIdentifierPrefix key from the target's provisioning profile. |
Label | optional | None |
entitlements_validation | An entitlements_validation_mode to control the validation of the requested entitlements against the provisioning profile to ensure they are supported. |
String | optional | "loose" |
executable_name | The desired name of the executable, if the bundle has an executable. If this attribute is not set, then the name of the bundle_name attribute will be used if it is set; if not, then the name of the target will be used instead. |
String | optional | "" |
exported_symbols_lists | A list of targets containing exported symbols lists files for the linker to control symbol resolution. Each file is expected to have a list of global symbol names that will remain as global symbols in the compiled binary owned by this framework. All other global symbols will be treated as if they were marked as __private_extern__ (aka visibility=hidden ) and will not be global in the output file.See the man page documentation for ld(1) on macOS for more details. |
List of labels | optional | [] |
extensions | A list of iOS application extensions to include in the final application bundle. | List of labels | optional | [] |
families | A list of device families supported by this rule. At least one must be specified. | List of strings | required | |
frameworks | A list of framework targets (see ios_framework ) that this target depends on. |
List of labels | optional | [] |
include_symbols_in_bundle | If true and --output_groups=+dsyms is specified, generates $UUID.symbols files from all {binary: .dSYM, ...} pairs for the application and its dependencies, then packages them under the Symbols/ directory in the final application bundle. |
Boolean | optional | False |
infoplists | A list of .plist files that will be merged to form the Info.plist for this target. At least one file must be specified. Please see Info.plist Handling for what is supported. | List of labels | required | |
ipa_post_processor | A tool that edits this target's archive after it is assembled but before it is signed. The tool is invoked with a single command-line argument that denotes the path to a directory containing the unzipped contents of the archive; this target's bundle will be the directory's only contents. Any changes made by the tool must be made in this directory, and the tool's execution must be hermetic given these inputs to ensure that the result can be safely cached. |
Label | optional | None |
launch_images | Files that comprise the launch images for the application. Each file must have a containing directory named *.xcassets/*.launchimage and there may be only one such .launchimage directory in the list. |
List of labels | optional | [] |
launch_storyboard | The .storyboard or .xib file that should be used as the launch screen for the application. The provided file will be compiled into the appropriate format (.storyboardc or .nib ) and placed in the root of the final bundle. The generated file will also be registered in the bundle's Info.plist under the key UILaunchStoryboardName . |
Label | optional | None |
linkopts | A list of strings representing extra flags that should be passed to the linker. | List of strings | optional | [] |
locales_to_include | A list of locales to include in the bundle. Only *.lproj directories that are matched will be copied as a part of the build. This value takes precedence (and is preferred) over locales defined using --define "apple.locales_to_include=..." . |
List of strings | optional | [] |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
primary_app_icon | An optional String to identify the name of the primary app icon when alternate app icons have been provided for the app. | String | optional | "" |
provisioning_profile | The provisioning profile (.mobileprovision file) to use when creating the bundle. This value is optional for simulator builds as the simulator doesn't fully enforce entitlements, but is required for device builds. |
Label | optional | None |
sdk_frameworks | Names of SDK frameworks to link with (e.g., AddressBook , QuartzCore ). UIKit and Foundation are always included, even if this attribute is provided and does not list them.This attribute is discouraged; in general, targets should list system framework dependencies in the library targets where that framework is used, not in the top-level bundle. |
List of strings | optional | [] |
settings_bundle | A resource bundle (e.g. apple_bundle_import ) target that contains the files that make up the application's settings bundle. These files will be copied into the root of the final application bundle in a directory named Settings.bundle . |
Label | optional | None |
shared_capabilities | A list of shared apple_capability_set rules to represent the capabilities that a code sign aware Apple bundle rule output should have. These can define the formal prefix for the target's bundle_id and can further be merged with information provided by entitlements , if defined by any capabilities found within the apple_capability_set . |
List of labels | optional | [] |
stamp | Enable link stamping. Whether to encode build information into the binary. Possible values: * stamp = 1 : Stamp the build information into the binary. Stamped binaries are only rebuilt when their dependencies change. Use this if there are tests that depend on the build information. * stamp = 0 : Always replace build information by constant values. This gives good build result caching. * stamp = -1 : Embedding of build information is controlled by the --[no]stamp flag. |
Integer | optional | -1 |
strings | A list of .strings files, often localizable. These files are converted to binary plists (if they are not already) and placed in the root of the final bundle, unless a file's immediate containing directory is named *.lproj , in which case it will be placed under a directory with the same name in the bundle. |
List of labels | optional | [] |
version | An apple_bundle_version target that represents the version for this target. See apple_bundle_version . |
Label | optional | None |
watch_application | A watchos_application target that represents an Apple Watch application or a watchos_single_target_application target that represents a single-target Apple Watch application that should be embedded in the application bundle. |
Label | optional | None |
ios_build_test(name, minimum_os_version, platform_type, targets)
Test rule to check that the given library targets (Swift, Objective-C, C++) build for iOS.
Typical usage:
ios_build_test(
name = "my_build_test",
minimum_os_version = "12.0",
targets = [
"//some/package:my_library",
],
)
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
minimum_os_version | A required string indicating the minimum OS version that will be used as the deployment target when building the targets, represented as a dotted version number (for example, "9.0" ). |
String | required | |
platform_type | - | String | optional | "ios" |
targets | The targets to check for successful build. | List of labels | optional | [] |
ios_dynamic_framework(name, deps, resources, hdrs, additional_linker_inputs, base_bundle_id, bundle_id, bundle_id_suffix, bundle_name, bundle_only, codesign_inputs, codesignopts, executable_name, exported_symbols_lists, extension_safe, families, frameworks, infoplists, ipa_post_processor, linkopts, minimum_deployment_os_version, minimum_os_version, platform_type, provisioning_profile, stamp, strings, version)
Builds and bundles an iOS dynamic framework that is consumable by Xcode.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
deps | A list of dependent targets that will be linked into this target's binary(s). Any resources, such as asset catalogs, that are referenced by those targets will also be transitively included in the final bundle(s). | List of labels | optional | [] |
resources | A list of resources or files bundled with the bundle. The resources will be stored in the appropriate resources location within the bundle. | List of labels | optional | [] |
hdrs | - | List of labels | optional | [] |
additional_linker_inputs | A list of input files to be passed to the linker. | List of labels | optional | [] |
base_bundle_id | The base bundle ID rule to dictate the form that a given bundle rule's bundle ID prefix should take. | Label | optional | None |
bundle_id | The bundle ID (reverse-DNS path followed by app name) for this target. Only use this attribute if the bundle ID is not intended to be composed through an assigned base bundle ID referenced by base_bundle_id . |
String | optional | "" |
bundle_id_suffix | A string to act as the suffix of the composed bundle ID. If this target's bundle ID is composed from the base bundle ID rule referenced by base_bundle_id , then this string will be appended to the end of the bundle ID following a "." separator. |
String | optional | "bundle_name" |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
bundle_only | Avoid linking the dynamic framework, but still include it in the app. This is useful when you want to manually dlopen the framework at runtime. | Boolean | optional | False |
codesign_inputs | A list of dependencies targets that provide inputs that will be used by codesign (referenced with codesignopts ). |
List of labels | optional | [] |
codesignopts | A list of strings representing extra flags that should be passed to codesign . |
List of strings | optional | [] |
executable_name | The desired name of the executable, if the bundle has an executable. If this attribute is not set, then the name of the bundle_name attribute will be used if it is set; if not, then the name of the target will be used instead. |
String | optional | "" |
exported_symbols_lists | A list of targets containing exported symbols lists files for the linker to control symbol resolution. Each file is expected to have a list of global symbol names that will remain as global symbols in the compiled binary owned by this framework. All other global symbols will be treated as if they were marked as __private_extern__ (aka visibility=hidden ) and will not be global in the output file.See the man page documentation for ld(1) on macOS for more details. |
List of labels | optional | [] |
extension_safe | If true, compiles and links this framework with -application-extension , restricting the binary to use only extension-safe APIs. |
Boolean | optional | False |
families | A list of device families supported by this rule. At least one must be specified. | List of strings | optional | ["iphone", "ipad"] |
frameworks | A list of framework targets (see ios_framework ) that this target depends on. |
List of labels | optional | [] |
infoplists | A list of .plist files that will be merged to form the Info.plist for this target. At least one file must be specified. Please see Info.plist Handling for what is supported. | List of labels | required | |
ipa_post_processor | A tool that edits this target's archive after it is assembled but before it is signed. The tool is invoked with a single command-line argument that denotes the path to a directory containing the unzipped contents of the archive; this target's bundle will be the directory's only contents. Any changes made by the tool must be made in this directory, and the tool's execution must be hermetic given these inputs to ensure that the result can be safely cached. |
Label | optional | None |
linkopts | A list of strings representing extra flags that should be passed to the linker. | List of strings | optional | [] |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
provisioning_profile | The provisioning profile (.mobileprovision file) to use when creating the bundle. This value is optional for simulator builds as the simulator doesn't fully enforce entitlements, but is required for device builds. |
Label | optional | None |
stamp | Enable link stamping. Whether to encode build information into the binary. Possible values: * stamp = 1 : Stamp the build information into the binary. Stamped binaries are only rebuilt when their dependencies change. Use this if there are tests that depend on the build information. * stamp = 0 : Always replace build information by constant values. This gives good build result caching. * stamp = -1 : Embedding of build information is controlled by the --[no]stamp flag. |
Integer | optional | -1 |
strings | A list of .strings files, often localizable. These files are converted to binary plists (if they are not already) and placed in the root of the final bundle, unless a file's immediate containing directory is named *.lproj , in which case it will be placed under a directory with the same name in the bundle. |
List of labels | optional | [] |
version | An apple_bundle_version target that represents the version for this target. See apple_bundle_version . |
Label | optional | None |
ios_extension(name, deps, resources, additional_linker_inputs, app_icons, app_intents, bundle_id, bundle_id_suffix, bundle_name, codesign_inputs, codesignopts, entitlements, entitlements_validation, executable_name, exported_symbols_lists, extensionkit_extension, families, frameworks, infoplists, ipa_post_processor, linkopts, locales_to_include, minimum_deployment_os_version, minimum_os_version, platform_type, provisioning_profile, sdk_frameworks, shared_capabilities, stamp, strings, version)
Builds and bundles an iOS Application Extension.
Most iOS app extensions use a plug-in-based architecture where the executable's entry point
is provided by a system framework.
However, iOS 14 introduced Widget Extensions that use a traditional main
entry point
(typically expressed through Swift's @main
attribute).
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
deps | A list of dependent targets that will be linked into this target's binary(s). Any resources, such as asset catalogs, that are referenced by those targets will also be transitively included in the final bundle(s). | List of labels | optional | [] |
resources | A list of resources or files bundled with the bundle. The resources will be stored in the appropriate resources location within the bundle. | List of labels | optional | [] |
additional_linker_inputs | A list of input files to be passed to the linker. | List of labels | optional | [] |
app_icons | Files that comprise the app icons for the application. Each file must have a containing directory named *..xcassets/*..appiconset and there may be only one such ..appiconset directory in the list. |
List of labels | optional | [] |
app_intents | List of dependencies implementing the AppIntents protocol. | List of labels | optional | [] |
bundle_id | The bundle ID (reverse-DNS path followed by app name) for this target. Only use this attribute if the bundle ID is not intended to be composed through an assigned base bundle ID rule found within signed_capabilities . |
String | optional | "" |
bundle_id_suffix | A string to act as the suffix of the composed bundle ID. If this target's bundle ID is composed from a base bundle ID rule found within signed_capabilities , then this string will be appended to the end of the bundle ID following a "." separator. |
String | optional | "bundle_name" |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
codesign_inputs | A list of dependencies targets that provide inputs that will be used by codesign (referenced with codesignopts ). |
List of labels | optional | [] |
codesignopts | A list of strings representing extra flags that should be passed to codesign . |
List of strings | optional | [] |
entitlements | The entitlements file required for device builds of this target. If absent, the default entitlements from the provisioning profile will be used. The following variables are substituted in the entitlements file: $(CFBundleIdentifier) with the bundle ID of the application and $(AppIdentifierPrefix) with the value of the ApplicationIdentifierPrefix key from the target's provisioning profile. |
Label | optional | None |
entitlements_validation | An entitlements_validation_mode to control the validation of the requested entitlements against the provisioning profile to ensure they are supported. |
String | optional | "loose" |
executable_name | The desired name of the executable, if the bundle has an executable. If this attribute is not set, then the name of the bundle_name attribute will be used if it is set; if not, then the name of the target will be used instead. |
String | optional | "" |
exported_symbols_lists | A list of targets containing exported symbols lists files for the linker to control symbol resolution. Each file is expected to have a list of global symbol names that will remain as global symbols in the compiled binary owned by this framework. All other global symbols will be treated as if they were marked as __private_extern__ (aka visibility=hidden ) and will not be global in the output file.See the man page documentation for ld(1) on macOS for more details. |
List of labels | optional | [] |
extensionkit_extension | Indicates if this target should be treated as an ExtensionKit extension. | Boolean | optional | False |
families | A list of device families supported by this rule. At least one must be specified. | List of strings | required | |
frameworks | A list of framework targets (see ios_framework ) that this target depends on. |
List of labels | optional | [] |
infoplists | A list of .plist files that will be merged to form the Info.plist for this target. At least one file must be specified. Please see Info.plist Handling for what is supported. | List of labels | required | |
ipa_post_processor | A tool that edits this target's archive after it is assembled but before it is signed. The tool is invoked with a single command-line argument that denotes the path to a directory containing the unzipped contents of the archive; this target's bundle will be the directory's only contents. Any changes made by the tool must be made in this directory, and the tool's execution must be hermetic given these inputs to ensure that the result can be safely cached. |
Label | optional | None |
linkopts | A list of strings representing extra flags that should be passed to the linker. | List of strings | optional | [] |
locales_to_include | A list of locales to include in the bundle. Only *.lproj directories that are matched will be copied as a part of the build. This value takes precedence (and is preferred) over locales defined using --define "apple.locales_to_include=..." . |
List of strings | optional | [] |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
provisioning_profile | The provisioning profile (.mobileprovision file) to use when creating the bundle. This value is optional for simulator builds as the simulator doesn't fully enforce entitlements, but is required for device builds. |
Label | optional | None |
sdk_frameworks | Names of SDK frameworks to link with (e.g., AddressBook , QuartzCore ). UIKit and Foundation are always included, even if this attribute is provided and does not list them.This attribute is discouraged; in general, targets should list system framework dependencies in the library targets where that framework is used, not in the top-level bundle. |
List of strings | optional | [] |
shared_capabilities | A list of shared apple_capability_set rules to represent the capabilities that a code sign aware Apple bundle rule output should have. These can define the formal prefix for the target's bundle_id and can further be merged with information provided by entitlements , if defined by any capabilities found within the apple_capability_set . |
List of labels | optional | [] |
stamp | Enable link stamping. Whether to encode build information into the binary. Possible values: * stamp = 1 : Stamp the build information into the binary. Stamped binaries are only rebuilt when their dependencies change. Use this if there are tests that depend on the build information. * stamp = 0 : Always replace build information by constant values. This gives good build result caching. * stamp = -1 : Embedding of build information is controlled by the --[no]stamp flag. |
Integer | optional | -1 |
strings | A list of .strings files, often localizable. These files are converted to binary plists (if they are not already) and placed in the root of the final bundle, unless a file's immediate containing directory is named *.lproj , in which case it will be placed under a directory with the same name in the bundle. |
List of labels | optional | [] |
version | An apple_bundle_version target that represents the version for this target. See apple_bundle_version . |
Label | optional | None |
ios_framework(name, deps, resources, hdrs, additional_linker_inputs, base_bundle_id, bundle_id, bundle_id_suffix, bundle_name, bundle_only, codesign_inputs, codesignopts, executable_name, exported_symbols_lists, extension_safe, families, frameworks, infoplists, ipa_post_processor, linkopts, minimum_deployment_os_version, minimum_os_version, platform_type, provisioning_profile, stamp, strings, version)
Builds and bundles an iOS Dynamic Framework.
To use this framework for your app and extensions, list it in the frameworks
attributes
of those ios_application
and/or ios_extension
rules.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
deps | A list of dependent targets that will be linked into this target's binary(s). Any resources, such as asset catalogs, that are referenced by those targets will also be transitively included in the final bundle(s). | List of labels | optional | [] |
resources | A list of resources or files bundled with the bundle. The resources will be stored in the appropriate resources location within the bundle. | List of labels | optional | [] |
hdrs | - | List of labels | optional | [] |
additional_linker_inputs | A list of input files to be passed to the linker. | List of labels | optional | [] |
base_bundle_id | The base bundle ID rule to dictate the form that a given bundle rule's bundle ID prefix should take. | Label | optional | None |
bundle_id | The bundle ID (reverse-DNS path followed by app name) for this target. Only use this attribute if the bundle ID is not intended to be composed through an assigned base bundle ID referenced by base_bundle_id . |
String | optional | "" |
bundle_id_suffix | A string to act as the suffix of the composed bundle ID. If this target's bundle ID is composed from the base bundle ID rule referenced by base_bundle_id , then this string will be appended to the end of the bundle ID following a "." separator. |
String | optional | "bundle_name" |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
bundle_only | Avoid linking the dynamic framework, but still include it in the app. This is useful when you want to manually dlopen the framework at runtime. | Boolean | optional | False |
codesign_inputs | A list of dependencies targets that provide inputs that will be used by codesign (referenced with codesignopts ). |
List of labels | optional | [] |
codesignopts | A list of strings representing extra flags that should be passed to codesign . |
List of strings | optional | [] |
executable_name | The desired name of the executable, if the bundle has an executable. If this attribute is not set, then the name of the bundle_name attribute will be used if it is set; if not, then the name of the target will be used instead. |
String | optional | "" |
exported_symbols_lists | A list of targets containing exported symbols lists files for the linker to control symbol resolution. Each file is expected to have a list of global symbol names that will remain as global symbols in the compiled binary owned by this framework. All other global symbols will be treated as if they were marked as __private_extern__ (aka visibility=hidden ) and will not be global in the output file.See the man page documentation for ld(1) on macOS for more details. |
List of labels | optional | [] |
extension_safe | If true, compiles and links this framework with -application-extension , restricting the binary to use only extension-safe APIs. |
Boolean | optional | False |
families | A list of device families supported by this rule. At least one must be specified. | List of strings | required | |
frameworks | A list of framework targets (see ios_framework ) that this target depends on. |
List of labels | optional | [] |
infoplists | A list of .plist files that will be merged to form the Info.plist for this target. At least one file must be specified. Please see Info.plist Handling for what is supported. | List of labels | required | |
ipa_post_processor | A tool that edits this target's archive after it is assembled but before it is signed. The tool is invoked with a single command-line argument that denotes the path to a directory containing the unzipped contents of the archive; this target's bundle will be the directory's only contents. Any changes made by the tool must be made in this directory, and the tool's execution must be hermetic given these inputs to ensure that the result can be safely cached. |
Label | optional | None |
linkopts | A list of strings representing extra flags that should be passed to the linker. | List of strings | optional | [] |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
provisioning_profile | The provisioning profile (.mobileprovision file) to use when creating the bundle. This value is optional for simulator builds as the simulator doesn't fully enforce entitlements, but is required for device builds. |
Label | optional | None |
stamp | Enable link stamping. Whether to encode build information into the binary. Possible values: * stamp = 1 : Stamp the build information into the binary. Stamped binaries are only rebuilt when their dependencies change. Use this if there are tests that depend on the build information. * stamp = 0 : Always replace build information by constant values. This gives good build result caching. * stamp = -1 : Embedding of build information is controlled by the --[no]stamp flag. |
Integer | optional | -1 |
strings | A list of .strings files, often localizable. These files are converted to binary plists (if they are not already) and placed in the root of the final bundle, unless a file's immediate containing directory is named *.lproj , in which case it will be placed under a directory with the same name in the bundle. |
List of labels | optional | [] |
version | An apple_bundle_version target that represents the version for this target. See apple_bundle_version . |
Label | optional | None |
ios_imessage_application(name, resources, app_icons, bundle_id, bundle_id_suffix, bundle_name, entitlements, entitlements_validation, executable_name, extension, families, infoplists, ipa_post_processor, locales_to_include, minimum_deployment_os_version, minimum_os_version, platform_type, provisioning_profile, shared_capabilities, strings, version)
Builds and bundles an iOS iMessage Application.
iOS iMessage applications do not have any dependencies, as it works mostly as a wrapper for either an iOS iMessage extension or a Sticker Pack extension.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
resources | A list of resources or files bundled with the bundle. The resources will be stored in the appropriate resources location within the bundle. | List of labels | optional | [] |
app_icons | Files that comprise the app icons for the application. Each file must have a containing directory named *..xcassets/*..appiconset and there may be only one such ..appiconset directory in the list. |
List of labels | optional | [] |
bundle_id | The bundle ID (reverse-DNS path followed by app name) for this target. Only use this attribute if the bundle ID is not intended to be composed through an assigned base bundle ID rule found within signed_capabilities . |
String | optional | "" |
bundle_id_suffix | A string to act as the suffix of the composed bundle ID. If this target's bundle ID is composed from a base bundle ID rule found within signed_capabilities , then this string will be appended to the end of the bundle ID following a "." separator. |
String | optional | "_" |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
entitlements | The entitlements file required for device builds of this target. If absent, the default entitlements from the provisioning profile will be used. The following variables are substituted in the entitlements file: $(CFBundleIdentifier) with the bundle ID of the application and $(AppIdentifierPrefix) with the value of the ApplicationIdentifierPrefix key from the target's provisioning profile. |
Label | optional | None |
entitlements_validation | An entitlements_validation_mode to control the validation of the requested entitlements against the provisioning profile to ensure they are supported. |
String | optional | "loose" |
executable_name | The desired name of the executable, if the bundle has an executable. If this attribute is not set, then the name of the bundle_name attribute will be used if it is set; if not, then the name of the target will be used instead. |
String | optional | "" |
extension | Single label referencing either an ios_imessage_extension or ios_sticker_pack_extension target. Required. | Label | required | |
families | A list of device families supported by this rule. At least one must be specified. | List of strings | required | |
infoplists | A list of .plist files that will be merged to form the Info.plist for this target. At least one file must be specified. Please see Info.plist Handling for what is supported. | List of labels | required | |
ipa_post_processor | A tool that edits this target's archive after it is assembled but before it is signed. The tool is invoked with a single command-line argument that denotes the path to a directory containing the unzipped contents of the archive; this target's bundle will be the directory's only contents. Any changes made by the tool must be made in this directory, and the tool's execution must be hermetic given these inputs to ensure that the result can be safely cached. |
Label | optional | None |
locales_to_include | A list of locales to include in the bundle. Only *.lproj directories that are matched will be copied as a part of the build. This value takes precedence (and is preferred) over locales defined using --define "apple.locales_to_include=..." . |
List of strings | optional | [] |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
provisioning_profile | The provisioning profile (.mobileprovision file) to use when creating the bundle. This value is optional for simulator builds as the simulator doesn't fully enforce entitlements, but is required for device builds. |
Label | optional | None |
shared_capabilities | A list of shared apple_capability_set rules to represent the capabilities that a code sign aware Apple bundle rule output should have. These can define the formal prefix for the target's bundle_id and can further be merged with information provided by entitlements , if defined by any capabilities found within the apple_capability_set . |
List of labels | optional | [] |
strings | A list of .strings files, often localizable. These files are converted to binary plists (if they are not already) and placed in the root of the final bundle, unless a file's immediate containing directory is named *.lproj , in which case it will be placed under a directory with the same name in the bundle. |
List of labels | optional | [] |
version | An apple_bundle_version target that represents the version for this target. See apple_bundle_version . |
Label | optional | None |
ios_imessage_extension(name, deps, resources, additional_linker_inputs, app_icons, bundle_id, bundle_id_suffix, bundle_name, codesign_inputs, codesignopts, entitlements, entitlements_validation, executable_name, exported_symbols_lists, families, frameworks, infoplists, ipa_post_processor, linkopts, locales_to_include, minimum_deployment_os_version, minimum_os_version, platform_type, provisioning_profile, shared_capabilities, stamp, strings, version)
Builds and bundles an iOS iMessage Extension.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
deps | A list of dependent targets that will be linked into this target's binary(s). Any resources, such as asset catalogs, that are referenced by those targets will also be transitively included in the final bundle(s). | List of labels | optional | [] |
resources | A list of resources or files bundled with the bundle. The resources will be stored in the appropriate resources location within the bundle. | List of labels | optional | [] |
additional_linker_inputs | A list of input files to be passed to the linker. | List of labels | optional | [] |
app_icons | Files that comprise the app icons for the application. Each file must have a containing directory named *..xcassets/*..appiconset and there may be only one such ..appiconset directory in the list. |
List of labels | optional | [] |
bundle_id | The bundle ID (reverse-DNS path followed by app name) for this target. Only use this attribute if the bundle ID is not intended to be composed through an assigned base bundle ID rule found within signed_capabilities . |
String | optional | "" |
bundle_id_suffix | A string to act as the suffix of the composed bundle ID. If this target's bundle ID is composed from a base bundle ID rule found within signed_capabilities , then this string will be appended to the end of the bundle ID following a "." separator. |
String | optional | "bundle_name" |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
codesign_inputs | A list of dependencies targets that provide inputs that will be used by codesign (referenced with codesignopts ). |
List of labels | optional | [] |
codesignopts | A list of strings representing extra flags that should be passed to codesign . |
List of strings | optional | [] |
entitlements | The entitlements file required for device builds of this target. If absent, the default entitlements from the provisioning profile will be used. The following variables are substituted in the entitlements file: $(CFBundleIdentifier) with the bundle ID of the application and $(AppIdentifierPrefix) with the value of the ApplicationIdentifierPrefix key from the target's provisioning profile. |
Label | optional | None |
entitlements_validation | An entitlements_validation_mode to control the validation of the requested entitlements against the provisioning profile to ensure they are supported. |
String | optional | "loose" |
executable_name | The desired name of the executable, if the bundle has an executable. If this attribute is not set, then the name of the bundle_name attribute will be used if it is set; if not, then the name of the target will be used instead. |
String | optional | "" |
exported_symbols_lists | A list of targets containing exported symbols lists files for the linker to control symbol resolution. Each file is expected to have a list of global symbol names that will remain as global symbols in the compiled binary owned by this framework. All other global symbols will be treated as if they were marked as __private_extern__ (aka visibility=hidden ) and will not be global in the output file.See the man page documentation for ld(1) on macOS for more details. |
List of labels | optional | [] |
families | A list of device families supported by this rule. At least one must be specified. | List of strings | required | |
frameworks | A list of framework targets (see ios_framework ) that this target depends on. |
List of labels | optional | [] |
infoplists | A list of .plist files that will be merged to form the Info.plist for this target. At least one file must be specified. Please see Info.plist Handling for what is supported. | List of labels | required | |
ipa_post_processor | A tool that edits this target's archive after it is assembled but before it is signed. The tool is invoked with a single command-line argument that denotes the path to a directory containing the unzipped contents of the archive; this target's bundle will be the directory's only contents. Any changes made by the tool must be made in this directory, and the tool's execution must be hermetic given these inputs to ensure that the result can be safely cached. |
Label | optional | None |
linkopts | A list of strings representing extra flags that should be passed to the linker. | List of strings | optional | [] |
locales_to_include | A list of locales to include in the bundle. Only *.lproj directories that are matched will be copied as a part of the build. This value takes precedence (and is preferred) over locales defined using --define "apple.locales_to_include=..." . |
List of strings | optional | [] |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
provisioning_profile | The provisioning profile (.mobileprovision file) to use when creating the bundle. This value is optional for simulator builds as the simulator doesn't fully enforce entitlements, but is required for device builds. |
Label | optional | None |
shared_capabilities | A list of shared apple_capability_set rules to represent the capabilities that a code sign aware Apple bundle rule output should have. These can define the formal prefix for the target's bundle_id and can further be merged with information provided by entitlements , if defined by any capabilities found within the apple_capability_set . |
List of labels | optional | [] |
stamp | Enable link stamping. Whether to encode build information into the binary. Possible values: * stamp = 1 : Stamp the build information into the binary. Stamped binaries are only rebuilt when their dependencies change. Use this if there are tests that depend on the build information. * stamp = 0 : Always replace build information by constant values. This gives good build result caching. * stamp = -1 : Embedding of build information is controlled by the --[no]stamp flag. |
Integer | optional | -1 |
strings | A list of .strings files, often localizable. These files are converted to binary plists (if they are not already) and placed in the root of the final bundle, unless a file's immediate containing directory is named *.lproj , in which case it will be placed under a directory with the same name in the bundle. |
List of labels | optional | [] |
version | An apple_bundle_version target that represents the version for this target. See apple_bundle_version . |
Label | optional | None |
ios_static_framework(name, deps, resources, hdrs, additional_linker_inputs, avoid_deps, bundle_name, codesign_inputs, codesignopts, exclude_resources, executable_name, exported_symbols_lists, families, ipa_post_processor, linkopts, minimum_deployment_os_version, minimum_os_version, platform_type, stamp, strings, umbrella_header, version)
Builds and bundles an iOS static framework for third-party distribution.
A static framework is bundled like a dynamic framework except that the embedded
binary is a static library rather than a dynamic library. It is intended to
create distributable static SDKs or artifacts that can be easily imported into
other Xcode projects; it is specifically not intended to be used as a
dependency of other Bazel targets. For that use case, use the corresponding
objc_library
targets directly.
Unlike other iOS bundles, the fat binary in an ios_static_framework
may
simultaneously contain simulator and device architectures (that is, you can
build a single framework artifact that works for all architectures by specifying
--ios_multi_cpus=i386,x86_64,armv7,arm64
when you build).
ios_static_framework
supports Swift, but there are some constraints:
ios_static_framework
with Swift only works with Xcode 11 and above, since the required Swift functionality for module compatibility is available in Swift 5.1.ios_static_framework
only supports a single directswift_library
target that does not depend transitively on any otherswift_library
targets. The Swift compiler expects a framework to contain a single Swift module, and eachswift_library
target is its own module by definition.ios_static_framework
does not support mixed Objective-C and Swift public interfaces. This means that theumbrella_header
andhdrs
attributes are unavailable when usingswift_library
dependencies. You are allowed to depend onobjc_library
from the mainswift_library
dependency, but note that only theswift_library
's public interface will be available to users of the static framework.
When using Swift, the ios_static_framework
bundles swiftinterface
and
swiftdocs
file for each of the required architectures. It also bundles an
umbrella header which is the header generated by the single swift_library
target. Finally, it also bundles a module.modulemap
file pointing to the
umbrella header for Objetive-C module compatibility. This umbrella header and
modulemap can be skipped by disabling the swift.no_generated_header
feature (
i.e. --features=-swift.no_generated_header
).
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
deps | A list of dependent targets that will be linked into this target's binary(s). Any resources, such as asset catalogs, that are referenced by those targets will also be transitively included in the final bundle(s). | List of labels | optional | [] |
resources | A list of resources or files bundled with the bundle. The resources will be stored in the appropriate resources location within the bundle. | List of labels | optional | [] |
hdrs | A list of .h files that will be publicly exposed by this framework. These headers should have framework-relative imports, and if non-empty, an umbrella header named %{bundle_name}.h will also be generated that imports all of the headers listed here. |
List of labels | optional | [] |
additional_linker_inputs | A list of input files to be passed to the linker. | List of labels | optional | [] |
avoid_deps | A list of library targets on which this framework depends in order to compile, but the transitive closure of which will not be linked into the framework's binary. | List of labels | optional | [] |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
codesign_inputs | A list of dependencies targets that provide inputs that will be used by codesign (referenced with codesignopts ). |
List of labels | optional | [] |
codesignopts | A list of strings representing extra flags that should be passed to codesign . |
List of strings | optional | [] |
exclude_resources | Indicates whether resources should be excluded from the bundle. This can be used to avoid unnecessarily bundling resources if the static framework is being distributed in a different fashion, such as a Cocoapod. | Boolean | optional | False |
executable_name | The desired name of the executable, if the bundle has an executable. If this attribute is not set, then the name of the bundle_name attribute will be used if it is set; if not, then the name of the target will be used instead. |
String | optional | "" |
exported_symbols_lists | A list of targets containing exported symbols lists files for the linker to control symbol resolution. Each file is expected to have a list of global symbol names that will remain as global symbols in the compiled binary owned by this framework. All other global symbols will be treated as if they were marked as __private_extern__ (aka visibility=hidden ) and will not be global in the output file.See the man page documentation for ld(1) on macOS for more details. |
List of labels | optional | [] |
families | A list of device families supported by this rule. At least one must be specified. | List of strings | optional | ["iphone", "ipad"] |
ipa_post_processor | A tool that edits this target's archive after it is assembled but before it is signed. The tool is invoked with a single command-line argument that denotes the path to a directory containing the unzipped contents of the archive; this target's bundle will be the directory's only contents. Any changes made by the tool must be made in this directory, and the tool's execution must be hermetic given these inputs to ensure that the result can be safely cached. |
Label | optional | None |
linkopts | A list of strings representing extra flags that should be passed to the linker. | List of strings | optional | [] |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
stamp | Enable link stamping. Whether to encode build information into the binary. Possible values: * stamp = 1 : Stamp the build information into the binary. Stamped binaries are only rebuilt when their dependencies change. Use this if there are tests that depend on the build information. * stamp = 0 : Always replace build information by constant values. This gives good build result caching. * stamp = -1 : Embedding of build information is controlled by the --[no]stamp flag. |
Integer | optional | -1 |
strings | A list of .strings files, often localizable. These files are converted to binary plists (if they are not already) and placed in the root of the final bundle, unless a file's immediate containing directory is named *.lproj , in which case it will be placed under a directory with the same name in the bundle. |
List of labels | optional | [] |
umbrella_header | An optional single .h file to use as the umbrella header for this framework. Usually, this header will have the same name as this target, so that clients can load the header using the #import <MyFramework/MyFramework.h> format. If this attribute is not specified (the common use case), an umbrella header will be generated under the same name as this target. | Label | optional | None |
version | An apple_bundle_version target that represents the version for this target. See apple_bundle_version . |
Label | optional | None |
ios_sticker_pack_extension(name, resources, app_icons, bundle_id, bundle_id_suffix, bundle_name, entitlements, entitlements_validation, executable_name, families, infoplists, ipa_post_processor, minimum_deployment_os_version, minimum_os_version, platform_type, provisioning_profile, shared_capabilities, sticker_assets, strings, version)
Builds and bundles an iOS Sticker Pack Extension.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
resources | A list of resources or files bundled with the bundle. The resources will be stored in the appropriate resources location within the bundle. | List of labels | optional | [] |
app_icons | Files that comprise the app icons for the application. Each file must have a containing directory named *..xcstickers/*..stickersiconset and there may be only one such ..stickersiconset directory in the list. |
List of labels | optional | [] |
bundle_id | The bundle ID (reverse-DNS path followed by app name) for this target. Only use this attribute if the bundle ID is not intended to be composed through an assigned base bundle ID rule found within signed_capabilities . |
String | optional | "" |
bundle_id_suffix | A string to act as the suffix of the composed bundle ID. If this target's bundle ID is composed from a base bundle ID rule found within signed_capabilities , then this string will be appended to the end of the bundle ID following a "." separator. |
String | optional | "bundle_name" |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
entitlements | The entitlements file required for device builds of this target. If absent, the default entitlements from the provisioning profile will be used. The following variables are substituted in the entitlements file: $(CFBundleIdentifier) with the bundle ID of the application and $(AppIdentifierPrefix) with the value of the ApplicationIdentifierPrefix key from the target's provisioning profile. |
Label | optional | None |
entitlements_validation | An entitlements_validation_mode to control the validation of the requested entitlements against the provisioning profile to ensure they are supported. |
String | optional | "loose" |
executable_name | The desired name of the executable, if the bundle has an executable. If this attribute is not set, then the name of the bundle_name attribute will be used if it is set; if not, then the name of the target will be used instead. |
String | optional | "" |
families | A list of device families supported by this rule. At least one must be specified. | List of strings | required | |
infoplists | A list of .plist files that will be merged to form the Info.plist for this target. At least one file must be specified. Please see Info.plist Handling for what is supported. | List of labels | required | |
ipa_post_processor | A tool that edits this target's archive after it is assembled but before it is signed. The tool is invoked with a single command-line argument that denotes the path to a directory containing the unzipped contents of the archive; this target's bundle will be the directory's only contents. Any changes made by the tool must be made in this directory, and the tool's execution must be hermetic given these inputs to ensure that the result can be safely cached. |
Label | optional | None |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
provisioning_profile | The provisioning profile (.mobileprovision file) to use when creating the bundle. This value is optional for simulator builds as the simulator doesn't fully enforce entitlements, but is required for device builds. |
Label | optional | None |
shared_capabilities | A list of shared apple_capability_set rules to represent the capabilities that a code sign aware Apple bundle rule output should have. These can define the formal prefix for the target's bundle_id and can further be merged with information provided by entitlements , if defined by any capabilities found within the apple_capability_set . |
List of labels | optional | [] |
sticker_assets | List of sticker files to bundle. The collection of assets should be under a folder named *.*.xcstickers . The icons go in a *.stickersiconset (instead of *.appiconset ); and the files for the stickers should all be in Sticker Pack directories, so *.stickerpack/*.sticker or *.stickerpack/*.stickersequence . |
List of labels | optional | [] |
strings | A list of .strings files, often localizable. These files are converted to binary plists (if they are not already) and placed in the root of the final bundle, unless a file's immediate containing directory is named *.lproj , in which case it will be placed under a directory with the same name in the bundle. |
List of labels | optional | [] |
version | An apple_bundle_version target that represents the version for this target. See apple_bundle_version . |
Label | optional | None |
ios_test_runner(name, device_type, execution_requirements, os_version, test_environment)
Rule to identify an iOS runner that runs tests for iOS.
The runner will create a new simulator according to the given arguments to run tests.
Outputs: AppleTestRunnerInfo: test_runner_template: Template file that contains the specific mechanism with which the tests will be performed. execution_requirements: Dictionary that represents the specific hardware requirements for this test. Runfiles: files: The files needed during runtime for the test to be performed.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
device_type | The device type of the iOS simulator to run test. The supported types correspond to the output of xcrun simctl list devicetypes . E.g., iPhone 6, iPad Air. By default, it is the latest supported iPhone type.' |
String | optional | "" |
execution_requirements | Dictionary of strings to strings which specifies the execution requirements for the runner. In most common cases, this should not be used. | Dictionary: String -> String | optional | {"requires-darwin": ""} |
os_version | The os version of the iOS simulator to run test. The supported os versions correspond to the output of xcrun simctl list runtimes . ' 'E.g., 11.2, 9.3. By default, it is the latest supported version of the device type.' |
String | optional | "" |
test_environment | Optional dictionary with the environment variables that are to be propagated into the XCTest invocation. | Dictionary: String -> String | optional | {} |
ios_ui_test(name, deps, data, bundle_name, env, minimum_deployment_os_version, minimum_os_version, platform_type, runner, test_coverage_manifest, test_filter, test_host, test_host_is_bundle_loader)
iOS UI Test rule.
Builds and bundles an iOS UI .xctest
test bundle. Runs the tests using the
provided test runner when invoked with bazel test
. When using Tulsi to run
tests built with this target, runner
will not be used since Xcode is the test
runner in that case.
The provisioning_profile
attribute needs to be set to run the test on a real device.
To run the same test on multiple simulators/devices see ios_ui_test_suite.
The following is a list of the ios_ui_test
specific attributes; for a list
of the attributes inherited by all test rules, please check the
Bazel documentation.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
deps | - | List of labels | required | |
data | Files to be made available to the test during its execution. | List of labels | optional | [] |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
env | Dictionary of environment variables that should be set during the test execution. The values of the dictionary are subject to "Make" variable expansion. | Dictionary: String -> String | optional | {} |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
runner | The runner target that will provide the logic on how to run the tests. Needs to provide the AppleTestRunnerInfo provider. | Label | required | |
test_coverage_manifest | A file that will be used in lcov export calls to limit the scope of files instrumented with coverage. | Label | optional | None |
test_filter | Test filter string that will be passed into the test runner to select which tests will run. | String | optional | "" |
test_host | - | Label | optional | None |
test_host_is_bundle_loader | Whether the 'test_host' should be used as the -bundle_loader to allow testing the symbols from the test host app | Boolean | optional | True |
ios_unit_test(name, deps, data, bundle_name, env, minimum_deployment_os_version, minimum_os_version, platform_type, runner, test_coverage_manifest, test_filter, test_host, test_host_is_bundle_loader)
Builds and bundles an iOS Unit .xctest
test bundle. Runs the tests using the
provided test runner when invoked with bazel test
. When using Tulsi to run
tests built with this target, runner
will not be used since Xcode is the test
runner in that case.
ios_unit_test
targets can work in two modes: as app or library
tests. If the test_host
attribute is set to an ios_application
target, the
tests will run within that application's context. If no test_host
is provided,
the tests will run outside the context of an iOS application. Because of this,
certain functionalities might not be present (e.g. UI layout, NSUserDefaults).
You can find more information about app and library testing for Apple platforms
here.
The provisioning_profile
attribute needs to be set to run the test on a real device.
To run the same test on multiple simulators/devices see ios_unit_test_suite.
The following is a list of the ios_unit_test
specific attributes; for a list
of the attributes inherited by all test rules, please check the
Bazel documentation.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
deps | - | List of labels | required | |
data | Files to be made available to the test during its execution. | List of labels | optional | [] |
bundle_name | The desired name of the bundle (without the extension). If this attribute is not set, then the name of the target will be used instead. | String | optional | "" |
env | Dictionary of environment variables that should be set during the test execution. The values of the dictionary are subject to "Make" variable expansion. | Dictionary: String -> String | optional | {} |
minimum_deployment_os_version | A required string indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0"). This is different from minimum_os_version , which is effective at compile time. Ensure version specific APIs are guarded with available clauses. |
String | optional | "" |
minimum_os_version | A required string indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "9.0"). | String | required | |
platform_type | - | String | optional | "ios" |
runner | The runner target that will provide the logic on how to run the tests. Needs to provide the AppleTestRunnerInfo provider. | Label | required | |
test_coverage_manifest | A file that will be used in lcov export calls to limit the scope of files instrumented with coverage. | Label | optional | None |
test_filter | Test filter string that will be passed into the test runner to select which tests will run. | String | optional | "" |
test_host | - | Label | optional | None |
test_host_is_bundle_loader | Whether the 'test_host' should be used as the -bundle_loader to allow testing the symbols from the test host app | Boolean | optional | True |
ios_xctestrun_runner(name, attachment_lifetime, command_line_args, create_xcresult_bundle, destination_timeout, device_type, os_version, random, reuse_simulator, xcodebuild_args)
This rule creates a test runner for iOS tests that uses xctestrun files to run hosted tests, and uses xctest directly to run logic tests.
You can use this rule directly if you need to override 'device_type' or 'os_version', otherwise you can use the predefined runners:
"@build_bazel_rules_apple//apple/testing/default_runner:ios_xctestrun_ordered_runner"
or:
"@build_bazel_rules_apple//apple/testing/default_runner:ios_xctestrun_random_runner"
Depending on if you want random test ordering or not. Set these as the runner
attribute on your ios_unit_test
target:
ios_unit_test(
name = "Tests",
minimum_os_version = "15.5",
runner = "@build_bazel_rules_apple//apple/testing/default_runner:ios_xctestrun_random_runner",
deps = [":TestsLib"],
)
If you would like this test runner to generate xcresult bundles for your tests,
pass --test_env=CREATE_XCRESULT_BUNDLE=1
. It is preferable to use the
create_xcresult_bundle
on the test runner itself instead of this parameter.
This rule automatically handles running x86_64 tests on arm64 hosts. The only exception is that if you want to generate xcresult bundles or run tests in random order, the test must have a test host. This is because of a limitation in Xcode.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
attachment_lifetime | Attachment lifetime to set in the xctestrun file when running the test bundle - "keepNever" (default), "keepAlways" or "deleteOnSuccess" . This affects presence of attachments in the XCResult output. This does not force using xcodebuild or an XCTestRun file but the value will be used in that case. |
String | optional | "keepNever" |
command_line_args | CommandLineArguments to pass to xctestrun file when running the test bundle. This means it will always use xcodebuild test-without-building to run the test bundle. |
List of strings | optional | [] |
create_xcresult_bundle | Force the test runner to always create an XCResult bundle. This means it will always use xcodebuild test-without-building to run the test bundle. |
Boolean | optional | False |
destination_timeout | Use the specified timeout when searching for a destination device. The default is 30 seconds. | Integer | optional | 0 |
device_type | The device type of the iOS simulator to run test. The supported types correspond to the output of xcrun simctl list devicetypes . E.g., iPhone X, iPad Air. By default, it reads from --ios_simulator_device or falls back to some device. |
String | optional | "" |
os_version | The os version of the iOS simulator to run test. The supported os versions correspond to the output of xcrun simctl list runtimes . E.g., 15.5. By default, it reads --ios_simulator_version and then falls back to the latest supported version. |
String | optional | "" |
random | Whether to run the tests in random order to identify unintended state dependencies. | Boolean | optional | False |
reuse_simulator | Toggle simulator reuse. The default behavior is to reuse an existing device of the same type and OS version. When disabled, a new simulator is created before testing starts and shutdown when the runner completes. | Boolean | optional | True |
xcodebuild_args | Arguments to pass to xcodebuild when running the test bundle. This means it will always use xcodebuild test-without-building to run the test bundle. |
List of strings | optional | [] |
ios_ui_test_suite(name, runners, kwargs)
Generates a test_suite containing an ios_ui_test for each of the given runners
.
ios_ui_test_suite
takes the same parameters as ios_ui_test, except runner
is replaced by runners
.
PARAMETERS
Name | Description | Default Value |
---|---|---|
name | - |
none |
runners | a list of runner targets | None |
kwargs | passed to the ios_ui_test | none |
ios_unit_test_suite(name, runners, kwargs)
Generates a test_suite containing an ios_unit_test for each of the given runners
.
ios_unit_test_suite
takes the same parameters as ios_unit_test, except runner
is replaced by runners
.
PARAMETERS
Name | Description | Default Value |
---|---|---|
name | - |
none |
runners | a list of runner targets | None |
kwargs | passed to the ios_unit_test | none |