Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Backchannel iOS SDK

Backchannel is a quick, convenient way for your beta testers to report their feedback — right from within your app itself. With the tap of a button, they can report a bug, offer feedback on a new feature, or simply ask a question. Backchannel can also detect when users take screenshots of your app, and guide them to the correct feedback channel, with the screenshot already attached.


Backchannel is a great citizen in your app.

  • Backchannel is open-source, so it's easy to see how things work.
  • Backchannel's classes are all under 250 lines of code.
  • Backchannel is standalone; it has no dependencies.
  • Backchannel has a three-letter class prefix, BAK, to prevent collisions.
  • Backchannel doesn't do any swizzling.
  • Backchannel has zero categories. Your app's Foundation classes are safe.


  • iOS 7.0+
  • Xcode 6.3


To integrate Backchannel into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'Backchannel'

Then, run pod install.


The simplest way to present Backchannel is to use Backchannel class. Wire up a button like so:

- (IBAction)buttonTapped:(id)sender {
    [[Backchannel setAPIKey:@"your_api_key"] presentModallyOverViewController:self];

or its Swift equivalent:

@IBAction func buttonTapped(sender: UIButton) {

Once the API key is set, you can use the +backchannel class method to access Backchannel. The Swift runtime removes this method, so you can access the Backchannel singleton by just initializing the Backchannel class with Backchannel().

Screenshot detection

To use Backchannel's screenshot detection features, Backchannel needs to know your app's rootViewController. To configure it, set up Backchannel with an API key and a root view controller during your app's initialization:

[Backchannel setAPIKey:@"your_api_key" rootViewController:rootViewController];

or, in Swift:

Backchannel.setAPIKey("your_api_key", rootViewController:rootViewController);

After this API key is set, you can use the +backchannel class method (sharedBackchannel() in Swift) to present Backchannel:

- (IBAction)buttonTapped:(id)sender {
    [[Backchannel backchannel] presentModallyOverViewController:self];

or, in Swift:

@IBAction func buttonTapped(sender: UIButton) {


Pull requests are always welcome!


Backchannel is available under the MIT license. See the LICENSE file for more info.