集成OneSignal后Flutter iOS应用CD流水线构建失败求助
问题描述
我按照OneSignal的Flutter SDK教程配置推送通知后,iOS应用在CD流水线中无法构建,报错如下:
[17:24:47]: ▸ ProcessException: Process exited abnormally with exit code -6:
[17:24:47]: ▸ Command line invocation:
[17:24:47]: ▸ /Applications/Xcode_15.4.app/Contents/Developer/usr/bin/xcodebuild -list
[17:24:47]: ▸ User defaults from command line:
[17:24:47]: ▸ IDEPackageSupportUseBuiltinSCM = YES
[17:24:47]: ▸ 2025-03-10 17:24:46.855 xcodebuild[13337:34491] [MT] DVTAssertions: ASSERTION FAILURE in DevToolsCore/Xcode3Core/LegacyProjects/Frameworks/DevToolsCore/DevToolsCore/ProjectModel/DataModel/References/SynchronizedGroups/PBXFileSystemSynchronizedAbstractGroup.m:28
[17:24:47]: ▸ Details: Assertion failed: IDEFileSystemSynchronizedGroupsAreEnabled()
[17:24:47]: ▸ Object:
[17:24:47]: ▸ Method: +allocWithZone:
[17:24:47]: ▸ Thread: <_NSMainThread: 0x60000026c200>{number = 1, name = main}
[17:24:47]: ▸ Hints:
[17:24:47]: ▸ Backtrace:
[17:24:47]: ▸ 0 -[DVTAssertionHandler handleFailureInMethod:object:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in DVTFoundation)
[17:24:47]: ▸ 1 _DVTAssertionHandler (in DVTFoundation)
[17:24:47]: ▸ 2 _DVTAssertionFailureHandler (in DVTFoundation)
[17:24:47]: ▸ 3 _DVTAssertionWarningHandler (in DVTFoundation)
我的GitHub Actions流水线配置如下:
name: iOS Build and Deploy to App Store with Custom Version on: workflow_dispatch: inputs: version: description: 'Version number' required: true default: '1.0.0' env: FLUTTER_CHANNEL: "stable" RUBY_VERSION: "3.2.2" jobs: build_ios: name: Build iOS runs-on: macos-latest timeout-minutes: 20 steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: ${{ env.RUBY_VERSION }} bundler-cache: true working-directory: 'daytistics/ios' - name: Clean up vendor working-directory: 'daytistics/ios' run: rm -rf vendor - name: Install Bundler Gems working-directory: 'daytistics/ios' run: bundle install - name: Run Flutter tasks and get pub packages uses: subosito/flutter-action@v2.16.0 with: flutter-version-file: 'daytistics/pubspec.yaml' channel: ${{ env.FLUTTER_CHANNEL }} cache: true - name: Get Flutter Packages working-directory: ./daytistics run: flutter pub get - name: Install Bundler Gems working-directory: 'daytistics/ios' run: | bundle install bundle exec pod repo update # Add this line # Remove the "Reinstall CocoaPods" step entirely - name: Pod Install working-directory: 'daytistics/ios' run: bundle exec pod install - name: Clean Flutter build working-directory: ./daytistics run: flutter clean - name: Create .env file working-directory: ./daytistics run: touch .env - uses: maierj/fastlane-action@v3.1.0 with: lane: 'release_app_store' subdirectory: daytistics/ios options: '{ "version_number": "${{ github.event.inputs.version }}", "env_vars": ["SUPABASE_URL", "SUPABASE_ANON_KEY", "POSTHOG_API_KEY", "SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID", "SENTRY_DSN"] }' env: ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }} ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }} ASC_KEY_P8_BASE64: ${{ secrets.ASC_KEY_P8_BASE64 }} MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }} APP_BUNDLE_ID: ${{ secrets.APP_BUNDLE_ID }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} SUPABASE_URL: ${{ secrets.SUPABASE_URL }} SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }} POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }} SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID: ${{ secrets.SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID }} SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
应用在本地模拟器运行正常,我怀疑问题出在Xcode的签名功能(Signing Capabilities)配置上,而非流水线本身。
可能的解决方案
1. 修复Xcode文件同步组配置
这个断言错误大概率和Xcode的FileSystem Synchronized Groups功能冲突,集成OneSignal时可能误改了项目结构:
- 打开本地iOS项目(
daytistics/ios/Runner.xcworkspace) - 在项目导航栏右键根目录,选择Add Files to "Runner"
- 弹出窗口中取消勾选Copy items if needed,确保Added folders选择Create groups而非Create folder references
- 保存项目后重新提交代码到仓库
2. 校验推送通知签名权限
针对你怀疑的签名能力问题,重点检查以下配置:
- 在Xcode中选择Runner target,进入Signing & Capabilities标签页
- 确认Push Notifications能力已添加,且对应的Provisioning Profile包含推送权限
- 检查Provisioning Profile是App Store发布类型(而非开发环境),并确保流水线中Match配置能正确拉取该Profile
3. 给Xcode命令添加同步组参数
在fastlane或xcodebuild命令中强制开启同步组功能,避免触发断言:
- 在fastlane的
release_app_storelane中,修改build_app方法:build_app( # 其他原有参数... xcargs: "IDEFileSystemSynchronizedGroupsAreEnabled=YES" ) - 如果是直接调用xcodebuild,加上参数:
-IDEFileSystemSynchronizedGroupsAreEnabled=YES
4. 降级Xcode版本(临时方案)
Xcode 15.4的这个断言错误可能是版本bug,可在流水线中指定使用Xcode 15.3:
- 在
build_iosjob中添加步骤:- name: Set Xcode 15.3 run: sudo xcode-select -s /Applications/Xcode_15.3.app/Contents/Developer
5. 重新生成iOS项目文件
如果以上方法都无效,尝试重置iOS项目文件:
- 本地执行命令:
cd daytistics flutter clean rm -rf ios flutter create --platforms ios . - 重新配置OneSignal和签名设置后,提交代码到仓库重试构建
内容的提问来源于stack exchange,提问作者Leo Gall

