mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 16:35:33 +00:00
* Also renames resources/environment.sh to resources/build/mac/xcode-environment.inc.sh. * Adds a few more exclusions to linux/scripts/dist.sh Fixes: #14478 Test-bot: skip Build-bot: build
142 lines
4.6 KiB
Bash
Executable file
142 lines
4.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
## START STANDARD BUILD SCRIPT INCLUDE
|
|
# adjust relative paths as necessary
|
|
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
|
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
|
## END STANDARD BUILD SCRIPT INCLUDE
|
|
|
|
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
|
. "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh"
|
|
. "$KEYMAN_ROOT/resources/build/build-download-resources.sh"
|
|
|
|
builder_describe "Builds Keyman Engine for use on iOS devices - iPhone and iPad." \
|
|
"@/web/src/app/webview build" \
|
|
"@/web/src/engine/sentry-manager build" \
|
|
"clean" \
|
|
"configure" \
|
|
"build" \
|
|
"--sim-artifact Also outputs a simulator-friendly test artifact corresponding to the build"
|
|
|
|
builder_parse "$@"
|
|
|
|
mac_verify_on_mac
|
|
|
|
CONFIG="Release"
|
|
if builder_is_debug_build; then
|
|
CONFIG="Debug"
|
|
fi
|
|
|
|
builder_describe_outputs \
|
|
configure /ios/Carthage/Build \
|
|
build /ios/build/Build/Products/Release/KeymanEngine.xcframework
|
|
|
|
# Base definitions (must be before do_clean call)
|
|
DERIVED_DATA="$KEYMAN_ROOT/ios/build"
|
|
BUILD_PATH="$DERIVED_DATA/Build/Products"
|
|
|
|
# Extended path definitions
|
|
BUNDLE_PATH="${THIS_SCRIPT_PATH}/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources"
|
|
|
|
# Needed before `configure` action
|
|
DEFAULT_KBD_ID="sil_euro_latin"
|
|
DEFAULT_LM_ID="nrc.en.mtnt"
|
|
|
|
# Engine library build path
|
|
KEYMAN_XCFRAMEWORK="$BUILD_PATH/$CONFIG/KeymanEngine.xcframework"
|
|
|
|
XCODEFLAGS="-quiet -configuration $CONFIG"
|
|
XCODEFLAGS_EXT="$XCODEFLAGS -derivedDataPath \"$DERIVED_DATA\" -workspace ../keymanios.xcworkspace"
|
|
|
|
CODE_SIGN=
|
|
if builder_is_debug_build || ( builder_is_ci_build && ! builder_is_ci_build_level_release ); then
|
|
CODE_SIGN="CODE_SIGN_IDENTITY= CODE_SIGNING_REQUIRED=NO ${DEV_TEAM:-} CODE_SIGN_ENTITLEMENTS= CODE_SIGNING_ALLOWED=NO"
|
|
fi
|
|
|
|
### START OF THE BUILD ###
|
|
|
|
function do_clean () {
|
|
# Possible TODO: can we clean the engine target without also cleaning the app target?
|
|
rm -rf "$BUILD_PATH"
|
|
rm -rf Carthage
|
|
}
|
|
|
|
function carthage_die() {
|
|
local msg="$1"
|
|
|
|
# Don't leave a trace of the failed folder; we'd have to rebuild stuff anyway.
|
|
# This way, a later re-run doesn't think `configure` succeeded when it did not.
|
|
rm -rf Carthage
|
|
builder_die "$1"
|
|
}
|
|
|
|
function do_carthage() {
|
|
# Carthage setup must be handled from the directory with the Cartfile / Cartfile.resolved, it seems.
|
|
pushd .. > /dev/null
|
|
|
|
carthage checkout || carthage_die "Carthage dependency checkout failed"
|
|
|
|
# --no-use-binaries: due to https://github.com/Carthage/Carthage/issues/3134,
|
|
# which affects the sentry-cocoa dependency.
|
|
carthage build --use-xcframeworks --no-use-binaries --platform iOS || carthage_die "Carthage dependency loading failed"
|
|
|
|
popd > /dev/null
|
|
}
|
|
|
|
function do_packages() {
|
|
mkdir -p "$BUNDLE_PATH"
|
|
|
|
downloadKeyboardPackage "$DEFAULT_KBD_ID" "$BUNDLE_PATH/$DEFAULT_KBD_ID.kmp"
|
|
downloadModelPackage "$DEFAULT_LM_ID" "$BUNDLE_PATH/$DEFAULT_LM_ID.model.kmp"
|
|
}
|
|
|
|
function do_configure ( ) {
|
|
do_packages
|
|
do_carthage
|
|
}
|
|
|
|
# Manages KeymanEngine.bundle, which is included inside the :engine target.
|
|
function update_bundle ( ) {
|
|
mkdir -p "$BUNDLE_PATH"
|
|
|
|
KMW_PRODUCT="$KEYMAN_ROOT/web/build/app/webview/$CONFIG"
|
|
KMW_RESOURCES="$KEYMAN_ROOT/web/build/app/resources"
|
|
|
|
#Copy over the relevant resources! It's easiest to do if we navigate to the resulting folder.
|
|
cp "$KMW_RESOURCES/osk/kmwosk.css" "$BUNDLE_PATH/kmwosk.css"
|
|
cp "$KMW_RESOURCES/osk/keymanweb-osk.ttf" "$BUNDLE_PATH/keymanweb-osk.ttf"
|
|
cp "$KMW_PRODUCT/keymanweb-webview.js" "$BUNDLE_PATH/keymanweb-webview.js"
|
|
cp "$KEYMAN_ROOT/web/src/engine/sentry-manager/build/lib/index.js" "$BUNDLE_PATH/keyman-sentry.js"
|
|
}
|
|
|
|
# First things first - update our dependencies.
|
|
function build_engine() {
|
|
update_bundle
|
|
|
|
echo
|
|
echo "Build products will be set with the following version metadata:"
|
|
echo " * KEYMAN_VERSION=$KEYMAN_VERSION"
|
|
echo " * KEYMAN_VERSION_WITH_TAG=$KEYMAN_VERSION_WITH_TAG"
|
|
echo " * KEYMAN_VERSION_ENVIRONMENT=$KEYMAN_VERSION_ENVIRONMENT"
|
|
echo " * UPLOAD_SENTRY=$UPLOAD_SENTRY"
|
|
echo
|
|
echo "Building KMEI..."
|
|
|
|
rm -rf "$BUILD_PATH/$CONFIG-universal"
|
|
|
|
mac_xcodebuild $XCODEFLAGS_EXT \
|
|
$CODE_SIGN \
|
|
-scheme KME-universal \
|
|
KEYMAN_VERSION=$KEYMAN_VERSION \
|
|
KEYMAN_VERSION_WITH_TAG=$KEYMAN_VERSION_WITH_TAG \
|
|
KEYMAN_VERSION_ENVIRONMENT=$KEYMAN_VERSION_ENVIRONMENT \
|
|
UPLOAD_SENTRY=$UPLOAD_SENTRY
|
|
|
|
if ! [[ -d "${KEYMAN_XCFRAMEWORK}" ]]; then
|
|
builder_die "Build failed: directory '${KEYMAN_XCFRAMEWORK}' missing"
|
|
fi
|
|
}
|
|
|
|
builder_run_action clean do_clean
|
|
builder_run_action configure do_configure
|
|
builder_run_action build build_engine
|