Compatibility
- 1.1.1 and master5.35.25.15.04.2
- 1.1.1 and masteriOSmacOS(Intel)macOS(ARM)LinuxtvOSwatchOS
Build multi-architecture iOS libraries from build systems like CMake, Make, and Xcode.
ibuild
is a build system for iOS libraries that are built without using build systems like CMake or Make.
To install ibuild
, use Homebrew
brew install IMcD23/brew/ibuild
A typical workflow for using ibuild
is as follows:
build.plist
file in the root of your repo.build.plist
.ibuild
binary.Now, when you build with Xcode, ibuild
will ensure that all of the dependencies in your build.plist
are built.
If a package has defined a build.plist
in its root, it can be depended on simply by adding it to the dependencies
array in your build.plist
. Some packages include:
If you want to build another package that doesn't have a build.plist
, you must create one for the project. Follow the example of the projects above.
You can depend on packages using git, or depend on a package at a local path.
Below is the schema for a build.plist
file. A question mark represents an optional property.
{
# Display name of the package
name: String
build?: {
# The location of the source code to build
location?: {
# Type of the location.
# Values: github / git / local
type: String
# Required for GitHub and Local types.
# Should be either "username/repo" or "path/to/package", respectively
path?: String
# Required for GitHub or Git types.
# The name of the branch to check out.
branch?: String
# Required for Git type.
# URL to pass to git clone.
url?: String
}
# The build sytem to use when building.
# Values: none / cmake / make / xcode / custom
buildSystem: String
# Package-relative patch files to apply to the
# library's source code after retrieving.
patches?: [String]
# Arguments to pass when configuring / building
buildArgs?: [String]
# Additional arguments to pass, that depend on
# platform and architecture
buildArchSpecificArgs?: {
<platform>: {
<arch>: [String]
}
}
# When building a `make` project, this command will
# replace the `install` in `make install`.
# Has no effect with other build systems
installCommand?: String
# Names of the libraries that are generated by
# the build of the `library` property
outputs?: [String]
# Paths of source files in this package to also copy to final output directory.
auxiliaryFiles?: {
"package/path": "install/path"
}
# When the build system is "custom", these properties determine which commands to run.
customProperties?: {
configure?: String
make?: String
install?: String
env?: {
"key": "value"
}
}
}
# Dependencies of this package
dependencies?: [
{
# Type of the location.
# Values: github / git / local
type: String
# Required for GitHub and Local types.
# Should be either "username/repo" or "path/to/package", respectively
path?: String
# Required for GitHub or Git types.
# The name of the branch to check out.
branch?: String
# Required for Git type.
# URL to pass to git clone.
url?: String
}
]
}
PackageTask(location)
DownloadPackageLocationTask(location)
PackageDependenciesTask([location])
PackageTask(location)
BuildPackageTask(Package)
DownloadPackageLocationTask(location) // build location
BuildTask(Package)
BuildArchitectureTask(Package, architecture)
CopyHeadersAndMetadataTask(Package)
LipoTask(Package)
.ibuild
build.db
build
Products
lib
include
Framework.framework
Intermediates
uuid
arch
build
lib
include
Framework.framework
configure
...
checkout
uuid
<repo>