Building on iOS

How to build i2pd for iOS 9 and iOS Simulator 386/x64

Prerequisites

XCode7+, cmake 3.2+

Dependencies

  • precompiled openssl
  • precompiled boost with modules filesystem, program_options, date_time and system
  • ios-cmake toolchain from https://github.com/vovasty/ios-cmake.git

Building

Assume you have folder structure

lib/
    libboost_date_time.a
    libboost_filesystem.a
    libboost_program_options.a
    libboost_system.a
    libboost.a
    libcrypto.a
    libssl.a
include/
    boost/
    openssl/
ios-cmake/
i2pd/
mkdir -p build/simulator/lib build/ios/lib include/i2pd

pushd build/simulator && \
cmake   -DIOS_PLATFORM=SIMULATOR \
        -DPATCH=/usr/bin/patch \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_TOOLCHAIN_FILE=../../ios-cmake/toolchain/iOS.cmake \
        -DWITH_STATIC=yes \
        -DWITH_BINARY=no \
        -DBoost_INCLUDE_DIR=../../include \
        -DOPENSSL_INCLUDE_DIR=../../include \
        -DBoost_LIBRARY_DIR=../../lib \
        -DOPENSSL_SSL_LIBRARY=../../lib/libssl.a \
        -DOPENSSL_CRYPTO_LIBRARY=../../lib/libcrypto.a \
        ../../i2pd/build && \
make -j16 VERBOSE=1 && \
popd

pushd build/ios
cmake   -DIOS_PLATFORM=OS \
        -DPATCH=/usr/bin/patch \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_TOOLCHAIN_FILE=../../ios-cmake/toolchain/iOS.cmake \
        -DWITH_STATIC=yes \
        -DWITH_BINARY=no \
        -DBoost_INCLUDE_DIR=../../include \
        -DOPENSSL_INCLUDE_DIR=../../include \
        -DBoost_LIBRARY_DIR=../../lib \
        -DOPENSSL_SSL_LIBRARY=../../lib/libssl.a \
        -DOPENSSL_CRYPTO_LIBRARY=../../lib/libcrypto.a \
        ../../i2pd/build && \
make -j16 VERBOSE=1 && \
popd

libtool -static -o lib/libi2pdclient.a build/*/libi2pdclient.a
libtool -static -o lib/libi2pd.a build/*/libi2pd.a

cp i2pd/*.h include/i2pd

Include into project

  • add all libraries in lib folder to Project linked frameworks.
  • add libc++ and libz libraries from system libraries to Project linked frameworks.
  • add path to i2p headers to your Headers search paths

Alternatively you may use swift wrapper https://github.com/vovasty/SwiftyI2P.git