Created
October 13, 2015 12:26
-
-
Save madhikarma/09e553c508f870639570 to your computer and use it in GitHub Desktop.
Script to build a framework for multiple architectures
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
# Merge Script | |
# http://code.hootsuite.com/an-introduction-to-creating-and-distributing-embedded-frameworks-in-ios/ | |
# 1 | |
# Set bash script to exit immediately if any commands fail. | |
set -e | |
# 2 | |
# Setup some constants for use later on. | |
FRAMEWORK_NAME="" | |
# 3 | |
# If remnants from a previous build exist, delete them. | |
if [ -d "${SRCROOT}/build" ]; then | |
rm -rf "${SRCROOT}/build" | |
fi | |
# 4 | |
# Build the framework for device and for simulator (using | |
# all needed architectures). | |
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch arm64 -arch armv7 -arch armv7s only_active_arch=no defines_module=yes -sdk "iphoneos" | |
xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch x86_64 -arch i386 only_active_arch=no defines_module=yes -sdk "iphonesimulator" | |
# 5 | |
# Remove .framework file if exists on Desktop from previous run. | |
if [ -d "${HOME}/Desktop/${FRAMEWORK_NAME}.framework" ]; then | |
rm -rf "${HOME}/Desktop/${FRAMEWORK_NAME}.framework" | |
fi | |
# 6 | |
# Copy the device version of framework to Desktop. | |
cp -r "${SRCROOT}/build/Release-iphoneos/${FRAMEWORK_NAME}.framework" "${HOME}/Desktop/${FRAMEWORK_NAME}.framework" | |
# 7 | |
# Replace the framework executable within the framework with | |
# a new version created by merging the device and simulator | |
# frameworks' executables with lipo. | |
lipo -create -output "${HOME}/Desktop/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${SRCROOT}/build/Release-iphoneos/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" "${SRCROOT}/build/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}" | |
# 8 | |
# Copy the Swift module mappings for the simulator into the | |
# framework. The device mappings already exist from step 6. | |
cp -r "${SRCROOT}/build/Release-iphonesimulator/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" "${HOME}/Desktop/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule" | |
# 9 | |
# Delete the most recent build. | |
if [ -d "${SRCROOT}/build" ]; then | |
rm -rf "${SRCROOT}/build" | |
fi |
Does this work with Xcode 10?
@AaronBratcher it doesn't. I found the answer why.
https://forums.developer.apple.com/thread/109583
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Note that the
cp -r
on line 44 behaves differently in MacOS (FreeBSD) compared to *nix (core-utils). I'm now usingrsync -ax
to avoid this dependency. In that case the destination folders on line 33 and 44 should both end in/
as well.