- Quick Sign Pro: reusable signing presets with optional per-app rules and Quick Sign & Install.
- IPA Inspector: native bundle metadata, executable structure, frameworks, extensions, compatibility notices, and report sharing.
- Tweak Studio: save and reuse selections of actual locally stored tweaks.
- Signing Center: real signing operation outcomes and safe retry navigation.
- ShrubLibrary Ultra: saved apps, available-version comparisons across loaded repositories, and saved-app update notices after manual refresh.
- Certificate Lab: readable provisioning compatibility and expiration checks.
- Signing Queue: safe stop-after-current control for bulk signing.
- ShrubCerts: certificate-store shortcut in Settings and Home (
https://shrubcerts.pages.dev).
Note: ShrubSign does not guarantee signing or install success for every IPA/certificate. The app remains based on the upstream open-source project and retains applicable license notices.
Signing is easy with ShrubSign.
ShrubSign is ShrubHub's iOS IPA signing and app-management project, based on Ksign and the upstream Feather work it builds upon.
This release focuses on making the app feel dependable rather than simply adding more features:
- Signing reliability: duplicate tweak-injection passes were removed and signing errors are now surfaced before a broken result is saved to the library.
- Tweak & dylib injection: dylib/framework injection validates the Mach-O injection result, reports useful failures, avoids duplicate injected names, and cleans temporary extraction data.
- Repository stability: opening one saved repository now fetches only that repository instead of refreshing every source, and the UIKit app table has bounds checks to avoid stale-index crashes while data changes.
- ShrubLibrary persistence: previously cached ShrubLibrary repositories are restored incrementally without re-downloading every source on every launch; network refresh remains user-controlled.
- Installation reliability: install progress no longer polls every millisecond, missing bundle identifiers and malformed install links are handled as errors instead of force-unwrapped crashes, and server-start failures are surfaced in the install UI.
- Certificates: certificate details now show profile UUID, creation and expiration dates, team ID, application identifier, TTL, profile type, provisioned-device count, and accurate local-status wording.
- UI polish: the Home dashboard and catalog loading states are cleaner, long text is handled more safely, and the app uses the ShrubSign motto consistently.
- Release history: GitHub Actions publishes a new uniquely tagged release for each successful build instead of deleting the previous release, so older IPA assets remain available.
Clone recursively, then build with Xcode or run:
makeThe makefile creates packages/ShrubSign.ipa and validates the IPA archive structure before release.
ShrubSign is based on Ksign by Nyasami/Nagata Asami and contributors. Ksign itself includes or derives work from Feather and other open-source projects; their notices and acknowledgements are retained.
Upstream Ksign: https://github.com/nyasami/Ksign
ShrubSign retains the upstream licensing requirements. See LICENSE, LICENSE_ELLEKIT, bundled acknowledgements, and dependency licenses. Fork branding does not remove or replace upstream copyright or license notices.
Build using GitHub Actions on macOS/Xcode. Source parsing on Linux does not guarantee SwiftUI type checking or successful device operation.
- Verify app starts in light/dark appearance, portrait/landscape and iPad split view.
- Settings → ShrubCerts opens https://shrubcerts.pages.dev and does not disclose local certificates.
- Import a known-good IPA, inspect it, verify actual executable, framework and extension counts.
- Save a signing preset, configure a per-app rule and sign using Quick Sign. Verify actual signed IPA is created.
- With two imported IPAs, batch sign and use Stop queue after current IPA; verify the first completes and the next does not start.
- Open Signing Center: completed and failed operations show status and error reason. Reopen app and confirm history persists.
- Save multiple tweak files, create a Tweak Studio profile, deselect and apply it; verify same saved files are restored.
- Refresh ShrubLibrary, save a listing, compare same app across sources, close/reopen app and check favorites persist.
- Refresh later after source version changes; verify What's New notices appear only for tracked saved apps.
- Verify the existing installation methods with a known-good certificate and supported app. Quick Sign & Install must target the signed app, not an unrelated latest entry.
- Verify older releases remain published; IPA has real Payload folder, Info.plist and executable.
- Test large IPAs with adequate free space. Inspect signing failures, compare timings and ensure no expired certificate is silently selected.
Do not publish a stable release until all applicable checks pass on actual hardware.