{
  "name": "Dynatrace",
  "version": "8.191-beta7",
  "summary": "Dynatrace collects app performance and usage data in real-time",
  "description": "# Dynatrace\n\n[https://www.dynatrace.com](https://www.dynatrace.com/)\n\nDynatrace provides the next generation intelligent application, service and infrastructure monitoring\nplatform.\n\n[![CocoaPods](https://img.shields.io/badge/pod-8-blue.svg)](https://cocoapods.org/pods/Dynatrace)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://files.dynatrace.com/mobileagent/carthage/dynatrace.json)\n![License](https://img.shields.io/badge/license-Commercial-lightgrey.svg)\n\n## Contents\n\n* [Features](#features)\n* [Installation](#installation)\n* [Requirements](#requirements)\n* [Documentation](#documentation)\n\n## Features\n\n* Intelligent application, service and infrastructure monitoring\n* No manual setup required\n\n\n## Installation\n\n### AppMon\nThe Dynatrace iOS agent is compatible with AppMon environments with version 6.5 and higher. \n\n### iOS\n\nInclude Dynatrace in your Podfile:\n\n```ruby\nuse_frameworks!\npod 'Dynatrace', '~> 8.181'\n```\n\nIf you want to use the Dynatrace static library please include the spec `Dynatrace/lib` in your Podfile:\n\n```ruby\npod 'Dynatrace/lib', '~> 8.181'\n```\n\n### tvOS\nInclude Dynatrace in your Podfile:\n\n```ruby\nuse_frameworks!\npod 'Dynatrace/tvOS', '~> 8.181'\n```\n\n## Requirements\n\n* Project targeting iOS 8+\n\n## Documentation\n\nDetailed documentation can be found here: [Dynatrace Documentation](https://www.dynatrace.com/support/doc/)",
  "homepage": "https://www.dynatrace.com",
  "documentation_url": "https://help.dynatrace.com",
  "license": {
    "type": "Commercial",
    "text": "Terms of Service\n\n\t\t\t\t\t  1.0 Introduction.\n\t\t\t\t\t  These Terms of Service constitute the agreement between You and Dynatrace, a division of Dynatrace LLC, a Delaware company (together hereinafter referred to as 'Dynatrace'). BY USING THE SERVICE, YOU ACKNOWLEDGE THAT YOU HAVE REVIEWED AND ACCEPT THIS AGREEMENT AND ARE AUTHORIZED TO ACT ON BEHALF OF, AND BIND YOUR ENTITY ('CLIENT') TO THIS AGREEMENT.\n\t\t\t\t\t  Dynatrace reserves the right to change or modify these Terms of Service at our sole discretion at any time by posting updated Terms of Service on the Dynatrace website. Any change or modification to the Terms of Service will be effective immediately upon posting. In all cases, your continued use of the Services after publication of such modifications constitutes binding acceptance of the modified Terms of Service.\n\n\t\t\t\t\t  2.0 Scope of the Dynatrace Service; Restrictions.\n\t\t\t\t\t  The 'Service' shall be defined as the hosted services, electronic reports, analyses, documentation or Auxiliary Programs provided by Dynatrace under this Agreement which are necessary to deploy the service. Client shall have the right to use the Service ordered and made available to Client by Dynatrace hereunder for their internal use. 'Auxiliary Program'. means any software, agent or equipment that Dynatrace makes available to Client as part of the Service for purposes of facilitating access to, operation of, and/or use with, the Service.\n\t\t\t\t\t  Client shall not: (a) reverse engineer, decompile, decode, decrypt, disassemble, or in any way derive source code from the Service and/or Auxiliary Programs; (b) modify, translate, adapt, alter, or create derivative works from the Service and/or Auxiliary Programs; (c) copy, distribute, publicly display, transmit, make available in any 'public' area or accessible on the World Wide Web; (d) sublicense, sell, rent, or lease the Service and/or Auxiliary Programs; or (e) use the Service and/or Auxiliary Programs for the purposes of competing with Dynatrace, including without limitation competitive intelligence or analysis.\n\n\t\t\t\t\t  3.0 Pricing & Payment Terms.\n\t\t\t\t\t  Prices for the Service are set forth on the Dynatrace website. Payment may be made either immediately by credit card, or invoiced as provided herein. If payment is made by invoice, Dynatrace will invoice the full invoice and Client shall remit payment within thirty (30) days of the invoice date. Overdue invoices shall bear interest at 1.5% per month or such lower rate as shall be the then highest rate permitted by law. Client shall pay all applicable taxes due under this Agreement, except taxes based on Dynatrace's net income unless Client provides Dynatrace with a properly completed exemption certificate. All prices are exclusive of all taxes, duties, VAT, withholdings and other governmental assessments. Dynatrace reserves the right to suspend Services and delete all Client date held by Dynatrace, if Client fails to pay as provided herein.\n\n\t\t\t\t\t  4.0 Intellectual Property.\n\t\t\t\t\t  Client acknowledges and agrees that all ownership and proprietary rights to the Service, Auxiliary Programs and the contents thereof and all related intellectual property are and shall remain the property exclusively of Dynatrace. Dynatrace retains full rights of ownership and use in: (a) any programs, products, materials or methodologies or materials of Dynatrace created and/or developed by Dynatrace prior to or independently of the Services contemplated herein ('Pre-existing Works'); and (b) all materials, methodologies, processes, techniques, ideas, concepts, trade secrets, and know-how, which may be created or developed in connection with the Services and are modifications and/or derivatives of Dynatrace's Pre-existing Works.\n\n\t\t\t\t\t  5.0 Confidentiality.\n\t\t\t\t\t  Each party agrees: (a) that it will not disclose to any third party or use any confidential or proprietary information disclosed to it by the other party (collectively, 'Confidential Information') except as expressly permitted in this Agreement; and (b) that it will take all commercially reasonable measures to maintain the confidentiality of all Confidential Information of the other party in its possession or control, which will in no event be less than the measures it uses to maintain the confidentiality of its own information of similar importance. Confidential Information will not include information that: (i) is in or enters the public domain without breach of this Agreement; (ii) the receiving party lawfully receives from a third party without restriction on disclosure and without breach of a nondisclosure obligation; or (iii) the receiving party develops independently.\n\n\t\t\t\t\t  Client agrees that the Service: i) is Confidential Information; and ii) constitutes valuable assets and confidential trade secrets of Dynatrace. Client therefore agrees to keep in confidence and protect the Service, including but not limited to screenshots, ideas, concepts, designs, specifications, computer programs and strategies from disclosure to third parties and restrict its use as provided in this Agreement\n\n\t\t\t\t\t  6.0 Term and Termination.\n\t\t\t\t\t  The term ('Term') of the Service shall be specified as specified on the Dynatrace website.\n\n\t\t\t\t\t  7.0 Warranty.\n\t\t\t\t\t  Dynatrace warrants that the Service will function in substantial compliance with their specifications published by Dynatrace (available at help.dynatrace.com). Client acknowledges that changes by Client to its monitoring profile or corrupted, incomplete and/or interrupted data received by Dynatrace from Client's site(s), may have a material impact on the accuracy, reliability and/or timeliness of Service results, and Dynatrace shall not be responsible for any such factors beyond its reasonable control. THE ABOVE WARRANTIES ARE DYNATRACE'S ONLY WARRANTIES AND NO OTHER WARRANTY, EXPRESS OR IMPLIED, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, WILL APPLY.\n\n\t\t\t\t\t  Client represents and warrants that Client shall; (i) abide by all laws, rules and regulations; and (ii) be responsible for all content or materials originating from its Web site(s) (its 'Content').\n\n\t\t\t\t\t  8.0 Limitation of Liability.\n\t\t\t\t\t  THE ENTIRE LIABILITY OF DYNATRACE AND CLIENT'S EXCLUSIVE REMEDY FOR DAMAGES FROM ANY CAUSE RELATED TO OR ARISING OUT OF THIS AGREEMENT, REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT, OR OTHERWISE, WILL NOT EXCEED ANY FEES PAID, IF ANY, BY CLIENT UNDER THIS AGREEMENT FOR THE SERVICES GIVING RISE TO THE CLAIM OVER THE IMMEDIATELY PRECEDING TWELVE (12) MONTH PERIOD.\n\n\t\t\t\t\t  9.0 Limitation of Damages.\n\t\t\t\t\t  IN NO EVENT WILL DYNATRACE BE LIABLE FOR: (I) INCIDENTAL, INDIRECT, SPECIAL, PUNITIVE, EXEMPLARY OR CONSEQUENTIAL DAMAGES; OR (II) LOSS OF OR DAMAGE TO CLIENT'S DATA FROM ANY CAUSE, INCLUDING WITHOUT LIMITATION LOSS OF USE, REVENUES, PROFITS, SAVINGS, EVEN IF DYNATRACE KNEW OR SHOULD HAVE KNOWN OF THE POSSIBILITY OF SUCH DAMAGES.\n\n\t\t\t\t\t  10.0 Indemnification.\n\t\t\t\t\t  Each party (the 'Indemnifying Party') shall indemnify, defend and hold harmless the other party and such other party's officers, directors, employees and agents (each, an 'Indemnified Party') from and against any and all damages, liabilities, costs and expenses (including reasonable attorneys' fees) incurred by an Indemnifying Party's breach (i) of any obligation set forth in sections 2.0 (Scope of the Service; Restrictions) or 5.0 (Confidentiality).\n\n\t\t\t\t\t  11.0 Trial Service.\n\t\t\t\t\t  This section shall only apply if the Service has been provided for Client's trial and evaluation ('Trial Service'). The Trial Service is provided AS IS, with no warranties, express or implied, for the sole and exclusive purpose of enabling Client to evaluate the Subscription Service. The Trial Subscription Service shall automatically time-out at the end of the evaluation period.\n\n\t\t\t\t\t  12.0 Early Access Program.\n\t\t\t\t\t  This section shall only apply if the Subscription Service has been provided to Client for participation in the 'Early Access Program' for a new release of Dynatrace. During the Early Access Program Dynatrace will be in the stage of 'Early Adoption' and is provisioned for test purposes only. The Client acknowledges that the Service and Auxiliary Programs are in a stage of 'Early Adoption'. Therefore, Auxiliary Programs shall only be installed on computers which are regularly used by the Client for test purposes and are the property of or are permanently owned by the Client ('Designated Computers'). The use of Auxiliary Programs in a productive environment without any additional testing or adaptation to the specific requirements of an individual system environment may cause severe system failure.\n\n\t\t\t\t\t  The Early Adoption Program Services are provided AS IS, with no warranties, express or implied. Client agrees that due to the nature of the Early Adoption Program, Client may receive non-public technology, know-how and trade secrets, including, without limitation, ideas, concepts, designs, specifications, computer programs and strategies. Client agrees that the foregoing shall be treated as Confidential Information as specified in section 5.0 (Confidentiality).\n\n\t\t\t\t\t  13.0 Support for the Services.\n\t\t\t\t\t  Premium support for the Services is available on a subscription basis. Such support is provided AS IS, with no warranty, express or implied. Expert services are available on demand, on an hourly bases, at the Dynatrace then-current rates.\n\n\t\t\t\t\t  14.0 General Provisions.\n\t\t\t\t\t  14.1 Assignment.\n\t\t\t\t\t  Any attempt to assign this Agreement, without written consent, will be null and void.\n\n\t\t\t\t\t  14.2 Force Majeure.\n\t\t\t\t\t  Neither party will be responsible for any failure to perform due to causes beyond its reasonable control, including, but not limited to, acts of God, war, acts of terrorism, riot, failure of electrical, Internet, co-location or telecommunications service, acts of civil or military authorities, fire, floods, earthquakes, accidents, strikes, or fuel crises.\n\n\t\t\t\t\t  14.3 Governing Law.\n\t\t\t\t\t  This Agreement will be governed by and construed in accordance with the laws of the State of Michigan without regard to its conflicts of law principles. If the entity selling the Service is a wholly owned affiliate of Dynatrace LLC, this Agreement will be governed by the laws of the country in which such affiliate is situated.\n\n\t\t\t\t\t  14.4 Notice.\n\t\t\t\t\t  Any notice required by this Agreement must be given in writing and shall be deemed delivered upon receipt when delivered personally or upon confirmation of receipt following delivery by internationally recognized overnight courier service.\n\n\t\t\t\t\t  14.5 Waiver.\n\t\t\t\t\t  No failure or delay by any party in exercising any right, power, or remedy under this Agreement, except as specifically provided herein, shall operate as any waiver of any such right, power, or remedy.\n\n\t\t\t\t\t  14.6 Severability.\n\t\t\t\t\t  If any provision of this Agreement is held by a court to be invalid or unenforceable for any reason, the remaining provisions will continue in full force and effect without being impaired or invalidated in any way.\n\n\t\t\t\t\t  14.7 Entire Agreement.\n\t\t\t\t\t  These Terms of Service constitute the complete and exclusive agreement between the parties with respect to the subject matter hereof, superseding any prior agreements and communications (both written and oral). The terms and conditions contained in any purchase order shall be of no force or effect, even if the order is accepted by Dynatrace. This Agreement may only be modified, or any rights under it waived, by a written document executed by both parties.\n\n\t\t\t\t\t  14.8 Survival.\n\t\t\t\t\t  Sections 5, 7, 8, 9, 10 and 12 shall survive expiration or termination of this Agreement.\n\t\t\t\t\t"
  },
  "authors": {
    "Dynatrace": "support.mobile@dynatrace.com"
  },
  "social_media_url": "https://twitter.com/dynatrace",
  "platforms": {
    "ios": "8.0"
  },
  "source": {
    "http": "https://ruxit-mobile.s3.amazonaws.com/cocoapods/dynatrace-mobile-agent-ios-8.191.2.1007.zip"
  },
  "default_subspecs": "framework",
  "source_files": "iOS/agent/*.{h,m}",
  "public_header_files": "iOS/agent/*.h",
  "ios": {
    "frameworks": [
      "CoreLocation",
      "CoreTelephony",
      "Security",
      "SystemConfiguration",
      "MessageUI",
      "WebKit"
    ]
  },
  "tvos": {
    "frameworks": [
      "CoreLocation",
      "Security",
      "SystemConfiguration",
      "TVUIKit",
      "TVMLKit",
      "TVServices"
    ]
  },
  "libraries": [
    "sqlite3",
    "z",
    "c++"
  ],
  "requires_arc": true,
  "compiler_flags": "-DOS_OBJECT_USE_OBJC=1",
  "subspecs": [
    {
      "name": "lib",
      "ios": {
        "vendored_libraries": "iOS/agent/libDynatrace.a"
      },
      "source_files": "iOS/agent/*.{h,m}",
      "public_header_files": "iOS/agent/*.h"
    },
    {
      "name": "framework",
      "ios": {
        "vendored_frameworks": "iOS/agent/Dynatrace.framework"
      }
    },
    {
      "name": "tvOS",
      "platforms": {
        "tvos": "11.0"
      },
      "tvos": {
        "vendored_frameworks": "tvOS/agent/DynatraceTVOS.framework"
      }
    },
    {
      "name": "SessionReplay",
      "dependencies": {
        "Dynatrace/framework": [

        ]
      },
      "ios": {
        "vendored_frameworks": "iOS/agent/DynatraceSessionReplay.framework"
      }
    }
  ]
}
