{
  "name": "DebuggIt",
  "version": "1.1.0",
  "summary": "Tool that will help QA and clients report bugs easily directly from the device",
  "description": "# debugg.it\n[https://debugg.it](https://debugg.it)\n\n## Table of Contents ##\n\n+ [What is this repository for?](#what-is-this)\n+ [Example](#example)\n+ [Installation](#setup)\n+ [Configure and initialize debugg.it in your project](#configure)\n    * [Configure service for issues](#configure-issue)\n    * [API for uploading image files and (optionally) audio files](#configure-api)\n    * [Sample configuration](#configure-sample)\n+ [Additional options](#extra-options)\n+ [Author](#author)\n+ [Licence](#licence)\n\n<a name=\"what-is-this\"/>\n\n## What is this repository for? ##\n\nThis is a library, which provides a tool to report iOS application bugs directly into JIRA / GitHub/ BitBucket Issue Tracker.\n\n<a name=\"example\"/>\n\n# Example\n\nTo run the example project, open `DebuggIt.xcworkspace`, choose `DebuggItDemo` scheme and build it.\n\n<a name=\"setup\"/>\n\n## Installation ##\n\ndebugg.it is available through CocoaPods. To install it, add the following to your Podfile and run `pod install`:\n```ruby\nuse_frameworks!\npod 'DebuggIt'\n```\n<a name=\"configure\"/>\n\n## Configure and initialize debugg.it in your project ##\n\nIn your `AppDelegate` import the pod:\n```swift\nimport DebuggIt\n```\n\n<a name=\"configure-issue\"/>\n\n### Configure service for issues ###\n\nAdd one of these lines (**at start of method**) to initialize debugg.it issue service\n\n```swift\nfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n    ...\n    // Override point for customization after application launch.\n    DebuggIt.sharedInstance.initBitbucket(repoSlug: \"repo-name\", accountName: \"repo-owner-username\")\n    // or Github\n    DebuggIt.sharedInstance.initGithub(repoSlug: \"repo-name\", accountName: \"repo-owner-username\")\n    // or JIRA\n    DebuggIt.sharedInstance.initJira(host: \"jira-host-url\", projectKey: \"project-key\")\n    ...\n    return true\n}\n```\n\n**Note**: If you are using **JIRA** and your host **do not use SSL**, use additional parameter in initialize method:\n\n```swift\nDebuggIt.sharedInstance.initJira(host: \"jira-host-url\", projectKey: \"project-key\", usesHttps: false)\n```\n\n<a name=\"configure-api\"/>\n\n### API for uploading image files and (optionally) audio files ###\n\ndebugg.it requires an API where it can send image files and (optionally) audio files. There are 3 available configurations:\n\n+ AWS S3 Bucket\n\n    This configuration uses your AWS S3 bucket (https://aws.amazon.com/s3/) to store image and audio files.\n\n    * `DebuggIt.sharedInstance.initAWS(bucketName: \"bucketName\", regionType: .EUCentral1, identityPool: \"identityPool\")`\n        * where\n            * `bucketName` is a name of your bucket\n            * `regionType` is a`AWSRegionType` where your S3 bucket is hosted\n            * `identityPool` is a cognito generated key for your S3 bucket\n\n##\n\n+ Default API\n\n    This configuration uses your backend to send image and audio files. Data is sent via POST call on given endpoint with following parameter:\n    ```json\n    {\n        \"data\": \"base64String\"\n    }\n    ```\n    \n    * `DebuggIt.getInstance().initDefaultStorage(url: \"baseUrl\", imagePath: \"imagePath\", audioPath: \"audioPath\")`\n        * where\n            * `baseUrl` is a base url of your backend (e.g. `https://url-to-backend.com`)\n            * `imagePath` is an endpoint handling image upload (e.g. `/debuggit/uploadImage`)\n            * `audioPath` is an endpoint handling audio upload (e.g. `/debuggit/uploadAudio`)\n##\n\n+ Custom API\n\n    This is an extension of default API configuration. The difference is that you have to handle `uploadImage` / `uploadAudio` request and response. You are responsible for communication with your backend, but at the same time you have full control over it.\n\n    * `DebuggIt.sharedInstance.initCustomStorage(uploadImage: { (base64, delegate) in }, uploadAudio: { (base64, delegate) in })`\n        * where\n            * `uploadImage` is a callback with prepared base64 converted image and response delegate\n                * `delegate` is a `ApiClientDelegate` object, and should call `.uploadSuccessClousure(\"url-to-image\")` in case of success or `.errorClousure(code, message)`in case of error.\n            * `uploadImage` is a callback with prepared base64 converted image and response delegate\n                * `delegate` is a `ApiClientDelegate` object, and should call `.uploadSuccessClousure(\"url-to-audio\")` in case of success or `.errorClousure(code, message)`in case of error.\n\n<a name=\"configure-sample\"/>\n\n### Sample configurations ###\n\n+ Init BitBucket with S3:\n##\n```swift\nDebuggIt.sharedInstance\n        .initAWS(bucketName: \"bucketName\", regionType: .EUCentral1, identityPool: \"identityPool\")\n        .initBitbucket(repoSlug: \"repo-name\", accountName: \"repo-owner-username\")\n```\n\n+ Init GitHub with default API:\n##\n```swift\nDebuggIt.sharedInstance\n        .initDefaultStorage(url: \"baseUrl\", imagePath: \"imagePath\", audioPath: \"audioPath\")\n        .initGithub(repoSlug: \"repo-name\", accountName: \"repo-owner-username\")\n```\n\n+ Init JIRA with custom API:\n##\n```swift\nDebuggIt.sharedInstance\n        .initCustomStorage(uploadImage: { (base64, delegate) in\n            // Handle API call to your backend and call uploadSuccessClousure on delegate with url\n            // delegate.uploadSuccessClousure(\"url-to-image\")\n\n            // If something went wrong, call errorClousure on delegate\n            // delegate.errorClousure(400, \"Could not upload image\")\n        }, uploadAudio: { (base64, delegate) in\n            // Handle API call to your backend and call uploadSuccessClousure on delegate with url\n            // delegate.uploadSuccessClousure(\"url-to-audio\")\n\n            // If something went wrong, call errorClousure on delegate\n            // delegate.errorClousure(400, \"Could not upload audio\")    \n        })\n        .initJira(host: \"jira-host-url\", projectKey: \"project-key\")\n```\n## That's all. Your debugg.it is ready to work. ##\n\n<a name=\"extra-options\"/>\n\n## Additional options\n\n**debugg.it** allows to record audio notes and add it to bug description. To enable this feature simply add this line to your configuration in `AppDelegate` class:\n\n\n```swift\nDebuggIt.sharedInstance.recordingEnabled = true\n```\n\nEnsure you have added _Microphone Usage Description_ in your `Info.plist` file. For example:\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>NSMicrophoneUsageDescription</key>\n\t<string>debugg.it record notes</string>\n\t<!-- \n\t\tRest of Info.plist file... \n\t-->\n</dict>\n</plist>\n```",
  "homepage": "http://debugg.it",
  "license": {
    "type": "Apache License, Version 2.0",
    "file": "LICENSE"
  },
  "authors": {
    "MoodUp.team": "biuro@mooduplabs.com"
  },
  "source": {
    "http": "https://github.com/MoodupDev/DebuggIt-iOS/releases/download/1.1.0/DebuggIt-1.1.0.zip"
  },
  "vendored_frameworks": "DebuggIt.framework",
  "frameworks": [
    "UIKit",
    "WebKit"
  ],
  "platforms": {
    "ios": "11.0"
  },
  "swift_versions": "5.0",
  "dependencies": {
    "Alamofire": [
      "~> 5.0.0-beta.7"
    ],
    "SwiftyJSON": [
      "~> 5.0.0"
    ],
    "IQKeyboardManagerSwift": [
      "~> 6.3.0"
    ],
    "KMPlaceholderTextView": [
      "~> 1.4.0"
    ],
    "RNCryptor": [
      "~> 5.1.0"
    ],
    "ReachabilitySwift": [
      "~> 4.3.1"
    ]
  },
  "swift_version": "5.0"
}
