Alright, so hopefully by now, you’ve had a chance to integrate the Instabug SDK for iOS into your application and have received your first bug, crash, and feedback report. If you still haven’t, you can read here to learn how.

For this post, I want to explain some of the features available with the SDK and how you can really tweak and customize behavior to fit your application. User experience is a very crucial part of your app and here at Instabug, we believe that our SDK should be adaptive to allow for the customization of different elements.

In this post we’ll discuss the following options:

1. Invocation Methods

2. Prompt Options

3. End User Data (User Attributes and Identifying User)

4. UI (Colors, Locale, Content)

5. Welcome Messages

6. Network Requests

7. Custom Categories

Let’s dive in.

1. Invocation Methods

By default, Instabug is invoked when the device is shaken. The reason we chose the shake gesture to invoke the feedback process is that it is the behavior that a lot of frustrated users exhibit. We have all shaken our phones at one point due to something not working right. However, we know that sometimes the shake gesture is used in other applications.

You can also set the SDK to invoke the feedback process through one or multiple custom methods:

Panning from the right edge of the screen (one-finger swipe from right to left)

Two-finger swipe from right to left

Tapping on a floating button above your app’s UI

Taking a screenshot

To customize the invocation events, pass the values of the IBGBugReporting enum when starting the SDK.

Swift

Instabug.start(withToken: "YOUR-TOKEN-HERE", invocationEvents: [.shake, .screenshot])

Objective-C

[Instabug startWithToken:@"YOUR-TOKEN-HERE" invocationEvents: IBGInvocationEventShake | IBGInvocationEventScreenshot]

Invocation Events

If you want to invoke the SDK manually or under certain conditions only, you can use the None event to disable the out-of-the-box invocation methods.

If you are using the shake gesture, you can set the shaking threshold as described here.

If you are using the floating button, you can set its default position as explained here.

Swift

.none .shake .screenshot .twoFingersSwipeLeft .rightEdgePan .floatingButton

Objective-C

IBGInvocationEventNone IBGInvocationEventShake IBGInvocationEventScreenshot IBGInvocationEventTwoFingersSwipeLeft IBGInvocationEventRightEdgePan IBGInvocationEventFloatingButton

Changing the Invocation Method

To change the invocation method, call the following APIs at runtime.

Swift

BugReporting.setInvocationEvents([.shake, .screenshot])

Objective-C

[IBGBugReporting setInvocationEvents:IBGInvocationEventShake | IBGInvocationEventScreenshot];

Programmatic Invocation

If you want to invoke the Instabug SDK manually, use the invoke method.

Swift

BugReporting.invoke()

Objective-C

[IBGBugReporting invoke];

For more ways to customize the Instabug for iOS invocation methods, see our documentation.

2. Prompt Options

When your users invoke the Instabug SDK with any of the above methods, a modal appears with your plan‘s enabled features by default. In most cases, the prompt options are:

You can control which options are displayed by enabling or disabling any of the features separately. When only a single option is enabled, the prompt options modal does not pop up after invocation and the flow goes immediately to the bug report, feedback, or in-app chat view. If all options are disabled, the bug report becomes the default view.

Swift

BugReporting.promptOptions = [.bug, .feedback] /* The three options are: .bug .feedback .chat */

Objective-C

IBGBugReporting.promptOptions = IBGPromptOptionBug | IBGPromptOptionFeedback; /* The three options are: IBGPromptOptionBug IBGPromptOptionFeedback IBGPromptOptionChat */

3. End User Data

We collect some data to help you identify any user who submits a bug report or sends you feedback, and you can customize this data according to your needs.

User Email

By default, a valid email address is required to submit any report. You can also pre-fill the email field with a specific email address. We recommend calling this API as soon as your user logs into your app.

Swift

Instabug.identifyUser(withEmail: "qa@instabug.com", name: "QA Team")

Objective-C

[Instabug identifyUserWithEmail:@"qa@instabug.com" name:@"QA Team"];

You can also allow your users to send bug reports or feedback without entering an email address.

Swift

BugReporting.invocationOptions = [.emailFieldOptional | .commentFieldRequired]

Objective-C

IBGBugReporting.invocationOptions = IBGBugReportingInvocationOptionEmailFieldOptional | IBGBugReportingInvocationOptionCommentFieldRequired;

User Attributes

If all the information that we capture about your users and their devices isn’t enough and you’d like to add more information, we have a section in each report for that specific purpose.

To collect additional information about your users who submit bugs and feedback, you can assign custom attributes to your users. These attributes appear in your dashboard along with each report and you can use them to filter reports later for easy access and further analysis.

To add a new user attribute, call the following method at your initialization step, or perhaps after a user has logged in.

Swift

Instabug.setUserAttribute("True", withKey: "Logged in") Instabug.setUserAttribute("False", withKey: "Completed IAP")

Objective-C

[Instabug setUserAttribute:@"True" withKey:@"Logged in"]; [Instabug setUserAttribute:@"18" withKey:@"Age"];

For more ways to customize your users’ data, see our Instabug for iOS documentation.

4. UI

With Instabug for iOS, you can customize certain design elements to match your brand and minimize disrupting your users’ experience in your app.

Colors

The Instabug SDK has two color themes: light and dark. You can set which theme to use in your app.

Swift

Instabug.setColorTheme(.dark)

Objective-C

[Instabug setColorTheme:IBGColorThemeDark];

You can also set the accent color of the UI elements that indicate interactivity or a call to action to align with your brand’s colors.

Swift

Instabug.tintColor = .lightGray

Objective-C

Instabug.tintColor = UIColor.lightGrayColor;

Locale

By default, the SDK will automatically use the current locale of your user’s device. To override it, call the following API. For the full list of possible locales, see our Instabug iOS documentation.

Swift

Instabug.setLocale(.french)

Objective-C

[Instabug setLocale:IBGLocaleFrench];

Content

To customize any of the text content displayed in the SDK, you can override each individual string. For the full list of keys, see our Instabug iOS documentation.

Swift

Instabug.setValue("Your feedback is important to us!", forStringWithKey: kIBGLiveWelcomeMessageTitle)

Objective-C

[Instabug setValue:@"Your feedback is important to us!" forStringWithKey:kIBGLiveWelcomeMessageTitle];

5. Welcome Messages

By default, a welcome message is shown to your users within the first 10 seconds of their first session after you integrate the SDK in your app. The message includes instructions for how to invoke Instabug in order to report a bug or send feedback.

Beta Mode

For beta apps, a three-step onboarding modal is displayed, as shown below.

Live Mode

For production apps, a single welcome message is displayed depending on the invocation method that you set.

Out of the box, the welcome message is set by default to live mode. To change or disable the welcome mode, use the following method.

Swift

Instabug.welcomeMessageMode = .beta] // For beta testers Instabug.welcomeMessageMode = .live] // For live users Instabug.welcomeMessageMode = .disabled] // Disable welcome message

Objective-C

[Instabug setWelcomeMessageMode:IBGWelcomeMessageModeBeta] // For beta testers [Instabug setWelcomeMessageMode:IBGWelcomeMessageModeLive] // For live users [Instabug setWelcomeMessageMode:IBGWelcomeMessageModeDisabled] // Disable welcome message

Manual End User Onboarding

For full control, you can display the welcome message manually.

Swift

Instabug.showWelcomeMessage(withMode: .beta // For beta testers Instabug.showWelcomeMessage(withMode: .live] // For live users

Objective-C

[Instabug showWelcomeMessageWithMode:IBGWelcomeMessageModeBeta] // For beta testers [Instabug showWelcomeMessageWithMode:IBGWelcomeMessageModeLive] // For live users

6. Network Requests

Instabug automatically logs all network requests performed by your app and network responses. If you want to hide certain requests, like those that contain usernames and passwords, or specific data, like authentication tokens, you can use the following methods.

Omitting Network Requests From Logs

Swift

let path = "/products" let requestPredicate = NSPredicate(format: "URL.path MATCHES %@", path) let responsePredicate = NSPredicate(format: "statusCode >= %d AND statusCode <= %d", 200, 399) Instabug.setNetworkLoggingRequestFilterPredicate(requestPredicate, responseFilterPredicate: responsePredicate)

Objective-C

NSString *path = @"/products"; NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:@"URL.path MATCHES %@", path]; NSPredicate *responsePredicate = [NSPredicate predicateWithFormat:@"statusCode >= %d AND statusCode <= %d", 200, 399]; [Instabug setNetworkLoggingRequestFilterPredicate:requestPredicate responseFilterPredicate:responsePredicate];

Obfuscating Network Requests in Logs

Swift

NetworkLogger.requestObfuscationHandler = { (request) -> URLRequest in var myRequest:NSMutableURLRequest = request.mutableCopy() let urlString = request.url?.absoluteString urlString = obfuscateAuthenticationTokenInString() let obfuscatedURL = URL(string: urlString) myRequest.url = obfuscatedURL return myRequest }

Objective-C

IBGNetworkLogger.requestObfuscationHandler = ^NSURLRequest * _Nonnull(NSURLRequest * _Nonnull request) { NSMutableURLRequest *myRequest = [request mutableCopy]; NSString *urlString = request.URL.absoluteString urlString = [self obfuscateAuthenticationTokenInString:urlString]; NSURL *obfuscatedURL = [NSURL URLWithString:urlString]; myRequest.url = obfuscatedURL; return myRequest; };

Obfuscating Network Responses in Logs

Swift

NetworkLogger.setResponseObfuscationHandler { (data, response, completion) in if let data = data { let modifiedData = self.modify(data: data) let modifiedResponse = self.modify(response: response) completion(modifiedData, modifiedResponse) } }

Objective-C

[IBGNetworkLogger setResponseObfuscationHandler:^(NSData * _Nullable responseData, NSURLResponse * _Nonnull response, NetworkObfuscationCompletionBlock _Nonnull returnBlock) { NSData *modifiedData = [self obfuscateData:responseData]; NSURLResponse *modifiedResponse = [self obfuscateResponse:response]; returnBlock(modifiedData, modifiedResponse); }];

To learn more about customizing logs in the Instabug SDK for iOS, see our documentation.

7. Custom Categories

To help you triage bug reports and feedback faster, you can enable custom categories to appear after the prompt options modal. This allows your testers or users to self-select the appropriate category of the bug they are reporting.

To customize these settings, simply navigate to your app settings in your Instabug dashboard—no code required.

For even more customizations, check out our documentation or contact us at support@instabug.com. We’re happy to help you adapt the Instabug SDK to fit your app and users’ behavior.