Skip to content

Instantly share code, notes, and snippets.

@pofat
Last active June 19, 2019 07:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pofat/646957ab9a27f31fcd90300e8c9271be to your computer and use it in GitHub Desktop.
Save pofat/646957ab9a27f31fcd90300e8c9271be to your computer and use it in GitHub Desktop.
A post-action to Xcode Archive to generate final universal framework
######################
# Create log file
######################
exec > ~/Desktop/tmp/UniversalBuild_Log_$(date +"%Y%m%d%H%M%S").log 2>&1
######################
# Options
######################
set -e
BUILD_INTERMEDIATES="${OBJROOT}"
BUILD_PRODUCTS="${SYMROOT}/../../../../Products"
DEVICE_BIN="${BUILD_INTERMEDIATES}/UninstalledProducts/iphoneos/${TARGET_NAME}.framework"
SIMULATOR_BIN="${BUILD_PRODUCTS}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework"
ARCHIVE_PATH="${SRCROOT}/_Archive"
rm -rf "${ARCHIVE_PATH}"
mkdir "${ARCHIVE_PATH}"
######################
# Copy frameworks
######################
if [ "${CONFIGURATION}" = "Release" ]; then
if [ -d "${DEVICE_BIN}" ]; then
DEVICE_PATH="${ARCHIVE_PATH}/Release"
mkdir "${DEVICE_PATH}"
cp -r "${DEVICE_BIN}" "${DEVICE_PATH}"
echo "Copy device framework done"
fi
if [ -d "${SIMULATOR_BIN}" ]; then
SIMULATOR_PATH="${ARCHIVE_PATH}/Debug"
mkdir "${SIMULATOR_PATH}"
cp -r "${SIMULATOR_BIN}" "${SIMULATOR_PATH}"
echo "Copy simulator framework done"
fi
######################
# Merge into universal framework
######################
UNIVERSAL_PATH="${ARCHIVE_PATH}/Universal"
mkdir "${UNIVERSAL_PATH}"
cp -r "${DEVICE_BIN}" "${UNIVERSAL_PATH}"
lipo -create "${DEVICE_BIN}/${TARGET_NAME}" "${SIMULATOR_BIN}/${TARGET_NAME}" -output "${UNIVERSAL_PATH}/${TARGET_NAME}.framework/${TARGET_NAME}"
# For Swift framework, Swiftmodule needs to be copied in the universal framework
if [ -d "${SIMULATOR_BIN}/Modules/${TARGET_NAME}.swiftmodule/" ]; then
cp -f ${SIMULATOR_BIN}/Modules/${TARGET_NAME}.swiftmodule/* "${UNIVERSAL_PATH}/${TARGET_NAME}.framework/Modules/${TARGET_NAME}.swiftmodule/" | echo
fi
if [ -d "${DEVICE_BIN}/Modules/${TARGET_NAME}.swiftmodule/" ]; then
cp -f ${DEVICE_BIN}/Modules/${TARGET_NAME}.swiftmodule/* "${UNIVERSAL_PATH}/${TARGET_NAME}.framework/Modules/${TARGET_NAME}.swiftmodule/" | echo
fi
echo "Universal framework successfully created"
echo "#import <DUMessaging/DUMessaging-Swift.h>" > ${UNIVERSAL_PATH}/tmp_script
cat ${UNIVERSAL_PATH}/tmp_script >> ${UNIVERSAL_PATH}/${TARGET_NAME}.framework/Headers/DUMessaging.h
rm -f ${UNIVERSAL_PATH}/tmp_script
fi
exit 0;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment