{
  "name": "DebuggIt",
  "version": "1.0.1",
  "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\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": "info@debugg.it"
  },
  "source": {
    "git": "https://github.com/MoodupDev/DebuggIt-iOS.git",
    "tag": "1.0.1"
  },
  "source_files": "DebuggIt/**/*.swift",
  "resources": "DebuggIt/**/*.{png,jpeg,jpg,ttf,storyboard,xib,xcassets}",
  "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.0"
    ],
    "ReachabilitySwift": [
      "~> 4.3.1"
    ],
    "AWSCore": [
      "~> 2.10.2"
    ],
    "AWSS3": [
      "~> 2.10.2"
    ]
  },
  "swift_version": "5.0"
}
