Last active
August 26, 2023 20:51
-
-
Save 0xstragner/d1537ba5357af1dab57832f80c0cd1fd to your computer and use it in GitHub Desktop.
An example of an iOS application's content switching
This file contains hidden or 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
#!/bin/sh | |
WORKING_DIRECTORY="${PWD}/.motch" | |
BUILDED_IPA_PATH="${TARGET_IPA_PATH}" | |
EMBEDDED_IPA_PATH="${PWD}/Artifacts/Embedded.ipa" | |
EMBEDDED_CONTENTS_PATH="${WORKING_DIRECTORY}/embedded" | |
rm -rf "${WORKING_DIRECTORY}" || true | |
mkdir -p "${WORKING_DIRECTORY}" || true | |
mkdir -p "${EMBEDDED_CONTENTS_PATH}" || true | |
# Extract embedded .ipa to temporary directory | |
unzip -oqq $EMBEDDED_IPA_PATH -d "${EMBEDDED_CONTENTS_PATH}" | |
# Switch our builded binary to embedded binary | |
EMBEDDED_APP_PATH=$(set -- "${EMBEDDED_CONTENTS_PATH}/Payload/"*.app; echo "$1") | |
EMBEDDED_BINARY_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleExecutable" "${EMBEDDED_APP_PATH}/Info.plist") | |
BUILDED_APP_PATH="${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app" | |
BUILDED_BINARY_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleExecutable" "${BUILDED_APP_PATH}/Info.plist") | |
echo "Builded .ipa binary name is '${BUILDED_BINARY_NAME}'" | |
echo "Embedded .ipa binary name is '${EMBEDDED_BINARY_NAME}'" | |
rm -rf $BUILDED_APP_PATH | |
mv $EMBEDDED_APP_PATH $BUILDED_APP_PATH | |
TARGET_APP_PATH="${BUILDED_APP_PATH}" | |
TARGET_BINARY_PATH="${BUILDED_APP_PATH}/${BUILDED_BINARY_NAME}" | |
#mv "${BUILDED_APP_PATH}/${EMBEDDED_BINARY_NAME}" $TARGET_BINARY_PATH | |
# Inject Assembly.framework into binary | |
ASSEMBLY_FRAMEWORK_PATH="${TARGET_BUILD_DIR}/PackageFrameworks/Assembly.framework" | |
cp -r $ASSEMBLY_FRAMEWORK_PATH "${TARGET_APP_PATH}/Frameworks/Assembly.framework" | |
OPTOOL="Scripts/optool" | |
"$OPTOOL" install -c load -p "@rpath/Frameworks/Assembly.framework/Assembly" -t $TARGET_BINARY_PATH | |
chmod +x "${TARGET_BINARY_PATH}" | |
# Update Info.plist | |
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier ${PRODUCT_BUNDLE_IDENTIFIER}" "${TARGET_APP_PATH}/Info.plist" | |
/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName Motch" "${TARGET_APP_PATH}/Info.plist" | |
# Remove code signature & extensions | |
rm -rf "${TARGET_APP_PATH}/PlugIns" || true | |
rm -rf "${TARGET_APP_PATH}/_CodeSignature" || true | |
# Code signing | |
for FRAMEWORK_PATH in $TARGET_APP_PATH/Frameworks/*.framework; do | |
echo "Code signing '${FRAMEWORK_PATH}'.." | |
/usr/bin/codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" "${FRAMEWORK_PATH}"* | |
done | |
echo "Code signing '${TARGET_APP_PATH}'.." | |
/usr/bin/codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --timestamp=none "$TARGET_APP_PATH" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment