Awesome bug reporting for iOS apps

Overview

Platform CocoaPods Compatible Carthage compatible License Twitter

Buglife is an awesome bug reporting SDK & web platform for iOS apps. Here's how it works:

  1. User takes a screenshot, or stops screen recording
  2. User annotates their screenshot & writes feedback
  3. Bug reports are pushed to your team's email/Jira/Slack/Asana/wherever you track bugs.

You can also find Buglife for Android here.


Main Features
👤 Free + no account required
📖 Open source
🏃🏽‍♀️ Fast & lightweight
🎨 Themeable
📩 Automatic caching & retry
📜 Custom form fields, with pickers & multiline text fields
ℹ️ Advanced logging, with debug / info / warning levels
📎 Custom attachments, including JSON & SQLite support
🎥 Attach photos & video from camera roll
📟 String customization
🌎 16 languages supported, with RTL for Arabic + Hebrew
🙈 Automatic view blurring for sensitive information
👩🏽‍💻 Written in Objective-C, with full Swift support

Demo

To try the example app, you can either run pod try Buglife from your command line, OR clone this repository and open the Xcode project under the “Example” directory.

Installation

CocoaPods

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

pod 'Buglife'

Then, run the following command:

$ pod install

Carthage

Place the following line in your Cartfile:

github "Buglife/Buglife-iOS"

Now run carthage update. Then drag & drop the Buglife.framework in the Carthage/build folder to your project. Refer to the Carthage README for detailed / updated instructions.

Manually

  1. Download the Buglife SDK

  2. Unzip it & pull Buglife.framework into the Frameworks group in your project. In the following dialog box, make sure you have "Copy items if needed" checked.

Code

  1. Import the Buglife framework header into your app delegate.

    // Swift
    import Buglife
    // Objective-C
    #import <Buglife/Buglife.h>
  2. Add the following to your app delegate's application:didFinishLaunchingWithOptions: method.

    // Swift
    Buglife.shared().start(withEmail: "[email protected]")
    // Objective-C
    [[Buglife sharedBuglife] startWithEmail:@"[email protected]"];

    Be sure to replace [email protected] with your own email address; this is where bug reports will be sent to.

Usage

Build & run your app. Once your app is running, shake your device (^⌘Z in the simulator) to report a bug! Bug reports are sent directly to your email address.

You can customize how the bug reporter is invoked. Rather than shake, we recommend configuring the bug reporter to be shown when a user takes a screenshot:

// Swift
Buglife.shared().invocationOptions = .screenshot
// Objective-C
[Buglife sharedBuglife].invocationOptions = LIFEInvocationOptionsScreenshot;

To learn more about customizing Buglife, refer to the documentation.

Requirements

  • Xcode 8 or later
  • iOS 9 or later

Contributing

We don't have any contributing guidelines at the moment, but feel free to submit pull requests & file issues within GitHub!

Comments
  • BugLife barTintColor doesn't seem to be working

    BugLife barTintColor doesn't seem to be working

    Hi,

    I'm trying to give the bug reporter's navigation bar a barTintColor, but I can't seem to get it working. I am using the following code for updating the appearance:

    let appearance = Buglife.shared().appearance
    appearance.tintColor = UIColor.red
    appearance.barTintColor = Colors.black
    appearance.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.red]
    appearance.statusBarStyle = .lightContent
    Buglife.shared().invocationOptions = [.screenshot]
    Buglife.shared().start(withAPIKey: Constants.kBugLifeAPIKey)        
    

    Using the following code I expect the navigationbar to be black with red textlabels. But this is the result:

    simulator screen shot 19 mar 2017 19 40 15

    Any idea on what I'm doing wrong? Thanks in advance

    opened by rickvdl 5
  • Current framework requires extra app permission with XCode 8

    Current framework requires extra app permission with XCode 8

    The current build of the framework installed via cocoapods (version 1.3.0) will trigger an 'Invalid binary' rejection from Apple when an app is submitted to the app store after building with XCode 8.

    Exact rejection text is:

    "This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data."

    It seems at about the GM time of the latest XCode cycle they fired up a new static analyser that is even more aggressive about code that even looks like it touches the camera or photo library (Other libraries are triggering various other warnings too - http://stackoverflow.com/questions/39383289/ios-10-gm-release-error-when-submitting-apps-this-app-attempts-to-access-privac)

    opened by richardgroves 5
  • App crashes after shaking. Invalid parameter not satisfying: drawn

    App crashes after shaking. Invalid parameter not satisfying: drawn

    Using Buglife 2.8.0.

    Crashed at https://github.com/Buglife/Buglife-iOS/blob/master/Source/Additions/UIApplication+LIFEAdditions.m#L101

    Fatal Exception: NSInternalInconsistencyException
    Invalid parameter not satisfying: drawn
    

    There is the error trace if helpful: screen shot 2018-06-25 at 5 43 35 pm

    opened by xuezhma 4
  • Update Docs to explain how to customize floating button

    Update Docs to explain how to customize floating button

    I'd like to understand how to:

    • Customize where the button is displayed upon first viewing (I don't like where it starts)
    • Customize the icon/image
    • Perhaps change it from floating to stationary
    • I use an onboarding repo called Instructions which can hook a label onto a UI element .. like UIelement.helpLabel.text = "This is the exciting UIelement" .. How can I do that with the floating button? I'm using Swift and know little about poking around in objc
    opened by bbookman 3
  • Add attachement button (iOS)

    Add attachement button (iOS)

    Hi Do you guys plan to make the add attachement button optional and not only based on the camera roll permission.
    Do you accept pull requests if we implement this small opt in feature ? This is how we'd like to use it :

    Buglife.shared().makeAddAttachementButtonAvailable = NO; //YES is default value
    
    opened by imanzarrabian 3
  • Programmatically add fields to a bug report

    Programmatically add fields to a bug report

    I know you can make an attachment and tag it along, but it would be incredibly useful to add custom fields, or just 1 if adding multiple would be hard, to a bug report. Then have that information get passed along to the current integrations as well.

    opened by ekimia 3
  • Can't Set Invocation Option to None

    Can't Set Invocation Option to None

    We've decided to switch from using a floating button to manually triggering bug reports. This of course means setting Buglife.sharedBuglife().invocationOptions = .None as shown on your documentation.

    Previous AppDelegate.swift (Truncated)

    ...
    
    import Buglife
    
    @UIApplicationMain
    class AppDelegate: ..., BuglifeDelegate {
    
        ...
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
            ...
    
            // Setup Bug Reporting
            Buglife.shared().start(withAPIKey: "xxx")
            Buglife.shared().invocationOptions = [.floatingButton]
            Buglife.shared().delegate = self
    
            ...
    
            // Finish Setup
            return true
        }
    
    ...
    

    However, this doesn't seem to be working:

    Attempt 1 Code: swift Buglife.sharedBuglife().invocationOptions = .None Error: 'None' has been renamed to 'none'

    Attempt 2 Code: swift Buglife.sharedBuglife().invocationOptions = .none Error :'none' is unavailable: use [:] to construct an empty option set

    Attempt 3 Code: swift Buglife.sharedBuglife().invocationOptions = [:] Error: Contextual type 'LIFEInvocationOptions' cannot be used with dictionary literal

    Attempt 4 Code: swift Buglife.sharedBuglife().invocationOptions = [.None] Error: 'None' has been renamed to 'none'

    Attempt 5 Code: swift Buglife.sharedBuglife().invocationOptions = [.none] Error: 'none' is unavailable: use [:] to construct an empty option set

    As you can see, for some strange reason we can utilize every invocation option enumerated by LIFEInvocationOptions except for none. I'm using Swift 3 with Xcode 8. Any ideas?

    opened by merktassel 3
  • Setting .invocationOptions = [] still results in prompt when recording video

    Setting .invocationOptions = [] still results in prompt when recording video

    I am trying to use Buglife with a purely manual invocation.

        Buglife.shared().invocationOptions = []
        Buglife.shared().start(withAPIKey: "<my api key>")
    

    My app records the screen using ReplayKit's RPScreenRecorder. Whenever a recording is finished, Buglife shows up with a prompt whether I would like to add feedback to the recording.

    Any way to disable this prompt?

    opened by okvivi 2
  • Feature: Invert Button Colors on Dark Background

    Feature: Invert Button Colors on Dark Background

    Our app's background is black, which makes the Buglife icon quite difficult to locate and use. Perhaps the icon colors could be inverted depending on how dark the background is?

    opened by merktassel 2
  • App's  UI Interaction  not working  after submitting a Bug

    App's UI Interaction not working after submitting a Bug

    After submitting a bug its showing the Bug submitted alert .after that the App gone freezed state. no UI Interaction .dont Know the Actual Reason for that wish to get a Reply ASAP.

    opened by rahul-apple 2
  • Should use aliases instead of duplicate files in .framework

    Should use aliases instead of duplicate files in .framework

    Instead of having duplicate headers and binary throughout the .framework, a single binary and set of headers under .framework/Versions/A would suffice and then .framework/Versions/Current would alias to .framework/Versions/A, .framework/Headers would alias to .framework/Versions/A/Headers, .framework/Modules would alias to .framework/Versions/A/Modules, and .framework/Buglife would alias to .framework/Versions/A/Buglife. This would cut the size of the framework by one third (66%).

    opened by NSProgrammer 2
  • Support for Swift Package Manager

    Support for Swift Package Manager

    As Swift Package Manager is getting more and more support (moreover with the latest additions in Swift 5.3), is there any chance we get support for it soon?

    For us it'd be a huge deal as we're migrating from Carthage to SPM 👍

    opened by kikettas 0
  • Bug Life not working..

    Bug Life not working..

    I added pod 'Buglife' in pod file.

    It has no error when building. and added Privacy - Photo Library Usage Description in Info.plist.

    But when taking a screenshot , it has no action triggered.

    I tested this sdk on empty project. it's nothing to do action.

    A diffrenent thing with sample is using SceneDelegate.

    When co-existing with SceneDelagte, is there any settings I have to do?

    opened by mkjwa 1
  • typo in strings

    typo in strings

    LIFEStringKey LIFEStringKey_DiscardReportAlertCancel = @"Nevermind";

    Never Mind is two words. https://www.grammarly.com/blog/nevermind-or-never-mind/

    opened by ghost 0
Releases(2.10.0)
Owner
Buglife
Buglife
Aardvark is a library that makes it dead simple to create actionable bug reports.

Aardvark Aardvark makes it dead simple to create actionable bug reports. Aardvark is made up of a collection of frameworks that provide different bug

Square 257 Dec 19, 2022
Example repo for reproduction of a cocoapods bug

CocoapodsBugExample Run a pod install with use_frameworks! un-commented, see how Pods/CoreDataPodSample compile sources includes CoreDataPodSample.xcd

null 0 Nov 3, 2021
iOS tool that helps with profiling iOS Memory usage.

FBMemoryProfiler An iOS library providing developer tools for browsing objects in memory over time, using FBAllocationTracker and FBRetainCycleDetecto

Facebook Archive 3.4k Dec 7, 2022
iOS project bootstrap aimed at high quality coding.

iOS Project bootstrap How do you setup your iOS projects? Since we are approaching 2015 I’m working on refreshing my project bootstrap. I’ve decided t

Krzysztof Zabłocki 2k Dec 23, 2022
Find memory leaks in your iOS app at develop time.

中文介绍 | FAQ中文 MLeaksFinder MLeaksFinder helps you find memory leaks in your iOS apps at develop time. It can automatically find leaks in UIView and UIV

Tencent 5.3k Dec 22, 2022
Find memory issues & leaks in your iOS app without instruments

HeapInspector Find memory issues & leaks in your iOS app HeapInspector is a debug tool that monitors the memory heap with backtrace recording in your

Christian Menschel 1.8k Nov 24, 2022
iOS library to help detecting retain cycles in runtime.

FBRetainCycleDetector An iOS library that finds retain cycles using runtime analysis. About Retain cycles are one of the most common ways of creating

Facebook 4.1k Dec 26, 2022
In-app memory usage monitoring for iOS

What's Stats Stats displays load statuses such as the memory usage, the CPU load, and the number of subviews in-app, and in realtime. How to use Just

Shuichi Tsutsumi 170 Sep 18, 2022
Makes it easier to support older versions of iOS by fixing things and adding missing methods

PSTModernizer PSTModernizer carefully applies patches to UIKit and related Apple frameworks to fix known radars with the least impact. The current set

PSPDFKit Labs 217 Aug 9, 2022
decoupling between modules in your iOS Project. iOS模块化过程中模块间解耦方案

DecouplingKit 中文readme Podfile platform :ios, '7.0' pod 'DecouplingKit', '~> 0.0.2' DecouplingKit, decoupling between modules in your iOS Project. D

coderyi 139 Aug 23, 2022
The project used in the iOS Architect Crash Course lectures

iOS Architect Crash Course • August 2nd-8th • EssentialDeveloper.com https://www.essentialdeveloper.com/ios-architect-crash-course/aug-2021-a5220 It's

Aleksei Korolev 1 Jul 20, 2022
Skredvarsel app - an iOS, iPadOS, and macOS application that provides daily avalanche warnings from the Norwegian Avalanche Warning Service API

Skredvarsel (Avalanche warning) app is an iOS, iPadOS, and macOS application that provides daily avalanche warnings from the Norwegian Avalanche Warning Service API

Jonas Follesø 8 Dec 15, 2022
A library that enables dynamically rebinding symbols in Mach-O binaries running on iOS.

fishhook fishhook is a very simple library that enables dynamically rebinding symbols in Mach-O binaries running on iOS in the simulator and on device

Meta 4.9k Jan 8, 2023
Simple iOS app blackbox assessment tool. Powered by frida.re and vuejs.

Discontinued Project This project has been discontinued. Please use the new Grapefruit #74 frida@14 compatibility issues frida@14 introduces lots of b

Chaitin Tech 1.6k Dec 16, 2022
Awesome bug reporting for iOS apps

Buglife is an awesome bug reporting SDK & web platform for iOS apps. Here's how it works: User takes a screenshot, or stops screen recording User anno

Buglife 498 Dec 17, 2022
In-app feedback and bug reporting tool for apps.

Instabug iOS SDK Instabug is an in-app feedback and bug reporting tool for mobile apps. With just a simple shake, your users or beta testers can repor

Instabug 274 Dec 14, 2022
Matthew Asaminew 0 Jan 25, 2022
In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More.

The debugger tool for iOS developer. Display logs, network request, device informations, crash logs while using the app. Easy accessible with its bubble head button ?? . Easy to integrate in any apps, to handle development or testing apps easier. First version, there is plenty of room for improvement.

Remi ROBERT 1.8k Dec 29, 2022
Dotzu In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More.

Dotzu In-App iOS Debugging Tool With Enhanced Logging, Networking Info, Crash reporting And More. The debugger tool for iOS developer. Display logs, n

Remi ROBERT 1.8k Jan 3, 2023
A simple Swift package for measuring and reporting the time taken for operations

Duration A simple Swift package for measuring and reporting the time taken for operations. It is derived from a version for Playgrounds that I blogged

Swift Studies 325 Nov 6, 2022