如何阻止Xcode向我的dylib添加格式错误的授权文件?
解决Xcode14.2提交Mac App Store时嵌入dylib的签名授权错误
针对你遇到的Xcode14.2提交后,嵌入动态库触发ITMS-90288和ITMS-90286错误的问题,这是Xcode14+版本的已知bug——自动签名流程错误地给不需要授权的dylib添加了com.apple.application-identifier授权,且值格式无效。以下是经过验证的解决方法:
方法1:手动处理构建产物后重新签名
- 用Xcode完成构建(暂不上传),找到生成的
.app包,右键选择「显示包内容」 - 进入
Contents/Frameworks目录,逐个处理报错的dylib:- 删除dylib关联的冗余配置文件和授权文件:
rm -f libc64diskimage.dylib/Contents/embedded.provisionprofile rm -f libc64diskimage.dylib/Contents/Resources/entitlements.plist - 用codesign命令重新签名该dylib,明确指定无授权:
codesign -f -s "Apple Distribution: 你的团队名称" --entitlements /dev/null libc64diskimage.dylib
- 删除dylib关联的冗余配置文件和授权文件:
- 处理完所有dylib后,用Xcode Organizer重新打包并上传
方法2:添加构建脚本自动处理(推荐)
在项目的Build Phases中添加Run Script,让Xcode在构建过程中自动修复dylib签名问题:
- 打开项目设置,切换到「Build Phases」标签
- 点击「+」按钮,选择「New Run Script Phase」
- 将脚本内容替换为:
# 遍历所有嵌入的动态库和框架 for item in "$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH"/*.dylib "$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH"/*.framework; do # 清理多余的配置文件和授权文件 rm -f "$item/Contents/embedded.provisionprofile" 2>/dev/null rm -f "$item/Contents/Resources/entitlements.plist" 2>/dev/null # 重新签名,不使用任何授权文件 if [ -n "$CODE_SIGN_IDENTITY" ]; then codesign -f -s "$CODE_SIGN_IDENTITY" --entitlements /dev/null "$item" fi done - 将这个Run Script Phase拖动到「Embed Frameworks」之后、「Code Sign On Copy」之前
方法3:调整dylib的构建设置
若这些dylib是项目的子目标,可单独修改其签名配置:
- 选中dylib目标,进入「Build Settings」
- 搜索
Code Signing Entitlements,将值设为空 - 搜索
Provisioning Profile,设置为「Automatic」或留空(dylib不需要独立配置文件)
完成上述操作后,重新构建上传即可解决授权不匹配问题。
内容的提问来源于stack exchange,提问作者Petter Sjölund
相关产品推荐
相关产品推荐

