Files
MapLibreParticleLab/platform/ios/scripts/xcpackage.sh
mwilsnd 20d9e1028c Platform flattening overhaul (#1393)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bart Louwers <bart@emeel.net>
2023-07-26 17:50:34 +02:00

149 lines
4.4 KiB
Bash

#!/usr/bin/env bash
set -e
set -o pipefail
set -u
NAME=Mapbox
OUTPUT=build/ios/pkg
DERIVED_DATA=build/ios
PRODUCTS=${DERIVED_DATA}
LOG_PATH=build/xcodebuild-$(date +"%Y-%m-%d_%H%M%S").log
BUILD_DOCS=${BUILD_DOCS:-true}
SYMBOLS=${SYMBOLS:-YES}
BUILDTYPE=${BUILDTYPE:-Debug}
if [[ ${SYMBOLS} == YES && ${BUILDTYPE} == Release ]]; then
BUILDTYPE='RelWithDebInfo'
fi
FORMAT=${FORMAT:-dynamic}
if [[ ${FORMAT} != "dynamic" ]]; then
echo "Error: only dynamic FORMAT is supported in xcpackage build."
exit 1
fi
function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; }
function finish { >&2 echo -en "\033[0m"; }
trap finish EXIT
IOS_SDK_VERSION=`xcrun --sdk iphoneos --show-sdk-version`
IOS_SIM_SDK_VERSION=`xcrun --sdk iphonesimulator --show-sdk-version`
step "Configuring ${FORMAT} framework for iphoneos ${IOS_SDK_VERSION} and iphonesimulator ${IOS_SIM_SDK_VERSION} (symbols: ${SYMBOLS}, buildtype: ${BUILDTYPE})"
xcodebuild -version
rm -rf ${OUTPUT}
BINOUT="${OUTPUT}"/dynamic
mkdir -p ${BINOUT}
step "Recording library version…"
VERSION="${OUTPUT}"/version.txt
echo -n "https://github.com/maplibre/maplibre-native/commit/" > ${VERSION}
HASH=`git log | head -1 | awk '{ print $2 }' | cut -c 1-10` && true
echo -n "maplibre-gl-native-ios "
echo ${HASH}
echo ${HASH} >> ${VERSION}
PROJ_VERSION=$(git rev-list --count HEAD)
SEM_VERSION=$( git describe --tags --match=ios-v*.*.* --abbrev=0 | sed 's/^ios-v//' )
SHORT_VERSION=${SEM_VERSION%-*}
step "Building targets (build ${PROJ_VERSION}, version ${SEM_VERSION})"
SCHEME='dynamic'
CI_XCCONFIG=''
if [[ ! -z "${CI:=}" ]]; then
xcconfig='platform/darwin/ci.xcconfig'
echo "CI environment, using ${xcconfig}"
CI_XCCONFIG="-xcconfig ./${xcconfig}"
fi
step "Building ${FORMAT} archive for iOS Simulator using ${SCHEME} scheme -> ${BINOUT}/${NAME}-iphonesimulator.xcarchive"
xcodebuild \
archive \
CURRENT_SEMANTIC_VERSION=${SEM_VERSION} \
CURRENT_COMMIT_HASH=${HASH} \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
-workspace ./platform/ios/ios.xcworkspace \
-archivePath ${BINOUT}/${NAME}-iphonesimulator.xcarchive \
-scheme ${SCHEME} \
-configuration ${BUILDTYPE} \
-sdk iphonesimulator \
-jobs ${JOBS} | tee ${LOG_PATH} | xcpretty
step "Building ${FORMAT} archive for iOS devices using ${SCHEME} scheme -> ${BINOUT}/${NAME}-iphoneos.xcarchive"
xcodebuild \
archive \
CURRENT_SEMANTIC_VERSION=${SEM_VERSION} \
CURRENT_COMMIT_HASH=${HASH} \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
-workspace ./platform/ios/ios.xcworkspace \
-archivePath ${BINOUT}/${NAME}-iphoneos.xcarchive \
-scheme ${SCHEME} \
-configuration ${BUILDTYPE} \
-sdk iphoneos \
-jobs ${JOBS} | tee ${LOG_PATH} | xcpretty
LIBS=(Mapbox.a)
function realpath {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
function addFramework {
local archive=$1
local frameworkName=$2
local includeDebugSymbols=$3
local frameworkPath="${archive}/Products/Library/Frameworks/${frameworkName}.framework"
BUILD_ARGS="$BUILD_ARGS -framework $frameworkPath"
if [[ $includeDebugSymbols == true ]]; then
SYMBOL_PATH=$(realpath "${archive}/dSYMs/${frameworkName}.framework.dSYM")
BUILD_ARGS="$BUILD_ARGS -debug-symbols ${SYMBOL_PATH}"
fi
}
step "Creating ${NAME} xcframework"
INCLUDE_DEBUG_SYMBOLS=false
if [[ $BUILDTYPE='RelWithDebInfo' || $BUILDTYPE='Debug' ]]; then
INCLUDE_DEBUG_SYMBOLS=true
fi
# Mapbox mobile
BUILD_ARGS=""
addFramework "${BINOUT}/${NAME}-iphoneos.xcarchive" ${NAME} ${INCLUDE_DEBUG_SYMBOLS}
addFramework "${BINOUT}/${NAME}-iphonesimulator.xcarchive" ${NAME} ${INCLUDE_DEBUG_SYMBOLS}
BUILD_ARGS="$BUILD_ARGS -output ${BINOUT}/${NAME}.xcframework"
echo "Creating ${NAME}.xcframework with args: $BUILD_ARGS"
xcodebuild -create-xcframework $BUILD_ARGS
echo "${NAME}.xcframework created"
step "Copying library resources…"
cp -pv LICENSE.md ${OUTPUT}
sed -n -e '/^## /,$p' platform/ios/CHANGELOG.md > "${OUTPUT}/CHANGELOG.md"
rm -rf /tmp/mbgl
mkdir -p /tmp/mbgl/
README=/tmp/mbgl/README.md
cp platform/ios/docs/pod-README.md "${README}"
sed -i '' -e '/{{STATIC}}/,/{{\/STATIC}}/d' "${README}"
sed -i '' \
-e '/{{DYNAMIC}}/d' -e '/{{\/DYNAMIC}}/d' \
-e '/{{STATIC}}/d' -e '/{{\/STATIC}}/d' \
"${README}"
cp ${README} "${OUTPUT}"
if [ ${BUILD_DOCS} == true ]; then
step "Generating API documentation for ${BUILDTYPE} Build…"
make idocument OUTPUT="${OUTPUT}/documentation"
fi