Skip to content

Instantly share code, notes, and snippets.

@rehannali
Created June 25, 2021 15:41
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/90c081563353e0f29b9998626e2dca84 to your computer and use it in GitHub Desktop.
Save rehannali/90c081563353e0f29b9998626e2dca84 to your computer and use it in GitHub Desktop.
Universal Framework for xcframework
#!/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: Archiving for ${DEVICE_SIM_ARCH}"
echo "${ROW_STRING}"
EXIT_MESSAGE="$(xcodebuild archive -scheme "${FRAMEWORK_NAME}" -destination="iOS Simulator" -archivePath "${SIMULATOR_DIR_PATH}"/"${DEVICE_SIM_ARCH}".xcarchive -derivedDataPath "${DERIVED_DATA_DIR_PATH}" -sdk "${DEVICE_SIM_ARCH}" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES)"
checkSuccess
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸš€ Step 2: Archiving for ${DEVICE_ARCH} \n\n\n"
EXIT_MESSAGE="$(xcodebuild archive -scheme "${FRAMEWORK_NAME}" -destination="iOS" -archivePath "${DEVICES_DIR_PATH}"/"${DEVICE_ARCH}".xcarchive -derivedDataPath "${DERIVED_DATA_DIR_PATH}" -sdk "${DEVICE_ARCH}" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES)"
checkSuccess
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸ›  Step 3: Creating XC Framework into universal folder"
echo "${ROW_STRING}"
xcodebuild -create-xcframework -framework "${DEVICES_DIR_PATH}"/"${DEVICE_ARCH}".xcarchive/Products/Library/Frameworks/"${FRAMEWORK_NAME}".framework -framework "${SIMULATOR_DIR_PATH}"/"${DEVICE_SIM_ARCH}".xcarchive/Products/Library/Frameworks/"${FRAMEWORK_NAME}".framework -output "${UNIVERSAL_LIBRARY_DIR_PATH}"/"${FRAMEWORK_NAME}".xcframework
######################
echo "${ROW_STRING}"
echo "\n\n\n πŸ›  Step 4: Zip XC Framework into universal folder"
echo "${ROW_STRING}"
cd "${UNIVERSAL_LIBRARY_DIR_PATH}"
zip -r9 "${FRAMEWORK_NAME}-$(date +"%Y%m%d%H%M%S")".xcframework.zip "${FRAMEWORK_NAME}".xcframework
######################
# 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