How to create XCFramework?
1 min readOct 19, 2019
- First of all, enable “Build libraries for distribution” in build option .
2. Now archive the framework for your preffered supporting platform.
xcodebuild archive
-scheme MyFramework
-destination="iOS"
-destination="macOS"
SKIP_INSTALL=NO
We set the parameter skip install build setting to NO. This will install the framework in archive.
3. Now let’s extract all these framework from archives and pack together in a XCFramework. Run -create-xcframework command of xcodebuild to create XCFramework.
xcodebuild -create-xcframework
-framework <path>
-framework <path>
-output MyFramework.xcframework
The full shell script is here below which archives for iOS simulator and iOS device. After archiving the resulted XCframework folder will be open.
# set framework folder nameFRAMEWORK_FOLDER_NAME="${PROJECT_NAME}_XCFramework"# set framework name or read it from project by this variableFRAMEWORK_NAME="${PROJECT_NAME}"#xcframework pathFRAMEWORK_PATH="${HOME}/Desktop/${FRAMEWORK_FOLDER_NAME}/${FRAMEWORK_NAME}.xcframework"# set path for iOS simulator archiveSIMULATOR_ARCHIVE_PATH="${PROJECT_DIR}/${FRAMEWORK_FOLDER_NAME}/simulator.xcarchive"# set path for iOS device archiveIOS_DEVICE_ARCHIVE_PATH="${PROJECT_DIR}/${FRAMEWORK_FOLDER_NAME}/iOS.xcarchive"rm -rf "${HOME}/Desktop/${FRAMEWORK_FOLDER_NAME}/${FRAMEWORK_FOLDER_NAME}"echo "Deleted ${FRAMEWORK_FOLDER_NAME}"
mkdir "${FRAMEWORK_FOLDER_NAME}"echo "Created ${FRAMEWORK_FOLDER_NAME}"echo "Archiving ${FRAMEWORK_NAME}"xcodebuild archive -scheme ${FRAMEWORK_NAME} -destination="iOS Simulator" -archivePath "${SIMULATOR_ARCHIVE_PATH}" -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YESxcodebuild archive -scheme ${FRAMEWORK_NAME} -destination="iOS" -archivePath "${IOS_DEVICE_ARCHIVE_PATH}" -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES#Creating XCFrameworkxcodebuild -create-xcframework -framework ${SIMULATOR_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework -framework ${IOS_DEVICE_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework -output "${FRAMEWORK_PATH}"rm -rf "${SIMULATOR_ARCHIVE_PATH}"rm -rf "${IOS_DEVICE_ARCHIVE_PATH}"open "${HOME}/Desktop/${FRAMEWORK_FOLDER_NAME}"
Thanks! :)