问题
The project is in Objective-C and we recently added some swift files into it. It is a white label application and builds are generated from the server.
When I submit the build to appstore it gave error :-
ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it.
When I debugged the issue I find out the build generated from automation is now having SwiftSupport in IPA while when I generate the build from my system is does have the IPA
I cannot post the whole script here because it does have important information and I'm not allowed to share it but here a little snippet with some predefined variables :-
function xc_package
{
echo "Building scheme \"$3\" => $1"
# Calculated paths
APP_IPA="$1/$APPNAME.ipa"
APP_APP="$1/$APPNAME.app"
APP_DSYM="$1/$APPNAME.app.dSYM"
APP_DSYM_ZIP="$1/$APPNAME.dSYM.zip"
PROFILE="$4"
UUID=`uuid_from_profile "$PROFILE"`
[ -n "$UUID" ] || failed "Failed - missing provisioning profile UUID"
echo "Building with Provisioning Profile $UUID (${PROFILE})"
# Unlock keychain
echo "Unlocking keychain..."
security unlock-keychain -p "$BUILD_KEYCHAIN_PW" "${HOME}/Library/Keychains/login.keychain" || failed "Failed unlocking keychain"
# xcodebuild
XCODE_VERSION=`xcodebuild -version`
XCODE_PATH=`xcode-select -p`
echo "Building with $XCODE_VERSION in $XCODE_PATH profile : $UUID"
export LC_CTYPE=en_US.UTF-8
echo "xcodebuild -> -scheme $3 -> clean build -> CONFIGURATION_BUILD_DIR -> $1 PROVISIONING_PROFILE_SPECIFIER -> $UUID CODE_SIGN_IDENTITY -> $5"
#-workspace "Motto_Mobile_New.xcworkspace" \
#-configuration Release
xcodebuild \
-scheme "$3" \
-configuration Release \
clean build \
CONFIGURATION_BUILD_DIR="$1" \
PROVISIONING_PROFILE_SPECIFIER="$UUID" \
CODE_SIGN_IDENTITY="$5" | xcpretty || failed "Failed building"
# Package IPA
echo "Packaging IPA..."
xcrun -sdk iphoneos \
PackageApplication "$APP_APP" \
-o "$APP_IPA" \
--embed "$PROFILE" || failed "Failed packaging"
# Zip dSYM
echo "Zipping .dSYM..."
zip -qr "$APP_DSYM_ZIP" "$APP_DSYM"
echo "Generating Symbols and repackaging IPA..."
SYMBOLS="$(xcode-select -p)/usr/bin/symbols"
IPA_DIR="$1/IPA_TMP"
rm -R "$IPA_DIR"
unzip -q "$APP_IPA" -d "$IPA_DIR"
mkdir -p "$IPA_DIR/Symbols"
echo "$BUILD_KEYCHAIN_PW" | sudo -S $SYMBOLS -noTextInSOD -noDaemon -arch all \
-symbolsPackageDir "$IPA_DIR/Symbols" \
"${IPA_DIR}/Payload/${APPNAME}.app/$APPNAME"
cd "$IPA_DIR" && zip -qr "$APP_IPA" .
}
This function has been called with these parameters
xc_package \
"$current_path/build" \
"'preprocess_defines'" \
"Motto_Mobile_New" \
"$profile_fullpath" \
"$certificate_name"
cd ${current_path}
cp "build/${APPNAME}.ipa" "build/${file_name}.ipa"
cp "build/${file_name}.ipa" "/$resourceDirPath/${file_name}.ipa"
回答1:
After your PackageApplication
step, you should have an .xcarchive
and an .ipa
. I can't be sure why you don't have a SwiftSupport
folder in your original .ipa
(in my case it was because it was exported for enterprise
distribution), but you should be able to just copy the SwiftSupport
folder from the .xcarchive
into your unzipped .ipa
, right after the unzip
step:
unzip -q "$APP_IPA" -d "$IPA_DIR"
# Copies the SwiftSupport folder from the .xcarchive into the .ipa
mkdir -p "${IPA_DIR}/SwiftSupport/iphoneos"
cd "${archivePath}/SwiftSupport/iphoneos"
for file in *.dylib; do
cp "$file" "${IPA_DIR}/SwiftSupport/iphoneos"
done
You can also create the SwiftSupport
folder using the Xcode toolchain like this:
# Creates the SwiftSupport folder from the Xcode toolchain and copies it into the .ipa
mkdir -p "${IPA_DIR}/SwiftSupport/iphoneos"
cd "${IPA_DIR}/Payload/${appName}.app/Frameworks"
for file in *.dylib; do
cp "${toolchainPath}/${file}" "${IPA_DIR}/SwiftSupport/iphoneos"
done
This looks in the .app/Frameworks
folder to see which .dylib
files should be in the SwiftSupport
folder.
For Xcode 11, this should be the toolchain path:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos
来源:https://stackoverflow.com/questions/62635971/swiftsupport-folder-not-included-in-the-ipa-when-generating-build-from-script