A CMake toolchain file for iOS (+ Catalyst), watchOS, tvOS and macOS development with full simulator support and toggleable options!
NEW!
- Experimental Catalyst support (iOS on macOS)
- macOS support and experimental Apple Silicon support
- Deprecated options now removed.
- Builds now run on Github Actions
ios-cmake
Tested with the following combinations:
- XCode 11.7
- iOS SDK 9.0 & 11.0
- watchOS SDK 5.0
- tvOS SDK 11.0
- XCode 12.5.1
- iOS SDK 12.0
- watchOS SDK 7.0
- macOS SDK 10.13
- iOS, watchOS, tvOS combined builds, mixed SDKs
- XCode 13.2
- Mac Catalyst SDK 13.0
- macOS SDK 11.0
Platform flag options (-DPLATFORM=flag)
- OS - to build for iOS (armv7, armv7s, arm64) DEPRECATED in favour of OS64
- OS64 - to build for iOS (arm64 only)
- OS64COMBINED - to build for iOS & iOS Simulator (FAT lib) (arm64, x86_64)
- SIMULATOR - to build for iOS simulator 32 bit (i386) DEPRECATED
- SIMULATOR64 - to build for iOS simulator 64 bit (x86_64)
- SIMULATORARM64 - to build for iOS simulator 64 bit (arm64)
- TVOS - to build for tvOS (arm64)
- TVOSCOMBINED - to build for tvOS & tvOS Simulator (arm64, x86_64)
- SIMULATOR_TVOS - to build for tvOS Simulator (x86_64)
- WATCHOS - to build for watchOS (armv7k, arm64_32)
- WATCHOSCOMBINED - to build for watchOS & Simulator (armv7k, arm64_32, i386)
- SIMULATOR_WATCHOS - to build for watchOS Simulator (i386)
- MAC - to build for macOS (x86_64)
- MAC_ARM64 - to build for macOS on Apple Silicon (arm64)
- MAC_CATALYST - to build iOS for Mac (Catalyst, x86_64)
- MAC_CATALYST_ARM64 - to build iOS for Mac on Apple Silicon (Catalyst, arm64)
Example usage
NOTE: Change the -DPLATFORM
to an applicable value if targeting another platform.
cd example/example-lib
mkdir build
cd build
cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../../ios.toolchain.cmake -DPLATFORM=OS64
cmake --build . --config Release
This will build and install the library for the given PLATFORM. In this case, iOS with the arm64 architecture.
COMBINED Options
The options called *COMBINED (OS64COMBINED, TVOSCOMBINED and WATCHOSCOMBINED) will build complete FAT-libraries for the given platform. These FAT-libraries include slices for both device and simulator, making the distribution and usage of the library much more simple!
Example:
cmake . -G Xcode -DCMAKE_TOOLCHAIN_FILE=../../ios.toolchain.cmake -DPLATFORM=OS64COMBINED
cmake --build . --config Release
cmake --install . --config Release
NOTE: The COMBINED options ONLY work with the Xcode generator (-G Xcode) on CMake versions 3.14+!
Exposed Variables
XCODE_VERSION
- Version number (not including Build version) of Xcode detected.
SDK_VERSION
- Version of SDK being used.
CMAKE_OSX_ARCHITECTURES
- Architectures being compiled for (generated from PLATFORM).
APPLE_TARGET_TRIPLE
- Used by autoconf build systems.
Additional Options
-DENABLE_BITCODE=(BOOL)
- Enabled by default, specify FALSE or 0 to disable bitcode
-DENABLE_ARC=(BOOL)
- Enabled by default, specify FALSE or 0 to disable ARC
-DENABLE_VISIBILITY=(BOOL)
- Disabled by default, specify TRUE or 1 to enable symbol visibility support
-DENABLE_STRICT_TRY_COMPILE=(BOOL)
- Disabled by default, specify TRUE or 1 to enable strict compiler checks (will run linker on all compiler checks whenever needed)
-DARCHS=(STRING)
- Valid values are: armv7, armv7s, arm64, i386, x86_64, armv7k, arm64_32. By default it will build for all valid architectures based on -DPLATFORM
(see above)
To combine all platforms into the same FAT-library, either build any of the "COMBINED" platform types OR use the LIPO tool. More information on how to combine libraries with LIPO is readily available on the net.
Thanks To
- natbro for adding tvOS support
- MSNexploder for adding OS64 and arm64e support
- garryyan for adding watchOS support