Skip to content

Conversation

@marcinmajsc
Copy link
Contributor

@marcinmajsc marcinmajsc commented Dec 28, 2025

1. New option: autoSelectMatchingCertificate

  • Added a new boolean option to Options:
    • autoSelectMatchingCertificate: Bool = false
  • Included in defaultOptions (disabled by default).
  • Persisted via OptionsManager with no changes to the existing storage mechanism.

2. UI: new toggle in Signing Options

  • Added a new toggle in SigningOptionsView under the Certificate section:
    • “Auto-select Matching Certificate”
  • Added a footer description explaining that Feather will automatically select a certificate whose application-identifier exactly matches the target bundle identifier.

3. Conditional auto-selection logic in SigningView

  • Automatic certificate selection is executed only when autoSelectMatchingCertificate is enabled.
  • Matching logic:
    • First tries to match the application-identifier directly against the target bundle identifier.
    • If the identifier contains a prefix (e.g. TEAMID.com.example.app), the part after the first dot is compared with the target bundle identifier.
    • When a match is found, _temporaryCertificate is set to the index of the matching certificate.

4. PPQ Protection fix (prevent duplicated ppqString on resign)

  • Updated .onAppear logic in SigningView:
    • Uses _temporaryOptions.appIdentifier as the base if present, otherwise falls back to app.identifier.
    • Extracts and checks the last dot-separated component.
    • If the last component already equals ppqString, it is not appended again.
    • Otherwise, ".\(ppqString)" is appended once.

5. Localizations

  • Added/updated missing localization keys
  • Update Polish translation.

6. Certifications list

  • Add search to certificates list
    • Filter by name and decoded provision fields, preserve selection mapping.

7. Update icons

  • Download LocalDevVPN in TunnelView.swift
  • Compression Level in ArchiveView.swift
  • Archive & Compression and Installation in SettingsView.swift
  • Installation in SigningOptionsView.swift‎

8. Replace SF Symbols with asset images for GitHub and Discord buttons in SettingsView

  • Add required SVG assets
  • Add repository URL and license for used assets to Feather Acknowledgements

9. Other

  • Backward compatible: the new option defaults to false, and previously saved options decode correctly.
  • Auto-selection relies on provisioning data (Entitlements["application-identifier"]). Certificates without readable provisioning data are ignored during matching.
  • Improves usability when working with multiple certificates by removing the need for manual certificate selection.
  • Fixes an UX issue where PPQ Protection could repeatedly modify the app identifier across multiple view appearances.

- Connect to LocalDevVPN
- Download LocalDevVPN

Update missing PL translations.
Filter by name and decoded provision fields, preserve selection mapping.
- Download LocalDevVPN in TunnelView.swift
- Compression Level in ArchiveView.swift
- Archive & Compression and Installation in SettingsView.swift
- Installation in SigningOptionsView.swift‎
…n SettingsView

- Add required SVG assets
- Add repository URL and license for used assets to Feather Acknowledgements
When starting to sign an app, if the app’s bundle ID (or bundleID.PPQ_STRING) matches one of the imported certificates’
application-identifier, select that certificate for this signing session.

If no match is found, keep the existing behavior and use the default certificate previously chosen in Settings.
…ate ppqString

- Options: introduce autoSelectMatchingCertificate.
- SigningOptionsView: add “Auto-select Matching Certificate” toggle.
- SigningView:
  * Gate auto-select certificate logic behind the new option.
  * Update ppq protection to avoid appending ppqString if the last bundle ID segment already equals ppqString.
@khcrysalis
Copy link
Owner

was this written by ai

@marcinmajsc
Copy link
Contributor Author

was this written by ai

Yes but only ~half description in pull request 😆

I expected this comment, so I split the changes into several commits 🤣
You could easily implement only the parts you consider correct 🙂

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants