A native macOS app for re-signing iOS IPA files
Re-sign iOS IPA files with your own provisioning profiles and certificates —
directly from your Mac. No Terminal. No scripts. Just drag, drop, and sign.
- 🖱️ Drag & Drop — Drop your
.ipaand.mobileprovisiondirectly onto the app - 🔑 Keychain Integration — Auto-detects all valid signing identities from your Keychain
- 📋 Step-by-step Progress — Live indicator for each stage of the signing pipeline
- 🗂️ Smart File Management — Writes to
NSTemporaryDirectory, moves output viaFileManager(fully sandbox-safe) - 📂 Show in Finder — Jump straight to the resigned IPA after completion
- ⚡ Native Swift — Built with
async/await,PropertyListSerialization, and SwiftUI — zero shell hacks - 🔒 Sandbox-safe — No blocked subprocess calls; fully compliant with macOS security model
| Requirement | Version |
|---|---|
| macOS | 14.0 (Sonoma) or later |
| Xcode | 15.0 or later |
| Swift | 5.9 or later |
| Apple Developer Account | Required for signing identities |
Build from source (recommended)
# Clone the repository
git clone https://github.com/spraveenk91/iResignX.git
# Open in Xcode
cd iResignX
open iResignX.xcodeprojThen press ⌘ + R to build and run.
1. Select your IPA file
Click Browse or drag your .ipa file onto the IPA row.
2. Select your Provisioning Profile
Click Browse or drag your .mobileprovision file onto the profile row.
3. Choose a Signing Identity
iResignX automatically reads all valid iPhone Distribution and Apple Distribution certificates from your Keychain. Pick the one you want to use from the dropdown.
4. Click "Resign IPA" Watch the step-by-step progress:
✓ Unpacking IPA
✓ Extracting entitlements
✓ Preparing bundle
⟳ Signing…
○ Repacking IPA
5. Save & Reveal A save dialog appears for you to choose the output location. Once done, click Show in Finder to jump straight to the resigned file.
iResignX/
├── ContentView.swift # SwiftUI UI — drag & drop, identity picker, progress steps
├── IPAResigner.swift # Core resign logic — async/await pipeline
└── Assets.xcassets/ # App icons and assets
IPA file
│
▼
Unzip → NSTemporaryDirectory (FileManager, sandbox-safe)
│
▼
Locate .app bundle inside Payload/
│
▼
Read Info.plist (PropertyListSerialization — no PlistBuddy)
│
▼
Extract entitlements (raw CMS byte scan — no `security cms` subprocess)
│
▼
Replace _CodeSignature + embedded.mobileprovision
│
▼
Re-sign Frameworks/ + PlugIns/ + .app (/usr/bin/codesign)
│
▼
Zip to temp → FileManager.moveItem to save location
│
▼
Cleanup temp dir
| Problem | Solution |
|---|---|
PlistBuddy blocked by sandbox |
PropertyListSerialization — native Swift, no subprocess |
security cms -D blocked |
Raw byte scan for <?xml in .mobileprovision binary |
zip subprocess can't write to user-chosen path |
Zip to NSTemporaryDirectory, then FileManager.moveItem |
NSSavePanel must run on main thread |
@MainActor on promptSaveLocation |
Thread-unsafe changeCurrentDirectoryPath |
Process.currentDirectoryURL per-process |
iResignX requires the following entitlements:
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>No special entitlements beyond standard file access are needed.
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch
git checkout -b feature/your-feature-name
- Commit your changes
git commit -m "feat: add your feature description" - Push to your branch
git push origin feature/your-feature-name
- Open a Pull Request
- Bundle ID override before resigning
- App name and icon preview from the IPA
- Resign history / log
- Support for
.xcarchiveinput - Batch resign multiple IPAs at once
- Dark / light mode toggle
Please open an issue before starting work on a major feature so we can discuss the approach.
"No valid signing identities found"
Make sure you have a valid
iPhone DistributionorApple Distributioncertificate installed in your Keychain. Open Keychain Access → search for "iPhone Distribution" to verify.
"Operation not permitted" during unzip
The source IPA may be in a restricted location. Move it to your Desktop or Downloads folder and try again.
Codesign fails with "no identity found"
Your certificate may be expired. Check the validity in Xcode → Settings → Accounts.
"Couldn't be moved" when saving
Make sure the destination folder exists and you have write permissions to it.
This project is licensed under the MIT License — see the LICENSE file for details.
MIT License — Copyright (c) 2025 Praveenkumar S
Praveenkumar S
If iResignX saved you time, consider giving it a star — it helps other developers find it!



