{
  "name": "Reveal-iOS-SDK",
  "version": "1.0.6",
  "summary": "The Reveal SDK for iOS.",
  "homepage": "http://revealapp.com/",
  "authors": "Itty Bitty Apps Pty Ltd",
  "source": {
    "http": "http://download.revealapp.com/Reveal-Framework-1.0.6.zip"
  },
  "platforms": {
    "ios": null
  },
  "compiler_flags": "-ObjC",
  "frameworks": [
    "CoreGraphics",
    "CFNetwork",
    "QuartzCore"
  ],
  "libraries": "z",
  "vendored_frameworks": "Reveal-Framework-1.0.6/Reveal.framework",
  "requires_arc": false,
  "license": {
    "type": "Copyright",
    "text": "      # REVEAL LICENSE AGREEMENT v1.1\n\n      ## NOTICE TO USER:\n\n      This is a legally enforceable agreement between you (__\"you\"__ or __\"yours\"__ and other grammatical equivalents) and Itty Bitty Apps Pty Ltd. (__\"the Company\"__), which covers your use of the Reveal software product that accompanies this Agreement and related software components, which may include associated media, printed materials, and \"online\" or electronic documentation. All such software and materials are referred to herein as the __\"Software\"__ or __\"the Reveal Software\"__. If you do not agree to the terms of this License Agreement, then do not install or use the Software. By explicitly accepting this License Agreement, or by installing, copying, downloading, accessing, or otherwise using the Software, you are acknowledging and agreeing to be bound by the following terms:\n\n      ## 1. DEFINITIONS\n\n      __(a) \"Software\"__ shall mean the Reveal software including any Updates thereto, in object and source form, and the media and Documentation provided by the Company to you and for which you are granted a license pursuant to this Agreement.\n\n      __(b) \"Documentation\"__ shall mean the printed or online written reference material furnished to you in conjunction with the Software, including, without limitation, instructions, guidelines, and end user guides.\n\n      __(c) \"Intellectual Property Rights\"__ shall mean all intellectual property rights, including, without limitation, patent, copyright, trademark, and trade secret.\n\n      __(d) \"Updates\"__ shall mean a modification, error correction, bug fix, new release, or other update to or for the Software.\n\n\n      ## 2. LICENSE GRANT\n\n      The Company may, at its sole discretion, grant you a Trial License, a Personal License, an Educational License, a Commercial Seat License, a Site License or an Enterprise License.\n\n      If you have not purchased or otherwise rightfully obtained a Personal License, an Educational License, a Commercial Seat License, a Site License or an Enterprise License for the Reveal Software, the Trial License Terms (2.1) are applicable to your use of the Reveal Software. The Trial License Terms are also applicable to any usage of the Reveal Software by you that is not covered under any other licenses you may have.\n\n      The Personal License Terms (2.2) apply if you have a Personal License. The Commercial Seat License Terms (2.3) apply if you have a Commercial Seat License. The Educational License Terms (2.4) apply if you have an Educational License. The Site License Terms (2.5) apply if you have a Site License. The Enterprise License Terms (2.6) apply if you have an Enterprise License.\n\n      The General Terms (3) apply in all cases.\n\n      ### 2.1 TRIAL LICENSE TERMS\n\n      The Company grants you a non-exclusive license to use the Software for time-limited evaluation purposes, only in accordance with the terms and conditions set forth herein. The Software may be used for a period of 30 calendar days from the first time you run the Software. Upon lapse of such trial period all of or part of the functionality of the Software will be disabled automatically.\n\n      If you wish to use the Software after the trial period, you must purchase a Personal License, a Commercial Seat License, an Educational License, a Site License or an Enterprise License. The Company may extend to you an expiring license key, in which event such a license key will be considered a means to extend the trial period under the Trial License Terms.\n\n\n      ### 2.2 PERSONAL LICENSE TERMS\n\n      The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License grants you the right to activate and use the Software on no more than 2 computers primarily used by you. Use of the Software under this license may be for both commercial and non-commercial purposes. Personal licences are not available to companies, commercial institutions, government agencies or business entities.\n\n\n      ### 2.3 COMMERCIAL SEAT LICENSE TERMS\n\n      The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License is only available to companies, commercial institutions, government agencies and business entities.\n\n      This License does not allow the Software to be activated and used on computers that are not either a) owned by you, b) owned by any fully owned subsidiary of yours, c) owned by or operated primarily by your employees or employees of any fully owned subsidiary of yours. A Commercial Seat License must be purchased for every person employed by you or employed by any fully owned subsidiary of yours wishing to use the Software.\n\n      This license is granted exclusively on a per-employee basis within your organisation and is not transferable to another current employee without written permission.\n\n      This License does not allow the use of the Software other than for business purposes of your company. If entering into a Commercial Seat License you personally warrant that you have full legal authority to enter into this agreement on behalf of your employer.\n\n\n      ### 2.4 EDUCATIONAL LICENSE TERMS\n\n      The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License grants you the right to activate and use the Software on no more than 2 computers primarily used by you.\n\n      Educational Licenses are available only to individual students and teaching staff. Use of the Software under this license must be for non-commercial purposes only, including education and research.\n\n\n      ### 2.5 SITE LICENSE TERMS\n\n      The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License is only available to companies, commercial institutions, government agencies and business entities.\n\n      This License does not allow the Software to be activated and used on computers that are not either a) owned by you, b) owned by any fully owned subsidiary of yours, c) owned by or operated primarily by your employees or employees of any fully owned subsidiary of yours.\n\n      Unless otherwise specified, any Site License you acquire from the Company is valid only for use at the business locations listed on your sales invoice.\n\n      This License does not allow the use of the Software other than for business purposes of your company. If entering into a Site License you personally warrant that you have full legal authority to enter into this agreement on behalf of your employer.\n\n\n      ### 2.6 ENTERPRISE LICENSE TERMS\n\n      The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License is only available to companies, commercial institutions, government agencies and business entities.\n\n      This License does not allow the Software to be activated and used on computers that are not either a) owned by you, b) owned by any fully owned subsidiary of yours, c) owned by or operated primarily by your employees or employees of any fully owned subsidiary of yours.\n\n      This License allows global use of the Software by all employees or employees of any fully owned subsidiary of the company, commercial institution, government agency or business entity listed in your sales invoice.\n\n      This License does not allow the use of the Software other than for business purposes of your company. If entering into an Enterprise License you personally warrant that you have full legal authority to enter into this agreement on behalf of your employer.\n\n\n      ## 3. GENERAL TERMS\n\n      ### 3.1 TITLE\n\n      ‘REVEAL’™ and ‘ITTY BITTY APPS’™ represent proprietary common law trademarks owned by the Company and must not be used without written permission.\n\n      The Company shall own and retain all right, title and interest in and to all Intellectual Property Rights related to the Software, the Documentation and all improvements to any of them however so created. You do not acquire any other rights, express or implied, in the Software. ALL RIGHTS NOT EXPRESSLY GRANTED HEREUNDER ARE RESERVED TO THE COMPANY.\n\n      ### 3.2 ARCHIVAL OR BACKUP COPIES\n\n      You may copy the Software for backup and archival purposes only, provided that the original and each copy is kept in your possession and that your installation and use of the Software does not exceed that allowed in the \"License Grant\" section above.\n\n      ### 3.3 THINGS YOU MUST NOT DO\n\n      The Software and Documentation are protected by Australian and international copyright law. You must treat the Software and Documentation like any other copyrighted material—for example, a book. You may not:\n\n      * copy the Documentation,\n      * copy the Software except to make archival or backup copies as provided above,\n      * modify or adapt the Software or merge it into another program,\n      * reverse engineer, disassemble, decompile or make any attempt to discover the source code of the Software,\n      * place the Software onto a server so that it is accessible via a public network such as the Internet, or\n      * sublicense, rent, lease, sublicense or lend any portion of the Software or Documentation.\n\n      ### 3.4 LIMITATION OF LICENSE VALIDITY\n\n      Any License to use the Software granted to you under this License Agreement is limited to the current major release of the Software exclusively. The Company will at its sole discretion decide when a version of the Software will be considered a new major release. The Company reserves the right to change the terms of this agreement in any future major or minor release of the software.\n\n      ### 3.5 ADDITIONAL SERVICES\n\n      Fees may apply for additional services and products offered by the company and others, such as services that integrate with the Software or extend the functionality of the Software.\n\n      ### 3.6 TECHNICAL AND RELATED INFORMATION\n\n      The Company and its subsidiaries may collect and use technical and related information, such as technical information concerning your computer, system and application software. The Company does not collect (a) any information that identifies your work, (b) any file names or file contents of anything you work on using the Software. The Company and its subsidiaries are free to use the collected information in any form that does not personally identify you.\n\n      ### 3.7 PRIVACY\n\n      The Company will not sell or in any way license usage of your personal information to third parties. The Company will make reasonable efforts to keep your personal information secure.\n\n      ### 3.8 TRANSFERS\n\n      With prior notice to the Company, you may transfer all your rights to use the Software and Documentation only once and permanently to another person or legal entity provided you transfer this License Agreement, the Software and Documentation, including all copies, updates and prior versions to such person or entity and that you retain no copies, including copies stored on computer. The receiving person or legal entity must satisfy the conditions of the applicable license terms set out in section 2.\n\n      ### 3.9 LIMITED WARRANTY\n\n      We warrant that for a period of 14 days after delivery of this copy of the Software to you the Software will perform in substantial accordance with the Documentation.\n\n      To the extent permitted by applicable law, THE FOREGOING LIMITED WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, AND WE DISCLAIM ANY AND ALL IMPLIED WARRANTIES OR CONDITIONS, INCLUDING ANY IMPLIED WARRANTY OF TITLE, NONINFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, regardless of whether we know or had reason to know of your particular needs. No employee, agent, dealer or distributor of ours is authorized to modify this limited warranty, nor to make any additional warranties.\n      SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION MAY NOT APPLY TO YOU.\n\n      ### 3.10 LIMITED REMEDY\n\n      Our entire liability and your exclusive remedy for breach of the foregoing warranty shall be, at our option, to return the price you paid minus fees incurred to transfer those funds to you.\n\n      IN NO EVENT WILL WE BE LIABLE TO YOU FOR ANY DIRECT OR INDIRECT DAMAGES, INCLUDING ANY LOST PROFITS, LOST SAVINGS, OR OTHER INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING FROM THE USE OR THE INABILITY TO USE THE SOFTWARE (EVEN IF WE OR AN AUTHORIZED DEALER OR DISTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF THESE DAMAGES), OR FOR ANY CLAIM BY ANY OTHER PARTY.\n      SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION MAY NOT APPLY TO YOU.\n\n      ### 3.11 TERM AND TERMINATION\n\n      This license agreement takes effect upon your use of the software and remains effective until terminated. You may terminate it at any time by destroying all copies of the Software and Documentation in your possession. It will also automatically terminate if you fail to comply with any term or condition of this license agreement. You hereby agree that on termination of this license to permanently destroy all copies of the Software and Documentation in your possession.\n\n      ### 3.12 CONFIDENTIALITY\n\n      The Software contains trade secrets and proprietary know-how that belong to the Company and it is being made available to you in strict confidence. ANY USE OR DISCLOSURE OF THE SOFTWARE, OR OF ITS ALGORITHMS, PROTOCOLS OR INTERFACES, OTHER THAN IN STRICT ACCORDANCE WITH THIS LICENSE AGREEMENT, MAY BE ACTIONABLE AS A VIOLATION OF THE COMPANY'S TRADE SECRET RIGHTS.\n\n      ### 3.13 GENERAL PROVISIONS\n\n      __3.13.1__ This written license agreement is the exclusive agreement between you and the Company concerning the Software and Documentation and supersedes any prior purchase order, communication, advertising or representation concerning the Software.\n\n      __3.13.2__ This is the entire agreement between the parties relating to the subject matter hereof and all other terms are rejected. No waiver or modification of this Agreement shall be valid unless in writing signed by each party. The waiver of a breach of any term hereof shall in no way be construed as a waiver of any term or other breach hereof. If any provision of this Agreement is held by a court of competent jurisdiction to be contrary to law the remaining provisions of this Agreement shall remain in full force and effect.\n\n      __3.13.3__ In the event of litigation between you and the Company concerning the Software or Documentation, the prevailing party in the litigation will be entitled to recover attorney fees and expenses from the other party.\n\n      __3.13.4__ This Agreement, and all disputes arising out of or related thereto, shall be governed by and construed under the laws of the State of Victoria, Australia, without reference to conflict of laws principles. All such disputes shall be subject to the exclusive jurisdiction of the state and federal courts located in Australia, and the parties agree and submit to the personal and exclusive jurisdiction and venue of these courts.\n\n\n      ## 4. CONTACT INFORMATION\n\n      If you have any questions about this License Agreement, or if you want to contact the Company for any reason, please direct all mail correspondence to: Itty Bitty Apps Pty. Ltd. Level 2, 27 Hardware Lane, Melbourne, Victoria, Australia, 3000, or electronic correspondence to info@ittybittyapps.com.\n\n      Do you agree to be bound by the terms of this agreement?\n"
  }
}
