-
-
Save quangDecember/6151c0af180a84b79f8b572e289b668f to your computer and use it in GitHub Desktop.
| env > env.txt | |
| instruments -s devices > devices.txt | |
| #! /bin/sh -e | |
| # This script demonstrates archive and create action on frameworks and libraries | |
| # Based on script by @author Boris Bielik | |
| # Release dir path | |
| OUTPUT_DIR_PATH="${PROJECT_DIR}/XCFramework" | |
| function archivePathSimulator { | |
| local DIR=${OUTPUT_DIR_PATH}/archives/"${1}-SIMULATOR" | |
| echo "${DIR}" | |
| } | |
| function archivePathDevice { | |
| local DIR=${OUTPUT_DIR_PATH}/archives/"${1}-DEVICE" | |
| echo "${DIR}" | |
| } | |
| # Archive takes 3 params | |
| # | |
| # 1st == SCHEME | |
| # 2nd == destination | |
| # 3rd == archivePath | |
| function archive { | |
| echo "▸ Starts archiving the scheme: ${1} for destination: ${2};\n▸ Archive path: ${3}.xcarchive" | |
| xcodebuild clean archive \ | |
| -project "${PROJECT_NAME}.xcodeproj" \ | |
| -scheme ${1} \ | |
| -configuration ${CONFIGURATION} \ | |
| -destination "${2}" \ | |
| -archivePath "${3}" \ | |
| SKIP_INSTALL=NO \ | |
| OBJROOT="${OBJROOT}/DependentBuilds" \ | |
| BUILD_LIBRARY_FOR_DISTRIBUTION=YES | xcpretty | |
| } | |
| # Builds archive for iOS simulator & device | |
| function buildArchive { | |
| SCHEME=${1} | |
| archive $SCHEME "generic/platform=iOS Simulator" $(archivePathSimulator $SCHEME) | |
| archive $SCHEME "generic/platform=iOS" $(archivePathDevice $SCHEME) | |
| } | |
| # Creates xc framework | |
| function createXCFramework { | |
| FRAMEWORK_ARCHIVE_PATH_POSTFIX=".xcarchive/Products/Library/Frameworks" | |
| FRAMEWORK_SIMULATOR_DIR="$(archivePathSimulator $1)${FRAMEWORK_ARCHIVE_PATH_POSTFIX}" | |
| FRAMEWORK_DEVICE_DIR="$(archivePathDevice $1)${FRAMEWORK_ARCHIVE_PATH_POSTFIX}" | |
| xcodebuild -create-xcframework \ | |
| -framework ${FRAMEWORK_SIMULATOR_DIR}/${1}.framework \ | |
| -framework ${FRAMEWORK_DEVICE_DIR}/${1}.framework \ | |
| -output ${OUTPUT_DIR_PATH}/xcframeworks/${1}.xcframework | |
| } | |
| ### Static Libraries cant be turned into frameworks | |
| function createXCFrameworkForStaticLibrary { | |
| LIBRARY_ARCHIVE_PATH_POSTFIX=".xcarchive/Products/usr/local/lib" | |
| LIBRARY_SIMULATOR_DIR="$(archivePathSimulator $1)${LIBRARY_ARCHIVE_PATH_POSTFIX}" | |
| LIBRARY_DEVICE_DIR="$(archivePathDevice $1)${LIBRARY_ARCHIVE_PATH_POSTFIX}" | |
| xcodebuild -create-xcframework \ | |
| -library ${LIBRARY_SIMULATOR_DIR}/libStaticLibrary.a \ | |
| -library ${LIBRARY_DEVICE_DIR}/libStaticLibrary.a \ | |
| -output ${OUTPUT_DIR_PATH}/xcframeworks/${1}.xcframework | |
| } | |
| echo "#####################" | |
| echo "▸ Cleaning the dir: ${OUTPUT_DIR_PATH}" | |
| rm -rf $OUTPUT_DIR_PATH | |
| #### Static Library #### | |
| #LIBRARY="${PROJECT_NAME}" | |
| #echo "▸ Archive $LIBRARY" | |
| #buildArchive ${LIBRARY} | |
| #echo "▸ Create $FRAMEWORK.xcframework" | |
| #createXCFrameworkForStaticLibrary ${LIBRARY} | |
| #### Dynamic Framework #### | |
| DYNAMIC_FRAMEWORK="${PROJECT_NAME}" | |
| echo "▸ Archive $DYNAMIC_FRAMEWORK" | |
| buildArchive ${DYNAMIC_FRAMEWORK} | |
| echo "▸ Create $DYNAMIC_FRAMEWORK.xcframework" | |
| createXCFramework ${DYNAMIC_FRAMEWORK} |
I would like add two two steps to do before run this script, change you Build settings like follow,
Skip install - NO
Build libraries for distribution - YES
Though it is already added in the script, in my case it was not working.
Now I am getting following error for one of the files from my library,
..../MPUtil.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler
invalid argument 'Project'.
When i am trying to run this build phase script
Works great, thank you.
Xcode Version 13.4.1 (13F100)
This worked perfect for me. XCode 14.1
Make sure
- you add aggregate target
- add the run script.
- Build the newly added target
If you add run script in existing target -- multiple failures will be occured.
- you can see error like
name.xcodeprojdoes not exists - XCode can stuck with
Using build description from memory - XCode build process can go in recursive/infinite loop
I got issue error: binaries with multiple platforms are not supported, the architecture of the binary in -SIMULATOR.xcarchive one seems to contains arm64 & x86_64 (maybe this is the issue?). Can someone help me on this? Thanks!
Hi @DineshKachhot, there is a missing part to exclude build ARCHs of Apple Silicon Mac. I don't remember the exact syntax. Maybe @dj110r and @21DerickDerick can help