Skip to content

Remove target-level automatic signing from Extensions-WatchWidgets#5033

Merged
bgoncal merged 1 commit into
mainfrom
fix/watchwidgets-automatic-signing
Jul 10, 2026
Merged

Remove target-level automatic signing from Extensions-WatchWidgets#5033
bgoncal merged 1 commit into
mainfrom
fix/watchwidgets-automatic-signing

Conversation

@bgoncal

@bgoncal bgoncal commented Jul 10, 2026

Copy link
Copy Markdown
Member

Summary

Follow-up to #5032. Committing the provisioning profile was necessary but not sufficient: the Distribute workflow's App-Release archive still fails with the same error (latest failing run):

Extensions-WatchWidgets has conflicting provisioning settings. Extensions-WatchWidgets is automatically signed, but provisioning profile iOS App Store - Extensions-WatchWidgets has been manually specified.

Extensions-WatchWidgets (added in #5027) was created via the Xcode new-target wizard, which hard-coded CODE_SIGN_STYLE = Automatic into its Debug and Release build configs. Every other shipping target (App, WatchApp, all Extensions-*) leaves CODE_SIGN_STYLE unset at the target level and inherits it from the xcconfigs:

  • Configuration/HomeAssistant.xcconfigAutomatic for Debug
  • Configuration/HomeAssistant.release.xcconfigManual for the archive, plus PROVISIONING_PROFILE_SPECIFIER[sdk=watchos*] = iOS App Store - $(TARGET_NAME)

The target-level Automatic overrode the xcconfig's Manual while the manual profile specifier was still inherited. xcodebuild rejects that combination at signing-settings resolution — before the profile is even used — which is why adding the profile in #5032 didn't clear it.

Removing the two lines lets WatchWidgets resolve signing exactly like WatchApp: Manual + the iOS App Store - Extensions-WatchWidgets profile for the release archive, Automatic for local Debug builds.

Changes

  • Remove target-level CODE_SIGN_STYLE = Automatic from Extensions-WatchWidgets (Debug + Release).

🤖 Generated with Claude Code

Adding the provisioning profile was necessary but not sufficient: the
App-Release archive still fails with

  Extensions-WatchWidgets has conflicting provisioning settings.
  Extensions-WatchWidgets is automatically signed, but provisioning profile
  iOS App Store - Extensions-WatchWidgets has been manually specified.

The target was created via the Xcode new-target wizard, which hard-coded
CODE_SIGN_STYLE = Automatic into its Debug and Release build configs. Every
other shipping target leaves it unset and inherits from the xcconfigs
(Automatic for Debug, Manual for the App-Release archive, which also sets
PROVISIONING_PROFILE_SPECIFIER[sdk=watchos*] = iOS App Store - $(TARGET_NAME)).

The target-level Automatic overrides the xcconfig's Manual while the manual
specifier is still inherited, and xcodebuild rejects that combination at
signing-settings resolution, before the profile is even used. Removing the
two lines lets WatchWidgets sign exactly like WatchApp and the other
extensions.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 10, 2026 09:51
@bgoncal bgoncal merged commit 508504c into main Jul 10, 2026
12 checks passed
@bgoncal bgoncal deleted the fix/watchwidgets-automatic-signing branch July 10, 2026 09:52

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a CI archive failure for the Extensions-WatchWidgets target by removing a target-level signing override so code signing settings can correctly inherit from the shared xcconfig configuration (Automatic for Debug, Manual + provisioning profile for release archives).

Changes:

  • Removed CODE_SIGN_STYLE = Automatic from the Extensions-WatchWidgets target’s Debug build settings.
  • Removed CODE_SIGN_STYLE = Automatic from the Extensions-WatchWidgets target’s Release build settings.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Unused L10n strings detected

Found 3 unused localization strings in the codebase.

Click to see details
Parsing Strings.swift...
Found 1907 L10n strings

Reading all Swift source code...
Read 6428956 characters of Swift code

Checking for unused strings...
Checked 100/1907 strings...
Checked 200/1907 strings...
Checked 300/1907 strings...
Checked 400/1907 strings...
Checked 500/1907 strings...
Checked 600/1907 strings...
Checked 700/1907 strings...
Checked 800/1907 strings...
Checked 900/1907 strings...
Checked 1000/1907 strings...
Checked 1100/1907 strings...
Checked 1200/1907 strings...
Checked 1300/1907 strings...
Checked 1400/1907 strings...
Checked 1500/1907 strings...
Checked 1600/1907 strings...
Checked 1700/1907 strings...
Checked 1800/1907 strings...
Checked 1900/1907 strings...

================================================================================
UNUSED STRINGS REPORT
================================================================================

Found 3 unused strings:


CAMERAPLAYER:
  - L10n.CameraPlayer.Talkback.microphoneDenied
    Key: camera_player.talkback.microphone_denied
    Line: 820

CONNECTION:
  - L10n.Connection.Permission.InternalUrl.body1
    Key: connection.permission.internal_url.body1
    Line: 1370
  - L10n.Connection.Permission.InternalUrl.body2
    Key: connection.permission.internal_url.body2
    Line: 1372

================================================================================
Total unused: 3
================================================================================

================================================================================
Copy-paste these keys into the "Lokalise: Delete Keys" workflow (keys input):
================================================================================
camera_player.talkback.microphone_denied,connection.permission.internal_url.body1,connection.permission.internal_url.body2

To remove them, run the
Lokalise: Delete Keys
workflow — it deletes the keys from Lokalise and opens a PR removing them from
Localizable.strings and regenerating Strings.swift. Copy-paste these keys into the keys input:

camera_player.talkback.microphone_denied,connection.permission.internal_url.body1,connection.permission.internal_url.body2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants