when I try to upload a new version of one of our apps to the apple store for developers
I receive a validation error
can you provide the DWARF file as listed?
when I try to upload a new version of one of our apps to the apple store for developers
I receive a validation error
can you provide the DWARF file as listed?
turns out this is an XCODE build problem, you can change to the legacy build type
and this issue goes away
in Xcode,
File, workspace settings
advanced
legacy
this doesn’t work in IOS 17 and up.
unable to install, signing profile problem
The error stating that it contains bitcode is due to App Store policies that have deprecated the use of bitcode and now require apps not to include it. This is problematic if you use libraries that have not been updated to meet this requirement, as seems to be the case.
However, it is possible to remove the bitcode, even after compiling the final app, as you seem to have managed to do. The problem is that touching compilations breaks their signatures, so you have to re-sign them.
I found myself in the same situation with another library and created a script that does it automatically. You must have your App Store Connect certificate installed in your keychain and the provisioning file. You doesn’t need to do anything more (if it is the only problem). Here is the sh code:
#!/bin/bash
set -e
if [ $# -ne 4 ]; then
echo “Uso: $0 <archivo_ipa> <nombre_app_sin_extension> <certificado_distribucion> <perfil_aprovisionamiento>”
exit 1
fi
IPA_FILE=“$1”
APP_NAME=“$2”
DISTRIBUTION_CERT=“$3”
PROVISIONING_PROFILE=“$4”
TEMP_DIR=“temp_ipa_dir”
ENTITLEMENTS_FILE=“entitlements.plist”
echo “Descomprimiendo IPA…”
rm -rf “$TEMP_DIR”
mkdir -p “$TEMP_DIR”
unzip -q “$IPA_FILE” -d “$TEMP_DIR”
APP_PATH=$(find “$TEMP_DIR/Payload” -maxdepth 1 -name “*.app” -print | head -n 1)
if [ -z “$APP_PATH” ]; then
echo “Error: No se pudo encontrar el archivo .app en el IPA”
exit 1
fi
ACTUAL_APP_NAME=$(basename “$APP_PATH”)
echo “Nombre real de la app: $ACTUAL_APP_NAME”
echo “Verificando Bundle ID…”
BUNDLE_ID=$(/usr/libexec/PlistBuddy -c “Print :CFBundleIdentifier” “$APP_PATH/Info.plist”)
echo “Bundle ID: $BUNDLE_ID”
echo “Extrayendo entitlements del perfil de aprovisionamiento…”
security cms -D -i “$PROVISIONING_PROFILE” > “$TEMP_DIR/profile.plist”
/usr/libexec/PlistBuddy -x -c ‘Print :Entitlements’ “$TEMP_DIR/profile.plist” > “$TEMP_DIR/$ENTITLEMENTS_FILE”
echo “Entitlements extraídos:”
cat “$TEMP_DIR/$ENTITLEMENTS_FILE”
echo “Eliminando bitcode de los frameworks…”
find “$APP_PATH/Frameworks” -name ‘*.framework’ -type d | while read framework
do
framework_binary=$(basename “$framework” .framework)
echo “Eliminando bitcode de $framework_binary”
xcrun bitcode_strip “$framework/$framework_binary” -r -o “$framework/$framework_binary”
done
echo “Firmando frameworks…”
find “$APP_PATH/Frameworks” -name ‘*.framework’ -type d | while read framework
do
framework_name=$(basename “$framework” .framework)
echo “Firmando: $framework_name”
codesign --force --sign “$DISTRIBUTION_CERT” “$framework/$framework_name”
done
echo “Copiando perfil de aprovisionamiento…”
cp “$PROVISIONING_PROFILE” “$APP_PATH/embedded.mobileprovision”
echo “Firmando la aplicación principal…”
codesign --force --sign “$DISTRIBUTION_CERT” --entitlements “$TEMP_DIR/$ENTITLEMENTS_FILE” “$APP_PATH”
echo “Creando nuevo IPA…”
cd “$TEMP_DIR”
zip -qr “../${IPA_FILE%.*}_signed.ipa” Payload
echo “Limpiando archivos temporales…”
cd ..
rm -rf “$TEMP_DIR”
echo “Proceso completado. Nuevo IPA firmado: ${IPA_FILE%.*}_signed.ipa”
Thanks. Remove Bitcode?
but that’s the function of the library the app depends on
Or is this some repackaging that removes the separate package identity?
When you touch the package the signing broke, so you need to sign it again. The script just remove the bitcode, sign it again and package all on a new ipa file. It doesn’t touch any functionality of any library.