Swiftgram/package_app.sh
2019-09-01 16:22:31 +04:00

105 lines
3.3 KiB
Bash

#!/bin/sh
set -x
set -e
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage: sh package_app.sh path/to/buck platform-flavors"
exit 1
fi
BUCK="$1"
BUCK_OPTIONS="$2"
PLATFORM_FLAVORS="$3"
BUILD_PATH="build"
APP_NAME="Telegram"
IPA_PATH="$BUILD_PATH/$APP_NAME.ipa"
DSYMS_FOLDER_NAME="DSYMs"
DSYMS_ZIP="$BUILD_PATH/$DSYMS_FOLDER_NAME.zip"
DSYMS_DIR="$BUILD_PATH/$DSYMS_FOLDER_NAME"
mkdir -p "$BUILD_PATH"
rm -f "$IPA_PATH"
rm -f "$DSYMS_ZIP"
rm -rf "$DSYMS_DIR"
mkdir -p "$DSYMS_DIR"
cp "buck-out/gen/AppPackage#$PLATFORM_FLAVORS.ipa" "$IPA_PATH.original"
rm -rf "$IPA_PATH.original.unpacked"
rm -f "$BUILD_PATH/${APP_NAME}_signed.ipa"
mkdir -p "$IPA_PATH.original.unpacked"
unzip "$IPA_PATH.original" -d "$IPA_PATH.original.unpacked/"
rm "$IPA_PATH.original"
UNPACKED_PATH="$IPA_PATH.original.unpacked"
APP_PATH="$UNPACKED_PATH/Payload/Telegram.app"
FRAMEWORKS_DIR="$APP_PATH/Frameworks"
rm -rf "$IPA_PATH.original.unpacked/SwiftSupport/iphoneos/"*
rm -rf "$IPA_PATH.original.unpacked/Symbols/"*
rm -rf "$FRAMEWORKS_DIR/"*
for DEPENDENCY in $(${BUCK} query "kind('apple_library|apple_binary', deps('//:Telegram#$PLATFORM_FLAVORS', 1))" ${BUCK_OPTIONS}); do
case "$DEPENDENCY" in
*"#"*)
;;
*)
DEPENDENCY="$DEPENDENCY#$PLATFORM_FLAVORS"
;;
esac
DEPENDENCY_PATH=$(echo "$DEPENDENCY" | sed -e "s#^//##" | sed -e "s#:#/#")
DEPENDENCY_NAME=$(echo "$DEPENDENCY" | sed -e "s/#.*//" | sed -e "s/^.*\://")
DYLIB_PATH="buck-out/gen/$DEPENDENCY_PATH/lib$DEPENDENCY_NAME.dylib"
if [ -f "$DYLIB_PATH" ]; then
TARGET_DYLIB_PATH="$FRAMEWORKS_DIR/lib$DEPENDENCY_NAME.dylib"
cp "$DYLIB_PATH" "$TARGET_DYLIB_PATH"
fi
DSYM_PATH="buck-out/gen/$(echo "$DEPENDENCY" | sed -e "s/#/#apple-dsym,/" | sed -e "s#^//##" | sed -e "s#:#/#").dSYM"
cp -f -r "$DSYM_PATH" "$DSYMS_DIR/"
done
for LIB in $(ls "$FRAMEWORKS_DIR"/*.dylib); do
strip -S -T "$LIB"
done
xcrun swift-stdlib-tool --scan-folder "$IPA_PATH.original.unpacked/Payload/Telegram.app" --scan-folder "$IPA_PATH.original.unpacked/Payload/Telegram.app/Frameworks" --scan-folder "$IPA_PATH.original.unpacked/Payload/Telegram.app/PlugIns" --strip-bitcode --platform iphoneos --copy --destination "$IPA_PATH.original.unpacked/SwiftSupport/iphoneos"
for LIB in $(ls "$IPA_PATH.original.unpacked/SwiftSupport/iphoneos/"*.dylib); do
codesign --remove-signature "$LIB"
lipo -remove armv7s -remove arm64e "$LIB" -o "$LIB"
xcrun bitcode_strip -r "$LIB" -o "$LIB"
strip -S -T "$LIB"
done
cp "$IPA_PATH.original.unpacked/SwiftSupport/iphoneos/"*.dylib "$FRAMEWORKS_DIR/"
CERTIFICATE="76F9BA5C281AA72599FE015E0CE1A5D82F5A3DED"
for framework in "$FRAMEWORKS_DIR"/*; do
if [[ "$framework" == *.framework || "$framework" == *.dylib ]]; then
/usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$CERTIFICATE" "$framework"
else
log "Ignoring non-framework: $framework"
fi
done
PROVISIONING_PROFILE="buildbox/transient-data/codesigning/profiles/InHouse_org.telegram.Telegram-iOS.mobileprovision"
cp "$PROVISIONING_PROFILE" "$APP_PATH/embedded.mobileprovision"
ENTITLEMENTS="Entitlements.entitlements"
/usr/bin/codesign ${VERBOSE} -f -s "$CERTIFICATE" --entitlements "$ENTITLEMENTS" "$APP_PATH"
DIR=$(pwd)
cd "$UNPACKED_PATH"
zip -r "../${APP_NAME}_signed.ipa" Payload SwiftSupport
cd "$DIR"
cd "$BUILD_PATH"
zip -r "$DSYMS_FOLDER_NAME.zip" "$DSYMS_FOLDER_NAME"
cd "$DIR"