66 lines
1.7 KiB
Text
66 lines
1.7 KiB
Text
|
ifdef::env-github[]
|
||
|
:note-caption: :information_source:
|
||
|
endif::[]
|
||
|
|
||
|
= Building for iOS (and tvOS, watchOS)
|
||
|
|
||
|
NOTE: This work has had only minimal validation. As always, _caveat emptor_.
|
||
|
|
||
|
== Pre-Requisites
|
||
|
|
||
|
macOS::
|
||
|
|
||
|
As far as we know, the only way to build iOS applications is on a
|
||
|
macOS host system.
|
||
|
|
||
|
Xcode::
|
||
|
|
||
|
You will need Xcode. We tested this with Xcode 9.3.
|
||
|
|
||
|
CMake::
|
||
|
|
||
|
We tested this with CMake 3.9. Other versions may work.
|
||
|
|
||
|
iOS cmake toolchain file::
|
||
|
|
||
|
At the time of this writing (May 28, 2018), the toolchain file
|
||
|
located at https://github.com/leetal/ios-cmake is appears to work
|
||
|
reasonably well.
|
||
|
|
||
|
== Steps
|
||
|
|
||
|
When building for iOS and similar targets, only static libraries may be built.
|
||
|
(This is good for avoiding dependency nightmares anyway.)
|
||
|
|
||
|
Using the above toolchain file, we can build for iOS using
|
||
|
the CMake standard CMAKE_TOOLCHAIN_FILE macro, and using
|
||
|
the IOS_PLATFORM macro to set the target. (See the iOS CMake
|
||
|
toolchain README for valid options; we select "OS" for iOS.)
|
||
|
|
||
|
The test suite and command line tools will automatically be removed
|
||
|
from the build, since they aren't interesting or useful in cross-compile
|
||
|
environment. (There is no way to run them.)
|
||
|
|
||
|
If you have checked out this repository in $SRC, the following should work:
|
||
|
|
||
|
[source, sh]
|
||
|
----
|
||
|
% cd $SRC
|
||
|
% mkdir ios-build
|
||
|
% cd ios-build
|
||
|
% git clone https://github.com/leetal/ios-cmake
|
||
|
% cmake -G Xcode \
|
||
|
-DCMAKE_TOOLCHAIN_FILE=`pwd`/ios-cmake/ios.toolchain.cmake \
|
||
|
-DIOS_PLATFORM=OS ..
|
||
|
----
|
||
|
|
||
|
Then you can build using Xcode, or simply use cmake to drive the build:
|
||
|
|
||
|
[source, sh]
|
||
|
----
|
||
|
% cmake --build .
|
||
|
----
|
||
|
|
||
|
Extra effort may be required to enable the use of mbedTLS (NNG does not
|
||
|
at the time of writing support Secure Transport. See issue #497 for status.)
|