Simple and powerful iOS IPA signing tool with graphical interface
IPASIGN is a modern Qt6-based application that simplifies iOS IPA file signing using the reliable zsign backend. Perfect for developers, testers, and anyone who needs to sign iOS applications quickly and efficiently.
- π₯οΈ Modern Qt6 GUI - Clean and intuitive graphical interface
- β‘ zsign Integration - Powered by the robust zsign signing engine
- π¦ Simple Workflow - Just select IPA, certificate, and profile
- βοΈ App Store Connect Mode - Uses a Fastlane API-key JSON file to prepare a certificate and profile without revoking existing certificates
- πͺͺ Automatic Bundle ID Flow - Reads the identifier from the IPA, proposes a team-owned signing identifier, and registers it when needed
- π±οΈ Drag and Drop - Accepts IPA files, Fastlane API-key JSON files, and a Fastfile with an adjacent
api_key.json - π Safe Process Execution - Paths are passed without shell interpolation and passwords are never logged
- β Verified Output - A signing run succeeds only when zsign creates a non-empty IPA
- π± Device Management - Built-in iOS device detection and management
- π§° Automatic Tool Setup - Detects, installs, or repairs libimobiledevice, ideviceinstaller, zsign, and Fastlane from the in-app status card
β οΈ Smart Warnings - Conflict detection with helpful user guidance- πͺ΅ Resizable Detailed Logging - Drag the standard corner grip at the lower-right of the log to expand it while the form stays fixed
- macOS (Intel or Apple Silicon)
- Qt 6.8+ development framework
- Xcode Command Line Tools
- Homebrew (for dependency management)
-
Clone the repository:
git clone https://github.com/yourusername/IPASIGN.git cd IPASIGN -
Install dependencies:
# Install Qt6 brew install qtbase cmake ninja libimobiledevice ideviceinstaller fastlane # Install zsign separately, then place the verified binary on PATH
-
Build the application:
cmake --preset release -DCMAKE_PREFIX_PATH="$(brew --prefix qtbase)" cmake --build --preset release --parallel
Local files: Select an existing P12/PFX, its password, and a matching mobileprovision file.
App Store Connect: Select an IPA and a Fastlane API-key JSON file. IPASIGN reads the IPA's Bundle ID, proposes a team-owned signing identifier when the source belongs to another developer, and creates the identifier when it is missing. Choose Development, Ad Hoc, or App Store and click Sertifika ve Profili HazΔ±rla. The generated P12 and profile are stored under the user's application-data directory and selected automatically. Existing certificates are not revoked. Development and Ad Hoc profiles require registered devices.
- Launch IPASIGN
- Select your IPA file - Choose the iOS app you want to sign
- Choose certificate - Select your .p12 certificate file
- Pick provisioning profile - Select the .mobileprovision file
- Enter password - Provide certificate password if required
- Click Sign - Let IPASIGN handle the rest!
The CLI uses explicit commands and never requires the certificate password as a command-line argument.
# Show all commands and options
IPASigner --help
# List connected devices
IPASigner devices
# Sign an IPA (the password is requested without terminal echo)
IPASigner sign \
--ipa Demo.ipa \
--certificate Developer.p12 \
--profile Developer.mobileprovision \
--bundle-id com.example.testapp
# Install a signed IPA
IPASigner install --ipa Demo_signed.ipa --device DEVICE_UDIDFor automation, pass the password through standard input with --password-stdin, or store it in the
IPASIGN_P12_PASSWORD environment variable. A different variable name can be selected with
--password-env NAME. Avoid placing secrets directly in command arguments.
- Input:
.ipa(iOS App Store Package) - Certificates:
.p12(PKCS#12 certificate) - Profiles:
.mobileprovision(iOS provisioning profile) - Output: Signed
.ipaready for installation
IPASIGN uses a clean, modular architecture:
- IPASigner Core - Main signing logic and zsign integration
- Qt6 GUI - Modern cross-platform user interface
- Worker Threads - Non-blocking signing and installation operations
- Device Manager - iOS device detection and communication
- Uses a bundled zsign binary or a verified zsign executable from PATH
- Does not download, compile, or install third-party software at runtime
- Uses argument-safe process execution instead of shell command construction
- Keeps the supported signing workflow deliberately small and auditable
- macOS 13+
- 4GB RAM minimum
- 1GB free disk space
- No internet connection required for local signing; App Store Connect preparation requires internet access
- Qt 6.8+ with Widgets support
- CMake 3.21+ and Ninja
- C++20 compatible compiler
- Xcode Command Line Tools
cmake --preset debug -DCMAKE_PREFIX_PATH="$(brew --prefix qtbase)"
cmake --build --preset debug --parallelcmake --preset release -DCMAKE_PREFIX_PATH="$(brew --prefix qtbase)"
cmake --build --preset release --parallel"Device not detected via USB"
- Trust the computer on your iPhone when prompted
- Ensure USB cable supports data transfer (not just charging)
- Try a different USB port or cable
- Restart both iPhone and IPASIGN application
- Check if device appears in Finder/iTunes first
- Enable "Developer Mode" in iPhone Settings if available
- Make sure iPhone is unlocked during connection
"zsign not found"
- Install a trusted zsign build and add it to PATH, or copy it into the app bundle's
Contents/Resourcesdirectory - IPASIGN intentionally does not download or execute unpinned source code at runtime
"Certificate invalid"
- Verify .p12 file is not corrupted
- Check certificate password
- Ensure certificate is not expired
"Provisioning profile mismatch"
- Verify profile matches your certificate
- Check Bundle ID compatibility
- Ensure device UDID is included in profile
"Installation fails on device"
- Check device storage space
- Verify device iOS version compatibility
- Remove conflicting apps with same Bundle ID
- Restart device and try again
- Ensure device is connected to internet for verification
Step-by-step USB connection fix:
-
iPhone Settings Check:
Settings β Privacy & Security β Developer Mode β Enable Settings β General β About β Trust Computer (when prompted) -
Mac System Check:
# Check if device is detected by system system_profiler SPUSBDataType | grep iPhone # Check iOS device service brew services list | grep usbmuxd
-
Reset Connection:
- Disconnect iPhone
- Restart IPASIGN application
- Reconnect iPhone and trust computer again
- Check if device appears in application
-
Alternative Detection Methods:
- Use Xcode's Device Manager (Window β Devices and Simulators)
- Check Finder sidebar for iPhone
- Try iTunes/Music app detection first
- Check the built-in help system
- Review application logs in the GUI
- Consult zsign documentation for signing issues
- Create an issue on GitHub for bugs
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit pull requests, report bugs, or suggest new features.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- zsign - The powerful signing engine that makes this possible
- Qt Project - For the excellent cross-platform framework
- iOS Development Community - For continuous support and feedback
Made with β€οΈ for the iOS development community