This article explains why iOS builds using Unity Build Automation (UBA) started failing with Xcode 26 due to strict code-signing enforcement on Swift Package Manager (SPM) dependencies such as Firebase, GoogleUtilities, and nanopb. Xcode now requires a Development Team for every target, including SPM-generated bundles. The resolution is to disable strict code signing for these third-party targets via a custom Fastlane Gymfile and configuration JSON, while leaving app signing intact, enabling successful builds and subsequent deployment.
Symptoms
- iOS builds in UBA suddenly start failing on Xcode 26.2.0 and 26.0.1.
- Xcode logs show errors like:
- Signing for "GoogleUtilities_GoogleUtilities-Reachability" requires a development team.
- Signing for "GoogleUtilities_GoogleUtilities-Logger" requires a development team.
- Signing for "GoogleUtilities_GoogleUtilities-Environment" requires a development team.
- Signing for "GoogleUtilities_GoogleUtilities-UserDefaults" requires a development team.
- Signing for "nanopb_nanopb" requires a development team.
- The issue cannot be reproduced on a local machine.
- Project uses Firebase and other common third‑party SPM dependencies.
-
Apple provisioning and distribution certificates appear correctly configured in UBA.
Causes
Recent Xcode and Swift Package Manager (SPM) changes tightened code-signing requirements. Xcode now strictly enforces that every target in an archive, including SPM-generated resource bundles and wrapper targets for dependencies like Firebase, GoogleUtilities, and nanopb, must have a valid Development Team assigned. On UBA’s shared build machines, these third‑party SPM targets lack an assigned team, causing signing to fail. UBA cannot globally disable signing by default because it would break scenarios that rely on proper signing for app extensions and other targets.
Resolution
Follow these steps to resolve the issue by applying global xcargs via a custom Fastlane configuration. This will disable strict code signing for problematic Swift Package Manager (SPM) targets while keeping your main app target correctly signed.
1. Create a Gymfile
First, you need to create a file to pass global Xcode arguments (xcargs).
In your Unity project, create a new file named
Gymfile(ensure it has no file extension). A recommended location is:Assets/uba/Gymfile-
Add the following line to the file to disable strict code signing:
xcargs("CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO") Commit this file to your version control system.
2. Create a Fastlane Configuration JSON
Next, map your new Gymfile using a JSON configuration file.
In the same Unity project, create a JSON file. A recommended location is:
Assets/uba/fastlane_config.json-
Add the following content to map the path to your
Gymfile:{ "gymfile": "Assets/uba/Gymfile" }Note: Ensure the path provided exactly matches the actual location of the
Gymfileyou created in Step 1. Commit this JSON file to your version control system.
3. Configure Unity Build Automation (UBA)
Update your UBA settings to utilize the custom Fastlane configuration.
Open the Unity Dashboard and navigate to your project.
Go to DevOps > Build Automation > Configurations.
Select your relevant iOS build target and click Edit.
Open the Advanced Settings tab.
Scroll down to Platform-specific settings (iOS) and locate the Custom Fastlane Configuration Path field.
Enter the relative path to your JSON file. For example:
Assets/uba/fastlane_config.jsonClick Save to apply the changes.
4. Trigger a Clean Build
Start a new clean iOS build in Unity Build Automation.
The build should now complete successfully, as Xcode will bypass signing enforcement on the SPM wrapper targets.
More Information
For more information about configuring Fastlane settings for iOS builds to control build behavior, please review this article.