上传App至App Store时遭遇ITMS-90432无效Swift支持错误
问题背景
我们在为现有App上传新版本构建包时,通过Build Phase脚本将Framework1、Framework2从构建目录复制到MyApp.app/Frameworks目录。本地构建和运行均正常,但上传至App Store时触发ITMS-90432错误,提示这些framework文件类型不符合该位置要求。已确认复制路径正确,Info.plist位置无误,当前使用的运行脚本如下。
错误提示详情
ITMS-90432: Invalid Swift Support - The file MyApp.app/Frameworks/Framework1.framework, MyApp.app/Frameworks/Framework2.framework doesn’t have the correct file type for this location. Ensure you’re using the correct file, rebuild your app using the current public (GM) version of Xcode, and resubmit it.
当前使用的运行脚本
frameworks_used_in_extensions=("Framework1" "Framework2") # Loop over the array for MODULE in "${frameworks_used_in_extensions[@]}" do export LIBRARY_SEARCH_PATHS="${LIBRARY_SEARCH_PATHS}":"${SDKROOT}/${MODULE}.framework/" cp -Rv "${BUILT_PRODUCTS_DIR}/${MODULE}.framework" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Frameworks/" CODE_SIGN_IDENTITY_FOR_ITEMS="${EXPANDED_CODE_SIGN_IDENTITY_NAME}" if [ "${CODE_SIGN_IDENTITY_FOR_ITEMS}" = "" ] ; then CODE_SIGN_IDENTITY_FOR_ITEMS="${CODE_SIGN_IDENTITY}" fi codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Frameworks/${MODULE}.framework/${MODULE}" done
解决方法
1. 确认Framework类型为动态库
检查Framework1和Framework2的项目设置:Build Settings -> Mach-O Type,确保值为Dynamic Library。静态库不能放在Frameworks目录下,应直接链接到主App,无需手动复制。
2. 修正代码签名目标路径
当前脚本仅签名Framework内部的二进制文件,而App Store要求对整个Framework目录签名。修改签名命令:
codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Frameworks/${MODULE}.framework"
3. 改用Xcode自动嵌入机制
若Framework已通过Xcode自动嵌入,手动复制会导致重复触发错误:
- 将Framework拖入主App项目
- 在
General标签的Frameworks, Libraries, and Embedded Content中,将Framework的Embed选项设为Embed & Sign - 移除脚本中的
cp复制命令
4. 验证Framework的Info.plist配置
确保Framework的Info.plist中:
CFBundlePackageType值为FMWKCFBundleShortVersionString和CFBundleVersion与主App版本兼容
5. 使用正式版Xcode重新构建
使用当前公开GM版本的Xcode(避免Beta版),清理构建缓存(Cmd+Shift+K)后重新构建上传。
内容的提问来源于stack exchange,提问作者Shreesha Kedlaya

