A tool for creating iOS debugging projects from decrypted IPA files. Debug and profile any iOS app without jailbreak devices.
- 🚀 One-command setup - Create Xcode project directly from IPA file
- 📦 Automatic extraction - Extract and setup .app bundle automatically
- ⚙️ Smart Info.plist - Preserve all permissions, URL schemes, and configurations
- 🔒 Bundle ID control - Keep template's Bundle ID to avoid conflicts
- 🧹 Auto cleanup - Remove App Extensions and Watch app for easier signing
- 🔄 MonkeyDev inspired - Info.plist handling based on MonkeyDev
- macOS with Xcode
- Decrypted IPA file
- Valid code signing certificate
bin/fakeapp /path/to/your/app.ipaExample:
bin/fakeapp ~/Downloads/WeChat.ipaThis will:
- Extract
WeChat.appfrom IPA - Create
WeChat/Xcode project - Copy app to
WeChat/Payload/ - Merge Info.plist settings
- Remove PlugIns and Watch directories
- Open
WeChat.xcodeproj - Select both targets:
WeChatandPDebug - Set Team and Provisioning Profile in Build Settings
Build and run! All Xcode debugging features work:
- Breakpoints
- LLDB console
- Memory graph
- Instruments
- Location simulation
Inject custom code via PDebug.framework:
File: [AppName]/PDebug/PDebugEntry.m
@implementation PDebugEntry
+(void)load
{
NSLog(@"PDebug loaded!");
// Your code here
}
@end- Privacy permissions (Camera, Location, etc.)
- URL Schemes
- App Transport Security
- Background modes
- Interface orientations
- All custom configurations
- Bundle ID (uses template's configurable ID)
- Icon references
- PlugIns directory (App Extensions)
- Watch directory
- UISupportedDevices
- Ensure IPA is valid and contains
Payload/*.app - Only decrypted IPA files are supported
- Uninstall existing app from device, or
- Change Bundle ID in Build Settings to unique value
- Verify both
[AppName]andPDebugtargets have valid signing setup
Change in Build Settings → Product Bundle Identifier to run alongside App Store version.
The project uses a build script to package everything into a single executable.
The build.sh script:
- Compresses
fakesample/template directory into.tgz - Encodes the archive as base64
- Embeds the encoded data into
bin/fakeappexecutable - Creates a self-contained script with embedded template
Structure:
fakeapp.sh- Main script logic (source code)fakesample/- Xcode project templatebin/fakeapp- Compiled executable (script + embedded template)
After modifying fakeapp.sh or fakesample/ template:
./build.shThis regenerates bin/fakeapp with your changes.
Example workflow:
- Edit
fakeapp.shto add features - Run
./build.shto rebuild - Test with
bin/fakeapp your-app.ipa
The template directory contains:
- Xcode project structure (
.xcodeproj) - PDebug framework for code injection
- Build scripts for code signing
- Default configurations
All of this is packaged into the single bin/fakeapp executable, so users only need that one file.
Based on MonkeyDev Info.plist handling approach.
MIT License