SwiftLintBuildToolPlugin归档报错:缺少Bundle Identifier求助
问题分析与解决方案
问题根源
CI流水线执行归档时,你手动指定的签名配置(如CODE_SIGN_STYLE=Manual、PROVISIONING_PROFILE_SPECIFIER等)会被xcodebuild传递给所有依赖的SPM包目标,包括SwiftLintBuildToolPlugin。而SwiftLint的Build Tool Plugin本身不需要代码签名,也没有预配置PRODUCT_BUNDLE_IDENTIFIER,因此触发了缺失bundle ID的错误。
本地Xcode归档正常的原因是:Xcode会自动对Build Tool Plugin这类特殊目标豁免签名检查,不会将主项目的签名规则应用到插件上,但命令行模式下的xcodebuild默认会传递所有签名参数到所有目标。
解决方案
在归档脚本中,针对SwiftLintBuildToolPlugin目标单独设置签名豁免,添加SwiftLintBuildToolPlugin_CODE_SIGNING_REQUIRED=NO参数即可。
修改后的归档脚本如下:
set -o pipefail && xcodebuild \ -project "$IOS_PROJECT_NAME.xcodeproj" \ -scheme "$IOS_SCHEME" \ -destination 'generic/platform=iOS' \ -skipPackagePluginValidation \ -skipMacroValidation \ -configuration Release \ -archivePath "build/$IOS_SCHEME.xcarchive" \ clean archive \ CODE_SIGN_STYLE=Manual \ "PROVISIONING_PROFILE_SPECIFIER=$IOS_PROFILE_SPECIFIER" \ "DEVELOPMENT_TEAM=$IOS_TEAM_ID" \ "CODE_SIGN_IDENTITY=$IOS_CODE_SIGN_IDENTITY" \ SwiftLintBuildToolPlugin_CODE_SIGNING_REQUIRED=NO
补充说明
如果上述方法仍有问题,可以尝试添加SwiftLintBuildToolPlugin_PRODUCT_BUNDLE_IDENTIFIER="com.yourteam.SwiftLintPlugin"临时指定一个bundle ID(不需要对应实际的配置文件),配合签名豁免参数一起使用,确保插件目标能通过签名检查。
内容的提问来源于stack exchange,提问作者netshark1000
相关产品推荐
相关产品推荐

