Created
June 25, 2021 15:40
-
-
Save rehannali/13ad4f1fae5b389c2deeba478feea909 to your computer and use it in GitHub Desktop.
Universal Framework depends on Cocoapods
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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