Created
February 23, 2017 13:58
-
-
Save sundeepgupta/ff9a36b9d136f78b0232f996d3d7a5ef to your computer and use it in GitHub Desktop.
Bash script to thin fat iOS frameworks. Strips non-valid architectures from fat framework binaries.
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
# Adapted from https://github.com/realm/realm-cocoa/blob/master/scripts/strip-frameworks.sh | |
# This script strips all non-valid architectures from dynamic libraries in | |
# the application's `Frameworks` directory which is required for App Store submission. | |
# | |
# The following environment variables are required: | |
# | |
# BUILT_PRODUCTS_DIR | |
# FRAMEWORKS_FOLDER_PATH | |
# VALID_ARCHS | |
# EXPANDED_CODE_SIGN_IDENTITY | |
if [[ "${CONFIGURATION}" != "Release" ]]; then | |
echo "Building for non-release, no need to thin frameworks." | |
exit 0 | |
fi | |
if [[ "${TARGET_BUILD_DIR}" == *"iphonesimulator" ]]; then | |
echo "Building for simulator, no need to thin frameworks." | |
exit 0 | |
fi | |
# Signs a framework with the provided identity | |
code_sign() { | |
# Use the current code_sign_identitiy | |
echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" | |
echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements $1" | |
/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" | |
} | |
# Set working directory to product’s embedded frameworks | |
cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}" | |
if [ "$ACTION" = "install" ]; then | |
echo "Copy .bcsymbolmap files to .xcarchive" | |
find . -name '*.bcsymbolmap' -type f -exec mv {} "${CONFIGURATION_BUILD_DIR}" \; | |
else | |
# Delete *.bcsymbolmap files from framework bundle unless archiving | |
find . -name '*.bcsymbolmap' -type f -exec rm -rf "{}" +\; | |
fi | |
echo "Stripping frameworks" | |
for file in $(find . -type f -perm +111); do | |
# Skip non-dynamic libraries | |
if ! [[ "$(file "$file")" == *"dynamically linked shared library"* ]]; then | |
continue | |
fi | |
# Get architectures for current file | |
archs="$(lipo -info "${file}" | rev | cut -d ':' -f1 | rev)" | |
stripped="" | |
for arch in $archs; do | |
if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then | |
# Strip non-valid architectures in-place | |
lipo -remove "$arch" -output "$file" "$file" || exit 1 | |
stripped="$stripped $arch" | |
fi | |
done | |
if [[ "$stripped" != "" ]]; then | |
echo "Stripped $file of architectures:$stripped" | |
if [ "${CODE_SIGNING_REQUIRED}" == "YES" ]; then | |
code_sign "${file}" | |
fi | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment