Skip to content

Instantly share code, notes, and snippets.

@rehannali
Created June 25, 2021 15:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rehannali/13ad4f1fae5b389c2deeba478feea909 to your computer and use it in GitHub Desktop.
Save rehannali/13ad4f1fae5b389c2deeba478feea909 to your computer and use it in GitHub Desktop.
Universal Framework depends on Cocoapods
#!/bin/sh
# Make sure to run this script in Framework folder to work properly.
# Create universal-framework.sh and copy all content to it.
# Provide FRAMEWORK_NAME to start build
# Globals Variables
# Avilable Platforms/Architectures
# macosx | iphoneos | iphonesimulator | appletvos | appletvsimulator | watchos | watchsimulator
DEVICE_ARCH="iphoneos"
DEVICE_SIM_ARCH="iphonesimulator"
FRAMEWORK_NAME="OneLoadNetwork"
FRAMEWORK_DIR_PATH="$(pwd)"/${FRAMEWORK_NAME}-Universal
BUILD_DIR_PATH=${FRAMEWORK_DIR_PATH}/build
DERIVED_DATA_DIR_PATH=${FRAMEWORK_DIR_PATH}/derived-data
LOG_PATH=${FRAMEWORK_DIR_PATH}/logs
SIMULATOR_DIR_PATH=${BUILD_DIR_PATH}/simulator
DEVICES_DIR_PATH=${BUILD_DIR_PATH}/devices
UNIVERSAL_LIBRARY_DIR_PATH=${BUILD_DIR_PATH}/universal
SUCCESS=true
EXIT_MESSAGE=$?
ROW_STRING="\n##################################################################\n"
######################
printPaths()
{
echo "${ROW_STRING}"
echo "BUILD_DIR: ${BUILD_DIR_PATH}"
echo "DERIVED_DATA_DIR: ${DERIVED_DATA_DIR_PATH}"
echo "LOG_PATH: ${LOG_PATH}"
echo "DEVICE_LIBRARY_PATH: ${DEVICES_DIR_PATH}"
echo "SIMULATOR_LIBRARY_PATH: ${SIMULATOR_DIR_PATH}"
echo "UNIVERSAL_LIBRARY_DIR: ${UNIVERSAL_LIBRARY_DIR_PATH}"
echo "${ROW_STRING}"
}
checkSuccess()
{
if [[ -z $EXIT_MESSAGE ]]; then
SUCCESS=false
exitWithMessage
exit 1
fi
}
exitWithMessage()
{
echo "${ROW_STRING}"
if [ "$SUCCESS" = true ] ; then
echo "\n\n\n 🏁 Completed with Success! πŸ™‚"
else
echo "\n\n\n 😱 Completed with Errors! Please check line above for details:"
echo "${EXIT_MESSAGE}"
fi
echo "\n πŸ” For more details you can always check the ${LOG_PATH}/${FRAMEWORK_NAME}_archive.log file. πŸ“ \n\n\n"
echo "${ROW_STRING}"
}
makeDirectories()
{
mkdir -p "${LOG_PATH}"
mkdir -p "${SIMULATOR_DIR_PATH}"
mkdir -p "${DEVICES_DIR_PATH}"
mkdir -p "${UNIVERSAL_LIBRARY_DIR_PATH}"
}
######################
# Cleaning up old directories if available.
if [ -d "${FRAMEWORK_DIR_PATH}/" ]; then
rm -rf "${FRAMEWORK_DIR_PATH}"
fi
# Make sure we have all directories available to work.
makeDirectories
# Start with logging process
exec > ${LOG_PATH}/${FRAMEWORK_NAME}_archive.log 2>&1
open ${LOG_PATH}/${FRAMEWORK_NAME}_archive.log
echo "\n ⏱ Starting the Building Process for Universal Framework... \n\n\n"
# Printing the PATHS
printPaths
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸš€ Step 1-1: Building for ${DEVICE_SIM_ARCH}"
echo "${ROW_STRING}"
EXIT_MESSAGE="$(xcodebuild clean build BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -workspace "${FRAMEWORK_NAME}.xcworkspace" -scheme "${FRAMEWORK_NAME}" -configuration Release -sdk "${DEVICE_SIM_ARCH}" -derivedDataPath "${DERIVED_DATA_DIR_PATH}")"
checkSuccess
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸ“¦ Step 1-2: Copy the framework structure for ${DEVICE_SIM_ARCH}"
echo "${ROW_STRING}"
cp -r ${DERIVED_DATA_DIR_PATH}/Build/Products/Release-${DEVICE_SIM_ARCH}/${FRAMEWORK_NAME}.framework ${SIMULATOR_DIR_PATH}
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸš€ Step 2-1: Building for ${DEVICE_ARCH} \n\n\n"
EXIT_MESSAGE="$(xcodebuild clean build BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -workspace ${FRAMEWORK_NAME}.xcworkspace -scheme ${FRAMEWORK_NAME} -configuration Release -sdk "${DEVICE_ARCH}" -derivedDataPath "${DERIVED_DATA_DIR_PATH}")"
checkSuccess
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸ“¦ Step 2-2: Copy the framework structure for ${DEVICE_ARCH}"
echo "${ROW_STRING}"
cp -r ${DERIVED_DATA_DIR_PATH}/Build/Products/Release-${DEVICE_ARCH}/${FRAMEWORK_NAME}.framework ${DEVICES_DIR_PATH}
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸ›  Step 3: Copy device framework into universal folder"
echo "${ROW_STRING}"
if [ -d "${DEVICES_DIR_PATH}/${FRAMEWORK_NAME}.framework/" ]; then
cp -r ${DEVICES_DIR_PATH}/${FRAMEWORK_NAME}.framework "${UNIVERSAL_LIBRARY_DIR_PATH}/" | echo
else
echo "ℹ️ Couldn't find any Framework file for DEVICE!"
fi
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸ›  Step 4: The LIPO Step i.e. Creating Universal Framework"
echo "${ROW_STRING}"
lipo -create \
${SIMULATOR_DIR_PATH}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME} \
${DEVICES_DIR_PATH}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME} \
-output ${UNIVERSAL_LIBRARY_DIR_PATH}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸ›  Step 5: Copy simulator Swift public interface to universal framework"
echo "${ROW_STRING}"
if [ -d "${SIMULATOR_DIR_PATH}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then
cp ${SIMULATOR_DIR_PATH}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/* ${UNIVERSAL_LIBRARY_DIR_PATH}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule | echo
else
echo "ℹ️ Couldn't find any Swift module file for SIMULATOR!"
fi
######################
# Open the Framework directory
echo "${ROW_STRING}"
echo "\n\n\n πŸ›  Step 6: Zip framework file"
echo "${ROW_STRING}"
cd "${UNIVERSAL_LIBRARY_DIR_PATH}"
zip -r9 "${FRAMEWORK_NAME}".framework.zip "${FRAMEWORK_NAME}".framework
######################
# Open the Framework directory
echo "${ROW_STRING}"
open "${UNIVERSAL_LIBRARY_DIR_PATH}"
echo "${ROW_STRING}"
######################
# Open the log file on Console application
exitWithMessage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment