Cross-compile the AVS Device SDK for iOS
The following step-by-step instructions teach you how to cross-compile and build the AVS Device SDK for iOS. If you encounter any errors or have questions, browse the SDK issue list before creating a new issue.
The AVS Device SDK sample app doesn't run on iOS. This guide doesn't walk through the cross-compilation of all required dependencies to launch the SDK on iOS.
After cross-compiling the SDK, you must create a custom iOS app to wrap the native AVS Device SDK code. This development requires you to integrate SDK features on your own – microphone, speaker, media player and more.
- Prerequisites
- Step 1: Install dependencies
- Step 2: Download and configure the SDK
- Step 3: Build the SDK
- (Optional) Step 4: Build the SDK to run in the iOS simulator
Prerequisites
- curl 7.50.2 or greater.
- Homebrew
- XCode command line tools
To confirm that you have installed curl, Homebrew, and Xcode command line tools, run the following commands.
curl --version
brew --version
xcode-select --version
Step 1: Install dependencies
-
Install the required dependencies.
brew install cmake pkg-config
-
Create a build folder for your project.
cd ~ mkdir cross-compile cd cross-compile
-
Clone CMake for iOS into your build folder.
cd ~/cross-compile git clone https://github.com/leetal/ios-cmake.git
-
Download and cross-compile Google Test.
cd ~/cross-compile git clone https://github.com/google/googletest.git mkdir googletest_build cd googletest_build cmake ../googletest \ -DIOS_DEPLOYMENT_TARGET=10.0 \ -DCMAKE_TOOLCHAIN_FILE=../ios-cmake/ios.toolchain.cmake \ -DIOS_PLATFORM=OS \ make
-
Download and cross-compile OpenSSL and curl. Clone the repository from GitHub.
cd ~/cross-compile git clone https://github.com/jasonacox/Build-OpenSSL-cURL.git cd Build-OpenSSL-cURL/
-
Open
build.sh
and change the curl version to 7.55.1.######################################## # EDIT this section to Select Versions # ######################################## OPENSSL="1.0.2l" LIBCURL="7.55.1" NGHTTP2="1.24.0" ########################################
- Save the file.
-
Run the script.
./build.sh
Step 2: Download and configure the SDK
-
Clone the AVS Device SDK.
cd ~/cross-compile git clone -b v1.26.0 --single-branch https://github.com/alexa/avs-device-sdk.git cd avs-device-sdk/
-
Replace the source code in
/AVSCommon/Utils/src/LibcurlUtils/LibcurlUtils.cpp
-
Find this code
if (config.getString(CAPATH_CONFIG_KEY, &caPath) && !setopt(handle, CURLOPT_CAPATH, caPath.c_str(), "CURLOPT_CAPATH", caPath.c_str())) { return false; }
-
Replace it with this code
if (config.getString(CAPATH_CONFIG_KEY, &caPath) && !setopt(handle, CURLOPT_CAINFO, caPath.c_str(), "CURLOPT_CAINFO", caPath.c_str()) && !setopt(handle, CURLOPT_CAPATH, caPath.c_str(), "CURLOPT_CAPATH", caPath.c_str())) { return false; }
-
-
The SDK must run as a STATIC library. You must make it global in all subfolders.
cd ~/cross-compile/avs-device-sdk/ find . -type f -name '*.txt' -exec sed -i '' s/SHARED/STATIC/ {} +
Step 3: Build the SDK
Build the SDK with the following CMake parameters:
cd ~/cross-compile
mkdir avs_build
cd avs_build
cmake ../avs-device-sdk \
-DIOS_DEPLOYMENT_TARGET=10.0 \
-DCMAKE_TOOLCHAIN_FILE=../ios-cmake/ios.toolchain.cmake \
-DIOS_PLATFORM=OS \
-DGSTREAMER_MEDIA_PLAYER=OFF \
-DPKCS11=OFF \
-DCURL_LIBRARY=../Build-OpenSSL-cURL/archive/libcurl-7.54.1-openssl-1.0.2l-nghttp2-1.24.0/libcurl_iOS.a \
-DCURL_INCLUDE_DIR=../Build-OpenSSL-cURL/curl/curl-7.55.1/include \
-DGTEST_LIBRARY=../googletest_build/googlemock/libgmock.a \
-DGTEST_MAIN_LIBRARY=../googletest_build/googlemock/libgmock_main.a \
-DGTEST_INCLUDE_DIR=../googletest/googletest/include/ \
-DPKG_CONFIG_EXECUTABLE=/usr/local/bin/pkg-config
(Optional) Step 4: Build the SDK to run in the iOS simulator
cd ~/cross-compile
mkdir avs_build_sim
cd avs_build_sim
cmake ../avs-device-sdk
-DIOS_DEPLOYMENT_TARGET=10.0 \
-DCMAKE_TOOLCHAIN_FILE=../ios-cmake/ios.toolchain.cmake \
-DIOS_PLATFORM=SIMULATOR64 \
-DGSTREAMER_MEDIA_PLAYER=OFF \
-DCURL_LIBRARY=../Build-OpenSSL-cURL/archive/libcurl-7.54.1-openssl-1.0.2l-nghttp2-1.24.0/libcurl_iOS.a \
-DCURL_INCLUDE_DIR=../Build-OpenSSL-cURL/curl/curl-7.55.1/include \
-DGTEST_LIBRARY=../googletest_build/googlemock/libgmock.a \
-DGTEST_MAIN_LIBRARY=../googletest_build/googlemock/libgmock_main.a \
-DGTEST_INCLUDE_DIR=../googletest/googletest/include/ \
-DPKG_CONFIG_EXECUTABLE=/usr/local/bin/pkg-config
To build dependencies for the iOS proof of concept, run these commands
make CBLAuthDelegate
make DefaultClient
make KWD
make PlaylistParser
Make sure that each make
command reaches 100%
.
Last updated: Oct 25, 2022