Extra Apple Rules for Bazel
This repository contains additional rules for Bazel that can be used to build libraries for Apple platforms.
Produces a static library from the given Objective-C source files, with support for header maps.
In iOS development, conventionally, when depending on an Objective-C library,
you can import its public headers using the system include syntax (#import <MyLibrary/MyLibrary.h>
) regardless of their location on the file sytem.
However, in Bazel, you have to explicitly specify the location of the imported
headers from the relatively from the included directories (#import "external/MyLibrary/MyLibrary.h"
). This rule wraps the native objc_library
rule to add support for the conventional import syntax, so that you won't have
to patch your libraries to support building with Bazel.
Encapsulates a target which is provided to dependers as a bundle.
apple_resource_bundle
rules coming from rules_apple
doesn't have a
bundle_id
attribute, and doesn't support substitution of
DEVELOPMENT_LANGUAGE
and PRODUCT_BUNDLE_IDENTIFIER
variables which by
default exist in a resource bundle target generated by Xcode. This macro wraps
rules_apple
's apple_resource_bundle
rule to modify the Info.plist
files
under the hood before giving them to the original rule, so that users don't have
to manually hard code their plists in order to make their resource bundle
targets work with Bazel.
- https://github.com/bazelbuild/rules_apple/blob/0.19.0/doc/rules-resources.md#apple_resource_bundle
- bazelbuild/rules_apple#679
- bazelbuild/rules_apple#680
- bazelbuild/rules_apple#681
Add the following to your WORKSPACE
file to add the external repositories,
replacing the commit hash in the commit
attribute with the version of the
rules you wish to depend on:
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
git_repository(
name = "com_github_thii_rules_apple_extras",
remote = "https://github.com/thii/rules_apple_extras.git",
commit = "<latest commit hash here>",
)
With a load statement at the top of your BUILD file, you can use this rule as
you would with the native objc_library
rule.
load("@com_github_thii_rules_apple_extras//apple:objc_library.bzl", "objc_library")
objc_library(
name = "Lib",
hdrs = [
"Lib.h",
],
srcs = glob([
"**/*.m",
]),
)
Any target that depends on Lib
will be able to import Lib
's public header
using #import <Lib/Lib.h>
syntax.
MIT