Shakebug is an AI-powered bug, crash & product analytics platform for iOS, Android, Flutter, React Native, and web apps. Users can report an issue with a simple shake, click, or tap — capturing video reproductions, network logs, and device data so developers have everything they need to fix issues fast, all visible through their login panel. Crash AI automatically clusters identical crashes into a single issue with affected devices, OS versions, and trend data to help you prioritize. Session Journey and User Journey stitch sessions, events, bug reports, and crash data into a clear timeline — even for users who aren't logged in — so you can trace the exact point things broke. Real-time product analytics tracks sessions, active users, stickiness, and app health alongside your quality data, and you can log custom events on any action in your app to track it through the Shakebug framework.
Sign up for a service at https://www.shakebug.com
- Swift
- Objective-C
- SwiftUI
- Project with and without SceneDeleage
✅ Image bug reporting
✅ Screen-Recording bug beporting
✅ Automatic Crash reporting
✅ Analytics
✅ Events
✅ Review of application for each new version
✅ Remote code execution
✅ NPS Popup
✅ Track login user using custom user method
✅ Custom theme color, title and error message
✅ On-premise hosting
- Minimum iOS deployment 13.0
- Minimum Mac OS deployment 10.15
- Carthage release for Swift is built with Xcode 13.0 or later
- CocoaPods: 1.10 or later.
Navigate to the SPM section in your project, add a new package, point it to
https://github.com/softnoesis/ShakeBug/and select the latest version.
To integrate ShakeBug into your Xcode project using CocoaPods, specify it in your Podfile:
pod 'ShakeBug'Then, run the following command:
$ pod installAdd following line to your Xcode project's Cartfile
github "softnoesis/ShakeBug"Then, run the following command:
$ carthage updateThen drag Shakebug.xcframework from Carthage folder to your Xcode project's settings.
-
Import the ShakeBug framework header into your app delegate.
// Swift import ShakeBug// Objective-C #import <ShakeBug/ShakeBug.h>
-
Add the following to your app delegate's
application:didFinishLaunchingWithOptions:method.// Swift ShakeBugSDK.sharedInstance.initiateWithKey(“<Your Key>")
// Objective-C [[ShakeBugSDK sharedInstance] initiateWithKey:@"<Your Key>"];
Be sure to replace
<Your Key>with your application key which given by ShakeBug website.
NSPhotoLibraryUsageDescription must be added in info.plist.
- Add the following to your app delegate's
application:didFinishLaunchingWithOptions:method for showing or not showing first time tutorial screen
// Swift
ShakeBugSDK.sharedInstance.showTutorialScreenFirstTime(false) // Default value True// Objective-C
[[ShakeBugSDK sharedInstance] showTutorialScreenFirstTime:NO];// Default value YES- If you want to show bug or crash from Simulator then use following code
application:didFinishLaunchingWithOptions:
// Swift
ShakeBugSDK.sharedInstance.allowBugCrashFromSimulator(true) // Default value false// Objective-C
[[ShakeBugSDK sharedInstance] allowCrashFromSimulator:YES];// Default value NO- If you dont want to show any logs on console then use following code
application:didFinishLaunchingWithOptions:
// Swift
ShakeBugSDK.sharedInstance.makeLogEnabled(false) // Default value false// Objective-C
[[ShakeBugSDK sharedInstance] makeLogEnabled:NO];// Default value NO- If you want to set forcefully any language for the bug reporting screen then use following code
application:didFinishLaunchingWithOptions:
// Swift
ShakeBugSDK.sharedInstance.setShakebugSDKLanguage(ShakebugLanguage.french) // Objective-C
[[ShakeBugSDK sharedInstance] setShakebugSDKLanguage:ShakebugLanguage.french];Note: Just mind that here, by default it will take device language as defualt language.
- Developer can also set custome theme color in Shakebug SDK screens:
// Swift
ShakeBugSDK.sharedInstance.setShakebugThemeColor(UIColor.green)// Objective-C
[[ShakeBugSDK sharedInstance] setShakebugThemeColor:[UIColor greenColor]];- Developer can also set custom title for Shakebug annotate and feedback input screen:
// Swift
ShakeBugSDK.sharedInstance.changeSDKScreenTitle("Annotate your Bug", "Feedback") // Objective-C
[[ShakeBugSDK sharedInstance] changeSDKScreenTitle:@"Annotate your bug" :@"Add detail"];- Set custom error message for any error alert screen from SDK.
// Swift
ShakeBugSDK.sharedInstance.changeSDKErrorAlertMessage("This Error")// Objective-C
[[ShakeBugSDK sharedInstance] changeSDKErrorAlertMessage:@"Something wrong.."];- If you have on-premise hosting plan then following method will be used.
// Swift
ShakeBugSDK.sharedInstance.setShakebugSDKEndPointURL(url: "", headerKey: "", sslPublicKey: "")// Objective-C
[[ShakeBugSDK sharedInstance] setShakebugSDKEndPointURLWithUrl:@"" headerKey:@"" sslPublicKey:@""];Note: New enpoint url, its header key and SSL public key(Optional)
- User can report bug either by shaking phone or by triggering default screen capture event. This method can be used to manage "screen capture" event should trigger bug reporting or not.
// Swift
ShakeBugSDK.sharedInstance.allowToReportBugByScreenCapture(false) // Default value true// Objective-C
[[ShakeBugSDK sharedInstance] allowToReportBugByScreenCapture:NO]; // Default value YES- User can report bug either by shaking phone or by triggering default screen capture event. This method can be used to manage "shaking mobile" should trigger bug reporting or not.
// Swift
ShakeBugSDK.sharedInstance.allowToReportBugByShakingMobile(true) // Default value true// Objective-C
[[ShakeBugSDK sharedInstance] allowToReportBugByShakingMobile:YES]; // Default value YES- When a crash occurs, the SDK will automatically share a screen recording of the last 18-20 seconds of the application. If you pass false, it will not send the video with the crash report. By default, this is set to false. So if you want video with your each crash report then you have to call this function with value true.
Note: When you make screen recording enable fro crash then it might compromise little UI performance of app.
// Swift
ShakeBugSDK.sharedInstance.allowAutoCaptureScreenForCrashes(true) // Default value true// Objective-C
[[ShakeBugSDK sharedInstance] allowAutoCaptureScreenForCrashes:YES]; // Default value YESIf you want add event to any screen or activity use following methods
// Swift
ShakeBugSDK.sharedInstance.addEventKey(key:"App_open", eventValue: "Started app") //pass any key or value// Objective-C
[[ShakeBugSDK sharedInstance] addEventKey:@"App_open" eventValue:@"Started app"];// pass any key or valueShakebug allows you to associate custom user information with session data for better tracking and personalized reporting. This is useful when you want to tag crash reports or feedback with specific user details.
// Swift
public func setcustomUser(customUserId: String, name: String, email: String, country: String, other: String)// Objective-C
[[ShakeBug shared] setcustomUserWithCustomUserId:@"user_123"
name:@"John Doe"
email:@"[email protected]"
country:@"USA"
other:@"iOS beta tester"];The Shakebug iOS SDK shows a friendly review popup to gather helpful feedback from users. It appears only after the app has been opened at least 3 times and waits at least 2 days between reminders — so it's thoughtful, not annoying. Once a user submits a review, they won’t be asked again for that app version. Everything is remembered automatically, and the popup closes on its own after submission to keep the experience smooth.
Note: If you deselect the rating popup option from "Edit Project" screen in app.shakebug.com then rating popup will not visible.
In case, you want to trigger manually review rating popup then use this method
// Swift
ShakeBugSDK.sharedInstance.triggerRatingsPopup()// Objective-C
[[ShakeBugSDK sharedInstance] triggerRatingsPopup];With Shakebug Remote Code, you can fetch dynamic configuration values based on predefined keys set in the Shakebug dashboard. It supports String, Number, Boolean, and JSON types and allows you to modify app behavior without a version update.
// Swift
ShakeBugSDK.sharedInstance.fetchRemoteCodeValue(forKey: "your_key") { value in
print("Remote code value: \(value ?? "nil")")
}// Objective-C
[[ShakeBugSDK sharedInstance] fetchRemoteCodeValueForKey:@"your_key" completion:^(id _Nullable value) {
NSLog(@"Remote code value: %@", value ?: @"nil");
}];The Shakebug iOS SDK provides an NPS (Net Promoter Score) popup to collect helpful feedback from users. The NPS popup allows users to provide a score from 0 to 10 and optionally add additional comments.
When the NPS survey is triggered using the default method, the Shakebug SDK automatically manages when the popup should be displayed.
- After the application is installed, the NPS popup will be shown after 3 days.
- If the user selects Not Now, the NPS popup will be shown again within 14 days.
- Once the user successfully submits the NPS survey, the popup will automatically be shown again after 90 days.
- After 90 days, the same NPS flow will be repeated.
- The SDK automatically manages the NPS popup timing and does not require the developer to manually manage these intervals.
In case, you want to trigger the NPS survey popup manually, use the following method:
// Swift
ShakeBugSDK.sharedInstance.showNPSSurvey()When using the default method, the SDK follows the automatic NPS popup flow described above.
If you want to show the NPS survey popup every time the method is called, use the force option:
// Swift
ShakeBugSDK.sharedInstance.showNPSSurvey(options: ["force": true])Using force: true ignores the normal NPS popup timing and allows the developer to display the NPS survey whenever this method is called.
NPS can be used to understand how satisfied users are with your application and identify opportunities to improve the user experience.
Some common use cases include:
-
Measure User Satisfaction Collect a score from 0 to 10 to understand how users feel about your application.
-
Identify Promoters and Detractors Identify users who are highly satisfied with the application and users who may have a negative experience.
-
Collect User Feedback The optional comment field allows users to explain the reason behind their NPS score.
-
Measure Product Experience Over Time The automatic 90-day cycle can be used to collect feedback from users periodically and understand how their experience changes over time.
-
After a Major Feature Update Developers can use the force option to trigger the NPS survey after launching an important feature or major application update.
-
After Important User Activities The NPS survey can be manually triggered after important actions or workflows to understand the user's experience with that particular part of the application.
Build & run your app. Once your app is running, shake your device (^⌘Z in the simulator) to report a bug! Bug/Crash reports are sent directly to login panel of Shakebug.com and also notify on your registered email address. Additionally, now user can report bug if they trigger screen capture event in iPhone.
If you want to trigger bug reporting screen without shaking then you can call following method in any button action of any screen.
// Swift
ShakeBugSDK.sharedInstance.triggerBugReporting()// Objective-C
[[ShakeBugSDK sharedInstance] triggerBugReporting];Visit on: https://www.shakebug.com
Contact us on [email protected] in case of any use.