How to create XCFramework?

Mayur Sharma
1 min readOct 19, 2019

--

  1. 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! :)

--

--