iOS Testing

Test Deep Link

  • Create a deep link from the Branch Dashboard
    • Delete your app from the device
    • Compile and test on a device
    • Paste deep link in Apple Notes
    • Long press on the deep link (not 3D Touch)
    • Click Open in "APP_NAME" to open your app

Test Deferred Deep Link

Deferred deep linking is simply deep linking into an app that is not yet installed. Once the app is installed, the context is preserved and the user's first app-open will have the deep link data from the original Branch Link.

  1. Enable NativeLink™ Deferred Deep linking
  2. Ensure the app is uninstalled from your device
  3. Click a Branch Link
    • If you enabled NativeLink™ correctly (either through the Branch Dashboard or by adding $ios_nativelink=trueon the Branch Link as a query parameter (ex.$ios_nativelink=true)) then it should route you to the deepview to download the app. DO NOT DOWNLOAD THE APP FROM HERE
  4. Manually launch the app from Xcode

You should be routed to the correct content within your app if you configured deep-linked routing properly (ex. URL, URI Schema, key/value pair).

Enable Logging

  • Use the Branch test key instead of the live key

  • Add before initSession Initialize Branch

  • Remove before releasing to production

  • Make sure OS_ACTIVITY_MODE is not disabled (link)

  • For advanced logging needs, you can forward logs to a custom callback function instead of using the default os_log. This enables you to process, format, or redirect log messages according to your application's logging strategy:

    // Enable basic logging
    // Choose the minumum log level to be logged
    Branch.getInstance().enableLogging(at: .error)
    // Forward logs to a custom callback instead of the default os_log
    Branch.getInstance().enableLogging(at: .warning) { message, level, error in
        if error != nil {
            print("[Branch Error][\(level)] \(message) - \(error)")
        } else {
            print("[Branch Log][\(level)] \(message)")
    // Enable basic logging
    [[Branch getInstance] enableLogging];
    // Choose the minumum log level to be logged and forward logs to a custom callback instead of the default os_log
    [[Branch getInstance] enableLoggingAtLevel:BranchLogLevelVerbose withCallback:^(NSString * _Nonnull message, BranchLogLevel logLevel, NSError * _Nullable error) {
        // Handle the log message and error here. For example, printing to the console:
        if (error) {
            NSLog(@"[BranchLog] Level: %lu, Message: %@, Error: %@", (unsigned long)logLevel, message, error.localizedDescription);
        } else {
            NSLog(@"[BranchLog] Level: %lu, Message: %@", (unsigned long)logLevel, message);

Test your Branch Integration

Test your Branch Integration by calling validateSDKIntegration in your AppDelegate. Check your Xcode logs to make sure all the SDK Integration tests pass. Make sure to comment out or remove validateSDKIntegration in your production build.

[[Branch getInstance] validateSDKIntegration];

Use Test Key

  • Use the Branch test key instead of the live key
  • Add before initSession Initialize Branch
  • Update branch_key in your Info.plist to a dictionary (example)
  • The test key of your app must match the test key of your deep link
  • Remove before releasing to production
[Branch setUseTestBranchKey:YES];

Sample Applications

Simulate an Install

To ensure the SDK is setup correctly, you no longer need to simulate an install via the SDK itself. Instead, you can test functionality end to end by completing the following:

Test Deep Link Routing for Your Branch Links

Append ?bnc_validate=true to any of your app's Branch links and click it on your mobile device (not the Simulator!) to start the test. For instance, to validate a link like: "https://<yourapp\>" click on: "https://<yourapp\>"

Domain AASA Validator

Use our validator to determine if your domain's AASA is properly configured for Universal Links.

Domain AASA Validator Tool

App Indexing Validator

Use our validator to determine if your app and site are properly configured for App Indexing.

App Indexing Validator Tool

Integration Status Tool

Shows the status of your Branch integration. For the best experience, we recommend that you complete all of the steps listed. If a specific platform is not relevant to you, please skip that section.

Integration Status Tool

Recommended Next Steps