diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index cd2f136..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,78 +0,0 @@
-# Logs
-logs
-*.log
-Thumbs.db
-# Runtime data
-pids
-*.pid
-*.seed
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-
-# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Compiled binary addons (http://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directory
-# Commenting this out is preferred by some people, see
-# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
-node_modules
-
-# Users Environment Variables
-.lock-wscript
-
-# Xcode
-#
-build/
-*.pbxuser
-*.xcuserstate
-*.xcuserdata
-!default.pbxuser
-*.mode1v3
-!default.mode1v3
-*.mode2v3
-!default.mode2v3
-*.perspectivev3
-!default.perspectivev3
-xcuserdata
-*.xccheckout
-*.moved-aside
-DerivedData
-*.hmap
-*.ipa
-*.xcuserstate
-
-**/build/
-**/*.pbxuser
-**/*.xcuserstate
-**/*.xcuserdata
-!**/default.pbxuser
-**/*.mode1v3
-!**/default.mode1v3
-**/*.mode2v3
-!**/default.mode2v3
-**/*.perspectivev3
-!**/default.perspectivev3
-**/xcuserdata
-**/*.xccheckout
-**/*.moved-aside
-**/DerivedData
-**/*.hmap
-**/*.ipa
-**/*.xcuserstate
-
-# DS_Store
-.DS_Store
-
-.metadata
-
-docs/
-
-# Ignore Pods
-Pods/
diff --git a/Buttons/Newclock.png b/Buttons/Newclock.png
deleted file mode 100644
index e374879..0000000
Binary files a/Buttons/Newclock.png and /dev/null differ
diff --git a/LICENSE.txt b/LICENSE.txt
deleted file mode 100644
index 2bb9ad2..0000000
--- a/LICENSE.txt
+++ /dev/null
@@ -1,176 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
\ No newline at end of file
diff --git a/MWIMG/01d.png b/MWIMG/01d.png
deleted file mode 100644
index 81c1366..0000000
Binary files a/MWIMG/01d.png and /dev/null differ
diff --git a/MWIMG/01n.png b/MWIMG/01n.png
deleted file mode 100644
index 1e5ae33..0000000
Binary files a/MWIMG/01n.png and /dev/null differ
diff --git a/MWIMG/02d.png b/MWIMG/02d.png
deleted file mode 100644
index e375257..0000000
Binary files a/MWIMG/02d.png and /dev/null differ
diff --git a/MWIMG/02n.png b/MWIMG/02n.png
deleted file mode 100644
index a6f17fd..0000000
Binary files a/MWIMG/02n.png and /dev/null differ
diff --git a/MWIMG/03d.png b/MWIMG/03d.png
deleted file mode 100644
index 903ec83..0000000
Binary files a/MWIMG/03d.png and /dev/null differ
diff --git a/MWIMG/03n.png b/MWIMG/03n.png
deleted file mode 100644
index 903ec83..0000000
Binary files a/MWIMG/03n.png and /dev/null differ
diff --git a/MWIMG/04d.png b/MWIMG/04d.png
deleted file mode 100644
index df90dac..0000000
Binary files a/MWIMG/04d.png and /dev/null differ
diff --git a/MWIMG/04n.png b/MWIMG/04n.png
deleted file mode 100644
index df90dac..0000000
Binary files a/MWIMG/04n.png and /dev/null differ
diff --git a/MWIMG/09d.png b/MWIMG/09d.png
deleted file mode 100644
index ad4964a..0000000
Binary files a/MWIMG/09d.png and /dev/null differ
diff --git a/MWIMG/09n.png b/MWIMG/09n.png
deleted file mode 100644
index 5cf19b5..0000000
Binary files a/MWIMG/09n.png and /dev/null differ
diff --git a/MWIMG/10d.png b/MWIMG/10d.png
deleted file mode 100644
index 315a105..0000000
Binary files a/MWIMG/10d.png and /dev/null differ
diff --git a/MWIMG/10n.png b/MWIMG/10n.png
deleted file mode 100644
index eaa034d..0000000
Binary files a/MWIMG/10n.png and /dev/null differ
diff --git a/MWIMG/11d.png b/MWIMG/11d.png
deleted file mode 100644
index 4836b10..0000000
Binary files a/MWIMG/11d.png and /dev/null differ
diff --git a/MWIMG/11n.png b/MWIMG/11n.png
deleted file mode 100644
index 4836b10..0000000
Binary files a/MWIMG/11n.png and /dev/null differ
diff --git a/MWIMG/13d.png b/MWIMG/13d.png
deleted file mode 100644
index a90de3f..0000000
Binary files a/MWIMG/13d.png and /dev/null differ
diff --git a/MWIMG/13n.png b/MWIMG/13n.png
deleted file mode 100644
index a90de3f..0000000
Binary files a/MWIMG/13n.png and /dev/null differ
diff --git a/MWIMG/2ximg/01d40@2x.png b/MWIMG/2ximg/01d40@2x.png
deleted file mode 100644
index 847e7cb..0000000
Binary files a/MWIMG/2ximg/01d40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/01d50@2x.png b/MWIMG/2ximg/01d50@2x.png
deleted file mode 100644
index b8aafe5..0000000
Binary files a/MWIMG/2ximg/01d50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/01d60@2x.png b/MWIMG/2ximg/01d60@2x.png
deleted file mode 100644
index fb695d3..0000000
Binary files a/MWIMG/2ximg/01d60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/01d66@2x.png b/MWIMG/2ximg/01d66@2x.png
deleted file mode 100644
index 0bc14e1..0000000
Binary files a/MWIMG/2ximg/01d66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/01d80@2x.png b/MWIMG/2ximg/01d80@2x.png
deleted file mode 100644
index c78352e..0000000
Binary files a/MWIMG/2ximg/01d80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/01n40@2x.png b/MWIMG/2ximg/01n40@2x.png
deleted file mode 100644
index e911997..0000000
Binary files a/MWIMG/2ximg/01n40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/01n50@2x.png b/MWIMG/2ximg/01n50@2x.png
deleted file mode 100644
index acd91e4..0000000
Binary files a/MWIMG/2ximg/01n50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/01n60@2x.png b/MWIMG/2ximg/01n60@2x.png
deleted file mode 100644
index 32ec21e..0000000
Binary files a/MWIMG/2ximg/01n60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/01n66@2x.png b/MWIMG/2ximg/01n66@2x.png
deleted file mode 100644
index 9bf0790..0000000
Binary files a/MWIMG/2ximg/01n66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/01n80@2x.png b/MWIMG/2ximg/01n80@2x.png
deleted file mode 100644
index 3fd2b06..0000000
Binary files a/MWIMG/2ximg/01n80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02d40@2x.png b/MWIMG/2ximg/02d40@2x.png
deleted file mode 100644
index 79f6f1e..0000000
Binary files a/MWIMG/2ximg/02d40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02d50@2x.png b/MWIMG/2ximg/02d50@2x.png
deleted file mode 100644
index 75b5ffe..0000000
Binary files a/MWIMG/2ximg/02d50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02d60@2x.png b/MWIMG/2ximg/02d60@2x.png
deleted file mode 100644
index a927e86..0000000
Binary files a/MWIMG/2ximg/02d60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02d66@2x.png b/MWIMG/2ximg/02d66@2x.png
deleted file mode 100644
index 928d50f..0000000
Binary files a/MWIMG/2ximg/02d66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02d80@2x.png b/MWIMG/2ximg/02d80@2x.png
deleted file mode 100644
index 705965f..0000000
Binary files a/MWIMG/2ximg/02d80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02n40@2x.png b/MWIMG/2ximg/02n40@2x.png
deleted file mode 100644
index a86f642..0000000
Binary files a/MWIMG/2ximg/02n40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02n50@2x.png b/MWIMG/2ximg/02n50@2x.png
deleted file mode 100644
index 38c71e4..0000000
Binary files a/MWIMG/2ximg/02n50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02n60@2x.png b/MWIMG/2ximg/02n60@2x.png
deleted file mode 100644
index afaccf0..0000000
Binary files a/MWIMG/2ximg/02n60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02n66@2x.png b/MWIMG/2ximg/02n66@2x.png
deleted file mode 100644
index 9ad7eba..0000000
Binary files a/MWIMG/2ximg/02n66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/02n80@2x.png b/MWIMG/2ximg/02n80@2x.png
deleted file mode 100644
index c0fd518..0000000
Binary files a/MWIMG/2ximg/02n80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03d40@2x.png b/MWIMG/2ximg/03d40@2x.png
deleted file mode 100644
index 28fef42..0000000
Binary files a/MWIMG/2ximg/03d40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03d50@2x.png b/MWIMG/2ximg/03d50@2x.png
deleted file mode 100644
index 2c97270..0000000
Binary files a/MWIMG/2ximg/03d50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03d60@2x.png b/MWIMG/2ximg/03d60@2x.png
deleted file mode 100644
index 03c2a45..0000000
Binary files a/MWIMG/2ximg/03d60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03d66@2x.png b/MWIMG/2ximg/03d66@2x.png
deleted file mode 100644
index 95e3ce5..0000000
Binary files a/MWIMG/2ximg/03d66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03d80@2x.png b/MWIMG/2ximg/03d80@2x.png
deleted file mode 100644
index dbd2875..0000000
Binary files a/MWIMG/2ximg/03d80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03n40@2x.png b/MWIMG/2ximg/03n40@2x.png
deleted file mode 100644
index 1bb63a9..0000000
Binary files a/MWIMG/2ximg/03n40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03n50@2x.png b/MWIMG/2ximg/03n50@2x.png
deleted file mode 100644
index 2c97270..0000000
Binary files a/MWIMG/2ximg/03n50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03n60@2x.png b/MWIMG/2ximg/03n60@2x.png
deleted file mode 100644
index 03c2a45..0000000
Binary files a/MWIMG/2ximg/03n60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03n66@2x.png b/MWIMG/2ximg/03n66@2x.png
deleted file mode 100644
index 95e3ce5..0000000
Binary files a/MWIMG/2ximg/03n66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/03n80@2x.png b/MWIMG/2ximg/03n80@2x.png
deleted file mode 100644
index dbd2875..0000000
Binary files a/MWIMG/2ximg/03n80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04d40@2x.png b/MWIMG/2ximg/04d40@2x.png
deleted file mode 100644
index ba5996b..0000000
Binary files a/MWIMG/2ximg/04d40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04d50@2x.png b/MWIMG/2ximg/04d50@2x.png
deleted file mode 100644
index f2d1662..0000000
Binary files a/MWIMG/2ximg/04d50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04d60@2x.png b/MWIMG/2ximg/04d60@2x.png
deleted file mode 100644
index 638a670..0000000
Binary files a/MWIMG/2ximg/04d60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04d66@2x.png b/MWIMG/2ximg/04d66@2x.png
deleted file mode 100644
index 84b77fd..0000000
Binary files a/MWIMG/2ximg/04d66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04d80@2x.png b/MWIMG/2ximg/04d80@2x.png
deleted file mode 100644
index 2025f5a..0000000
Binary files a/MWIMG/2ximg/04d80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04n40@2x.png b/MWIMG/2ximg/04n40@2x.png
deleted file mode 100644
index ba5996b..0000000
Binary files a/MWIMG/2ximg/04n40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04n50@2x.png b/MWIMG/2ximg/04n50@2x.png
deleted file mode 100644
index f2d1662..0000000
Binary files a/MWIMG/2ximg/04n50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04n60@2x.png b/MWIMG/2ximg/04n60@2x.png
deleted file mode 100644
index 638a670..0000000
Binary files a/MWIMG/2ximg/04n60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04n66@2x.png b/MWIMG/2ximg/04n66@2x.png
deleted file mode 100644
index 84b77fd..0000000
Binary files a/MWIMG/2ximg/04n66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/04n80@2x.png b/MWIMG/2ximg/04n80@2x.png
deleted file mode 100644
index 2025f5a..0000000
Binary files a/MWIMG/2ximg/04n80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/09d40@2x.png b/MWIMG/2ximg/09d40@2x.png
deleted file mode 100644
index 9b87a02..0000000
Binary files a/MWIMG/2ximg/09d40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/09d50@2x.png b/MWIMG/2ximg/09d50@2x.png
deleted file mode 100644
index f8a22f0..0000000
Binary files a/MWIMG/2ximg/09d50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/09d60@2x.png b/MWIMG/2ximg/09d60@2x.png
deleted file mode 100644
index d7417ec..0000000
Binary files a/MWIMG/2ximg/09d60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/09d66@2x.png b/MWIMG/2ximg/09d66@2x.png
deleted file mode 100644
index 57b5b7b..0000000
Binary files a/MWIMG/2ximg/09d66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/09d80@2x.png b/MWIMG/2ximg/09d80@2x.png
deleted file mode 100644
index 2912dc7..0000000
Binary files a/MWIMG/2ximg/09d80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11d40@2x.png b/MWIMG/2ximg/11d40@2x.png
deleted file mode 100644
index db0cd0d..0000000
Binary files a/MWIMG/2ximg/11d40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11d50@2x.png b/MWIMG/2ximg/11d50@2x.png
deleted file mode 100644
index cc44f27..0000000
Binary files a/MWIMG/2ximg/11d50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11d60@2x.png b/MWIMG/2ximg/11d60@2x.png
deleted file mode 100644
index e282532..0000000
Binary files a/MWIMG/2ximg/11d60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11d66@2x.png b/MWIMG/2ximg/11d66@2x.png
deleted file mode 100644
index 803af38..0000000
Binary files a/MWIMG/2ximg/11d66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11d80@2x.png b/MWIMG/2ximg/11d80@2x.png
deleted file mode 100644
index aa6edfc..0000000
Binary files a/MWIMG/2ximg/11d80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11n40@2x.png b/MWIMG/2ximg/11n40@2x.png
deleted file mode 100644
index db0cd0d..0000000
Binary files a/MWIMG/2ximg/11n40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11n50@2x.png b/MWIMG/2ximg/11n50@2x.png
deleted file mode 100644
index cc44f27..0000000
Binary files a/MWIMG/2ximg/11n50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11n60@2x.png b/MWIMG/2ximg/11n60@2x.png
deleted file mode 100644
index e282532..0000000
Binary files a/MWIMG/2ximg/11n60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11n66@2x.png b/MWIMG/2ximg/11n66@2x.png
deleted file mode 100644
index 803af38..0000000
Binary files a/MWIMG/2ximg/11n66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/11n80@2x.png b/MWIMG/2ximg/11n80@2x.png
deleted file mode 100644
index aa6edfc..0000000
Binary files a/MWIMG/2ximg/11n80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50d40@2x.png b/MWIMG/2ximg/50d40@2x.png
deleted file mode 100644
index 52cc642..0000000
Binary files a/MWIMG/2ximg/50d40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50d50@2x.png b/MWIMG/2ximg/50d50@2x.png
deleted file mode 100644
index 2c67b40..0000000
Binary files a/MWIMG/2ximg/50d50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50d60@2x.png b/MWIMG/2ximg/50d60@2x.png
deleted file mode 100644
index 455e4f6..0000000
Binary files a/MWIMG/2ximg/50d60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50d66@2x.png b/MWIMG/2ximg/50d66@2x.png
deleted file mode 100644
index 74d9dcc..0000000
Binary files a/MWIMG/2ximg/50d66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50d80@2x.png b/MWIMG/2ximg/50d80@2x.png
deleted file mode 100644
index def944d..0000000
Binary files a/MWIMG/2ximg/50d80@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50n40@2x.png b/MWIMG/2ximg/50n40@2x.png
deleted file mode 100644
index 52cc642..0000000
Binary files a/MWIMG/2ximg/50n40@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50n50@2x.png b/MWIMG/2ximg/50n50@2x.png
deleted file mode 100644
index 2c67b40..0000000
Binary files a/MWIMG/2ximg/50n50@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50n60@2x.png b/MWIMG/2ximg/50n60@2x.png
deleted file mode 100644
index 455e4f6..0000000
Binary files a/MWIMG/2ximg/50n60@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50n66@2x.png b/MWIMG/2ximg/50n66@2x.png
deleted file mode 100644
index 74d9dcc..0000000
Binary files a/MWIMG/2ximg/50n66@2x.png and /dev/null differ
diff --git a/MWIMG/2ximg/50n80@2x.png b/MWIMG/2ximg/50n80@2x.png
deleted file mode 100644
index def944d..0000000
Binary files a/MWIMG/2ximg/50n80@2x.png and /dev/null differ
diff --git a/MWIMG/50d.png b/MWIMG/50d.png
deleted file mode 100644
index 2eef6d9..0000000
Binary files a/MWIMG/50d.png and /dev/null differ
diff --git a/MWIMG/50n.png b/MWIMG/50n.png
deleted file mode 100644
index 2eef6d9..0000000
Binary files a/MWIMG/50n.png and /dev/null differ
diff --git a/MapLayer.tm2/.thumb.png b/MapLayer.tm2/.thumb.png
deleted file mode 100755
index 7c71518..0000000
Binary files a/MapLayer.tm2/.thumb.png and /dev/null differ
diff --git a/MapLayer.tm2/LICENSE.txt b/MapLayer.tm2/LICENSE.txt
deleted file mode 100755
index dc09bce..0000000
--- a/MapLayer.tm2/LICENSE.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright © 2014, Mapbox. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of the Mapbox, Inc. nor the names of
- its contributors may be used to endorse or promote products
- derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/MapLayer.tm2/README.md b/MapLayer.tm2/README.md
deleted file mode 100755
index b0346d4..0000000
--- a/MapLayer.tm2/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Mapbox Outdoors
-
-Outdoors style for [Mapbox Studio](https://github.com/mapbox/mapbox-studio).
diff --git a/MapLayer.tm2/img/dot-small.png b/MapLayer.tm2/img/dot-small.png
deleted file mode 100755
index f78f262..0000000
Binary files a/MapLayer.tm2/img/dot-small.png and /dev/null differ
diff --git a/MapLayer.tm2/img/maki/airfield-12.svg b/MapLayer.tm2/img/maki/airfield-12.svg
deleted file mode 100755
index fea05e6..0000000
--- a/MapLayer.tm2/img/maki/airfield-12.svg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/airfield-18.svg b/MapLayer.tm2/img/maki/airfield-18.svg
deleted file mode 100755
index 49b4518..0000000
--- a/MapLayer.tm2/img/maki/airfield-18.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/airfield-24.svg b/MapLayer.tm2/img/maki/airfield-24.svg
deleted file mode 100755
index 16f1fe2..0000000
--- a/MapLayer.tm2/img/maki/airfield-24.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/airport-12.svg b/MapLayer.tm2/img/maki/airport-12.svg
deleted file mode 100755
index 8d77bae..0000000
--- a/MapLayer.tm2/img/maki/airport-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/airport-18.svg b/MapLayer.tm2/img/maki/airport-18.svg
deleted file mode 100755
index 356582b..0000000
--- a/MapLayer.tm2/img/maki/airport-18.svg
+++ /dev/null
@@ -1,135 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/airport-24.svg b/MapLayer.tm2/img/maki/airport-24.svg
deleted file mode 100755
index b113406..0000000
--- a/MapLayer.tm2/img/maki/airport-24.svg
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/alcohol-shop-12.svg b/MapLayer.tm2/img/maki/alcohol-shop-12.svg
deleted file mode 100755
index 34bc9c7..0000000
--- a/MapLayer.tm2/img/maki/alcohol-shop-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/art-gallery-12.svg b/MapLayer.tm2/img/maki/art-gallery-12.svg
deleted file mode 100755
index f36e14a..0000000
--- a/MapLayer.tm2/img/maki/art-gallery-12.svg
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/bakery-12.svg b/MapLayer.tm2/img/maki/bakery-12.svg
deleted file mode 100755
index 3080f25..0000000
--- a/MapLayer.tm2/img/maki/bakery-12.svg
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/bank-12.svg b/MapLayer.tm2/img/maki/bank-12.svg
deleted file mode 100755
index 9c232fc..0000000
--- a/MapLayer.tm2/img/maki/bank-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/bar-12.svg b/MapLayer.tm2/img/maki/bar-12.svg
deleted file mode 100755
index 5aef64d..0000000
--- a/MapLayer.tm2/img/maki/bar-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/beer-12.svg b/MapLayer.tm2/img/maki/beer-12.svg
deleted file mode 100755
index c3bb558..0000000
--- a/MapLayer.tm2/img/maki/beer-12.svg
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/bicycle-12.svg b/MapLayer.tm2/img/maki/bicycle-12.svg
deleted file mode 100755
index 53e3e6b..0000000
--- a/MapLayer.tm2/img/maki/bicycle-12.svg
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/bus-12.svg b/MapLayer.tm2/img/maki/bus-12.svg
deleted file mode 100755
index cc51dcf..0000000
--- a/MapLayer.tm2/img/maki/bus-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/cafe-12.svg b/MapLayer.tm2/img/maki/cafe-12.svg
deleted file mode 100755
index e4c3d86..0000000
--- a/MapLayer.tm2/img/maki/cafe-12.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/camera-12.svg b/MapLayer.tm2/img/maki/camera-12.svg
deleted file mode 100755
index e22fad3..0000000
--- a/MapLayer.tm2/img/maki/camera-12.svg
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/MapLayer.tm2/img/maki/campsite-12.svg b/MapLayer.tm2/img/maki/campsite-12.svg
deleted file mode 100755
index 625155b..0000000
--- a/MapLayer.tm2/img/maki/campsite-12.svg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/car-12.svg b/MapLayer.tm2/img/maki/car-12.svg
deleted file mode 100755
index 2aee222..0000000
--- a/MapLayer.tm2/img/maki/car-12.svg
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/MapLayer.tm2/img/maki/cemetery-12.svg b/MapLayer.tm2/img/maki/cemetery-12.svg
deleted file mode 100755
index b407382..0000000
--- a/MapLayer.tm2/img/maki/cemetery-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/cinema-12.svg b/MapLayer.tm2/img/maki/cinema-12.svg
deleted file mode 100755
index 3363705..0000000
--- a/MapLayer.tm2/img/maki/cinema-12.svg
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/clothing-store-12.svg b/MapLayer.tm2/img/maki/clothing-store-12.svg
deleted file mode 100755
index da3d28f..0000000
--- a/MapLayer.tm2/img/maki/clothing-store-12.svg
+++ /dev/null
@@ -1,122 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/college-12.svg b/MapLayer.tm2/img/maki/college-12.svg
deleted file mode 100755
index e6cec42..0000000
--- a/MapLayer.tm2/img/maki/college-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/dog-park-12.svg b/MapLayer.tm2/img/maki/dog-park-12.svg
deleted file mode 100755
index ce5c189..0000000
--- a/MapLayer.tm2/img/maki/dog-park-12.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
diff --git a/MapLayer.tm2/img/maki/embassy-12.svg b/MapLayer.tm2/img/maki/embassy-12.svg
deleted file mode 100755
index 85ded54..0000000
--- a/MapLayer.tm2/img/maki/embassy-12.svg
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/fast-food-12.svg b/MapLayer.tm2/img/maki/fast-food-12.svg
deleted file mode 100755
index b034f69..0000000
--- a/MapLayer.tm2/img/maki/fast-food-12.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/ferry-12.svg b/MapLayer.tm2/img/maki/ferry-12.svg
deleted file mode 100755
index cd7cbc6..0000000
--- a/MapLayer.tm2/img/maki/ferry-12.svg
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/fire-station-12.svg b/MapLayer.tm2/img/maki/fire-station-12.svg
deleted file mode 100755
index 77ccb0a..0000000
--- a/MapLayer.tm2/img/maki/fire-station-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/fuel-12.svg b/MapLayer.tm2/img/maki/fuel-12.svg
deleted file mode 100755
index 3f722f5..0000000
--- a/MapLayer.tm2/img/maki/fuel-12.svg
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/garden-12.svg b/MapLayer.tm2/img/maki/garden-12.svg
deleted file mode 100755
index 20b87ce..0000000
--- a/MapLayer.tm2/img/maki/garden-12.svg
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/golf-12.svg b/MapLayer.tm2/img/maki/golf-12.svg
deleted file mode 100755
index f08d7a2..0000000
--- a/MapLayer.tm2/img/maki/golf-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/grocery-12.svg b/MapLayer.tm2/img/maki/grocery-12.svg
deleted file mode 100755
index 47eb70a..0000000
--- a/MapLayer.tm2/img/maki/grocery-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/harbor-12.svg b/MapLayer.tm2/img/maki/harbor-12.svg
deleted file mode 100755
index 01a5e9e..0000000
--- a/MapLayer.tm2/img/maki/harbor-12.svg
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/heliport-12.svg b/MapLayer.tm2/img/maki/heliport-12.svg
deleted file mode 100755
index 9a35c38..0000000
--- a/MapLayer.tm2/img/maki/heliport-12.svg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/heliport-18.svg b/MapLayer.tm2/img/maki/heliport-18.svg
deleted file mode 100755
index 66127e1..0000000
--- a/MapLayer.tm2/img/maki/heliport-18.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/heliport-24.svg b/MapLayer.tm2/img/maki/heliport-24.svg
deleted file mode 100755
index f97da11..0000000
--- a/MapLayer.tm2/img/maki/heliport-24.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/hospital-12.svg b/MapLayer.tm2/img/maki/hospital-12.svg
deleted file mode 100755
index 1ff6532..0000000
--- a/MapLayer.tm2/img/maki/hospital-12.svg
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/laundry-12.svg b/MapLayer.tm2/img/maki/laundry-12.svg
deleted file mode 100755
index 019eb0c..0000000
--- a/MapLayer.tm2/img/maki/laundry-12.svg
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/MapLayer.tm2/img/maki/library-12.svg b/MapLayer.tm2/img/maki/library-12.svg
deleted file mode 100755
index 7af3665..0000000
--- a/MapLayer.tm2/img/maki/library-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/lodging-12.svg b/MapLayer.tm2/img/maki/lodging-12.svg
deleted file mode 100755
index be7f553..0000000
--- a/MapLayer.tm2/img/maki/lodging-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/monument-12.svg b/MapLayer.tm2/img/maki/monument-12.svg
deleted file mode 100755
index 80b9c8f..0000000
--- a/MapLayer.tm2/img/maki/monument-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/museum-12.svg b/MapLayer.tm2/img/maki/museum-12.svg
deleted file mode 100755
index ca2f8aa..0000000
--- a/MapLayer.tm2/img/maki/museum-12.svg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/music-12.svg b/MapLayer.tm2/img/maki/music-12.svg
deleted file mode 100755
index 97062e2..0000000
--- a/MapLayer.tm2/img/maki/music-12.svg
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/park-12.svg b/MapLayer.tm2/img/maki/park-12.svg
deleted file mode 100755
index 7b8bf4a..0000000
--- a/MapLayer.tm2/img/maki/park-12.svg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/pharmacy-12.svg b/MapLayer.tm2/img/maki/pharmacy-12.svg
deleted file mode 100755
index 9f03e40..0000000
--- a/MapLayer.tm2/img/maki/pharmacy-12.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/place-of-worship-12.svg b/MapLayer.tm2/img/maki/place-of-worship-12.svg
deleted file mode 100755
index 6cb0ddf..0000000
--- a/MapLayer.tm2/img/maki/place-of-worship-12.svg
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/police-12.svg b/MapLayer.tm2/img/maki/police-12.svg
deleted file mode 100755
index 12116b1..0000000
--- a/MapLayer.tm2/img/maki/police-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/post-12.svg b/MapLayer.tm2/img/maki/post-12.svg
deleted file mode 100755
index 54f2cff..0000000
--- a/MapLayer.tm2/img/maki/post-12.svg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/prison-12.svg b/MapLayer.tm2/img/maki/prison-12.svg
deleted file mode 100755
index 8beafcf..0000000
--- a/MapLayer.tm2/img/maki/prison-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/religious-christian-12.svg b/MapLayer.tm2/img/maki/religious-christian-12.svg
deleted file mode 100755
index 15aa8f8..0000000
--- a/MapLayer.tm2/img/maki/religious-christian-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/religious-jewish-12.svg b/MapLayer.tm2/img/maki/religious-jewish-12.svg
deleted file mode 100755
index 3cdaf3b..0000000
--- a/MapLayer.tm2/img/maki/religious-jewish-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/religious-muslim-12.svg b/MapLayer.tm2/img/maki/religious-muslim-12.svg
deleted file mode 100755
index 7e52fde..0000000
--- a/MapLayer.tm2/img/maki/religious-muslim-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/restaurant-12.svg b/MapLayer.tm2/img/maki/restaurant-12.svg
deleted file mode 100755
index 078f18b..0000000
--- a/MapLayer.tm2/img/maki/restaurant-12.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/school-12.svg b/MapLayer.tm2/img/maki/school-12.svg
deleted file mode 100755
index ec99761..0000000
--- a/MapLayer.tm2/img/maki/school-12.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/shop-12.svg b/MapLayer.tm2/img/maki/shop-12.svg
deleted file mode 100755
index ada2397..0000000
--- a/MapLayer.tm2/img/maki/shop-12.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/suitcase-12.svg b/MapLayer.tm2/img/maki/suitcase-12.svg
deleted file mode 100755
index 0095f49..0000000
--- a/MapLayer.tm2/img/maki/suitcase-12.svg
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/MapLayer.tm2/img/maki/swimming-12.svg b/MapLayer.tm2/img/maki/swimming-12.svg
deleted file mode 100755
index 7275128..0000000
--- a/MapLayer.tm2/img/maki/swimming-12.svg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/theatre-12.svg b/MapLayer.tm2/img/maki/theatre-12.svg
deleted file mode 100755
index 70e2062..0000000
--- a/MapLayer.tm2/img/maki/theatre-12.svg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/town-hall-12.svg b/MapLayer.tm2/img/maki/town-hall-12.svg
deleted file mode 100755
index a4f91f3..0000000
--- a/MapLayer.tm2/img/maki/town-hall-12.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/maki/zoo-12.svg b/MapLayer.tm2/img/maki/zoo-12.svg
deleted file mode 100755
index a7714e9..0000000
--- a/MapLayer.tm2/img/maki/zoo-12.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/pattern/wetland_16.png b/MapLayer.tm2/img/pattern/wetland_16.png
deleted file mode 100755
index 21fd56a..0000000
Binary files a/MapLayer.tm2/img/pattern/wetland_16.png and /dev/null differ
diff --git a/MapLayer.tm2/img/pattern/wetland_32.png b/MapLayer.tm2/img/pattern/wetland_32.png
deleted file mode 100755
index 343c692..0000000
Binary files a/MapLayer.tm2/img/pattern/wetland_32.png and /dev/null differ
diff --git a/MapLayer.tm2/img/pattern/wetland_64.png b/MapLayer.tm2/img/pattern/wetland_64.png
deleted file mode 100755
index d037cbd..0000000
Binary files a/MapLayer.tm2/img/pattern/wetland_64.png and /dev/null differ
diff --git a/MapLayer.tm2/img/pattern/wetland_noveg_16.png b/MapLayer.tm2/img/pattern/wetland_noveg_16.png
deleted file mode 100755
index cacceda..0000000
Binary files a/MapLayer.tm2/img/pattern/wetland_noveg_16.png and /dev/null differ
diff --git a/MapLayer.tm2/img/pattern/wetland_noveg_32.png b/MapLayer.tm2/img/pattern/wetland_noveg_32.png
deleted file mode 100755
index f6cad9f..0000000
Binary files a/MapLayer.tm2/img/pattern/wetland_noveg_32.png and /dev/null differ
diff --git a/MapLayer.tm2/img/pattern/wetland_noveg_64.png b/MapLayer.tm2/img/pattern/wetland_noveg_64.png
deleted file mode 100755
index 1605d22..0000000
Binary files a/MapLayer.tm2/img/pattern/wetland_noveg_64.png and /dev/null differ
diff --git a/MapLayer.tm2/img/rail/dlr-12.svg b/MapLayer.tm2/img/rail/dlr-12.svg
deleted file mode 100755
index 9a98ade..0000000
--- a/MapLayer.tm2/img/rail/dlr-12.svg
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/dlr-18.svg b/MapLayer.tm2/img/rail/dlr-18.svg
deleted file mode 100755
index 0d1e27f..0000000
--- a/MapLayer.tm2/img/rail/dlr-18.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/dlr.london-overground.london-underground.national-rail-12.svg b/MapLayer.tm2/img/rail/dlr.london-overground.london-underground.national-rail-12.svg
deleted file mode 100755
index ff9f355..0000000
--- a/MapLayer.tm2/img/rail/dlr.london-overground.london-underground.national-rail-12.svg
+++ /dev/null
@@ -1,249 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/dlr.london-overground.london-underground.national-rail-18.svg b/MapLayer.tm2/img/rail/dlr.london-overground.london-underground.national-rail-18.svg
deleted file mode 100755
index 2d39d3a..0000000
--- a/MapLayer.tm2/img/rail/dlr.london-overground.london-underground.national-rail-18.svg
+++ /dev/null
@@ -1,194 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/dlr.london-underground-12.svg b/MapLayer.tm2/img/rail/dlr.london-underground-12.svg
deleted file mode 100755
index 4b51d42..0000000
--- a/MapLayer.tm2/img/rail/dlr.london-underground-12.svg
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/dlr.london-underground-18.svg b/MapLayer.tm2/img/rail/dlr.london-underground-18.svg
deleted file mode 100755
index d5fc268..0000000
--- a/MapLayer.tm2/img/rail/dlr.london-underground-18.svg
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/dlr.london-underground.national-rail-12.svg b/MapLayer.tm2/img/rail/dlr.london-underground.national-rail-12.svg
deleted file mode 100755
index e1207d6..0000000
--- a/MapLayer.tm2/img/rail/dlr.london-underground.national-rail-12.svg
+++ /dev/null
@@ -1,208 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/dlr.london-underground.national-rail-18.svg b/MapLayer.tm2/img/rail/dlr.london-underground.national-rail-18.svg
deleted file mode 100755
index 21e2260..0000000
--- a/MapLayer.tm2/img/rail/dlr.london-underground.national-rail-18.svg
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/dlr.national-rail-12.svg b/MapLayer.tm2/img/rail/dlr.national-rail-12.svg
deleted file mode 100755
index a85ee31..0000000
--- a/MapLayer.tm2/img/rail/dlr.national-rail-12.svg
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/dlr.national-rail-18.svg b/MapLayer.tm2/img/rail/dlr.national-rail-18.svg
deleted file mode 100755
index bbe95f2..0000000
--- a/MapLayer.tm2/img/rail/dlr.national-rail-18.svg
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/light-12.svg b/MapLayer.tm2/img/rail/light-12.svg
deleted file mode 100755
index a5ff00e..0000000
--- a/MapLayer.tm2/img/rail/light-12.svg
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/light-18.svg b/MapLayer.tm2/img/rail/light-18.svg
deleted file mode 100755
index 5fba373..0000000
--- a/MapLayer.tm2/img/rail/light-18.svg
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-overground-12.svg b/MapLayer.tm2/img/rail/london-overground-12.svg
deleted file mode 100755
index 70bd6cd..0000000
--- a/MapLayer.tm2/img/rail/london-overground-12.svg
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-overground-18.svg b/MapLayer.tm2/img/rail/london-overground-18.svg
deleted file mode 100755
index 824edec..0000000
--- a/MapLayer.tm2/img/rail/london-overground-18.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-overground.london-underground-12.svg b/MapLayer.tm2/img/rail/london-overground.london-underground-12.svg
deleted file mode 100755
index 16aa425..0000000
--- a/MapLayer.tm2/img/rail/london-overground.london-underground-12.svg
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-overground.london-underground-18.svg b/MapLayer.tm2/img/rail/london-overground.london-underground-18.svg
deleted file mode 100755
index 9112bad..0000000
--- a/MapLayer.tm2/img/rail/london-overground.london-underground-18.svg
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-overground.london-underground.national-rail-12.svg b/MapLayer.tm2/img/rail/london-overground.london-underground.national-rail-12.svg
deleted file mode 100755
index 059f6cc..0000000
--- a/MapLayer.tm2/img/rail/london-overground.london-underground.national-rail-12.svg
+++ /dev/null
@@ -1,208 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-overground.london-underground.national-rail-18.svg b/MapLayer.tm2/img/rail/london-overground.london-underground.national-rail-18.svg
deleted file mode 100755
index 285c3fa..0000000
--- a/MapLayer.tm2/img/rail/london-overground.london-underground.national-rail-18.svg
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-overground.national-rail-12.svg b/MapLayer.tm2/img/rail/london-overground.national-rail-12.svg
deleted file mode 100755
index 3850764..0000000
--- a/MapLayer.tm2/img/rail/london-overground.national-rail-12.svg
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-overground.national-rail-18.svg b/MapLayer.tm2/img/rail/london-overground.national-rail-18.svg
deleted file mode 100755
index f258d67..0000000
--- a/MapLayer.tm2/img/rail/london-overground.national-rail-18.svg
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-underground-12.svg b/MapLayer.tm2/img/rail/london-underground-12.svg
deleted file mode 100755
index c19ad3c..0000000
--- a/MapLayer.tm2/img/rail/london-underground-12.svg
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-underground-18.svg b/MapLayer.tm2/img/rail/london-underground-18.svg
deleted file mode 100755
index e6e51a3..0000000
--- a/MapLayer.tm2/img/rail/london-underground-18.svg
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-underground.national-rail-12.svg b/MapLayer.tm2/img/rail/london-underground.national-rail-12.svg
deleted file mode 100755
index 46d0df6..0000000
--- a/MapLayer.tm2/img/rail/london-underground.national-rail-12.svg
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/london-underground.national-rail-18.svg b/MapLayer.tm2/img/rail/london-underground.national-rail-18.svg
deleted file mode 100755
index f2757f0..0000000
--- a/MapLayer.tm2/img/rail/london-underground.national-rail-18.svg
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/national-rail-12.svg b/MapLayer.tm2/img/rail/national-rail-12.svg
deleted file mode 100755
index e660a3a..0000000
--- a/MapLayer.tm2/img/rail/national-rail-12.svg
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/national-rail-18.svg b/MapLayer.tm2/img/rail/national-rail-18.svg
deleted file mode 100755
index 3274d0b..0000000
--- a/MapLayer.tm2/img/rail/national-rail-18.svg
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/rail-12.svg b/MapLayer.tm2/img/rail/rail-12.svg
deleted file mode 100755
index 81d9091..0000000
--- a/MapLayer.tm2/img/rail/rail-12.svg
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/rail-18.svg b/MapLayer.tm2/img/rail/rail-18.svg
deleted file mode 100755
index 57c96a7..0000000
--- a/MapLayer.tm2/img/rail/rail-18.svg
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/subway-12.svg b/MapLayer.tm2/img/rail/subway-12.svg
deleted file mode 100755
index a5ff00e..0000000
--- a/MapLayer.tm2/img/rail/subway-12.svg
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/subway-18.svg b/MapLayer.tm2/img/rail/subway-18.svg
deleted file mode 100755
index 5fba373..0000000
--- a/MapLayer.tm2/img/rail/subway-18.svg
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/washington-metro-12.svg b/MapLayer.tm2/img/rail/washington-metro-12.svg
deleted file mode 100755
index 76110e2..0000000
--- a/MapLayer.tm2/img/rail/washington-metro-12.svg
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/rail/washington-metro-18.svg b/MapLayer.tm2/img/rail/washington-metro-18.svg
deleted file mode 100755
index c5e81de..0000000
--- a/MapLayer.tm2/img/rail/washington-metro-18.svg
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
diff --git a/MapLayer.tm2/img/shield/motorway_lg_1.png b/MapLayer.tm2/img/shield/motorway_lg_1.png
deleted file mode 100755
index 8a0a635..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_lg_1.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_lg_2.png b/MapLayer.tm2/img/shield/motorway_lg_2.png
deleted file mode 100755
index ebd3968..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_lg_2.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_lg_3.png b/MapLayer.tm2/img/shield/motorway_lg_3.png
deleted file mode 100755
index fc11709..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_lg_3.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_lg_4.png b/MapLayer.tm2/img/shield/motorway_lg_4.png
deleted file mode 100755
index 48dfd18..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_lg_4.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_lg_5.png b/MapLayer.tm2/img/shield/motorway_lg_5.png
deleted file mode 100755
index fcea081..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_lg_5.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_lg_6.png b/MapLayer.tm2/img/shield/motorway_lg_6.png
deleted file mode 100755
index ed07e2c..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_lg_6.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_sm_1.png b/MapLayer.tm2/img/shield/motorway_sm_1.png
deleted file mode 100755
index 4b4313c..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_sm_1.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_sm_2.png b/MapLayer.tm2/img/shield/motorway_sm_2.png
deleted file mode 100755
index a7c75cc..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_sm_2.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_sm_3.png b/MapLayer.tm2/img/shield/motorway_sm_3.png
deleted file mode 100755
index 925ed49..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_sm_3.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_sm_4.png b/MapLayer.tm2/img/shield/motorway_sm_4.png
deleted file mode 100755
index 0ac75e8..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_sm_4.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_sm_5.png b/MapLayer.tm2/img/shield/motorway_sm_5.png
deleted file mode 100755
index 72cde18..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_sm_5.png and /dev/null differ
diff --git a/MapLayer.tm2/img/shield/motorway_sm_6.png b/MapLayer.tm2/img/shield/motorway_sm_6.png
deleted file mode 100755
index 7af7f84..0000000
Binary files a/MapLayer.tm2/img/shield/motorway_sm_6.png and /dev/null differ
diff --git a/MapLayer.tm2/label.mss b/MapLayer.tm2/label.mss
deleted file mode 100755
index 6fcc82d..0000000
--- a/MapLayer.tm2/label.mss
+++ /dev/null
@@ -1,648 +0,0 @@
-// LABEL.MSS CONTENTS:
-// - Ocean & Marine Labels
-// - Place Names
-// - Countries
-// - States
-// - Cities
-// - Towns
-// - Villages
-// - Suburbs
-// - Neighbourhoods & Hamlets
-// - Water Labels
-// - Road Labels
-// - House numbers
-
-// Name field to use. Language options:
-// name (local), name_en, name_fr, name_es, name_de
-@name: '[name]';
-
-// set up font sets for various weights and styles
-@sans_lt: "Open Sans Regular","Arial Unicode MS Regular";
-@sans_lt_italic: "Open Sans Italic","Arial Unicode MS Regular";
-@sans: "Open Sans Semibold","Arial Unicode MS Regular";
-@sans_bold: "Open Sans Bold","Arial Unicode MS Regular";
-@sans_italic: "Open Sans Semibold Italic","Arial Unicode MS Regular";
-@sans_bold_italic: "Open Sans Bold Italic","Arial Unicode MS Regular";
-
-// We set up a default halo color for places so you can edit them all
-// at once or override each individually:
-@place_halo: fadeout(#fff,80);
-@country_text: @land * 0.2;
-@country_halo: @place_halo;
-@state_text: #666;
-@state_halo: @place_halo;
-@city_text: #4a4032;
-@city_halo: @place_halo;
-@town_text: lighten(#4a4032,10);
-@town_halo: @place_halo;
-@poi_text: @poi_text;
-@road_text: #4a4032;
-@road_halo: #fff;
-@other_text: lighten(#4a4032,20);
-@other_halo: @place_halo;
-@locality_text: #aaa;
-@locality_halo: @land;
-// Also used for other small places: hamlets, suburbs, localities:
-@village_text: #888;
-@village_halo: @place_halo;
-@transport_text: #445;
-
-
-// =====================================================================
-// OCEAN & MARINE LABELS
-// =====================================================================
-
-#marine_label {
- text-name: @name;
- text-face-name: @sans_lt_italic;
- text-fill: mix(@water_dark,@water,25);
- text-wrap-width: 80;
- text-wrap-before: true;
- [placement='point'] {
- text-placement: point;
- }
- [placement='line'] {
- text-placement: line;
- text-avoid-edges: true;
- }
- [labelrank=1] {
- [zoom=3] {
- text-size: 20;
- text-character-spacing: 8;
- text-line-spacing: 16;
- }
- [zoom=4] {
- text-size: 25;
- text-character-spacing: 16;
- text-line-spacing: 24;
- }
- [zoom=5] {
- text-size: 30;
- text-character-spacing: 20;
- text-line-spacing: 32;
- }
- }
- [labelrank=2] {
- [zoom=3] {
- text-size: 13;
- text-character-spacing: 1;
- text-line-spacing: 6;
- }
- [zoom=4] {
- text-size: 14;
- text-character-spacing: 2;
- text-line-spacing: 8;
- }
- [zoom=5] {
- text-size: 20;
- text-character-spacing: 4;
- text-line-spacing: 8;
- }
- [zoom=6] {
- text-size: 24;
- text-character-spacing: 5;
- text-line-spacing: 10;
- }
- }
- [labelrank=3] {
- [zoom=3] {
- text-size: 12;
- text-character-spacing: 2;
- text-line-spacing: 3;
- }
- [zoom=4] {
- text-size: 13;
- text-character-spacing: 3;
- text-line-spacing: 8;
- }
- [zoom=5] {
- text-size: 15;
- text-character-spacing: 4;
- text-line-spacing: 8;
- }
- [zoom=6] {
- text-size: 18;
- text-character-spacing: 5;
- text-line-spacing: 10;
- }
- }
- [labelrank=4][zoom=4],
- [labelrank=5][zoom=5],
- [labelrank=6][zoom=6] {
- text-size: 12;
- text-character-spacing: 2;
- text-line-spacing: 6;
- }
- [labelrank=4][zoom=5],
- [labelrank=5][zoom=6],
- [labelrank=6][zoom=7] {
- text-size: 14;
- text-character-spacing: 3;
- text-line-spacing: 8;
- }
- [labelrank=4][zoom=6],
- [labelrank=5][zoom=7] {
- text-size: 16;
- text-character-spacing: 4;
- text-line-spacing: 1;
- }
-}
-
-
-// =====================================================================
-// PLACE NAMES
-// =====================================================================
-
-// Countries ___________________________________________________________
-
-#country_label_line {
- line-color: #fff;
- line-opacity: 0.8;
- line-width: 0.8;
- line-dasharray: 5,2;
-}
-
-#country_label[zoom<=10] {
- text-name: @name;
- text-face-name: @sans_bold;
- text-placement: point;
- [zoom=2] { text-opacity:.75; }
- text-size: 10;
- text-fill: @country_text;
- text-halo-fill: @country_halo;
- text-halo-radius: 1;
- text-halo-rasterizer: fast;
- text-wrap-width: 30;
- text-min-distance: 2;
- [scalerank=1] {
- [zoom=2] { text-size: 12; text-wrap-width: 60; }
- [zoom=3] { text-size: 13; text-wrap-width: 60; }
- [zoom=4] { text-size: 14; text-wrap-width: 90; }
- [zoom=5] { text-size: 20; text-wrap-width: 120; }
- [zoom>=6] { text-size: 20; text-wrap-width: 120; }
- }
- [scalerank=2] {
- [zoom=3] { text-size: 12; }
- [zoom=4] { text-size: 13; }
- [zoom=5] { text-size: 17; }
- [zoom>=6] { text-size: 20; }
- }
- [scalerank=3] {
- [zoom=4] { text-size: 11; }
- [zoom=5] { text-size: 15; }
- [zoom=6] { text-size: 17; }
- [zoom=7] { text-size: 18; text-wrap-width: 60; }
- [zoom>=8] { text-size: 20; text-wrap-width: 120; }
- }
- [scalerank=4] {
- [zoom=5] { text-size: 13; }
- [zoom=6] { text-size: 15; text-wrap-width: 60 }
- [zoom=7] { text-size: 16; text-wrap-width: 90; }
- [zoom=8] { text-size: 18; text-wrap-width: 120; }
- [zoom>=9] { text-size: 20; text-wrap-width: 120; }
- }
- [scalerank=5] {
- [zoom=5] { text-size: 12; }
- [zoom=6] { text-size: 13; }
- [zoom=7] { text-size: 14; text-wrap-width: 60; }
- [zoom=8] { text-size: 16; text-wrap-width: 90; }
- [zoom>=9] { text-size: 18; text-wrap-width: 120; }
- }
- [scalerank>=6] {
- [zoom=6] { text-size: 11; }
- [zoom=7] { text-size: 12; }
- [zoom=8] { text-size: 14; }
- [zoom>=9] { text-size: 16; }
- }
-}
-
-
-// States ______________________________________________________________
-
-#state_label[zoom>=4][zoom<=10] {
- text-name: @name;
- text-face-name: @sans_lt;
- text-placement: point;
- text-fill: @state_text;
- text-halo-fill: fadeout(@land,80);
- text-halo-radius: 2;
- text-halo-rasterizer: fast;
- text-min-distance: 1;
- text-size: 10;
- [zoom>=5][zoom<=6] {
- [area>10000] { text-size: 12; }
- [area>50000] { text-size: 14; }
- text-wrap-width: 40;
- }
- [zoom>=7][zoom<=8] {
- text-size: 14;
- [area>50000] { text-size: 16; text-character-spacing: 1; }
- [area>100000] { text-size: 18; text-character-spacing: 3; }
- text-wrap-width: 60;
- }
- [zoom>=9][zoom<=10] {
- text-halo-radius: 2;
- text-size: 16;
- text-character-spacing: 2;
- [area>50000] { text-size: 18; text-character-spacing: 2; }
- text-wrap-width: 100;
- }
-}
-
-// Cities ______________________________________________________________
-
-// City labels with dots for low zoom levels.
-#place_label::citydots[type='city'][zoom>=4][zoom<=7][localrank<=3] {
- // explicitly defining all the `ldir` values we're going
- // to use shaves a bit off the final project.xml size
- [ldir='N'],[ldir='S'],[ldir='E'],[ldir='W'],
- [ldir='NE'],[ldir='SE'],[ldir='SW'],[ldir='NW'] {
- shield-file: url("img/dot-small.png");
- shield-unlock-image: true;
- shield-name: @name;
- shield-face-name: @sans;
- shield-placement: point;
- shield-fill: @city_text;
- shield-halo-fill: @city_halo;
- shield-halo-radius: 2;
- shield-halo-rasterizer: fast;
- shield-min-distance: 2;
- shield-size: 11;
- [scalerank>=0][scalerank<=1] {
- [zoom=5] { shield-size: 13; }
- [zoom>=6] { shield-size: 14; }
- }
- [scalerank>=2][scalerank<=3] {
- [zoom=5] { shield-size: 11; }
- [zoom=6] { shield-size: 12; }
- [zoom=7] { shield-size: 13; }
- }
- [scalerank>=4][scalerank<=5] {
- [zoom=6] { shield-size: 11; }
- [zoom=7] { shield-size: 12; }
- }
- [ldir='E'] { shield-text-dx: 4; }
- [ldir='W'] { shield-text-dx: -4; }
- [ldir='N'] { shield-text-dy: -4; }
- [ldir='S'] { shield-text-dy: 4; }
- [ldir='NE'] { shield-text-dx: 3; shield-text-dy: -3; }
- [ldir='SE'] { shield-text-dx: 3; shield-text-dy: 3; }
- [ldir='SW'] { shield-text-dx: -3; shield-text-dy: 3; }
- [ldir='NW'] { shield-text-dx: -3; shield-text-dy: -3; }
- }
-}
-
-// For medium to high zoom levels we do away with the dot
-// and center place labels on their point location.
-#place_label[type='city'][zoom>=8][zoom<=15][localrank<=3] {
- text-name: @name;
- text-face-name: @sans;
- text-placement: point;
- text-fill: @city_text;
- text-halo-fill: @city_halo;
- text-halo-radius: 2;
- text-halo-rasterizer: fast;
- text-wrap-width: 40;
- text-min-distance: 5;
- text-line-spacing: -4;
- [zoom>=12] { text-halo-radius: 3; }
- // We keep the scalerank filters the same for each zoom level.
- // This is slightly inefficient-looking CartoCSS, but it saves
- // some space in the project.xml
- [zoom=8] {
- text-size: 13;
- text-wrap-width: 60;
- [scalerank>=0][scalerank<=1] { text-size: 18; }
- [scalerank>=2][scalerank<=3] { text-size: 16; }
- [scalerank>=4][scalerank<=5] { text-size: 15; }
- [scalerank>=6] { text-size: 13; }
- }
- [zoom=9] {
- text-size: 14;
- text-wrap-width: 60;
- [scalerank>=0][scalerank<=1] { text-size: 19; }
- [scalerank>=2][scalerank<=3] { text-size: 17; }
- [scalerank>=4][scalerank<=5] { text-size: 16; }
- [scalerank>=6] { text-size: 14; }
- }
- [zoom=10] {
- text-size: 15;
- text-wrap-width: 70;
- [scalerank>=0][scalerank<=1] { text-size: 20; }
- [scalerank>=2][scalerank<=3] { text-size: 19; }
- [scalerank>=4][scalerank<=5] { text-size: 17; }
- [scalerank>=6] { text-size: 15; }
- }
- [zoom=11] {
- text-size: 16;
- text-wrap-width: 80;
- [scalerank>=0][scalerank<=1] { text-size: 20; }
- [scalerank>=2][scalerank<=3] { text-size: 19; }
- [scalerank>=4][scalerank<=5] { text-size: 17; }
- [scalerank>=6] { text-size: 16; }
- }
- [zoom=12] {
- text-size: 17;
- text-wrap-width: 100;
- [scalerank>=0][scalerank<=1] { text-size: 20; }
- [scalerank>=2][scalerank<=3] { text-size: 19; }
- [scalerank>=4][scalerank<=5] { text-size: 18; }
- [scalerank>=6] { text-size: 17; }
- }
- [zoom=13] {
- text-size: 18;
- text-wrap-width: 200;
- [scalerank>=0][scalerank<=1] { text-size: 20; }
- [scalerank>=2][scalerank<=3] { text-size: 19; }
- [scalerank>=4][scalerank<=5] { text-size: 19; }
- [scalerank>=6] { text-size: 17; }
- }
- [zoom=14] {
- text-fill: lighten(@city_text,10);
- text-size: 19;
- text-wrap-width: 300;
- [scalerank>=0][scalerank<=1] { text-size: 20; }
- [scalerank>=2][scalerank<=3] { text-size: 20; }
- [scalerank>=4][scalerank<=5] { text-size: 19; }
- [scalerank>=6] { text-size: 18; }
- }
- [zoom=15] {
- text-fill: lighten(@city_text,10);
- text-size: 20;
- text-wrap-width: 400;
- [scalerank>=0][scalerank<=1] { text-size: 20; }
- [scalerank>=2][scalerank<=3] { text-size: 20; }
- [scalerank>=4][scalerank<=5] { text-size: 20; }
- [scalerank>=6] { text-size: 19; }
- }
-}
-
-// Towns _______________________________________________________________
-
-#place_label[type='town'][zoom>=8][zoom<=17] {
- text-name: @name;
- text-face-name: @sans_lt;
- text-placement: point;
- text-fill: @town_text;
- text-halo-fill: @town_halo;
- text-halo-radius: 2;
- text-halo-rasterizer: fast;
- text-wrap-width: 60;
- text-wrap-before: true;
- text-line-spacing: -4;
- text-min-distance: 15;
- [zoom>=13] { text-min-distance: 4; }
- text-size: 12;
- [zoom>=11] { text-size: 14; text-min-distance: 18; }
- [zoom>=12] { text-size: 15; text-wrap-width: 80; }
- [zoom>=13] { text-size: 16; text-wrap-width: 120; }
- [zoom>=14] { text-size: 18; text-wrap-width: 160; text-halo-radius: 3; }
- [zoom>=15] { text-size: 20; text-wrap-width: 200; }
- [zoom>=16] { text-size: 22; text-wrap-width: 240; }
-}
-
-// Villages ____________________________________________________________
-
-#place_label[type='village'][zoom>=10][zoom<=17] {
- text-name: @name;
- text-face-name: @sans;
- text-placement: point;
- text-fill: @town_text;
- text-size: 11;
- text-halo-fill: @town_halo;
- text-halo-radius: 2;
- text-halo-rasterizer: fast;
- text-wrap-width: 60;
- text-wrap-before: true;
- text-min-distance: 40;
- text-line-spacing: -4;
- [zoom>=12] { text-size: 12; }
- [zoom>=13] { text-wrap-width: 80; }
- [zoom>=14] { text-size: 14; text-wrap-width: 100; }
- [zoom>=15] { text-size: 16; text-wrap-width: 120; }
- [zoom>=16] { text-size: 18; text-wrap-width: 160; }
- [zoom=17] { text-size: 20; text-wrap-width: 200; }
-}
-
-// Suburbs _____________________________________________________________
-
-#place_label[type='suburb'][zoom>=12][zoom<=17] {
- text-name: @name;
- text-face-name: @sans_lt;
- text-placement: point;
- text-fill: @other_text;
- text-size: 11;
- text-halo-fill: @other_halo;
- text-halo-radius: 1.5;
- text-halo-rasterizer: fast;
- text-wrap-width: 60;
- text-wrap-before: true;
- text-min-distance: 4;
- text-line-spacing: -2;
- [zoom=12] { text-min-distance: 30; }
- [zoom>=13] { text-size: 12; text-min-distance: 20; }
- [zoom>=14] { text-size: 13; text-wrap-width: 80; }
- [zoom>=15] { text-size: 14; text-wrap-width: 120; }
- [zoom>=16] { text-size: 16; text-wrap-width: 160; }
- [zoom>=17] { text-size: 20; text-wrap-width: 200; }
-}
-
-// Neighbourhoods & Hamlets ____________________________________________
-
-#place_label[zoom>=13][zoom<=18] {
- [type='hamlet'],
- [type='neighbourhood'] {
- text-name: @name;
- text-face-name: @sans_lt;
- text-placement: point;
- text-fill: @other_text;
- text-size: 11;
- text-halo-fill: @other_halo;
- text-halo-radius: 1.5;
- text-halo-rasterizer: fast;
- text-wrap-width: 60;
- text-wrap-before: true;
- text-min-distance: 4;
- text-line-spacing: -2;
- [zoom>=14] { text-size: 12; text-wrap-width: 80; }
- [zoom>=16] { text-size: 14; text-wrap-width: 100; }
- [zoom>=17] { text-size: 16; text-wrap-width: 130; }
- [zoom>=18] { text-size: 18; text-wrap-width: 160; }
- }
-}
-
-
-// =====================================================================
-// WATER LABELS
-// =====================================================================
-
-#water_label {
- [zoom<=15][area>200000],
- [zoom=16][area>50000],
- [zoom=17][area>10000],
- [zoom>=18][area>0]{
- text-name: @name;
- text-halo-radius: 2;
- text-halo-rasterizer: fast;
- text-size: 11;
- text-wrap-width: 50;
- text-wrap-before: true;
- text-halo-fill: fadeout(#fff,80);
- text-line-spacing: -2;
- text-face-name: @sans_italic;
- text-fill: @water_dark;
- }
- [zoom>=14][area>3200000],
- [zoom>=15][area>800000],
- [zoom>=16][area>200000],
- [zoom>=17][area>50000],
- [zoom>=18][area>10000] {
- text-size: 12;
- text-wrap-width: 75;
- }
- [zoom>=15][area>3200000],
- [zoom>=16][area>800000],
- [zoom>=17][area>200000],
- [zoom>=18][area>50000] {
- text-size: 14;
- text-wrap-width: 100;
- }
- [zoom>=16][area>3200000],
- [zoom>=17][area>800000],
- [zoom>=18][area>200000] {
- text-size: 16;
- text-wrap-width: 125;
- }
- [zoom>=17][area>3200000],
- [zoom>=18][area>800000] {
- text-size: 18;
- text-wrap-width: 150;
- }
-}
-
-#waterway_label[type='river'][zoom>=12],
-#waterway_label[type='canal'][zoom>=14],
-#waterway_label[type='stream'][zoom>=16] {
- text-avoid-edges: true;
- text-name: @name;
- text-face-name: @sans_italic;
- text-fill: @water_dark;
- text-halo-fill: fadeout(#fff,80%);
- text-halo-radius: 1.5;
- text-halo-rasterizer: fast;
- text-placement: line;
- text-min-distance: 400;
- text-size: 10;
- text-character-spacing: 0.25;
- text-dy: -7;
- [type='river'][zoom=14],
- [type='canal'][zoom=16],
- [type='stream'][zoom>=18] {
- text-size: 10;
- }
- [type='river'][zoom=15],
- [type='canal'][zoom>=17] {
- text-size: 11;
- }
- [type='river'][zoom>=16],
- [type='canal'][zoom>=18] {
- text-size: 12;
- text-spacing: 300;
- }
-}
-
-
-// =====================================================================
-// ROAD LABELS
-// =====================================================================
-
-// highway shield
-#road_label[class='motorway'][zoom>=8][reflen>=1][reflen<=6],
-#road_label[class='main'][zoom>=8][reflen>=1][reflen<=6] {
- shield-name: "[ref]";
- shield-file: url("img/shield/motorway_sm_[reflen].png");
- shield-size: 9;
- shield-face-name: @sans_bold;
- shield-fill: #fff;
- shield-spacing: 300;
- shield-avoid-edges: true;
- shield-min-padding: 10;
- shield-min-distance: 40;
- [zoom>=12] { shield-min-distance: 80; }
- [zoom>=15] {
- shield-spacing: 400;
- shield-size: 11;
- shield-file: url("img/shield/motorway_sm_[reflen].png");
- }
-}
-
-// regular labels
-#road_label['mapnik::geometry_type'=2] {
- // The z14 filter is *not* redundant to logic in SQL queries. Because z14
- // includes all data for z14+ via overzooming, the streets included in a
- // z14 vector tile include more features than ideal for optimal performance.
- [class='motorway'][zoom>=12],
- [class='main'][zoom>=12],
- [class='street'][zoom<=14][len>2500],
- [class='street'][zoom>=15],
- [class='street_limited'] {
- text-avoid-edges: true;
- text-name: @name;
- text-placement: line;
- text-face-name: @sans_lt;
- text-fill: @road_text;
- text-size: 11;
- text-halo-fill: fadeout(@land,85);
- text-halo-radius: 2;
- text-halo-rasterizer: fast;
- text-min-distance: 200; // only for labels w/ the same name
- [zoom>=14] { text-size: 12; }
- [zoom>=16] { text-size: 14; }
- [zoom>=18] { text-size: 16; }
- [class='motorway'],
- [class='main'] {
- [zoom>=14] { text-size: 12; }
- [zoom>=16] { text-size: 14; }
- [zoom>=17] { text-size: 16; }
- [zoom>=18] { text-size: 18; }
- }
- }
-}
-
-// less prominent labels for service + paths
-#road_label[zoom>=14]['mapnik::geometry_type'=2]
-[class!='motorway']
-[class!='main']
-[class!='street']
-[class!='street_limited'] {
- text-avoid-edges: true;
- text-name: @name;
- text-placement: line;
- text-face-name: @sans;
- text-fill: #666;
- text-size: 10;
- text-halo-fill: fadeout(@land,60);
- text-halo-radius: 2;
- text-halo-rasterizer: fast;
- text-min-distance: 200; // only for labels with the same name
- [zoom>=16] { text-size: 12; }
- [zoom>=18] { text-size: 14; }
- [class='aerialway'] { text-fill: #765; }
- [type='piste'] { text-fill: lighten(#558,20); }
- [type='piste'][zoom>=15] { text-fill: lighten(#558,10); }
- [type='piste'][zoom>=18] { text-fill: #558; }
-}
-
-
-// =====================================================================
-// HOUSE NUMBERS
-// =====================================================================
-
-#housenum_label[zoom>=18] {
- text-name: [house_num];
- text-face-name: @sans_italic;
- text-fill: @land * 0.8;
- text-size: 9;
-}
-
-/**/
\ No newline at end of file
diff --git a/MapLayer.tm2/poi.mss b/MapLayer.tm2/poi.mss
deleted file mode 100755
index 9c49622..0000000
--- a/MapLayer.tm2/poi.mss
+++ /dev/null
@@ -1,162 +0,0 @@
-// =====================================================================
-// POINTS OF INTEREST ICONS & LABELS
-// =====================================================================
-
-// Airports and rail stations are styled separately from other POIs
-// because we use different fields to set their icon images.
-
-#poi_label[type!='Aerodrome'][type!='Rail Station'][type!='hole'] {
- ::icon {
- [zoom<14],
- [zoom>=14][scalerank=1][localrank<=1],
- [zoom>=15][scalerank<=2][localrank<=1],
- [zoom>=16][scalerank<=3][localrank<=1],
- [zoom>=17][localrank<=4],
- [zoom>=18][localrank<=16],
- [zoom>=19] {
- [maki!=null] {
- marker-file: url("img/maki/[maki]-12.svg");
- }
- [maki=null] {
- // small dot for POIs with no Maki icon defined
- marker-width: 4;
- marker-fill: rgba(0,0,0,0);
- marker-line-width: 1.2;
- marker-line-color: #666;
- }
- }
- }
- [zoom<14],
- [zoom>=14][scalerank=1][localrank<=1],
- [zoom>=15][scalerank<=2][localrank<=1],
- [zoom>=16][scalerank<=3][localrank<=1],
- [zoom>=17][localrank<=4],
- [zoom>=18][localrank<=16],
- [zoom>=19] {
- text-name: @name;
- text-face-name: @sans;
- text-fill: #555;
- text-halo-fill: @land;
- text-halo-radius: 1;
- text-halo-rasterizer: fast;
- text-dy: 12;
- text-line-spacing: -4;
- text-wrap-width: 80;
- text-wrap-before: true;
- [scalerank=1] {
- [zoom>=15] { text-size: 11; text-wrap-width: 100; }
- [zoom>=16] { text-size: 12; text-wrap-width: 120; }
- [zoom>=17] { text-size: 14; text-wrap-width: 130; }
- }
- [scalerank=2] {
- [zoom>=16] { text-size: 11; text-wrap-width: 100; }
- [zoom>=17] { text-size: 12; text-wrap-width: 120; }
- }
- [scalerank>=3] {
- [zoom>=17] { text-size: 11; text-wrap-width: 100; }
- [zoom>=19] { text-size: 12; text-wrap-width: 120; }
- }
- }
-}
-
-// Rail Stations _______________________________________________________
-
-#poi_label[type='Rail Station'][network!=null][scalerank=1][zoom>=14],
-#poi_label[type='Rail Station'][network!=null][scalerank=2][zoom>=15],
-#poi_label[type='Rail Station'][network!=null][scalerank=3][zoom>=16] {
- marker-file: url("img/rail/[network]-12.svg");
- marker-height: 12;
- marker-allow-overlap: false;
- [zoom=16] {
- marker-file: url("img/rail/[network]-18.svg");
- marker-height: 18;
- }
- [zoom>16] {
- marker-file: url("img/rail/[network]-12.svg");
- marker-height:24;
- }
- [zoom>15] {
- text-name: @name;
- text-face-name: @sans;
- text-fill: #888;
- text-halo-fill: #fff;
- text-halo-radius: 1.5;
- text-halo-rasterizer: fast;
- text-size: 11;
- text-wrap-width: 80;
- text-placement-type: simple;
- text-dx: 11; text-dy: 11;
- text-placements: "S,N,E,W";
- [zoom>=17] {
- text-size: 12;
- text-halo-radius: 2;
- text-dx: 15; text-dy: 15;
- }
- }
-}
-
-// Airports ____________________________________________________________
-
-#poi_label[type='Aerodrome'][zoom>=10] {
- marker-file: url("img/maki/[maki]-12.svg");
- text-name: "''";
- text-size: 10;
- text-fill: #888;
- text-halo-fill: #fff;
- text-halo-radius: 1;
- text-halo-rasterizer: fast;
- text-face-name: @sans;
- text-line-spacing: -2;
- text-dy: 8;
- [zoom>=11][zoom<=13][scalerank=1],
- [zoom>=12][zoom<=13][scalerank=2] {
- text-name: [ref];
- }
- [zoom>=14] {
- text-name: @name;
- text-wrap-before: true;
- }
- [zoom>=11][scalerank=1],
- [zoom>=12][scalerank=2],
- [zoom>=14] {
- marker-file: url("img/maki/[maki]-18.svg");
- text-size: 10;
- text-dy: 12;
- text-wrap-width: 80;
- }
- [zoom>=13][scalerank=1],
- [zoom>=14][scalerank=2],
- [zoom>=15] {
- marker-file: url("img/maki/[maki]-24.svg");
- text-size: 12;
- text-dy: 15;
- text-wrap-width: 100;
- }
- [zoom>=14][scalerank=1],
- [zoom>=15][scalerank=2],
- [zoom>=16] {
- marker-file: url("img/maki/[maki]-24.svg");
- text-size: 14;
- text-dy: 19;
- text-wrap-width: 120;
- }
-}
-
-// Golf holes __________________________________________________________
-
-#poi_label[type='hole'][zoom>=16] {
- text-avoid-edges: false;
- text-name: @name;
- text-character-spacing: 0.25;
- text-placement: point;
- text-face-name: @sans;
- text-fill: darken(#cdb,50);
- text-size: 10;
- text-halo-fill: @road_halo;
- text-halo-radius: 1.5;
- text-halo-rasterizer: fast;
- [zoom>=17] { text-size: 12; }
- [zoom>=18] { text-size: 14; }
-}
-
-/**/
\ No newline at end of file
diff --git a/MapLayer.tm2/project.xml b/MapLayer.tm2/project.xml
deleted file mode 100755
index 3b3d760..0000000
--- a/MapLayer.tm2/project.xml
+++ /dev/null
@@ -1,6413 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/MapLayer.tm2/project.yml b/MapLayer.tm2/project.yml
deleted file mode 100755
index a2ff780..0000000
--- a/MapLayer.tm2/project.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-_prefs:
- baselayer: ''
- print: true
- saveCenter: false
-_properties: {}
-attribution: "© Mapbox © OpenStreetMap Improve this map"
-bounds:
- - -180
- - -85.0511
- - 180
- - 85.0511
-center:
- - 0
- - 20
- - 2
-description: ''
-format: "png8:m=h:c=128"
-interactivity_layer: ''
-layers:
- - landcover
- - landuse
- - contour.line
- - hillshade
- - waterway
- - water
- - aeroway
- - barrier_line
- - building
- - landuse_overlay
- - tunnel
- - road
- - bridge
- - admin
- - country_label_line
- - country_label
- - marine_label
- - state_label
- - place_label
- - water_label
- - poi_label
- - road_label
- - waterway_label
- - housenum_label
- - contour.label
-maxzoom: 21
-minzoom: 0
-name: Mapbox Outdoors
-source: "mapbox:///mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v5"
-styles:
- - style.mss
- - road.mss
- - label.mss
- - poi.mss
-template: ''
diff --git a/MapLayer.tm2/road.mss b/MapLayer.tm2/road.mss
deleted file mode 100755
index 0aa32a2..0000000
--- a/MapLayer.tm2/road.mss
+++ /dev/null
@@ -1,292 +0,0 @@
-// Roads & Railways //
-
-@case: #fff;
-
-@motorway: #e8b0b0 * 0.9;
-@main: #d8b8b0;
-@street: #fff;
-
-#road,
-#tunnel,
-#bridge {
- // This section just sets up the ordering of the attachments
- ::mask { opacity: 1; }
- ::case { opacity: 1; }
- ::fill { opacity: 1; }
- ::path { opacity: 1; }
-}
-
-#road,
-#tunnel,
-#bridge {
- [class='motorway']['mapnik::geometry_type'=2], {
- ::case[zoom>=6] {
- line-color: @case;
- [zoom<=9] { line-color: @motorway; }
- #road { line-cap: round; }
- #tunnel { line-dasharray: 3,3; }
- line-width: 0.6;
- [zoom>= 8] { line-width: 0.8; }
- [zoom>=10] { line-width: 2.8; }
- [zoom>=11] { line-width: 3; }
- [zoom>=12] { line-width: 4; }
- [zoom>=13] { line-width: 5; }
- [zoom>=14] { line-width: 6.5; }
- [zoom>=15] { line-width: 9; }
- [zoom>=16] { line-width: 12; }
- [zoom>=17] { line-width: 15; }
- [zoom>=18] { line-width: 17; }
- }
- ::fill[zoom>=10] {
- line-color: @motorway;
- line-cap: round;
- #tunnel { line-color: mix(@motorway,@land,50); }
- [zoom>=11] { line-width: 1.2; }
- [zoom>=12] { line-width: 2; }
- [zoom>=13] { line-width: 3; }
- [zoom>=14] { line-width: 4; }
- [zoom>=15] { line-width: 6; }
- [zoom>=16] { line-width: 9; }
- [zoom>=17] { line-width: 12; }
- [zoom>=18] { line-width: 14; }
- }
- }
- [class='motorway_link']['mapnik::geometry_type'=2], {
- ::case {
- line-color: @case;
- #road { line-cap: round; }
- #tunnel { line-dasharray: 3,3; }
- [zoom>=12] { line-width: 2.8; }
- [zoom>=14] { line-width: 3.5; }
- [zoom>=16] { line-width: 5; }
- [zoom>=18] { line-width: 6; }
- }
- ::fill[zoom>=10] {
- line-color: @motorway;
- line-cap: round;
- #tunnel { line-color: mix(@motorway,@land,50); }
- [zoom>=12] { line-width: 1.2; }
- [zoom>=14] { line-width: 2; }
- [zoom>=16] { line-width: 3; }
- [zoom>=18] { line-width: 4; }
- }
- }
- [class='main']['mapnik::geometry_type'=2] {
- ::case[zoom>=6] {
- line-color: @case;
- [zoom<=11] { line-color: @main; }
- #road { line-cap: round; }
- #tunnel { line-dasharray: 3,3; }
- line-width: 0.4;
- [zoom>=12] { line-width: 3; }
- [zoom>=13] { line-width: 3.5; }
- [zoom>=14] { line-width: 4; }
- [zoom>=15] { line-width: 5.5; }
- [zoom>=16] { line-width: 9; }
- [zoom>=17] { line-width: 13; }
- [zoom>=18] { line-width: 15; }
- }
- ::fill[zoom>=12] {
- line-color: @main;
- line-cap: round;
- #tunnel { line-color: mix(@main,@land,50); }
- [zoom>=12] { line-width: 1; }
- [zoom>=13] { line-width: 1.5; }
- [zoom>=14] { line-width: 2; }
- [zoom>=15] { line-width: 3; }
- [zoom>=16] { line-width: 6; }
- [zoom>=17] { line-width: 10; }
- [zoom>=18] { line-width: 12; }
- }
- }
- [class='street']['mapnik::geometry_type'=2],
- [class='street_limited']['mapnik::geometry_type'=2] {
- ::case[zoom>=12] {
- line-color: @land * 0.8;
- line-opacity: 0.5;
- #road { line-cap: round; }
- #tunnel { line-dasharray: 3,3; }
- [zoom>=13] { line-width: 4; }
- [zoom>=14] { line-width: 4; }
- [zoom>=15] { line-width: 5; }
- [zoom>=16] { line-width: 7; }
- [zoom>=17] { line-width: 9; }
- [zoom>=18] { line-width: 11; }
- }
- ::fill[zoom>=13] {
- line-color: @street;
- #road { line-cap: round; }
- #tunnel { line-color: mix(@street,@land,50); }
- [class='street_limited'] { line-dasharray: 6,1; }
- [zoom>=13] { line-width: 1.2; }
- [zoom>=14] { line-width: 1.6; }
- [zoom>=15] { line-width: 2.5; }
- [zoom>=16] { line-width: 4; }
- [zoom>=17] { line-width: 6; }
- [zoom>=18] { line-width: 8; }
- }
- }
- [class='service']['mapnik::geometry_type'=2] {
- ::case[zoom>=13] {
- line-color: #000;
- line-opacity: 0.04;
- #road { line-cap: round; }
- #tunnel { line-dasharray: 3,3; }
- [zoom=13] { line-opacity: 0.5; }
- [zoom>=14] { line-width: 3; }
- [zoom>=15] { line-width: 3.5; }
- [zoom>=16] { line-width: 4; }
- [zoom>=17] { line-width: 5; }
- [zoom>=18] { line-width: 6; }
- }
- ::fill[zoom>=13] {
- line-color: @street;
- #road { line-cap: round; }
- #tunnel { line-color: mix(@street,@land,50); }
- [zoom>=14] { line-width: 1; }
- [zoom>=15] { line-width: 1.5; }
- [zoom>=16] { line-width: 2; }
- [zoom>=17] { line-width: 3; }
- [zoom>=18] { line-width: 4; }
- }
- }
- [class='path'][type!='steps'] {
- #bridge::mask[zoom>=16] {
- line-color: #8f8880;
- line-width: 6;
- }
- ::case[zoom>=14]['mapnik::geometry_type'=2] {
- line-color: #ffd;
- line-opacity: 0.5;
- #bridge { line-opacity: 1; }
- line-join: round;
- line-width: 2;
- [type='cycleway'],
- [type='mtb'] {
- line-color: #ce9;
- }
- [type='piste'] { line-color: #cce; }
- [zoom>=15] { line-width: 3; }
- [zoom>=16] { line-width: 4; }
- }
- ::path[zoom>=14]['mapnik::geometry_type'=2] {
- line-join: round;
- line-width: 1;
- [type='footway'] {
- line-color: #bba;
- line-dasharray: 2,1;
- }
- [type='path'] {
- line-color: #987;
- line-dasharray: 6,2;
- }
- [type='hiking'] {
- line-color: #c97;
- line-dasharray: 2,1;
- }
- [type='trail'] {
- line-color: #c97;
- line-dasharray: 6,2;
- }
- [type='cycleway'] {
- line-color: #488;
- line-dasharray: 2,1;
- }
- [type='mtb'] {
- line-color: #488;
- line-dasharray: 6,2;
- }
- [type='piste'] {
- line-color: #87b;
- line-dasharray: 4,2;
- line-width: 0.8;
- }
- [type='other'] {
- line-color: #bba;
- line-dasharray: 2,3;
- }
- [zoom>=15] { line-width: 1.2; }
- [zoom>=16] { line-width: 1.5; }
- [type='piste'][zoom>=15] { line-width: 1; }
- [type='piste'][zoom>=16] { line-width: 1.2; }
- }
- }
- [class='path'][type='steps'][zoom>=16] {
- ::case {
- line-color: #ffd;
- line-opacity: 0.5;
- line-join: round;
- line-width: 6;
- }
- ::fill {
- line-color: #bba;
- line-width: 4;
- line-dasharray: 2,1;
- }
- }
- [class='major_rail'] {
- line-width: 0.8;
- line-color: #c8c4c0;
- hatch/line-width: 3;
- hatch/line-color: #c8c4c0;
- hatch/line-dasharray: 1,15;
- }
-}
-
-#bridge[class='aerialway'][zoom>=13] {
- ::case {
- line-color: white;
- line-opacity: 0.5;
- line-width: 2;
- [zoom=14] { line-width: 2.5; }
- [zoom=15] { line-width: 3; }
- [zoom=16] { line-width: 3.5; }
- [zoom=17] { line-width: 4; }
- [zoom>17] { line-width: 5; }
- }
- ::line {
- line-color: #876;
- line-width: 0.8;
- [zoom>=14] { line-width: 1.4; }
- [zoom>=15] { line-width: 1.6; }
- [zoom>=16] { line-width: 2; }
- [zoom>=17] { line-width: 2.4; }
- [zoom>=18] { line-width: 3; }
- }
- ::pattern {
- line-clip: false;
- line-color: #876;
- line-width: 4;
- line-dasharray: 0.8, 10;
- [zoom=14] { line-width: 6; }
- [zoom=15] { line-width: 8; }
- [zoom=16] { line-width: 10; }
- [zoom=17] { line-width: 12; }
- [zoom>17] { line-width: 14; }
- [zoom=14] { line-dasharray: 1.4, 22; }
- [zoom=15] { line-dasharray: 1.6, 35; }
- [zoom=16] { line-dasharray: 2, 50; }
- [zoom=17] { line-dasharray: 2.4, 65; }
- [zoom>17] { line-dasharray: 3, 80; }
- }
-}
-
-#bridge[class='golf'][zoom>=16] {
- // golf hole ways are only in the bridge layer
- // to keep them above everything else
- ::case {
- line-color: green;
- line-opacity: 0.25;
- line-width: 1.6;
- [zoom>=17] { line-width: 2.2; }
- [zoom>=18] { line-width: 3; }
- }
- ::fill {
- line-color: #666;
- line-width: 0.6;
- [zoom>=17] { line-width: 1; }
- [zoom>=18] { line-width: 1.2; }
- }
-}
-
-/**/
\ No newline at end of file
diff --git a/MapLayer.tm2/style.mss b/MapLayer.tm2/style.mss
deleted file mode 100755
index c20ce0e..0000000
--- a/MapLayer.tm2/style.mss
+++ /dev/null
@@ -1,395 +0,0 @@
-// Common Colors //
-
-@land: #f4efe1;
-@water: #cdd;
-@water_dark: #185869; // for the inline/shadow
-@crop: #eeeed4;
-@grass: #e7ebd1;
-@scrub: #e0e8cd;
-@wood: #d4e2c6;
-@snow: #f4f8ff;
-@rock: #ddd;
-@sand: mix(#ffd,@land,33%);
-// These colors need to take `comp-op:multiply` into account:
-@cemetery: #edf4ed;
-@pitch: fadeout(#fff,50%);
-@park: #edf9e4;
-@piste: mix(blue,@land,5);
-@school: #fbf6ff;
-@hospital: #fff0f0;
-@builtup: #f6faff;
-
-// Background //
-
-Map {
- background-color: @land;
-}
-
-// Mapbox Terrain global landcover //
-
-#landcover {
- [class='wood'] { polygon-fill: @wood; }
- [class='scrub'] { polygon-fill: @scrub; }
- [class='grass'] { polygon-fill: @grass; }
- [class='crop'] { polygon-fill: @crop; }
- [class='snow'] { polygon-fill: @snow; }
- // fade out stronger classes at high zooms,
- // let more detailed OSM data take over a bit:
- [class='wood'][zoom>=14],
- [class='scrub'][zoom>=15],
- [class='grass'][zoom>=16] {
- [zoom>=14] { polygon-opacity: 0.8; }
- [zoom>=15] { polygon-opacity: 0.6; }
- [zoom>=16] { polygon-opacity: 0.4; }
- [zoom>=17] { polygon-opacity: 0.2; }
- }
-}
-
-// OSM landuse & landcover //
-
-#landuse {
- // The ::cover attachments fade in and become solid, overriding
- // any underlying shaped in the #landcover layer.
- ::cover33 { opacity: 0.33; }
- ::cover66 { opacity: 0.66; }
- ::cover33[zoom=13],
- ::cover66[zoom=14],
- ::cover[zoom>=15] {
- // Bring in OSM landcover only at higher zoom levels where
- // the higher level of detail makes sense.
- [class='wood'] { polygon-fill: @wood; }
- [class='scrub'] { polygon-fill: @scrub; }
- [class='grass'] { polygon-fill: @grass; }
- [class='crop'] { polygon-fill: @crop; }
- [class='sand'] { polygon-fill: @sand; }
- [type='golf_course'],[type='rough'] { polygon-fill: darken(@park,10); }
- }
- ::cover33[zoom=10],
- ::cover66[zoom=11],
- ::cover[zoom>=12] {
- [class='rock'] { polygon-fill: @rock; }
- }
-}
-
-#landuse::use {
- // The ::use attachement is multuplied over #landcover and
- // #landuse::cover*, letting trees, grass, etc show through
- // where they occur in parks, schools, etc.
- comp-op: multiply;
- [class='cemetery'] {
- polygon-fill: @cemetery;
- line-color: @cemetery*0.95;
- line-offset: -0.5;
- }
- [class='hospital'] {
- polygon-fill: @hospital;
- line-color: @hospital*0.95;
- line-offset: -0.5;
- }
- [class='industrial'] {
- polygon-fill: @builtup;
- line-color: @builtup*0.95;
- line-offset: -0.5;
- }
- [class='park'] {
- polygon-fill: @park;
- line-color: @park*0.95;
- line-offset: -0.5;
- }
- [class='pitch'][zoom>=15] {
- polygon-fill: @pitch;
- line-color: #fff;
- line-width: 0.5;
- [zoom>=16] { line-width: 1; }
- [zoom>=17] { line-width: 1.5; }
- [type='green'] {
- polygon-fill: darken(@pitch,20);
- line-color: darken(@pitch,5);
- line-width: 1;
- [zoom>=17] { line-width: 1.5; }
- [zoom>=18] { line-width: 2; }
- }
- [type='fairway'],
- [type='tee']{
- polygon-fill: darken(@pitch,5);
- line-color: darken(@pitch,20);
- }
- }
- [class='sand'] {
- polygon-fill: @sand;
- [type='bunker'] {
- polygon-fill: darken(@sand,5);
- line-color: darken(@sand,14);
- }
- }
- [class='school'] {
- polygon-fill: @school;
- line-color: @school*0.95;
- line-offset: -0.5;
- }
-}
-
-#landuse_overlay {
- // Landuse/landcover areas that need to be drawn above the water layer.
- polygon-fill: rgba(0,0,0,0);
- polygon-clip: false;
- [class='wetland'] {
- polygon-fill: fadeout(@water,80);
- [zoom>=12] {
- polygon-pattern-file: url(img/pattern/wetland_16.png);
- polygon-pattern-opacity: 0.5;
- polygon-pattern-alignment: global;
- }
- [zoom>=13] { polygon-pattern-file: url(img/pattern/wetland_32.png); }
- [zoom>=14] { polygon-pattern-file: url(img/pattern/wetland_64.png); }
- }
- [class='wetland_noveg'] {
- polygon-fill: fadeout(@water,80);
- [zoom>=12] {
- polygon-pattern-file: url(img/pattern/wetland_noveg_16.png);
- polygon-pattern-opacity: 0.5;
- polygon-pattern-alignment: global;
- }
- [zoom>=13] { polygon-pattern-file: url(img/pattern/wetland_noveg_32.png); }
- [zoom>=14] { polygon-pattern-file: url(img/pattern/wetland_noveg_64.png); }
- }
- [class='breakwater'],
- [class='pier'] {
- polygon-fill: @land;
- }
-}
-
-// Hillshading //
-
-#hillshade {
- ::0[zoom<=13],
- ::1[zoom=14],
- ::2[zoom>=15][zoom<=16],
- ::3[zoom>=17][zoom<=18],
- ::4[zoom>=19] {
- comp-op: hard-light;
- polygon-clip: false;
- image-filters-inflate: true;
- [class='shadow'] {
- polygon-fill: #216;
- polygon-comp-op: multiply;
- [zoom>=0][zoom<=3] { polygon-opacity: 0.10; }
- [zoom>=4][zoom<=5] { polygon-opacity: 0.08; }
- [zoom>=6][zoom<=14] { polygon-opacity: 0.06; }
- [zoom>=15][zoom<=16] { polygon-opacity: 0.04; }
- [zoom>=17][zoom<=18] { polygon-opacity: 0.02; }
- [zoom>=18] { polygon-opacity: 0.01; }
- }
- [class='highlight'] {
- polygon-fill: #ffd;
- polygon-opacity: 0.2;
- [zoom>=15][zoom<=16] { polygon-opacity: 0.15; }
- [zoom>=17][zoom<=18] { polygon-opacity: 0.10; }
- [zoom>=18] { polygon-opacity: 0.05; }
- }
- }
- ::1 { image-filters: agg-stack-blur(2,2); }
- ::2 { image-filters: agg-stack-blur(8,8); }
- ::3 { image-filters: agg-stack-blur(16,16); }
- ::4 { image-filters: agg-stack-blur(32,32); }
-}
-
-// Elevation contours & labels //
-
-// Multiple copies of the same layer have been made, each with
-// unique classes and positions in the stack. This is done by
-// editing the layers list in .
-
-#contour.line::line[index!=-1] {
- line-color: #000;
- line-opacity: 0.1;
- line-width: 1.2;
- [index>=5] {
- line-opacity: 0.2;
- line-width: 1.2;
- }
-}
-
-#contour.label::label {
- [zoom<=12][index>=5],
- [zoom>=13][zoom<=15][index=10],
- [zoom>=16][index>=5] {
- text-name: "[ele]+' m'";
- text-face-name: 'Open Sans Regular';
- text-placement: line;
- text-size: 10;
- text-fill: #666;
- text-avoid-edges: true;
- text-halo-fill: fadeout(@crop,80%);
- text-halo-radius: 2;
- text-halo-rasterizer: fast;
- }
-}
-
-// Water Features //
-
-#water {
- polygon-clip: false;
- polygon-fill: @water_dark;
- ::blur {
- // A second attachment that is blurred creates the effect of
- // an inline stroke on the water layer.
- image-filters: agg-stack-blur(1,1);
- image-filters-inflate: true;
- polygon-clip: false;
- polygon-fill: @water;
- polygon-gamma: 0.6;
- [zoom<6] { polygon-gamma: 0.4; }
- }
-}
-
-#waterway {
- [type='river'],
- [type='canal'] {
- line-color: mix(@water,@water_dark,60);
- line-width: 0.5;
- [zoom>=12] { line-width: 1; }
- [zoom>=14] { line-width: 2; line-cap: round; line-smooth: 0.5; }
- [zoom>=16] { line-width: 3; }
- }
- [type='stream'] {
- line-color: mix(@water,@water_dark,60);
- line-width: 0.25;
- [zoom>=14] { line-width: 1; line-smooth: 0.5; }
- [zoom>=16] { line-width: 1.5; line-cap: round; }
- [zoom>=18] { line-width: 2; }
- }
-}
-
-
-// Aeroways //
-
-// lines
-#aeroway['mapnik::geometry_type'=2][zoom>9] {
- [type='runway'] {
- line-color:#ddd;
- line-cap:square;
- line-join:miter;
- [zoom=10]{ line-width:1; }
- [zoom=11]{ line-width:2; }
- [zoom=12]{ line-width:3; }
- [zoom=13]{ line-width:5; }
- [zoom=14]{ line-width:7; }
- [zoom=15]{ line-width:11; }
- [zoom=16]{ line-width:15; }
- [zoom=17]{ line-width:19; }
- [zoom>17]{ line-width:23; }
- }
- [type='taxiway'][zoom>=12] {
- line-color:#ddd;
- line-cap:square;
- line-join:miter;
- [zoom=10]{ line-width:0.2; }
- [zoom=11]{ line-width:0.2; }
- [zoom=12]{ line-width:0.2; }
- [zoom=13]{ line-width:1; }
- [zoom=14]{ line-width:1.5; }
- [zoom=15]{ line-width:2; }
- [zoom=16]{ line-width:3; }
- [zoom=17]{ line-width:4; }
- [zoom>17]{ line-width:5; }
- }
-}
-
-// polygons
-#aeroway[type!='apron']['mapnik::geometry_type'=3][zoom>=13] {
- polygon-clip: false;
- polygon-fill: #ddd;
-}
-
-// Buildings //
-
-#building {
- ::shadow[zoom>=16] {
- line-clip: false;
- line-join: round;
- line-cap: round;
- line-color: fadeout(#000, 85%);
- [zoom>=17] { line-width: 2; }
- }
- polygon-clip: false;
- polygon-fill: @land * 0.95;
- [zoom>=16] {
- polygon-geometry-transform: translate(-0.5,-1.2);
- }
-}
-
-#barrier_line {
- [class='gate'][zoom>=17] {
- line-width:2.5;
- line-color:#aab;
- }
- [class='fence'][zoom>=17] {
- line-color: @land * 0.66;
- [zoom=17] { line-width:0.6; }
- [zoom=18] { line-width:0.8; }
- [zoom>18] { line-width:1; }
- }
- [class='hedge'][zoom>=16] {
- line-width:2.4;
- line-color:darken(@park,20);
- [zoom=16] { line-width: 0.6; }
- [zoom=17] { line-width: 1.2; }
- [zoom=18] { line-width: 1.4; }
- [zoom>18] { line-width: 1.6; }
- }
- [class='land'][zoom>=14] {
- ['mapnik::geometry_type'=2] {
- // These shouldn't be scaled based on pixel scaling
- line-color:@land;
- [zoom=14] { line-width: 0.4; }
- [zoom=15] { line-width: 0.75; }
- [zoom=16] { line-width: 1.5; }
- [zoom=17] { line-width: 3; }
- [zoom=18] { line-width: 6; }
- [zoom=19] { line-width: 12; }
- [zoom=20] { line-width: 24; }
- [zoom>20] { line-width: 48; }
- }
- ['mapnik::geometry_type'=3] {
- polygon-clip: false;
- polygon-fill:@land;
- }
- }
- [class='cliff'][zoom>=12] {
- line-color: #987;
- a/line-color: #987;
- a/line-width: 4;
- a/line-dasharray: 0,7,1,7;
- a/line-offset: -2;
- }
-}
-
-// Political boundaries //
-
-#admin {
- line-join: round;
- line-color: #88a;
- [maritime=1] { line-color: darken(@water, 3%); }
- // Countries
- [admin_level=2] {
- [zoom=2] { line-width: 0.4; }
- [zoom=3] { line-width: 0.8; }
- [zoom=4] { line-width: 1; }
- [zoom=5] { line-width: 1.5; }
- [zoom>=6] { line-width: 2; }
- [zoom>=8] { line-width: 3; }
- [zoom>=10] { line-width: 4; }
- [disputed=1] { line-dasharray: 4,4; }
- }
- // States / Provices / Subregions
- [admin_level>=3] {
- line-width: 0.4;
- line-dasharray: 10,3,3,3;
- [zoom>=6] { line-width: 1; }
- [zoom>=8] { line-width: 2; }
- [zoom>=12] { line-width: 3; }
- }
-}
-
-/**/
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100755
index 1ff94bf..0000000
--- a/README.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# Weather Map - [Takefive Interactive](http://takefiveinteractive.com)
-WeatherMap combines weather info with map display. You can view the ongoing weather change of an entire region in one scroll! It is a tool designed for those of you who road-trip or travel around often.
-
-**Now the ```master``` branch contains both Gaode Map & Google Map!**
-
-
-
-
-
-
-
-
-## Usage
-1) Download the repository
-```fish
-git clone https://github.com/TakefiveInteractive/WeatherMap.git
-cd WeatherMap
-```
- For checkout the ```ChinaVersion```
-
-```fish
-git checkout ChinaVersion
-```
-
-2) Install pods
-```fish
-cd WeatherAroundUs
-pod install
-```
-
-3) Open the workspace
-```fish
-open WeatherMap.xcworkspace
-```
-
-3) Compile and run the app in simulator
-* Under Xcode, press ``Ctrl + R``
-
-## Requirements
-* Xcode 6.3
-* iOS 8
-
-## Download:
-Now Weather Map version 2.2.0 is available in App Store.
-
-
-[Weather Map iTunes page](https://itunes.apple.com/us/app/weather-map-take-five-interactive/id990141529?mt=8)
-
-## Credits
-* [Alamofire](https://github.com/Alamofire/Alamofire) for network request
-* [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON) for handling JSON api
-* [Spring](https://github.com/MengTo/Spring) for code-less animation
-* [FMDB](https://github.com/ccgus/fmdb) for data storing
-* [GPUImage](https://github.com/BradLarson/GPUImage) for image handling
-* [HanekeSwift](https://github.com/Haneke/HanekeSwift) for cache
-* [Shimmer](https://github.com/facebook/Shimmer) for animation
-
-## Donation:
-
*Paypal or Alipay*
-
diff --git a/ScreenShots/chn1.png b/ScreenShots/chn1.png
deleted file mode 100644
index 40d6ae2..0000000
Binary files a/ScreenShots/chn1.png and /dev/null differ
diff --git a/ScreenShots/chn2.png b/ScreenShots/chn2.png
deleted file mode 100644
index 59daf80..0000000
Binary files a/ScreenShots/chn2.png and /dev/null differ
diff --git a/ScreenShots/screenshot1.png b/ScreenShots/screenshot1.png
deleted file mode 100644
index 63ce4cf..0000000
Binary files a/ScreenShots/screenshot1.png and /dev/null differ
diff --git a/ScreenShots/screenshot2.png b/ScreenShots/screenshot2.png
deleted file mode 100644
index dfe40ff..0000000
Binary files a/ScreenShots/screenshot2.png and /dev/null differ
diff --git a/ScreenShots/screenshot3.png b/ScreenShots/screenshot3.png
deleted file mode 100644
index fec6f60..0000000
Binary files a/ScreenShots/screenshot3.png and /dev/null differ
diff --git a/ScreenShots/screenshot4.png b/ScreenShots/screenshot4.png
deleted file mode 100644
index b3c83be..0000000
Binary files a/ScreenShots/screenshot4.png and /dev/null differ
diff --git a/StartView.sketch b/StartView.sketch
deleted file mode 100644
index c43d5ab..0000000
Binary files a/StartView.sketch and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/01d.png b/WeatherAroundUs/NewImage/01d.png
deleted file mode 100644
index fef24dd..0000000
Binary files a/WeatherAroundUs/NewImage/01d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/01n.png b/WeatherAroundUs/NewImage/01n.png
deleted file mode 100644
index d2884be..0000000
Binary files a/WeatherAroundUs/NewImage/01n.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/02d.png b/WeatherAroundUs/NewImage/02d.png
deleted file mode 100644
index 722265c..0000000
Binary files a/WeatherAroundUs/NewImage/02d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/03d.png b/WeatherAroundUs/NewImage/03d.png
deleted file mode 100644
index 903ec83..0000000
Binary files a/WeatherAroundUs/NewImage/03d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/03n.png b/WeatherAroundUs/NewImage/03n.png
deleted file mode 100644
index 903ec83..0000000
Binary files a/WeatherAroundUs/NewImage/03n.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/04d.png b/WeatherAroundUs/NewImage/04d.png
deleted file mode 100644
index 61d10a4..0000000
Binary files a/WeatherAroundUs/NewImage/04d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/09d.png b/WeatherAroundUs/NewImage/09d.png
deleted file mode 100644
index 5cf19b5..0000000
Binary files a/WeatherAroundUs/NewImage/09d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/09n.png b/WeatherAroundUs/NewImage/09n.png
deleted file mode 100644
index 5cf19b5..0000000
Binary files a/WeatherAroundUs/NewImage/09n.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/10d.png b/WeatherAroundUs/NewImage/10d.png
deleted file mode 100644
index 315a105..0000000
Binary files a/WeatherAroundUs/NewImage/10d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/10n.png b/WeatherAroundUs/NewImage/10n.png
deleted file mode 100644
index eaa034d..0000000
Binary files a/WeatherAroundUs/NewImage/10n.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/11d.png b/WeatherAroundUs/NewImage/11d.png
deleted file mode 100644
index 2106648..0000000
Binary files a/WeatherAroundUs/NewImage/11d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/11n.png b/WeatherAroundUs/NewImage/11n.png
deleted file mode 100644
index 2106648..0000000
Binary files a/WeatherAroundUs/NewImage/11n.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/13d.png b/WeatherAroundUs/NewImage/13d.png
deleted file mode 100644
index a90de3f..0000000
Binary files a/WeatherAroundUs/NewImage/13d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/13n.png b/WeatherAroundUs/NewImage/13n.png
deleted file mode 100644
index a90de3f..0000000
Binary files a/WeatherAroundUs/NewImage/13n.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/50d.png b/WeatherAroundUs/NewImage/50d.png
deleted file mode 100644
index 4a93a7d..0000000
Binary files a/WeatherAroundUs/NewImage/50d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/50n.png b/WeatherAroundUs/NewImage/50n.png
deleted file mode 100644
index 4a93a7d..0000000
Binary files a/WeatherAroundUs/NewImage/50n.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/Big02n.png b/WeatherAroundUs/NewImage/Big02n.png
deleted file mode 100644
index 0292062..0000000
Binary files a/WeatherAroundUs/NewImage/Big02n.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/Big04d.png b/WeatherAroundUs/NewImage/Big04d.png
deleted file mode 100644
index 43758d9..0000000
Binary files a/WeatherAroundUs/NewImage/Big04d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/New02d.png b/WeatherAroundUs/NewImage/New02d.png
deleted file mode 100644
index 99f4815..0000000
Binary files a/WeatherAroundUs/NewImage/New02d.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/NewClearNight.png b/WeatherAroundUs/NewImage/NewClearNight.png
deleted file mode 100644
index d2884be..0000000
Binary files a/WeatherAroundUs/NewImage/NewClearNight.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/NewCloudy.png b/WeatherAroundUs/NewImage/NewCloudy.png
deleted file mode 100644
index 0d94909..0000000
Binary files a/WeatherAroundUs/NewImage/NewCloudy.png and /dev/null differ
diff --git a/WeatherAroundUs/NewImage/NewSunny.png b/WeatherAroundUs/NewImage/NewSunny.png
deleted file mode 100644
index fef24dd..0000000
Binary files a/WeatherAroundUs/NewImage/NewSunny.png and /dev/null differ
diff --git a/WeatherAroundUs/Podfile b/WeatherAroundUs/Podfile
deleted file mode 100644
index b59cfcb..0000000
--- a/WeatherAroundUs/Podfile
+++ /dev/null
@@ -1,22 +0,0 @@
-platform :ios, '8.0'
-
-source 'https://github.com/CocoaPods/Specs.git'
-
-workspace 'WeatherMap'
-
-xcodeproj 'WeatherMap'
-
-use_frameworks!
-
-pod 'ZipArchive'
-pod 'Spring'
-pod 'Alamofire'
-#pod 'GPUImage'
-pod 'SwiftyJSON'
-pod 'Shimmer'
-pod 'HanekeSwift'#, :git => 'https://github.com/Haneke/HanekeSwift.git'
-#pod 'FMDB', :git => 'https://github.com/robertmryan/fmdb.git'
-
-pod 'AMapSearch' #搜索服务SDK
-pod 'MKMapViewZoom'
-
diff --git a/WeatherAroundUs/Podfile.lock b/WeatherAroundUs/Podfile.lock
deleted file mode 100644
index 51aaa06..0000000
--- a/WeatherAroundUs/Podfile.lock
+++ /dev/null
@@ -1,31 +0,0 @@
-PODS:
- - Alamofire (1.3.0)
- - AMapSearch (2.6.0)
- - HanekeSwift (0.9.1)
- - MKMapViewZoom (1.0.0)
- - Shimmer (1.0.2)
- - Spring (1.0.3)
- - SwiftyJSON (2.2.1)
- - ZipArchive (1.4.0)
-
-DEPENDENCIES:
- - Alamofire
- - AMapSearch
- - HanekeSwift
- - MKMapViewZoom
- - Shimmer
- - Spring
- - SwiftyJSON
- - ZipArchive
-
-SPEC CHECKSUMS:
- Alamofire: 220403a8d5840e0b4c946a6fbaf209dbca124282
- AMapSearch: 0ea3101eec4b9f500b53e33dcda30d343d41613b
- HanekeSwift: 50d37bfbc4432edc649167e538c259feccb4a2bb
- MKMapViewZoom: dbd9c9d7fe85cbd2084492e87aac0646e63c7f7f
- Shimmer: c5374be1c2b0c9e292fb05b339a513cf291cac86
- Spring: 3f02b5dc3308572ef177b3cad0fa7bbc4b0706f7
- SwiftyJSON: ae2d0a3d68025d136602a33c4ee215091ced3e33
- ZipArchive: e25a4373192673e3229ac8d6e9f64a3e5713c966
-
-COCOAPODS: 0.38.2
diff --git a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/AMapSearchKit b/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/AMapSearchKit
deleted file mode 120000
index c9a20e5..0000000
--- a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/AMapSearchKit
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/AMapSearchKit
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Headers b/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Headers
deleted file mode 120000
index a177d2a..0000000
--- a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Headers
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Headers
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Resources b/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Resources
deleted file mode 120000
index 953ee36..0000000
--- a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Resources
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Resources
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/AMapSearchKit b/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/AMapSearchKit
deleted file mode 100755
index 7e7c1d4..0000000
Binary files a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/AMapSearchKit and /dev/null differ
diff --git a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapCommonObj.h b/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapCommonObj.h
deleted file mode 100755
index d7d20b9..0000000
--- a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapCommonObj.h
+++ /dev/null
@@ -1,673 +0,0 @@
-//
-// AMapCommonObj.h
-// searchKitV3
-//
-// Created by yin cai on 13-7-3.
-// Copyright (c) 2013年 Autonavi. All rights reserved.
-//
-
-#import
-#import
-
-#pragma mark - #基础数据类型
-
-/*!
- @brief 经纬度
- */
-@interface AMapGeoPoint : NSObject
-
-@property (nonatomic, assign) CGFloat latitude;
-@property (nonatomic, assign) CGFloat longitude;
-
-+ (AMapGeoPoint *)locationWithLatitude:(CGFloat)lat longitude:(CGFloat)lon;
-
-@end
-
-/*!
- @brief 多边形
- 当传入两个点的时候,当做矩形处理:左下-右上两个顶点;其他情况视为多边形,几个点即为几边型。
- */
-@interface AMapGeoPolygon : NSObject
-
-@property (nonatomic, strong) NSArray *points;// 坐标集:AMapGeoPoint数组
-
-+ (AMapGeoPolygon *)polygonWithPoints:(NSArray *)points;
-
-@end
-
-/*!
- @brief 城市区域
- */
-@interface AMapDistrict : NSObject
-
-@property (nonatomic, strong) NSString *name; // 区域名称
-@property (nonatomic, strong) NSString *adcode; // 区域代码
-
-// 行政区域查询中返回数据
-@property (nonatomic, strong) NSString *citycode; // 区域名称
-@property (nonatomic, strong) AMapGeoPoint *center; // 中心点
-@property (nonatomic, strong) NSArray *polylines; // 边界坐标点, NSString 数组
-@property (nonatomic, strong) NSString *level; // 级别
-@property (nonatomic, strong) NSArray *districts; // 下级行政区域
-
-+ (AMapDistrict *)districtWithName:(NSString *)name adcode:(NSString *)adcode;
-
-@end
-
-/*!
- @brief 城市
- */
-@interface AMapCity : NSObject
-
-@property (nonatomic, strong) NSString *city; // 城市名称
-@property (nonatomic, strong) NSString *citycode; // 城市编码
-@property (nonatomic, strong) NSString *adcode; // 城市区域编码
-@property (nonatomic, assign) NSInteger num; // 此区域的建议结果数目, AMapSuggestion 中使用
-@property (nonatomic, strong) NSArray *districts; // 途径区域 AMapDistrict 数组,AMepStep中使用
-
-@end
-
-/*!
- @brief 查询建议
- */
-@interface AMapSuggestion : NSObject
-
-@property (nonatomic, strong) NSArray *keywords; //NSString数组
-@property (nonatomic, strong) NSArray *cities; //AMapCity数组
-
-@end
-
-/*!
- @brief 手机应用网址
- */
-@interface AMapAppUrl : NSObject
-
-@property (nonatomic, strong) NSString *android; // android url
-@property (nonatomic, strong) NSString *ios; // ios url
-@property (nonatomic, strong) NSString *wp; // winphone url
-
-+ (AMapAppUrl *)appUrlWithAndroid:(NSString *)android ios:(NSString *)ios wp:(NSString *)wp;
-
-@end
-
-/*!
- @brief 图片信息
- */
-@interface AMapPhoto : NSObject
-
-@property (nonatomic, strong) NSString *title; // 标题
-@property (nonatomic, strong) NSString *url; // URL地址
-@property (nonatomic, strong) NSString *provider; // 来源
-
-+ (AMapPhoto *)photoWithTitle:(NSString *)title url:(NSString *)url provider:(NSString *)provider;
-
-@end
-
-#pragma mark - #市场动态信息
-
-/*!
- @brief 团购信息
- */
-@interface AMapGroupBuy : NSObject
-
-@property (nonatomic, strong) NSString *typeCode; // 团购分类代码
-@property (nonatomic, strong) NSString *type; // 团购分类
-@property (nonatomic, strong) NSString *detail; // 团购详情
-@property (nonatomic, strong) NSString *startTime; // 团购开始时间
-@property (nonatomic, strong) NSString *endTime; // 团购结束时间
-@property (nonatomic, assign) NSInteger num; // 团购总量
-@property (nonatomic, assign) NSInteger soldNum; // 已卖出数量
-@property (nonatomic, assign) CGFloat originalPrice; // 原价
-@property (nonatomic, assign) CGFloat groupbuyPrice; // 团购价
-@property (nonatomic, assign) CGFloat discount; // 折扣
-@property (nonatomic, strong) NSString *ticketAddress; // 取票地址
-@property (nonatomic, strong) NSString *ticketTel; // 取票电话
-@property (nonatomic, strong) NSArray *photos; //图片信息 : AMapPhoto数组
-@property (nonatomic, strong) NSString *url; // 来源URL
-@property (nonatomic, strong) NSString *provider; // 来源标识
-
-@end
-
-/*!
- @brief 打折信息
- */
-@interface AMapDiscount : NSObject
-
-@property (nonatomic, strong) NSString *title; // 标题
-@property (nonatomic, strong) NSString *detail; // 优惠详情
-@property (nonatomic, strong) NSString *startTime; // 开始时间
-@property (nonatomic, strong) NSString *endTime; // 结束时间
-@property (nonatomic, assign) NSInteger soldNum; // 已卖出数量
-@property (nonatomic, strong) NSArray *photos; //图片信息 : AMapPhoto数组
-@property (nonatomic, strong) NSString *url; // 来源URL
-@property (nonatomic, strong) NSString *provider; // 来源标识
-
-@end
-
-/*!
- @brief 动态市场信息
- */
-@interface AMapRichContent : NSObject
-
-@property (nonatomic, strong) NSArray *groupbuys; //团购信息 : AMapGroupBuy数组
-@property (nonatomic, strong) NSArray *discounts; //优惠信息 : AMapDiscount数组
-
-@end
-
-#pragma mark - #行业深度信息
-
-/*!
- @brief 电影行业的场次信息
- */
-@interface AMapTicket : NSObject
-
-@property (nonatomic, strong) NSString *startTime; // 放映时间
-@property (nonatomic, strong) NSString *screen; // 屏幕信息
-@property (nonatomic, strong) NSString *lang; // 语言
-@property (nonatomic, assign) CGFloat price; // 价格
-@property (nonatomic, assign) BOOL seatOrdering; // 是否可选座
-@property (nonatomic, strong) NSString *orderingUrlWap; // 手机端选座网址
-@property (nonatomic, strong) NSString *orderingUrlWeb; // 网页版选座网址
-
-@end
-
-/*!
- @brief 电影行业的动态信息
- */
-@interface AMapMovie : NSObject
-
-@property (nonatomic, strong) NSString *name; // 影片名称
-@property (nonatomic, strong) NSString *uid; // 影片id
-@property (nonatomic, strong) NSString *actors; // 演员
-@property (nonatomic, strong) NSString *director; // 导演
-@property (nonatomic, strong) NSString *type; // 类型
-@property (nonatomic, assign) NSInteger length; // 片长
-@property (nonatomic, strong) NSArray *tickets; // 场次列表 AMapTicket 数组
-
-@end
-
-/*!
- @brief 酒店行业的房型详细信息
- */
-@interface AMapRoom : NSObject
-
-@property (nonatomic, strong) NSString *uid; // 客房id
-@property (nonatomic, strong) NSString *type; // 房型类别
-@property (nonatomic, strong) NSString *name; // 房型名称
-@property (nonatomic, assign) CGFloat price; // 房价
-@property (nonatomic, strong) NSString *breakfast; // 早餐供应
-@property (nonatomic, strong) NSString *network; // 提供网络
-@property (nonatomic, assign) BOOL guarantee; // 是否需要预订担保
-@property (nonatomic, strong) NSString *tel; // 预订电话
-@property (nonatomic, strong) NSString *orderingUrlWap; // 手机端预定网址
-@property (nonatomic, strong) NSString *orderingUrlWeb; // 网页版预定网址
-@property (nonatomic, strong) NSString *provider; // 房型价格来源
-
-@end
-
-/*!
-@brief 餐饮行业深度信息
- */
-@interface AMapDiningDeepContent : NSObject
-
-@property (nonatomic, strong) NSString *cuisines; // 菜系
-@property (nonatomic, strong) NSString *tag; // 标签
-@property (nonatomic, assign) CGFloat cpRating; // 单数据源的评分
-@property (nonatomic, assign) CGFloat tasteRating; // 口味评分
-@property (nonatomic, assign) CGFloat environmentRating; // 环境评分
-@property (nonatomic, assign) CGFloat serviceRating; // 服务评分
-@property (nonatomic, assign) CGFloat cost; // 人均消费
-@property (nonatomic, strong) NSString *recommend; // 特色菜推荐
-@property (nonatomic, strong) NSString *atmosphere; // 氛围
-@property (nonatomic, strong) NSString *addition; // 餐厅特色
-@property (nonatomic, strong) AMapAppUrl *appUrl; // 手机应用订餐网址
-@property (nonatomic, strong) NSString *orderingUrlWap; // 手机端订餐网址
-@property (nonatomic, strong) NSString *orderingUrlWeb; // 网页版订餐网址
-@property (nonatomic, strong) NSString *opentimeGDF; // 规范格式的营业时间
-@property (nonatomic, strong) NSString *opentime; // 非规范格式的营业时间
-
-@end
-
-/*!
- @brief 酒店行业深度信息
- */
-@interface AMapHotelDeepContent : NSObject
-
-@property (nonatomic, assign) NSInteger star; // 星级
-@property (nonatomic, assign) CGFloat lowestPrice; // 最低价
-@property (nonatomic, assign) CGFloat faciRating; // 设施评分
-@property (nonatomic, assign) CGFloat healthRating; // 卫生评分
-@property (nonatomic, assign) CGFloat environmentRating; // 环境评分
-@property (nonatomic, assign) CGFloat serviceRating; // 服务评分
-@property (nonatomic, strong) NSString *traffic; // 交通提示
-@property (nonatomic, strong) NSString *addition; // 特色服务
-
-@property (nonatomic, strong) NSArray *rooms; //房型信息 AMapRoom 数组
-
-@end
-
-/*!
- @brief 景点行业深度信息
- */
-@interface AMapScenicDeepContent : NSObject
-
-@property (nonatomic, strong) NSString *level; // 景区国标级别
-@property (nonatomic, assign) CGFloat price; // 门票价格
-@property (nonatomic, strong) NSString *season; // 适合游玩的月份,多个月份用"|"隔开
-@property (nonatomic, strong) NSString *recommend; // 推荐景点 ,多个景点用"|"隔开
-@property (nonatomic, strong) NSString *theme; // 景区主题
-@property (nonatomic, strong) NSString *orderingUrlWap; // 手机端购票网址
-@property (nonatomic, strong) NSString *orderingUrlWeb; // 网页版购票网址
-@property (nonatomic, strong) NSString *opentimeGDF; // 规范格式的营业时间
-@property (nonatomic, strong) NSString *opentime; // 非规范格式的营业时间
-
-@end
-
-/*!
- @brief 电影行业的深度信息
- */
-@interface AMapCinemaDeepContent : NSObject
-
-@property (nonatomic, assign) BOOL is3D; // 是否支持3D
-@property (nonatomic, strong) NSString *parking; // 停车场设施
-@property (nonatomic, strong) NSString *opentimeGDF; // 规范格式的营业时间
-@property (nonatomic, strong) NSString *opentime; // 非规范格式的营业时间
-
-@property (nonatomic, strong) NSArray *movies; //电影行业的动态信息列表 : AMapMovie数组
-
-@end
-
-/*!
- @brief 行业深度信息
- */
-@interface AMapDeepContent : NSObject
-
-@property (nonatomic, strong) NSString *type; // 行业类型
-@property (nonatomic, strong) NSString *intro; // 简介
-@property (nonatomic, assign) CGFloat rating; // 综合评分
-@property (nonatomic, strong) NSString *provider; // 信息来源
-@property (nonatomic, strong) NSArray *photos; // 图片信息
-@property (nonatomic, strong) AMapDiningDeepContent *deepDining; // 餐饮行业的深度信息
-@property (nonatomic, strong) AMapHotelDeepContent *deepHotel; // 酒店行业的深度信息
-@property (nonatomic, strong) AMapScenicDeepContent *deepScenic; // 景点行业的深度信息
-@property (nonatomic, strong) AMapCinemaDeepContent *deepCinema; // 电影行业的深度信息
-
-@end
-
-/*!
- @brief 行业类型
- */
-extern NSString *const AMapDeepContentTypeDining;
-extern NSString *const AMapDeepContentTypeHotel;
-extern NSString *const AMapDeepContentTypeScenic;
-extern NSString *const AMapDeepContentTypeCinema;
-
-#pragma mark - #POI查询扩展信息
-
-/*!
- @brief 行业扩展信息
- */
-@interface AMapBizExtention : NSObject
-
-@property (nonatomic, assign) CGFloat rating; // 综合评分
-@property (nonatomic, assign) CGFloat cost; // 人均消费
-@property (nonatomic, assign) CGFloat lowestPriceForHotel; // 最低价格
-@property (nonatomic, assign) NSUInteger starForHotel; // 星级
-@property (nonatomic, assign) BOOL mealOrderingForDining; // 是否可订餐
-@property (nonatomic, assign) BOOL seatOrderingForCinema; // 是否可选座
-@property (nonatomic, assign) BOOL ticketOrderingForScenic; // 是否可订票
-@property (nonatomic, assign) BOOL hasGroupbuy; // 是否有团购
-@property (nonatomic, assign) BOOL hasDiscount; // 是否有优惠
-
-@end
-
-#pragma mark - #查询结果数据类型
-
-/*!
- @brief POI
- */
-@interface AMapPOI : NSObject
-
-// basic:
-@property (nonatomic, strong) NSString *uid; // POI全局唯一ID
-@property (nonatomic, strong) NSString *name; // 名称
-@property (nonatomic, strong) NSString *type; // 兴趣点类型
-@property (nonatomic, strong) AMapGeoPoint *location; // 经纬度
-@property (nonatomic, strong) NSString *address; // 地址
-@property (nonatomic, strong) NSString *tel; // 电话
-@property (nonatomic, assign) NSInteger distance; // 距中心点距离
-
-// extensions:
-@property (nonatomic, strong) NSString *postcode; // 邮编
-@property (nonatomic, strong) NSString *website; // 网址
-@property (nonatomic, strong) NSString *email; // 电子邮件
-@property (nonatomic, strong) NSString *province; // 省
-@property (nonatomic, strong) NSString *pcode; // 省编码
-@property (nonatomic, strong) NSString *city; // 城市名称
-@property (nonatomic, strong) NSString *citycode; // 城市编码
-@property (nonatomic, strong) NSString *district; // 区域名称
-@property (nonatomic, strong) NSString *adcode; // 区域编码
-@property (nonatomic, strong) NSString *gridcode; // 地理格ID
-@property (nonatomic, strong) NSString *navipoiid; // 导航点ID/ *暂未开通 */
-@property (nonatomic, strong) AMapGeoPoint *enterLocation; // 入口经纬度
-@property (nonatomic, strong) AMapGeoPoint *exitLocation; // 出口经纬度
-@property (nonatomic, assign) CGFloat weight; // 权重 / *暂未开通 */
-@property (nonatomic, assign) CGFloat match; // 匹配 / *暂未开通 */
-@property (nonatomic, assign) NSInteger recommend; // 推荐标识 / *暂未开通 */
-@property (nonatomic, strong) NSString *timestamp; // 时间戳 / *暂未开通 */
-@property (nonatomic, strong) NSString *direction; // 方向
-
-@property (nonatomic, assign) BOOL hasIndoorMap; // 是否有室内地图
-@property (nonatomic, strong) NSString *indoorMapProvider; // 室内地图来源
-
-@property (nonatomic, strong) NSString *businessArea; // 所在商圈
-
-/** 团购信息数目,推荐使用bizExtension中的hasGroupbuy代替。*/
-@property (nonatomic, assign) NSInteger groupbuyNum __attribute__((deprecated("use 'hasGroupbuy' in deepContent instead")));
-
-/** 优惠信息数目,推荐使用bizExtension中的hasDiscount代替。*/
-@property (nonatomic, assign) NSInteger discountNum __attribute__((deprecated("use 'hasDiscount' in deepContent instead")));
-
-@property (nonatomic, strong) AMapBizExtention *bizExtention; // 扩展信息
-@property (nonatomic, strong) AMapRichContent *richContent; // 动态市场信息
-@property (nonatomic, strong) AMapDeepContent *deepContent; // 行业深度信息
-
-@end
-
-/*!
- @brief 公交站
- */
-@interface AMapBusStop : NSObject
-
-@property (nonatomic, strong) NSString *uid; // 公交站ID
-@property (nonatomic, strong) NSString *name; // 站名
-@property (nonatomic, assign) NSInteger sequence; // 公交站序号
-@property (nonatomic, strong) NSString *citycode; // 城市编码
-@property (nonatomic, strong) NSString *adcode; // 区域编码
-@property (nonatomic, strong) NSString *gridcode; // 地理格ID / *暂未开通 */
-@property (nonatomic, strong) AMapGeoPoint *location; // 经纬度
-@property (nonatomic, strong) NSString *timestamp; // 时间戳 / *暂未开通 */
-@property (nonatomic, strong) NSArray *buslines; // 途径此站的公交路线 AMapBusLine 数组
-
-@end
-
-/*!
- @brief 公交线路
- */
-@interface AMapBusLine : NSObject
-
-// basic:
-@property (nonatomic, strong) NSString *uid; // 公交线路ID
-@property (nonatomic, strong) NSString *name; // 线路名称
-@property (nonatomic, strong) NSString *type; // 公交类型
-@property (nonatomic, strong) NSString *polyline; // 坐标串定义
-@property (nonatomic, strong) NSString *citycode; // 城市编码
-@property (nonatomic, strong) NSString *gridcode; // 地理格ID / *暂未开通 */
-@property (nonatomic, strong) AMapBusStop *startStop; // 首发站
-@property (nonatomic, strong) AMapBusStop *endStop; // 终点站
-
-// extensions:
-@property (nonatomic, strong) NSString *startTime; // 首班车时间
-@property (nonatomic, strong) NSString *endTime; // 末班车时间
-@property (nonatomic, strong) NSString *company; // 所属公交公司
-@property (nonatomic, assign) float distance; // 全程里程(单位:千米)
-@property (nonatomic, assign) NSInteger duration; // 预计行驶时间(单位:秒)
-@property (nonatomic, assign) float basicPrice; // 起步价
-@property (nonatomic, assign) float totalPrice; // 全程票价
-@property (nonatomic, strong) NSArray *bounds; // 矩形区域左下、右上顶点坐标 AMapGeoPoint 数组
-@property (nonatomic, assign) NSInteger busStopsNum; // 途径公交站数
-@property (nonatomic, strong) NSArray *busStops; // 途经公交站 AMapBusStop数组
-@property (nonatomic, strong) AMapBusStop *departureStop; // 起程站
-@property (nonatomic, strong) AMapBusStop *arrivalStop; // 下车站
-
-@end
-
-/*!
- @brief 输入提示
- */
-@interface AMapTip : NSObject
-
-@property (nonatomic, strong) NSString *name; // 名称
-@property (nonatomic, strong) NSString *adcode; // 区域编码
-@property (nonatomic, strong) NSString *district; // 所属区域
-
-+ (AMapTip *)tipWithName:(NSString *)name adcode:(NSString *)adcode district:(NSString *)district;
-
-@end
-
-/*!
- @brief 地理编码
- */
-@interface AMapGeocode : NSObject
-
-@property (nonatomic, strong) NSString *formattedAddress; // 格式化地址
-@property (nonatomic, strong) NSString *province; // 所在省
-@property (nonatomic, strong) NSString *city; // 城市名
-@property (nonatomic, strong) NSString *district; // 区域名称
-@property (nonatomic, strong) NSString *township; // 所在乡镇
-@property (nonatomic, strong) NSString *neighborhood; // 社区
-@property (nonatomic, strong) NSString *building; // 楼
-@property (nonatomic, strong) NSString *adcode; // 区域编码
-@property (nonatomic, strong) AMapGeoPoint *location; // 坐标点
-@property (nonatomic, strong) NSArray *level; // 匹配的等级 NSString 数组
-
-@end
-
-/*!
- @brief 道路
- */
-@interface AMapRoad : NSObject
-
-@property (nonatomic, strong) NSString *uid; // 道路ID
-@property (nonatomic, strong) NSString *name; // 道路名称
-@property (nonatomic, assign) NSInteger distance; // 距离(单位:米)
-@property (nonatomic, strong) NSString *direction; // 方向
-@property (nonatomic, strong) AMapGeoPoint *location; // 坐标点
-@property (nonatomic, strong) NSString *citycode; // 城市编码
-@property (nonatomic, strong) NSString *width; // 道路宽度
-@property (nonatomic, strong) NSString *type; // 道路分类
-
-@end
-
-/*!
- @brief 道路交叉口
- */
-@interface AMapRoadInter : NSObject
-
-@property (nonatomic, assign) NSInteger distance; // 距离(单位:米)
-@property (nonatomic, strong) NSString *direction; // 方向
-@property (nonatomic, strong) AMapGeoPoint *location; // 经纬度
-@property (nonatomic, strong) NSString *firstId; // 第一条道路ID
-@property (nonatomic, strong) NSString *firstName; // 第一条道路名称
-@property (nonatomic, strong) NSString *secondId; // 第二条道路ID
-@property (nonatomic, strong) NSString *secondName; // 第二条道路名称
-
-@end
-
-/*!
- @brief 门牌信息
- */
-@interface AMapStreetNumber : NSObject
-
-@property (nonatomic, strong) NSString *street; // 街道名称
-@property (nonatomic, strong) NSString *number; // 门牌号
-@property (nonatomic, strong) AMapGeoPoint *location; // 坐标点
-@property (nonatomic, assign) NSInteger distance; // 距离(单位:米)
-@property (nonatomic, strong) NSString *direction; // 方向
-
-@end
-
-/*!
- @brief 地址组成要素
- */
-@interface AMapAddressComponent : NSObject
-
-@property (nonatomic, strong) NSString *province; // 省
-@property (nonatomic, strong) NSString *city; // 市
-@property (nonatomic, strong) NSString *district; // 区
-@property (nonatomic, strong) NSString *township; // 乡镇
-@property (nonatomic, strong) NSString *neighborhood; // 社区
-@property (nonatomic, strong) NSString *building; // 建筑
-@property (nonatomic, strong) NSString *citycode; // 城市编码
-@property (nonatomic, strong) NSString *adcode; // 区域编码
-@property (nonatomic, strong) AMapStreetNumber *streetNumber; // 门牌信息
-
-@property (nonatomic, strong) NSArray *businessAreas; //商圈列表 AMapBusinessArea数组
-
-@end
-
-/*!
- @brief 商圈
- */
-@interface AMapBusinessArea : NSObject
-
-@property (nonatomic, strong) NSString *name; // 名称
-@property (nonatomic, strong) AMapGeoPoint *location; // 中心坐标
-
-@end
-
-/*!
- @brief 逆地理编码
- */
-@interface AMapReGeocode : NSObject
-
-// basic:
-@property (nonatomic, strong) NSString *formattedAddress; // 格式化地址
-@property (nonatomic, strong) AMapAddressComponent *addressComponent; // 地址组成要素
-
-// extensions:
-@property (nonatomic, strong) NSArray *roads; // 道路信息 AMapRoad数组
-@property (nonatomic, strong) NSArray *roadinters; // 道路路口信息 AMapRoadInter 数组
-@property (nonatomic, strong) NSArray *pois; // 兴趣点信息 AMapPOI数组
-
-@end
-
-#pragma mark - #导航结果数据类型
-
-/*!
- @brief 实时路况信息
- */
-@interface AMapTMC : NSObject
-
-@property (nonatomic, strong) NSString *lcode; // 路况信息对应的locationcode
-@property (nonatomic, assign) NSInteger distance; // 路段长度(单位:米)
-@property (nonatomic, assign) NSInteger status; // 路况状态:0-未知;1-畅通;2-缓行;3-拥堵
-
-+ (AMapTMC *)TMCWithLCode:(NSString *)lcode distance:(NSInteger)distance status:(NSInteger)status;
-
-@end
-
-/*!
- @brief 导航路段
- */
-@interface AMapStep : NSObject
-
-// basic:
-@property (nonatomic, strong) NSString *instruction; // 行走指示
-@property (nonatomic, strong) NSString *orientation; // 方向
-@property (nonatomic, strong) NSString *road; // 道路名称
-@property (nonatomic, assign) NSInteger distance; // 此路段长度(单位:米)
-@property (nonatomic, assign) NSInteger duration; // 此路段预计耗时(单位:秒)
-@property (nonatomic, strong) NSString *polyline; // 此路段坐标点串
-@property (nonatomic, strong) NSString *action; // 导航主要动作
-@property (nonatomic, strong) NSString *assistantAction; // 导航辅助动作
-@property (nonatomic, assign) CGFloat tolls; // 此段收费(单位:元)
-@property (nonatomic, assign) NSInteger tollDistance; // 收费路段长度(单位:米)
-@property (nonatomic, strong) NSString *tollRoad; // 主要收费路段
-
-// extensions:
-@property (nonatomic, strong) NSArray *tmcs; // 路况信息 AMapTMC 数组
-@property (nonatomic, strong) NSArray *cities; // 途径城市 AMapCity 数组
-
-@end
-
-/*!
- @brief 步行、驾车方案
- */
-@interface AMapPath : NSObject
-
-@property (nonatomic, assign) NSInteger distance; // 起点和终点的距离
-@property (nonatomic, assign) NSInteger duration; // 预计耗时(单位:秒)
-@property (nonatomic, strong) NSString *strategy; // 导航策略
-@property (nonatomic, strong) NSArray *steps; // 导航路段 AMapStep数组
-@property (nonatomic, assign) CGFloat tolls; // 此方案费用(单位:元)
-@property (nonatomic, assign) NSInteger tollDistance; // 此方案收费路段长度(单位:米)
-
-@end
-
-/*!
- @brief 导航方案
- */
-@interface AMapRoute : NSObject
-
-@property (nonatomic, strong) AMapGeoPoint *origin; // 起点坐标
-@property (nonatomic, strong) AMapGeoPoint *destination; // 终点坐标
-@property (nonatomic, assign) CGFloat taxiCost; // 出租车费用(单位:元)
-@property (nonatomic, strong) NSArray *paths; // 步行、驾车方案列表 AMapPath 数组
-@property (nonatomic, strong) NSArray *transits; // 公交换乘方案列表 AMapTransit 数组
-
-@end
-
-/*!
- @brief 步行导航信息
- */
-@interface AMapWalking : NSObject
-
-@property (nonatomic, strong) AMapGeoPoint *origin; // 起点坐标
-@property (nonatomic, strong) AMapGeoPoint *destination; // 终点坐标
-@property (nonatomic, assign) NSInteger distance; // 起点和终点的步行距离
-@property (nonatomic, assign) NSInteger duration; // 步行预计时间
-@property (nonatomic, strong) NSArray *steps; // 步行路段 AMapStep数组
-
-@end
-
-/*!
- @brief 公交换乘路段
- */
-@interface AMapSegment : NSObject
-
-@property (nonatomic, strong) AMapWalking *walking; // 此路段步行导航信息
-@property (nonatomic, strong) AMapBusLine *busline; // 此路段公交导航信息
-@property (nonatomic, strong) NSString *enterName; // 入口名称
-@property (nonatomic, strong) AMapGeoPoint *enterLocation; // 入口经纬度
-@property (nonatomic, strong) NSString *exitName; // 出口名称
-@property (nonatomic, strong) AMapGeoPoint *exitLocation; // 出口经纬度
-
-@end
-
-/*!
- @brief 公交方案
- */
-@interface AMapTransit : NSObject
-
-@property (nonatomic, assign) CGFloat cost; // 此公交方案价格(单位:元)
-@property (nonatomic, assign) NSInteger duration; // 此换乘方案预期时间(单位:秒)
-@property (nonatomic, assign) BOOL nightflag; // 是否是夜班车
-@property (nonatomic, assign) NSInteger walkingDistance; // 此方案总步行距离(单位:米)
-@property (nonatomic, strong) NSArray *segments; // 换乘路段 AMapSegment数组
-
-@end
-
-#pragma mark - 意图分析相关
-
-/*!
- @brief 出发点/终点
- */
-@interface AMapWPoint : NSObject
-
-@property (nonatomic, strong) NSString *name; // 名称
-@property (nonatomic, strong) NSArray *pois;
-
-@end
-
-/*!
- @brief 出发点/终点集合
- */
-@interface AMapWayPoint : NSObject
-
-@property (nonatomic, strong) AMapWPoint *origin; // 起点
-@property (nonatomic, strong) AMapWPoint *destination; // 终点
-
-@end
-
-
diff --git a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapSearchAPI.h b/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapSearchAPI.h
deleted file mode 100755
index 85fbe37..0000000
--- a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapSearchAPI.h
+++ /dev/null
@@ -1,191 +0,0 @@
-//
-// AMapSearchAPI.h
-// searchKitV3
-//
-// Created by yin cai on 13-7-4.
-// Copyright (c) 2013年 Autonavi. All rights reserved.
-//
-#import
-#import "AMapSearchObj.h"
-
-@protocol AMapSearchDelegate;
-
-typedef NS_ENUM(NSInteger, AMapSearchLanguage)
-{
- AMapSearchLanguage_en = 0,
- AMapSearchLanguage_zh_CN = 1,
-};
-
-#pragma mark - AMapSearchAPI Interface
-
-@interface AMapSearchAPI : NSObject
-
-/*!
- @brief 实现了AMapSearchDelegate协议的类指针
- */
-@property (nonatomic, assign) id delegate;
-
-/*!
- @brief 查询超时时间 默认超时时间20秒
- */
-@property (nonatomic, assign) NSInteger timeOut;
-
-/*!
- @brief 查询结果返回语言
- */
-@property (nonatomic, assign) AMapSearchLanguage language;
-
-/*!
- @brief AMapSearch的初始化函数。注意,请不要直接使用init进行初始化,会因为有些属性没有初始化而发生错误。
- @param key 搜索模块鉴权Key(详情请访问 http://api.amap.com/ )
- @param delegate 实现AMapSearchDelegate协议的对象id
- @return AMapSearch类对象id
- */
-- (id)initWithSearchKey:(NSString *)key Delegate:(id)delegate;
-
-/*!
- @brief POI查询接口函数,即根据 POI 参数选项进行 POI 查询。
- @param request 查询选项。具体属性字段请参考 AMapPlaceSearchRequest 类。
- */
-- (void)AMapPlaceSearch:(AMapPlaceSearchRequest *)request;
-
-/*!
- @brief 路径规划查询接口。
- @param request 查询选项。具体属性字段请参考 AMapNavigationSearchRequest 类。
- */
-- (void)AMapNavigationSearch:(AMapNavigationSearchRequest *)request;
-
-/*!
- @brief 输入提示查询接口。
- @param request 查询选项。具体属性字段请参考 AMapInputTipsSearchRequest 类。
- */
-- (void)AMapInputTipsSearch:(AMapInputTipsSearchRequest *)request;
-
-/*!
- @brief 地址编码查询接口。
- @param request 查询选项。具体属性字段请参考 AMapGeocodeSearchRequest 类。
- */
-- (void)AMapGeocodeSearch:(AMapGeocodeSearchRequest *)request;
-
-/*!
- @brief 逆地址编码查询接口。
- @param request 查询选项。具体属性字段请参考 AMapReGeocodeSearchRequest 类。
- */
-- (void)AMapReGoecodeSearch:(AMapReGeocodeSearchRequest *)request;
-
-/*!
- @brief 公交线路查询接口。
- @param request 查询选项。具体属性字段请参考 AMapBusLineSearchRequest 类。
- */
-- (void)AMapBusLineSearch:(AMapBusLineSearchRequest *)request;
-
-/*!
- @brief 公交车站查询接口。
- @param request 查询选项。具体属性字段请参考 AMapBusStopSearchRequest 类。
- */
-- (void)AMapBusStopSearch:(AMapBusStopSearchRequest *)request;
-
-/*!
- @brief 行政区域查询接口。
- @param request 查询选项。具体属性字段请参考 AMapDistrictSearchRequest 类。
- */
-- (void)AMapDistrictSearch:(AMapDistrictSearchRequest *)request;
-
-@end
-
-#pragma mark - AMapSearchDelegate
-
-/** AMapSearch errorCode */
-typedef NS_ENUM(NSInteger, AMapSearchErrorCode)
-{
- AMapSearchErrorUnknown = 1, // 未知错误
- AMapSearchErrorInvalidSCode = 2, // 安全码验证错误
- AMapSearchErrorInvalidKey = 3, // key非法或过期
- AMapSearchErrorInvalidService = 4, // 请求服务不存在
- AMapSearchErrorInvalidResponse = 5, // 请求服务响应错误
- AMapSearchErrorInsufficientPrivileges = 6, // 无权限访问此服务
- AMapSearchErrorOverQuota = 7, // 请求超出配额
- AMapSearchErrorInvalidParams = 8, // 请求参数非法
- AMapSearchErrorInvalidProtocol = 9, // 协议解析错误
- AMapSearchErrorTimeOut = 10, // 连接超时
- AMapSearchErrorCannotFindHost = 11, // 找不到主机
- AMapSearchErrorBadURL = 12, // URL异常
- AMapSearchErrorNotConnectedToInternet = 13, // 连接异常
- AMapSearchErrorCannotConnectToHost = 14, // 服务器连接失败
-};
-
-/** AMapSearch errorDomain */
-extern NSString *const AMapSearchErrorDomain;
-
-/** AMapSearchDelegate协议类,从NSObject类继承. */
-@protocol AMapSearchDelegate
-
-@optional
-
-/*!
- 当请求发生错误时,会调用代理的此方法.
- @param request 发生错误的请求.
- @param error 返回的错误.
- */
-- (void)searchRequest:(id)request didFailWithError:(NSError *)error;
-
-/*!
- @brief POI查询回调函数
- @param request 发起查询的查询选项(具体字段参考AMapPlaceSearchRequest类中的定义)
- @param response 查询结果(具体字段参考AMapPlaceSearchResponse类中的定义)
- */
-- (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)response;
-
-/*!
- @brief 路径规划查询回调函数
- @param request 发起查询的查询选项(具体字段参考AMapNavigationSearchRequest类中的定义)
- @param response 查询结果(具体字段参考AMapNavigationSearchResponse类中的定义)
- */
-- (void)onNavigationSearchDone:(AMapNavigationSearchRequest *)request response:(AMapNavigationSearchResponse *)response;
-
-/*!
- @brief 输入提示查询回调函数
- @param request 发起查询的查询选项(具体字段参考AMapInputTipsSearchRequest类中的定义)
- @param response 查询结果(具体字段参考AMapInputTipsSearchResponse类中的定义)
- */
-- (void)onInputTipsSearchDone:(AMapInputTipsSearchRequest *)request response:(AMapInputTipsSearchResponse *)response;
-
-/*!
- @brief 地理编码查询回调函数
- @param request 发起查询的查询选项(具体字段参考AMapGeocodeSearchRequest类中的定义)
- @param response 查询结果(具体字段参考AMapGeocodeSearchResponse类中的定义)
- */
-- (void)onGeocodeSearchDone:(AMapGeocodeSearchRequest *)request response:(AMapGeocodeSearchResponse *)response;
-
-/*!
- @brief 逆地理编码查询回调函数
- @param request 发起查询的查询选项(具体字段参考AMapReGeocodeSearchRequest类中的定义)
- @param response 查询结果(具体字段参考AMapReGeocodeSearchResponse类中的定义)
- */
-- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response;
-
-/*!
- @brief 公交线路查询回调函数
- @param request 发起查询的查询选项(具体字段参考AMapBusLineSearchRequest类中的定义)
- @param response 查询结果(具体字段参考AMapBusLineSearchResponse类中的定义)
- */
-- (void)onBusLineSearchDone:(AMapBusLineSearchRequest *)request response:(AMapBusLineSearchResponse *)response;
-
-/*!
- @brief 公交站查询回调函数
- @param request 发起查询的查询选项(具体字段参考AMapBusStopSearchRequest类中的定义)
- @param response 查询结果(具体字段参考AMapBusStopSearchResponse类中的定义)
- */
-- (void)onBusStopSearchDone:(AMapBusStopSearchRequest *)request response:(AMapBusStopSearchResponse *)response;
-
-/*!
- @brief 行政区域查询回调函数
- @param request 发起查询的查询选项(具体字段参考AMapDistrictSearchRequest类中的定义)
- @param response 查询结果(具体字段参考AMapDistrictSearchResponse类中的定义)
- */
-- (void)onDistrictSearchDone:(AMapDistrictSearchRequest *)request response:(AMapDistrictSearchResponse *)response;
-
-
-@end
-
-
diff --git a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapSearchObj.h b/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapSearchObj.h
deleted file mode 100755
index 80ffbfe..0000000
--- a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapSearchObj.h
+++ /dev/null
@@ -1,260 +0,0 @@
-//
-// AMapSearchObj.h
-// searchKitV3
-//
-// Created by yin cai on 13-7-2.
-// Copyright (c) 2013年 Autonavi. All rights reserved.
-//
-
-#import
-#import "AMapCommonObj.h"
-
-/*!
- @brief SearchType可选值
- */
-typedef NS_ENUM(NSInteger, AMapSearchType)
-{
- AMapSearchType_PlaceID = 1,
- AMapSearchType_PlaceKeyword = 2,
- AMapSearchType_PlaceAround = 3,
- AMapSearchType_PlacePolygon = 4,
- AMapSearchType_Geocode = 5,
- AMapSearchType_ReGeocode = 6,
- AMapSearchType_StopKeyword = 8,
- AMapSearchType_InputTips = 9,
- AMapSearchType_RoadID = 11,
- AMapSearchType_LineID = 13,
- AMapSearchType_LineKeyword = 14,
- AMapSearchType_NaviDrive = 16,
- AMapSearchType_NaviWalking = 17,
- AMapSearchType_NaviBus = 20,
- AMapSearchType_District = 22,
- AMapSearchType_Intention = 24,
-};
-
-#pragma mark - AMapPlaceSearchRequest
-
-/*!
- @brief POI查询过滤参数
- */
-typedef NS_OPTIONS(NSUInteger, AMapRequireFilter)
-{
- AMapRequireNone = 0,
- AMapRequireGroupbuy = 1 << 0, // 全行业
- AMapRequireDiscount = 1 << 1, // 全行业
- AMapRequireMealOrdering = 1 << 2, // 餐饮行业
-};
-
-@interface AMapPlaceSearchFilter : NSObject
-
-@property (nonatomic, assign) NSUInteger starFilter; // 过滤酒店星级(酒店行业)。(只限1,2,3,4,5;0 为不过滤)。
-@property (nonatomic, copy) NSArray *costFilter; // 过滤平均消费范围(全行业)。NSNumber(double)数组,[min, max] 表示价格区间,上限max可为空。
-@property (nonatomic, assign) AMapRequireFilter requireFilter; // 查询结果过滤.
-
-@end
-
-/*!
- @brief POI搜索
- */
-@interface AMapPlaceSearchRequest : NSObject
-
-@property (nonatomic, assign) AMapSearchType searchType; // 默认为keyword
-
-/**
- 是否返回扩展信息,默认为 NO。
- 若设置了requireGroup/requireDiscount任意一个为YES,则该参数自动设置为YES。
- */
-@property (nonatomic, assign) BOOL requireExtension;
-
-/**
- 查询结果过滤选项,和types配合使用,得到的结果在POI的bizExtension属性中体现。
- 设置requireExtension为YES生效.
- */
-@property (nonatomic, copy) AMapPlaceSearchFilter *searchFilter;
-
-/** 是否过滤带团购信息的结果,默认为 NO; 推荐使用searchFilter中的requireFilter代替。*/
-@property (nonatomic, assign) BOOL requireGroup __attribute__((deprecated("use 'requireFilter' in searchFilter instead")));
-
-/** 是否过滤带优惠信息的结果,默认为 NO; 推荐使用searchFilter中的requireFilter代替。*/
-@property (nonatomic, assign) BOOL requireDiscount __attribute__((deprecated("use 'requireFilter' in searchFilter instead")));
-
-// ID查询参数
-@property (nonatomic, copy) NSString *uid; // POI全局唯一ID
-
-// 周边查询参数:
-@property (nonatomic, copy) AMapGeoPoint *location; // 中心点坐标
-@property (nonatomic, assign) NSInteger radius; // 查询半径,单位:米 [default = 3000]
-
-// 多边形查询参数
-@property (nonatomic, copy) AMapGeoPolygon *polygon; // 坐标串定义
-
-// 关键字查询参数
-@property (nonatomic, copy) NSString *keywords; // 查询关键字,多个关键字用“|”分割,“空格"表示与,“双引号”表示不可分割
-@property (nonatomic, strong) NSArray *types; // POI分类字符串数组
-@property (nonatomic, strong) NSArray *city; // 城市NSString数组(注:只有第一个有效,设置多个会无效),可选值:cityname(中文或中文全拼)、citycode、adcode
-
-@property (nonatomic, assign) NSInteger sortrule; // 排序规则:0-混合排序;1-距离排序 [default = 0]
-@property (nonatomic, assign) NSInteger offset; // 每页记录数 [default = 20]
-@property (nonatomic, assign) NSInteger page; // 当前页数 [default = 1]
-
-@end
-
-@interface AMapPlaceSearchResponse : NSObject
-
-@property (nonatomic, assign) NSInteger count; // 返回的POI数目
-@property (nonatomic, strong) AMapSuggestion *suggestion; // 关键字建议列表和城市建议列表
-@property (nonatomic, strong) NSArray *pois; // POI对象数组
-
-@end
-
-#pragma mark - AMapGeocodeSearchRequest
-
-@interface AMapGeocodeSearchRequest : NSObject
-
-@property (nonatomic, assign) AMapSearchType searchType;
-@property (nonatomic, copy) NSString *address; //地址
-@property (nonatomic, strong) NSArray *city; // 城市NSString数组(注:只有第一个有效,设置多个会无效),可选值:cityname(中文或中文全拼)、citycode、adcode.
-@end
-
-@interface AMapGeocodeSearchResponse : NSObject
-
-@property (nonatomic, assign) NSInteger count; // 返回数目
-@property (nonatomic, strong) NSArray* geocodes; // 地理编码结果 AMapGeocode数组
-@end
-
-#pragma mark - AMapReGeocodeSearchRequest
-
-@interface AMapReGeocodeSearchRequest : NSObject
-
-@property (nonatomic, assign) AMapSearchType searchType;
-@property (nonatomic, assign) BOOL requireExtension; // 是否返回扩展信息,默认为 NO
-@property (nonatomic, copy) AMapGeoPoint *location; // 中心点坐标
-@property (nonatomic, assign) NSInteger radius; //[default = 1000]; 查询半径,单位:米
-@property (nonatomic, copy) NSString *poiIdFilter; // 返回结果屏蔽此ID的POI
-
-@end
-
-@interface AMapReGeocodeSearchResponse : NSObject
-
-@property(nonatomic, strong) AMapReGeocode *regeocode; // 逆地理编码结果
-
-@end
-
-#pragma mark - AMapInputTipsSearchRequest
-
-@interface AMapInputTipsSearchRequest : NSObject
-
-@property (nonatomic, assign) AMapSearchType searchType;
-@property (nonatomic, copy) NSString *keywords; // 查询关键字,多个关键字用“|”分割,“空格"表示与,“双引号”表示不可分割
-@property (nonatomic, strong) NSArray *types; // POI分类 NSString数组
-@property (nonatomic, strong) NSArray *city; // 城市NSString数组(注:只有第一个有效,设置多个会无效),可选值:cityname(中文或中文全拼)、citycode、adcode.
-
-@end
-
-@interface AMapInputTipsSearchResponse : NSObject
-
-@property (nonatomic, assign) NSInteger count; // 返回数目
-@property (nonatomic, strong) NSArray *tips; // 提示列表 AMapTip数组
-
-@end
-
-#pragma mark - AMapBusLineSearchRequest
-
-@interface AMapBusLineSearchRequest : NSObject
-
-@property (nonatomic, assign) AMapSearchType searchType; // 默认为keyword
-@property (nonatomic, assign) BOOL requireExtension; // 是否返回扩展信息,默认为 NO
-@property (nonatomic, copy) NSString *uid; // 公交路线ID
-@property (nonatomic, copy) NSString *keywords; // 查询关键字,多个关键字用“|”分割,“空格"表示与,“双引号”表示不可分割
-@property (nonatomic, strong) NSArray *city; // 城市NSString数组(注:只有第一个有效,设置多个会无效),可选值:cityname(中文或中文全拼)、citycode、adcode.
-@property (nonatomic, assign) NSInteger offset; // [default = 20]; 每页记录数
-@property (nonatomic, assign) NSInteger page; // [default = 1]; 当前页数
-
-@end
-
-@interface AMapBusLineSearchResponse : NSObject
-
-@property (nonatomic, assign) NSInteger count; // 返回数目
-@property (nonatomic, strong) AMapSuggestion *suggestion; // 关键字建议列表和城市建议列表
-@property (nonatomic, strong) NSArray *buslines; // 公交路线 AMapBusLine 数组
-@end
-
-#pragma mark - AMapBusStopSearchRequest
-
-@interface AMapBusStopSearchRequest : NSObject
-
-@property (nonatomic, assign) AMapSearchType searchType; // 默认为keyword
-@property (nonatomic, copy) NSString *keywords; // 查询关键字,多个关键字用“|”分割,“空格"表示与,“双引号”表示不可分割
-@property (nonatomic, strong) NSArray *city; // 城市NSString数组(注:只有第一个有效,设置多个会无效),可选值:cityname(中文或中文全拼)、citycode、adcode
-@property (nonatomic, assign) NSInteger offset; // [default = 20]; // 每页记录数
-@property (nonatomic, assign) NSInteger page; // [default = 1]; // 当前页数
-
-@end
-
-@interface AMapBusStopSearchResponse : NSObject
-
-@property (nonatomic, assign) NSInteger count; // 返回数目
-@property (nonatomic, strong) AMapSuggestion *suggestion; // 关键字建议列表和城市建议列表
-@property (nonatomic, strong) NSArray *busstops; // 公交站 AMapBusStop 数组
-
-@end
-
-#pragma mark - AMapNavigationSearchRequest
-
-@interface AMapNavigationSearchRequest : NSObject
-
-@property (nonatomic, assign) AMapSearchType searchType; // 默认为bus
-// 步行导航参数:
-@property (nonatomic, assign) NSInteger multipath; //[default = 0]; 是否提供备选步行方案:0-只提供一条步行方案;1-提供备选步行方案(有可能无备选方案)
-
-// 驾车导航参数:
-@property (nonatomic, strong) NSArray *waypoints; // 途经点 AMapGeoPoint 数组
-@property (nonatomic, strong) NSArray *avoidpolygons; // 避让区域 AMapGeoPolygon 数组
-@property (nonatomic, copy) NSString *avoidroad; // 避让道路名
-@property (nonatomic, copy) NSString *originId; // 出发点 POI ID
-@property (nonatomic, copy) NSString *destinationId; // 目的地 POI ID
-
-// 公交换乘参数:
-@property (nonatomic, assign) BOOL nightflag; // 是否包含夜班车
-
-/**
- 策略:
- 驾车导航策略:0-速度优先(时间);1-费用优先(不走收费路段的最快道路);2-距离优先;3-不走快速路;4-结合实时交通(躲避拥堵);5-多策略(同时使用速度优先、费用优先、距离优先三个策略);6-不走高速;7-不走高速且避免收费;8-躲避收费和拥堵;9-不走高速且躲避收费和拥堵
- 公交换乘策略:0-最快捷模式;1-最经济模式;2-最少换乘模式;3-最少步行模式;4-最舒适模式;5-不乘地铁模式
- */
-@property (nonatomic, assign) NSInteger strategy; //[default = 0];
-
-@property (nonatomic, copy) AMapGeoPoint *origin; // 出发点
-@property (nonatomic, copy) AMapGeoPoint *destination; // 目的地
-@property (nonatomic, copy) NSString *city; // 城市
-@property (nonatomic, assign) BOOL requireExtension; // 是否返回扩展信息,默认为 NO
-
-@end
-
-@interface AMapNavigationSearchResponse : NSObject
-
-@property (nonatomic, assign) NSInteger count; // 返回数目
-@property (nonatomic, strong) AMapRoute *route; // 导航方案
-
-@end
-
-#pragma mark - AMapDistrictSearchRequest
-
-@interface AMapDistrictSearchRequest : NSObject
-
-@property (nonatomic, assign) AMapSearchType searchType; // 默认为行政区域查询
-@property (nonatomic, copy) NSString *keywords; // 查询关键字,只支持单关键字搜索,全国范围
-@property (nonatomic, assign) BOOL requireExtension; // 是否返回边界坐标,默认为 NO
-
-@end
-
-@interface AMapDistrictSearchResponse : NSObject
-
-@property (nonatomic, assign) NSInteger count; // 返回数目
-@property (nonatomic, strong) NSArray *districts; // 行政区域 AMapDistrict 数组
-
-@end
-
-
-
-
diff --git a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/Current b/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/Current
deleted file mode 120000
index ec0a860..0000000
--- a/WeatherAroundUs/Pods/AMapSearch/AMapSearchKit.framework/Versions/Current
+++ /dev/null
@@ -1 +0,0 @@
-2.6.0.29103c6
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Alamofire/LICENSE b/WeatherAroundUs/Pods/Alamofire/LICENSE
deleted file mode 100644
index 5b7934d..0000000
--- a/WeatherAroundUs/Pods/Alamofire/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/WeatherAroundUs/Pods/Alamofire/README.md b/WeatherAroundUs/Pods/Alamofire/README.md
deleted file mode 100644
index c4580a4..0000000
--- a/WeatherAroundUs/Pods/Alamofire/README.md
+++ /dev/null
@@ -1,971 +0,0 @@
-
-
-[](https://travis-ci.org/Alamofire/Alamofire)
-[](https://img.shields.io/cocoapods/v/Alamofire.svg)
-[](https://github.com/Carthage/Carthage)
-[](http://cocoadocs.org/docsets/Alamofire)
-[](http://cocoadocs.org/docsets/Alamofire)
-[](http://twitter.com/AlamofireSF)
-
-Alamofire is an HTTP networking library written in Swift.
-
-## Features
-
-- [x] Chainable Request / Response methods
-- [x] URL / JSON / plist Parameter Encoding
-- [x] Upload File / Data / Stream / MultipartFormData
-- [x] Download using Request or Resume data
-- [x] Authentication with NSURLCredential
-- [x] HTTP Response Validation
-- [x] TLS Certificate and Public Key Pinning
-- [x] Progress Closure & NSProgress
-- [x] cURL Debug Output
-- [x] Comprehensive Unit Test Coverage
-- [x] [Complete Documentation](http://cocoadocs.org/docsets/Alamofire)
-
-## Requirements
-
-- iOS 7.0+ / Mac OS X 10.9+
-- Xcode 6.4
-
-## Communication
-
-- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/alamofire). (Tag 'alamofire')
-- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/alamofire).
-- If you **found a bug**, open an issue.
-- If you **have a feature request**, open an issue.
-- If you **want to contribute**, submit a pull request.
-
-## Installation
-
-> **Embedded frameworks require a minimum deployment target of iOS 8 or OS X Mavericks.**
->
-> To use Alamofire with a project targeting iOS 7, you must include all Swift files located inside the `Source` directory directly in your project. See the ['Source File'](#source-file) section for additional instructions.
-
-### CocoaPods
-
-[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects.
-
-CocoaPods 0.36 adds supports for Swift and embedded frameworks. You can install it with the following command:
-
-```bash
-$ gem install cocoapods
-```
-
-To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`:
-
-```ruby
-source 'https://github.com/CocoaPods/Specs.git'
-platform :ios, '8.0'
-use_frameworks!
-
-pod 'Alamofire', '~> 1.3'
-```
-
-Then, run the following command:
-
-```bash
-$ pod install
-```
-
-### Carthage
-
-[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application.
-
-You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
-
-```bash
-$ brew update
-$ brew install carthage
-```
-
-To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`:
-
-```ogdl
-github "Alamofire/Alamofire" >= 1.3
-```
-
-### Manually
-
-If you prefer not to use either of the aforementioned dependency managers, you can integrate Alamofire into your project manually.
-
-#### Embedded Framework
-
-- Add Alamofire as a [submodule](http://git-scm.com/docs/git-submodule) by opening the Terminal, `cd`-ing into your top-level project directory, and entering the following command:
-
-```bash
-$ git submodule add https://github.com/Alamofire/Alamofire.git
-```
-
-- Open the new `Alamofire` folder, and drag the `Alamofire.xcodeproj` into the Project Navigator of your application's Xcode project.
-
- > It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter.
-
-- Select the `Alamofire.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target.
-- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar.
-- In the tab bar at the top of that window, open the "General" panel.
-- Click on the `+` button under the "Embedded Binaries" section.
-- You will see two different `Alamofire.xcodeproj` folders each with two different versions of the `Alamofire.framework` nested inside a `Products` folder.
-
- > It does not matter which `Products` folder you choose from, but it does matter whether you choose the top or bottom `Alamofire.framework`.
-
-- Select the top `Alamofire.framework` for iOS and the bottom one for OS X.
-
- > You can verify which one you selected by inspecting the build log for your project. The build target for `Alamofire` will be listed as either `Alamofire iOS` or `Alamofire OSX`.
-
-- And that's it!
-
-> The `Alamofire.framework` is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device.
-
-#### Source File
-
-For application targets that do not support embedded frameworks, such as iOS 7, Alamofire can be integrated by adding all the Swift files located inside the `Source` directory (`Source/*.swift`) directly into your project. Note that you will no longer need to `import Alamofire` since you are not actually loading a framework. Additionally, any of the calling conventions described in the ['Usage'](#usage) section with the `Alamofire` prefix would instead omit it (for example, `Alamofire.request` becomes `request`), since this functionality is incorporated into the top-level namespace.
-
----
-
-## Usage
-
-### Making a Request
-
-```swift
-import Alamofire
-
-Alamofire.request(.GET, "http://httpbin.org/get")
-```
-
-### Response Handling
-
-```swift
-Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
- .response { request, response, data, error in
- println(request)
- println(response)
- println(error)
- }
-```
-
-> Networking in Alamofire is done _asynchronously_. Asynchronous programming may be a source of frustration to programmers unfamiliar with the concept, but there are [very good reasons](https://developer.apple.com/library/ios/qa/qa1693/_index.html) for doing it this way.
-
-> Rather than blocking execution to wait for a response from the server, a [callback](http://en.wikipedia.org/wiki/Callback_%28computer_programming%29) is specified to handle the response once it's received. The result of a request is only available inside the scope of a response handler. Any execution contingent on the response or data received from the server must be done within a handler.
-
-### Response Serialization
-
-**Built-in Response Methods**
-
-- `response()`
-- `responseString(encoding: NSStringEncoding)`
-- `responseJSON(options: NSJSONReadingOptions)`
-- `responsePropertyList(options: NSPropertyListReadOptions)`
-
-#### Response String Handler
-
-```swift
-Alamofire.request(.GET, "http://httpbin.org/get")
- .responseString { _, _, string, _ in
- println(string)
- }
-```
-
-#### Response JSON Handler
-
-```swift
-Alamofire.request(.GET, "http://httpbin.org/get")
- .responseJSON { _, _, JSON, _ in
- println(JSON)
- }
-```
-
-#### Chained Response Handlers
-
-Response handlers can even be chained:
-
-```swift
-Alamofire.request(.GET, "http://httpbin.org/get")
- .responseString { _, _, string, _ in
- println(string)
- }
- .responseJSON { _, _, JSON, _ in
- println(JSON)
- }
-```
-
-### HTTP Methods
-
-`Alamofire.Method` lists the HTTP methods defined in [RFC 7231 §4.3](http://tools.ietf.org/html/rfc7231#section-4.3):
-
-```swift
-public enum Method: String {
- case OPTIONS = "OPTIONS"
- case GET = "GET"
- case HEAD = "HEAD"
- case POST = "POST"
- case PUT = "PUT"
- case PATCH = "PATCH"
- case DELETE = "DELETE"
- case TRACE = "TRACE"
- case CONNECT = "CONNECT"
-}
-```
-
-These values can be passed as the first argument of the `Alamofire.request` method:
-
-```swift
-Alamofire.request(.POST, "http://httpbin.org/post")
-
-Alamofire.request(.PUT, "http://httpbin.org/put")
-
-Alamofire.request(.DELETE, "http://httpbin.org/delete")
-```
-
-### Parameters
-
-#### GET Request With URL-Encoded Parameters
-
-```swift
-Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
-// http://httpbin.org/get?foo=bar
-```
-
-#### POST Request With URL-Encoded Parameters
-
-```swift
-let parameters = [
- "foo": "bar",
- "baz": ["a", 1],
- "qux": [
- "x": 1,
- "y": 2,
- "z": 3
- ]
-]
-
-Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters)
-// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3
-```
-
-### Parameter Encoding
-
-Parameters can also be encoded as JSON, Property List, or any custom format, using the `ParameterEncoding` enum:
-
-```swift
-enum ParameterEncoding {
- case URL
- case JSON
- case PropertyList(format: NSPropertyListFormat, options: NSPropertyListWriteOptions)
- case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?))
-
- func encode(request: NSURLRequest, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?)
- { ... }
-}
-```
-
-- `URL`: A query string to be set as or appended to any existing URL query for `GET`, `HEAD`, and `DELETE` requests, or set as the body for requests with any other HTTP method. The `Content-Type` HTTP header field of an encoded request with HTTP body is set to `application/x-www-form-urlencoded`. _Since there is no published specification for how to encode collection types, Alamofire follows the convention of appending `[]` to the key for array values (`foo[]=1&foo[]=2`), and appending the key surrounded by square brackets for nested dictionary values (`foo[bar]=baz`)._
-- `JSON`: Uses `NSJSONSerialization` to create a JSON representation of the parameters object, which is set as the body of the request. The `Content-Type` HTTP header field of an encoded request is set to `application/json`.
-- `PropertyList`: Uses `NSPropertyListSerialization` to create a plist representation of the parameters object, according to the associated format and write options values, which is set as the body of the request. The `Content-Type` HTTP header field of an encoded request is set to `application/x-plist`.
-- `Custom`: Uses the associated closure value to construct a new request given an existing request and parameters.
-
-#### Manual Parameter Encoding of an NSURLRequest
-
-```swift
-let URL = NSURL(string: "http://httpbin.org/get")!
-var request = NSURLRequest(URL: URL)
-
-let parameters = ["foo": "bar"]
-let encoding = Alamofire.ParameterEncoding.URL
-(request, _) = encoding.encode(request, parameters: parameters)
-```
-
-#### POST Request with JSON-encoded Parameters
-
-```swift
-let parameters = [
- "foo": [1,2,3],
- "bar": [
- "baz": "qux"
- ]
-]
-
-Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters, encoding: .JSON)
-// HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}}
-```
-
-### HTTP Headers
-
-Adding a custom HTTP header to a `Request` is supported directly in the global `request` method. This makes it easy to attach HTTP headers to a `Request` that can be constantly changing.
-
-> For HTTP headers that do not change, it is recommended to set them on the `NSURLSessionConfiguration` so they are automatically applied to any `NSURLSessionTask` created by the underlying `NSURLSession`.
-
-```swift
-let headers = [
- "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
- "Content-Type": "application/x-www-form-urlencoded"
-]
-
-Alamofire.request(.GET, "http://httpbin.org/get", headers: headers)
- .responseJSON { _, _, JSON, _ in
- println(JSON)
- }
-```
-
-### Caching
-
-Caching is handled on the system framework level by [`NSURLCache`](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLCache_Class/Reference/Reference.html#//apple_ref/occ/cl/NSURLCache).
-
-### Uploading
-
-**Supported Upload Types**
-
-- File
-- Data
-- Stream
-- MultipartFormData
-
-#### Uploading a File
-
-```swift
-let fileURL = NSBundle.mainBundle().URLForResource("Default", withExtension: "png")
-Alamofire.upload(.POST, "http://httpbin.org/post", file: fileURL)
-```
-
-#### Uploading with Progress
-
-```swift
-Alamofire.upload(.POST, "http://httpbin.org/post", file: fileURL)
- .progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
- println(totalBytesWritten)
- }
- .responseJSON { request, response, JSON, error in
- println(JSON)
- }
-```
-
-#### Uploading MultipartFormData
-
-```swift
-Alamofire.upload(
- .POST,
- URLString: "http://httpbin.org/post",
- multipartFormData: { multipartFormData in
- multipartFormData.appendBodyPart(fileURL: unicornImageURL, name: "unicorn")
- multipartFormData.appendBodyPart(fileURL: rainbowImageURL, name: "rainbow")
- },
- encodingCompletion: { encodingResult in
- switch encodingResult {
- case .Success(let upload, _, _):
- upload.responseJSON { request, response, JSON, error in
- println(JSON)
- }
- case .Failure(let encodingError):
- println(encodingError)
- }
- }
-)
-```
-
-### Downloading
-
-**Supported Download Types**
-
-- Request
-- Resume Data
-
-#### Downloading a File
-
-```swift
-Alamofire.download(.GET, "http://httpbin.org/stream/100") { temporaryURL, response in
- let fileManager = NSFileManager.defaultManager()
- if let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as? NSURL {
- let pathComponent = response.suggestedFilename
- return directoryURL.URLByAppendingPathComponent(pathComponent!)
- }
-
- return temporaryURL
-}
-```
-
-#### Using the Default Download Destination
-
-```swift
-let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)
-Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: destination)
-```
-
-#### Downloading a File w/Progress
-
-```swift
-Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: destination)
- .progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in
- println(totalBytesRead)
- }
- .response { request, response, _, error in
- println(response)
- }
-```
-
-### Authentication
-
-Authentication is handled on the system framework level by [`NSURLCredential` and `NSURLAuthenticationChallenge`](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLAuthenticationChallenge_Class/Reference/Reference.html).
-
-**Supported Authentication Schemes**
-
-- [HTTP Basic](http://en.wikipedia.org/wiki/Basic_access_authentication)
-- [HTTP Digest](http://en.wikipedia.org/wiki/Digest_access_authentication)
-- [Kerberos](http://en.wikipedia.org/wiki/Kerberos_%28protocol%29)
-- [NTLM](http://en.wikipedia.org/wiki/NT_LAN_Manager)
-
-#### HTTP Basic Authentication
-
-The `authenticate` method on a `Request` will automatically provide an `NSURLCredential` to an `NSURLAuthenticationChallenge` when appropriate:
-
-```swift
-let user = "user"
-let password = "password"
-
-Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)")
- .authenticate(user: user, password: password)
- .response { request, response, _, error in
- println(response)
- }
-```
-
-Depending upon your server implementation, an `Authorization` header may also be appropriate:
-
-```swift
-let user = "user"
-let password = "password"
-
-let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)!
-let base64Credentials = credentialData.base64EncodedStringWithOptions(nil)
-
-let headers = ["Authorization": "Basic \(base64Credentials)"]
-
-Alamofire.request(.GET, "http://httpbin.org/basic-auth/user/password", headers: headers)
- .responseJSON { _, _, JSON, _ in
- println(JSON)
- }
-```
-
-#### Authentication with NSURLCredential
-
-```swift
-let user = "user"
-let password = "password"
-
-let credential = NSURLCredential(user: user, password: password, persistence: .ForSession)
-
-Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)")
- .authenticate(usingCredential: credential)
- .response { request, response, _, error in
- println(response)
- }
-```
-
-### Validation
-
-By default, Alamofire treats any completed request to be successful, regardless of the content of the response. Calling `validate` before a response handler causes an error to be generated if the response had an unacceptable status code or MIME type.
-
-#### Manual Validation
-
-```swift
-Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
- .validate(statusCode: 200..<300)
- .validate(contentType: ["application/json"])
- .response { _, _, _, error in
- println(error)
- }
-```
-
-#### Automatic Validation
-
-Automatically validates status code within `200...299` range, and that the `Content-Type` header of the response matches the `Accept` header of the request, if one is provided.
-
-```swift
-Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
- .validate()
- .response { _, _, _, error in
- println(error)
- }
-```
-
-### Printable
-
-```swift
-let request = Alamofire.request(.GET, "http://httpbin.org/ip")
-
-println(request)
-// GET http://httpbin.org/ip (200)
-```
-
-### DebugPrintable
-
-```swift
-let request = Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
-
-debugPrintln(request)
-```
-
-#### Output (cURL)
-
-```bash
-$ curl -i \
- -H "User-Agent: Alamofire" \
- -H "Accept-Encoding: Accept-Encoding: gzip;q=1.0,compress;q=0.5" \
- -H "Accept-Language: en;q=1.0,fr;q=0.9,de;q=0.8,zh-Hans;q=0.7,zh-Hant;q=0.6,ja;q=0.5" \
- "http://httpbin.org/get?foo=bar"
-```
-
----
-
-## Advanced Usage
-
-> Alamofire is built on `NSURLSession` and the Foundation URL Loading System. To make the most of
-this framework, it is recommended that you be familiar with the concepts and capabilities of the underlying networking stack.
-
-**Recommended Reading**
-
-- [URL Loading System Programming Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html)
-- [NSURLSession Class Reference](https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSURLSession_class/Introduction/Introduction.html#//apple_ref/occ/cl/NSURLSession)
-- [NSURLCache Class Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLCache_Class/Reference/Reference.html#//apple_ref/occ/cl/NSURLCache)
-- [NSURLAuthenticationChallenge Class Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLAuthenticationChallenge_Class/Reference/Reference.html)
-
-### Manager
-
-Top-level convenience methods like `Alamofire.request` use a shared instance of `Alamofire.Manager`, which is configured with the default `NSURLSessionConfiguration`.
-
-As such, the following two statements are equivalent:
-
-```swift
-Alamofire.request(.GET, "http://httpbin.org/get")
-```
-
-```swift
-let manager = Alamofire.Manager.sharedInstance
-manager.request(NSURLRequest(URL: NSURL(string: "http://httpbin.org/get")))
-```
-
-Applications can create managers for background and ephemeral sessions, as well as new managers that customize the default session configuration, such as for default headers (`HTTPAdditionalHeaders`) or timeout interval (`timeoutIntervalForRequest`).
-
-#### Creating a Manager with Default Configuration
-
-```swift
-let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
-let manager = Alamofire.Manager(configuration: configuration)
-```
-
-#### Creating a Manager with Background Configuration
-
-```swift
-let configuration = NSURLSessionConfiguration.backgroundSessionConfiguration("com.example.app.background")
-let manager = Alamofire.Manager(configuration: configuration)
-```
-
-#### Creating a Manager with Ephemeral Configuration
-
-```swift
-let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
-let manager = Alamofire.Manager(configuration: configuration)
-```
-
-#### Modifying Session Configuration
-
-```swift
-var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
-defaultHeaders["DNT"] = "1 (Do Not Track Enabled)"
-
-let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
-configuration.HTTPAdditionalHeaders = defaultHeaders
-
-let manager = Alamofire.Manager(configuration: configuration)
-```
-
-> This is **not** recommended for `Authorization` or `Content-Type` headers. Instead, use `URLRequestConvertible` and `ParameterEncoding`, respectively.
-
-### Request
-
-The result of a `request`, `upload`, or `download` method is an instance of `Alamofire.Request`. A request is always created using a constructor method from an owning manager, and never initialized directly.
-
-Methods like `authenticate`, `validate`, and `response` return the caller in order to facilitate chaining.
-
-Requests can be suspended, resumed, and cancelled:
-
-- `suspend()`: Suspends the underlying task and dispatch queue
-- `resume()`: Resumes the underlying task and dispatch queue. If the owning manager does not have `startRequestsImmediately` set to `true`, the request must call `resume()` in order to start.
-- `cancel()`: Cancels the underlying task, producing an error that is passed to any registered response handlers.
-
-### Response Serialization
-
-#### Creating a Custom Response Serializer
-
-Alamofire provides built-in response serialization for strings, JSON, and property lists, but others can be added in extensions on `Alamofire.Request`.
-
-For example, here's how a response handler using [Ono](https://github.com/mattt/Ono) might be implemented:
-
-```swift
-extension Request {
- public static func XMLResponseSerializer() -> GenericResponseSerializer {
- return GenericResponseSerializer { request, response, data in
- if data == nil {
- return (nil, nil)
- }
-
- var XMLSerializationError: NSError?
- let XML = ONOXMLDocument(data: data!, error: &XMLSerializationError)
-
- return (XML, XMLSerializationError)
- }
- }
-
- public func responseXMLDocument(completionHandler: (NSURLRequest, NSHTTPURLResponse?, ONOXMLDocument?, NSError?) -> Void) -> Self {
- return response(responseSerializer: Request.XMLResponseSerializer(), completionHandler: completionHandler)
- }
-}
-```
-
-#### Generic Response Object Serialization
-
-Generics can be used to provide automatic, type-safe response object serialization.
-
-```swift
-@objc public protocol ResponseObjectSerializable {
- init?(response: NSHTTPURLResponse, representation: AnyObject)
-}
-
-extension Request {
- public func responseObject(completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, NSError?) -> Void) -> Self {
- let responseSerializer = GenericResponseSerializer { request, response, data in
- let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
- let (JSON: AnyObject?, serializationError) = JSONResponseSerializer.serializeResponse(request, response, data)
-
- if let response = response, JSON: AnyObject = JSON {
- return (T(response: response, representation: JSON), nil)
- } else {
- return (nil, serializationError)
- }
- }
-
- return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
- }
-}
-```
-
-```swift
-final class User: ResponseObjectSerializable {
- let username: String
- let name: String
-
- @objc required init?(response: NSHTTPURLResponse, representation: AnyObject) {
- self.username = response.URL!.lastPathComponent!
- self.name = representation.valueForKeyPath("name") as! String
- }
-}
-```
-
-```swift
-Alamofire.request(.GET, "http://example.com/users/mattt")
- .responseObject { (_, _, user: User?, _) in
- println(user)
- }
-```
-
-The same approach can also be used to handle endpoints that return a representation of a collection of objects:
-
-```swift
-@objc public protocol ResponseCollectionSerializable {
- static func collection(#response: NSHTTPURLResponse, representation: AnyObject) -> [Self]
-}
-
-extension Alamofire.Request {
- public func responseCollection(completionHandler: (NSURLRequest, NSHTTPURLResponse?, [T]?, NSError?) -> Void) -> Self {
- let responseSerializer = GenericResponseSerializer<[T]> { request, response, data in
- let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
- let (JSON: AnyObject?, serializationError) = JSONSerializer.serializeResponse(request, response, data)
-
- if let response = response, JSON: AnyObject = JSON {
- return (T.collection(response: response, representation: JSON), nil)
- } else {
- return (nil, serializationError)
- }
- }
-
- return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
- }
-}
-```
-
-```swift
-@objc final class User: ResponseObjectSerializable, ResponseCollectionSerializable {
- let username: String
- let name: String
-
- required init?(response: NSHTTPURLResponse, representation: AnyObject) {
- self.username = response.URL!.lastPathComponent!
- self.name = representation.valueForKeyPath("name") as! String
- }
-
- static func collection(#response: NSHTTPURLResponse, representation: AnyObject) -> [User] {
- var users: [User] = []
-
- if let representation = representation as? [[String: AnyObject]] {
- for userRepresentation in representation {
- if let user = User(response: response, representation: userRepresentation) {
- users.append(user)
- }
- }
- }
-
- return users
- }
-}
-```
-
-```swift
-Alamofire.request(.GET, "http://example.com/users")
- .responseCollection { (_, _, users: [User]?, _) in
- println(users)
- }
-```
-
-### URLStringConvertible
-
-Types adopting the `URLStringConvertible` protocol can be used to construct URL strings, which are then used to construct URL requests. `NSString`, `NSURL`, `NSURLComponents`, and `NSURLRequest` conform to `URLStringConvertible` by default, allowing any of them to be passed as `URLString` parameters to the `request`, `upload`, and `download` methods:
-
-```swift
-let string = NSString(string: "http://httpbin.org/post")
-Alamofire.request(.POST, string)
-
-let URL = NSURL(string: string)!
-Alamofire.request(.POST, URL)
-
-let URLRequest = NSURLRequest(URL: URL)
-Alamofire.request(.POST, URLRequest) // overrides `HTTPMethod` of `URLRequest`
-
-let URLComponents = NSURLComponents(URL: URL, resolvingAgainstBaseURL: true)
-Alamofire.request(.POST, URLComponents)
-```
-
-Applications interacting with web applications in a significant manner are encouraged to have custom types conform to `URLStringConvertible` as a convenient way to map domain-specific models to server resources.
-
-#### Type-Safe Routing
-
-```swift
-extension User: URLStringConvertible {
- static let baseURLString = "http://example.com"
-
- var URLString: String {
- return User.baseURLString + "/users/\(username)/"
- }
-}
-```
-
-```swift
-let user = User(username: "mattt")
-Alamofire.request(.GET, user) // http://example.com/users/mattt
-```
-
-### URLRequestConvertible
-
-Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests. `NSURLRequest` conforms to `URLRequestConvertible` by default, allowing it to be passed into `request`, `upload`, and `download` methods directly (this is the recommended way to specify custom HTTP header fields or HTTP body for individual requests):
-
-```swift
-let URL = NSURL(string: "http://httpbin.org/post")!
-let mutableURLRequest = NSMutableURLRequest(URL: URL)
-mutableURLRequest.HTTPMethod = "POST"
-
-let parameters = ["foo": "bar"]
-var JSONSerializationError: NSError? = nil
-mutableURLRequest.HTTPBody = NSJSONSerialization.dataWithJSONObject(parameters, options: nil, error: &JSONSerializationError)
-mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
-
-Alamofire.request(mutableURLRequest)
-```
-
-Applications interacting with web applications in a significant manner are encouraged to have custom types conform to `URLRequestConvertible` as a way to ensure consistency of requested endpoints. Such an approach can be used to abstract away server-side inconsistencies and provide type-safe routing, as well as manage authentication credentials and other state.
-
-#### API Parameter Abstraction
-
-```swift
-enum Router: URLRequestConvertible {
- static let baseURLString = "http://example.com"
- static let perPage = 50
-
- case Search(query: String, page: Int)
-
- // MARK: URLRequestConvertible
-
- var URLRequest: NSURLRequest {
- let (path: String, parameters: [String: AnyObject]?) = {
- switch self {
- case .Search(let query, let page) where page > 1:
- return ("/search", ["q": query, "offset": Router.perPage * page])
- case .Search(let query, _):
- return ("/search", ["q": query])
- }
- }()
-
- let URL = NSURL(string: Router.baseURLString)!
- let URLRequest = NSURLRequest(URL: URL.URLByAppendingPathComponent(path))
- let encoding = Alamofire.ParameterEncoding.URL
-
- return encoding.encode(URLRequest, parameters: parameters).0
- }
-}
-```
-
-```swift
-Alamofire.request(Router.Search(query: "foo bar", page: 1)) // ?q=foo%20bar&offset=50
-```
-
-#### CRUD & Authorization
-
-```swift
-enum Router: URLRequestConvertible {
- static let baseURLString = "http://example.com"
- static var OAuthToken: String?
-
- case CreateUser([String: AnyObject])
- case ReadUser(String)
- case UpdateUser(String, [String: AnyObject])
- case DestroyUser(String)
-
- var method: Alamofire.Method {
- switch self {
- case .CreateUser:
- return .POST
- case .ReadUser:
- return .GET
- case .UpdateUser:
- return .PUT
- case .DestroyUser:
- return .DELETE
- }
- }
-
- var path: String {
- switch self {
- case .CreateUser:
- return "/users"
- case .ReadUser(let username):
- return "/users/\(username)"
- case .UpdateUser(let username, _):
- return "/users/\(username)"
- case .DestroyUser(let username):
- return "/users/\(username)"
- }
- }
-
- // MARK: URLRequestConvertible
-
- var URLRequest: NSURLRequest {
- let URL = NSURL(string: Router.baseURLString)!
- let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
- mutableURLRequest.HTTPMethod = method.rawValue
-
- if let token = Router.OAuthToken {
- mutableURLRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
- }
-
- switch self {
- case .CreateUser(let parameters):
- return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
- case .UpdateUser(_, let parameters):
- return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
- default:
- return mutableURLRequest
- }
- }
-}
-```
-
-```swift
-Alamofire.request(Router.ReadUser("mattt")) // GET /users/mattt
-```
-
-### Security
-
-Using a secure HTTPS connection when communicating with servers and web services is an important step in securing sensitive data. By default, Alamofire will evaluate the certificate chain provided by the server using Apple's built in validation provided by the Security framework. While this guarantees the certificate chain is valid, it does not prevent man-in-the-middle (MITM) attacks or other potential vulnerabilities. In order to mitigate MITM attacks, applications dealing with sensitive customer data or financial information should use certificate or public key pinning provided by the `ServerTrustPolicy`.
-
-#### ServerTrustPolicy
-
-The `ServerTrustPolicy` enumeration evaluates the server trust generally provided by an `NSURLAuthenticationChallenge` when connecting to a server over a secure HTTPS connection.
-
-```swift
-let serverTrustPolicy = ServerTrustPolicy.PinCertificates(
- certificates: ServerTrustPolicy.certificatesInBundle(),
- validateCertificateChain: true,
- validateHost: true
-)
-```
-
-There are many different cases of server trust evaluation giving you complete control over the validation process:
-
-* `PerformDefaultEvaluation`: Uses the default server trust evaluation while allowing you to control whether to validate the host provided by the challenge.
-* `PinCertificates`: Uses the pinned certificates to validate the server trust. The server trust is considered valid if one of the pinned certificates match one of the server certificates.
-* `PinPublicKeys`: Uses the pinned public keys to validate the server trust. The server trust is considered valid if one of the pinned public keys match one of the server certificate public keys.
-* `DisableEvaluation`: Disables all evaluation which in turn will always consider any server trust as valid.
-* `CustomEvaluation`: Uses the associated closure to evaluate the validity of the server trust thus giving you complete control over the validation process. Use with caution.
-
-#### Server Trust Policy Manager
-
-The `ServerTrustPolicyManager` is responsible for storing an internal mapping of server trust policies to a particular host. This allows Alamofire to evaluate each host against a different server trust policy.
-
-```swift
-let serverTrustPolicies: [String: ServerTrustPolicy] = [
- "test.example.com": .PinCertificates(
- certificates: ServerTrustPolicy.certificatesInBundle(),
- validateCertificateChain: true,
- validateHost: true
- ),
- "insecure.expired-apis.com": .DisableEvaluation
-]
-
-let manager = Manager(
- configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),
- serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
-)
-```
-
-These server trust policies will result in the following behavior:
-
-* `test.example.com` will always use certificate pinning with certificate chain and host validation enabled thus requiring the following criteria to be met to allow the TLS handshake to succeed:
- * Certificate chain MUST be valid.
- * Certificate chain MUST include one of the pinned certificates.
- * Challenge host MUST match the host in the certificate chain's leaf certificate.
-* `insecure.expired-apis.com` will never evaluate the certificate chain and will always allow the TLS handshake to succeed.
-* All other hosts will use the default evaluation provided by Apple.
-
-* * *
-
-## FAQ
-
-### When should I use Alamofire?
-
-If you're starting a new project in Swift, and want to take full advantage of its conventions and language features, Alamofire is a great choice. Although not as fully-featured as AFNetworking, Alamofire is much nicer to work with, and should satisfy the vast majority of networking use cases.
-
-> It's important to note that two libraries aren't mutually exclusive: AFNetworking and Alamofire can peacefully exist in the same code base.
-
-### When should I use AFNetworking?
-
-AFNetworking remains the premiere networking library available for OS X and iOS, and can easily be used in Swift, just like any other Objective-C code. AFNetworking is stable and reliable, and isn't going anywhere.
-
-Use AFNetworking for any of the following:
-
-- UIKit extensions, such as asynchronously loading images to `UIImageView`
-- Network reachability monitoring, using `AFNetworkReachabilityManager`
-
-### What's the origin of the name Alamofire?
-
-Alamofire is named after the [Alamo Fire flower](https://aggie-horticulture.tamu.edu/wildseed/alamofire.html), a hybrid variant of the Bluebonnet, the official state flower of Texas.
-
-* * *
-
-## Credits
-
-Alamofire is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). You can follow them on Twitter at [@AlamofireSF](https://twitter.com/AlamofireSF) for project updates and releases.
-
-### Security Disclosure
-
-If you believe you have identified a security vulnerability with Alamofire, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker.
-
-## License
-
-Alamofire is released under the MIT license. See LICENSE for details.
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/Alamofire.swift b/WeatherAroundUs/Pods/Alamofire/Source/Alamofire.swift
deleted file mode 100644
index 903a30e..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/Alamofire.swift
+++ /dev/null
@@ -1,315 +0,0 @@
-// Alamofire.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-/// Alamofire errors
-public let AlamofireErrorDomain = "com.alamofire.error"
-public let AlamofireInputStreamReadFailed = -6000
-public let AlamofireOutputStreamWriteFailed = -6001
-
-// MARK: - URLStringConvertible
-
-/**
- Types adopting the `URLStringConvertible` protocol can be used to construct URL strings, which are then used to construct URL requests.
-*/
-public protocol URLStringConvertible {
- /**
- A URL that conforms to RFC 2396.
-
- Methods accepting a `URLStringConvertible` type parameter parse it according to RFCs 1738 and 1808.
-
- See http://tools.ietf.org/html/rfc2396
- See http://tools.ietf.org/html/rfc1738
- See http://tools.ietf.org/html/rfc1808
- */
- var URLString: String { get }
-}
-
-extension String: URLStringConvertible {
- public var URLString: String {
- return self
- }
-}
-
-extension NSURL: URLStringConvertible {
- public var URLString: String {
- return absoluteString!
- }
-}
-
-extension NSURLComponents: URLStringConvertible {
- public var URLString: String {
- return URL!.URLString
- }
-}
-
-extension NSURLRequest: URLStringConvertible {
- public var URLString: String {
- return URL!.URLString
- }
-}
-
-// MARK: - URLRequestConvertible
-
-/**
- Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests.
-*/
-public protocol URLRequestConvertible {
- /// The URL request.
- var URLRequest: NSURLRequest { get }
-}
-
-extension NSURLRequest: URLRequestConvertible {
- public var URLRequest: NSURLRequest {
- return self
- }
-}
-
-// MARK: - Convenience
-
-func URLRequest(method: Method, URLString: URLStringConvertible, headers: [String: String]? = nil) -> NSMutableURLRequest {
- let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: URLString.URLString)!)
- mutableURLRequest.HTTPMethod = method.rawValue
-
- if let headers = headers {
- for (headerField, headerValue) in headers {
- mutableURLRequest.setValue(headerValue, forHTTPHeaderField: headerField)
- }
- }
-
- return mutableURLRequest
-}
-
-// MARK: - Request Methods
-
-/**
- Creates a request using the shared manager instance for the specified method, URL string, parameters, and parameter encoding.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: parameters The parameters. `nil` by default.
- :param: encoding The parameter encoding. `.URL` by default.
- :param: headers The HTTP headers. `nil` by default.
-
- :returns: The created request.
-*/
-public func request(method: Method, URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil, encoding: ParameterEncoding = .URL, headers: [String: String]? = nil) -> Request {
- return Manager.sharedInstance.request(method, URLString, parameters: parameters, encoding: encoding, headers: headers)
-}
-
-/**
- Creates a request using the shared manager instance for the specified URL request.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: URLRequest The URL request
-
- :returns: The created request.
-*/
-public func request(URLRequest: URLRequestConvertible) -> Request {
- return Manager.sharedInstance.request(URLRequest.URLRequest)
-}
-
-// MARK: - Upload Methods
-
-// MARK: File
-
-/**
- Creates an upload request using the shared manager instance for the specified method, URL string, and file.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: file The file to upload.
-
- :returns: The created upload request.
-*/
-public func upload(method: Method, URLString: URLStringConvertible, headers: [String: String]? = nil, #file: NSURL) -> Request {
- return Manager.sharedInstance.upload(method, URLString, headers: headers, file: file)
-}
-
-/**
- Creates an upload request using the shared manager instance for the specified URL request and file.
-
- :param: URLRequest The URL request.
- :param: file The file to upload.
-
- :returns: The created upload request.
-*/
-public func upload(URLRequest: URLRequestConvertible, #file: NSURL) -> Request {
- return Manager.sharedInstance.upload(URLRequest, file: file)
-}
-
-// MARK: Data
-
-/**
- Creates an upload request using the shared manager instance for the specified method, URL string, and data.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: data The data to upload.
-
- :returns: The created upload request.
-*/
-public func upload(method: Method, URLString: URLStringConvertible, headers: [String: String]? = nil, #data: NSData) -> Request {
- return Manager.sharedInstance.upload(method, URLString, headers: headers, data: data)
-}
-
-/**
- Creates an upload request using the shared manager instance for the specified URL request and data.
-
- :param: URLRequest The URL request.
- :param: data The data to upload.
-
- :returns: The created upload request.
-*/
-public func upload(URLRequest: URLRequestConvertible, #data: NSData) -> Request {
- return Manager.sharedInstance.upload(URLRequest, data: data)
-}
-
-// MARK: Stream
-
-/**
- Creates an upload request using the shared manager instance for the specified method, URL string, and stream.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: stream The stream to upload.
-
- :returns: The created upload request.
-*/
-public func upload(method: Method, URLString: URLStringConvertible, headers: [String: String]? = nil, #stream: NSInputStream) -> Request {
- return Manager.sharedInstance.upload(method, URLString, headers: headers, stream: stream)
-}
-
-/**
- Creates an upload request using the shared manager instance for the specified URL request and stream.
-
- :param: URLRequest The URL request.
- :param: stream The stream to upload.
-
- :returns: The created upload request.
-*/
-public func upload(URLRequest: URLRequestConvertible, #stream: NSInputStream) -> Request {
- return Manager.sharedInstance.upload(URLRequest, stream: stream)
-}
-
-// MARK: MultipartFormData
-
-/**
- Creates an upload request using the shared manager instance for the specified method and URL string.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: multipartFormData The closure used to append body parts to the `MultipartFormData`.
- :param: encodingMemoryThreshold The encoding memory threshold in bytes. `MultipartFormDataEncodingMemoryThreshold`
- by default.
- :param: encodingCompletion The closure called when the `MultipartFormData` encoding is complete.
-*/
-public func upload(
- method: Method,
- #URLString: URLStringConvertible,
- headers: [String: String]? = nil,
- #multipartFormData: MultipartFormData -> Void,
- encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold,
- #encodingCompletion: (Manager.MultipartFormDataEncodingResult -> Void)?)
-{
- return Manager.sharedInstance.upload(
- method,
- URLString,
- headers: headers,
- multipartFormData: multipartFormData,
- encodingMemoryThreshold: encodingMemoryThreshold,
- encodingCompletion: encodingCompletion
- )
-}
-
-/**
- Creates an upload request using the shared manager instance for the specified method and URL string.
-
- :param: URLRequest The URL request.
- :param: multipartFormData The closure used to append body parts to the `MultipartFormData`.
- :param: encodingMemoryThreshold The encoding memory threshold in bytes. `MultipartFormDataEncodingMemoryThreshold`
- by default.
- :param: encodingCompletion The closure called when the `MultipartFormData` encoding is complete.
-*/
-public func upload(
- URLRequest: URLRequestConvertible,
- #multipartFormData: MultipartFormData -> Void,
- encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold,
- #encodingCompletion: (Manager.MultipartFormDataEncodingResult -> Void)?)
-{
- return Manager.sharedInstance.upload(
- URLRequest,
- multipartFormData: multipartFormData,
- encodingMemoryThreshold: encodingMemoryThreshold,
- encodingCompletion: encodingCompletion
- )
-}
-
-// MARK: - Download Methods
-
-// MARK: URL Request
-
-/**
- Creates a download request using the shared manager instance for the specified method and URL string.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: destination The closure used to determine the destination of the downloaded file.
-
- :returns: The created download request.
-*/
-public func download(method: Method, URLString: URLStringConvertible, headers: [String: String]? = nil, #destination: Request.DownloadFileDestination) -> Request {
- return Manager.sharedInstance.download(method, URLString, headers: headers, destination: destination)
-}
-
-/**
- Creates a download request using the shared manager instance for the specified URL request.
-
- :param: URLRequest The URL request.
- :param: destination The closure used to determine the destination of the downloaded file.
-
- :returns: The created download request.
-*/
-public func download(URLRequest: URLRequestConvertible, #destination: Request.DownloadFileDestination) -> Request {
- return Manager.sharedInstance.download(URLRequest, destination: destination)
-}
-
-// MARK: Resume Data
-
-/**
- Creates a request using the shared manager instance for downloading from the resume data produced from a previous request cancellation.
-
- :param: resumeData The resume data. This is an opaque data blob produced by `NSURLSessionDownloadTask` when a task is cancelled. See `NSURLSession -downloadTaskWithResumeData:` for additional information.
- :param: destination The closure used to determine the destination of the downloaded file.
-
- :returns: The created download request.
-*/
-public func download(resumeData data: NSData, #destination: Request.DownloadFileDestination) -> Request {
- return Manager.sharedInstance.download(data, destination: destination)
-}
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/Download.swift b/WeatherAroundUs/Pods/Alamofire/Source/Download.swift
deleted file mode 100644
index 0a1396b..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/Download.swift
+++ /dev/null
@@ -1,200 +0,0 @@
-// Download.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-extension Manager {
- private enum Downloadable {
- case Request(NSURLRequest)
- case ResumeData(NSData)
- }
-
- private func download(downloadable: Downloadable, destination: Request.DownloadFileDestination) -> Request {
- var downloadTask: NSURLSessionDownloadTask!
-
- switch downloadable {
- case .Request(let request):
- dispatch_sync(queue) {
- downloadTask = self.session.downloadTaskWithRequest(request)
- }
- case .ResumeData(let resumeData):
- dispatch_sync(queue) {
- downloadTask = self.session.downloadTaskWithResumeData(resumeData)
- }
- }
-
- let request = Request(session: session, task: downloadTask)
-
- if let downloadDelegate = request.delegate as? Request.DownloadTaskDelegate {
- downloadDelegate.downloadTaskDidFinishDownloadingToURL = { session, downloadTask, URL in
- return destination(URL, downloadTask.response as! NSHTTPURLResponse)
- }
- }
-
- delegate[request.delegate.task] = request.delegate
-
- if startRequestsImmediately {
- request.resume()
- }
-
- return request
- }
-
- // MARK: Request
-
- /**
- Creates a download request using the shared manager instance for the specified method and URL string.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: destination The closure used to determine the destination of the downloaded file.
-
- :returns: The created download request.
- */
- public func download(method: Method, _ URLString: URLStringConvertible, headers: [String: String]? = nil, destination: Request.DownloadFileDestination) -> Request {
- let mutableURLRequest = URLRequest(method, URLString, headers: headers)
- return download(mutableURLRequest, destination: destination)
- }
-
- /**
- Creates a request for downloading from the specified URL request.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: URLRequest The URL request
- :param: destination The closure used to determine the destination of the downloaded file.
-
- :returns: The created download request.
- */
- public func download(URLRequest: URLRequestConvertible, destination: Request.DownloadFileDestination) -> Request {
- return download(.Request(URLRequest.URLRequest), destination: destination)
- }
-
- // MARK: Resume Data
-
- /**
- Creates a request for downloading from the resume data produced from a previous request cancellation.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: resumeData The resume data. This is an opaque data blob produced by `NSURLSessionDownloadTask` when a task is cancelled. See `NSURLSession -downloadTaskWithResumeData:` for additional information.
- :param: destination The closure used to determine the destination of the downloaded file.
-
- :returns: The created download request.
- */
- public func download(resumeData: NSData, destination: Request.DownloadFileDestination) -> Request {
- return download(.ResumeData(resumeData), destination: destination)
- }
-}
-
-// MARK: -
-
-extension Request {
- /**
- A closure executed once a request has successfully completed in order to determine where to move the temporary file written to during the download process. The closure takes two arguments: the temporary file URL and the URL response, and returns a single argument: the file URL where the temporary file should be moved.
- */
- public typealias DownloadFileDestination = (NSURL, NSHTTPURLResponse) -> NSURL
-
- /**
- Creates a download file destination closure which uses the default file manager to move the temporary file to a file URL in the first available directory with the specified search path directory and search path domain mask.
-
- :param: directory The search path directory. `.DocumentDirectory` by default.
- :param: domain The search path domain mask. `.UserDomainMask` by default.
-
- :returns: A download file destination closure.
- */
- public class func suggestedDownloadDestination(directory: NSSearchPathDirectory = .DocumentDirectory, domain: NSSearchPathDomainMask = .UserDomainMask) -> DownloadFileDestination {
-
- return { temporaryURL, response -> NSURL in
- if let directoryURL = NSFileManager.defaultManager().URLsForDirectory(directory, inDomains: domain)[0] as? NSURL {
- return directoryURL.URLByAppendingPathComponent(response.suggestedFilename!)
- }
-
- return temporaryURL
- }
- }
-
- /// The resume data of the underlying download task if available after a failure.
- public var resumeData: NSData? {
- var data: NSData?
-
- if let delegate = delegate as? DownloadTaskDelegate {
- data = delegate.resumeData
- }
-
- return data
- }
-
- // MARK: - DownloadTaskDelegate
-
- class DownloadTaskDelegate: TaskDelegate, NSURLSessionDownloadDelegate {
- var downloadTask: NSURLSessionDownloadTask? { return task as? NSURLSessionDownloadTask }
- var downloadProgress: ((Int64, Int64, Int64) -> Void)?
-
- var resumeData: NSData?
- override var data: NSData? { return resumeData }
-
- // MARK: - NSURLSessionDownloadDelegate
-
- // MARK: Override Closures
-
- var downloadTaskDidFinishDownloadingToURL: ((NSURLSession, NSURLSessionDownloadTask, NSURL) -> NSURL)?
- var downloadTaskDidWriteData: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64, Int64) -> Void)?
- var downloadTaskDidResumeAtOffset: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64) -> Void)?
-
- // MARK: Delegate Methods
-
- func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
- if let downloadTaskDidFinishDownloadingToURL = downloadTaskDidFinishDownloadingToURL {
- let destination = downloadTaskDidFinishDownloadingToURL(session, downloadTask, location)
- var fileManagerError: NSError?
-
- NSFileManager.defaultManager().moveItemAtURL(location, toURL: destination, error: &fileManagerError)
-
- if fileManagerError != nil {
- error = fileManagerError
- }
- }
- }
-
- func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
- if let downloadTaskDidWriteData = downloadTaskDidWriteData {
- downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite)
- } else {
- progress.totalUnitCount = totalBytesExpectedToWrite
- progress.completedUnitCount = totalBytesWritten
-
- downloadProgress?(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite)
- }
- }
-
- func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {
- if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset {
- downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes)
- } else {
- progress.totalUnitCount = expectedTotalBytes
- progress.completedUnitCount = fileOffset
- }
- }
- }
-}
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/Manager.swift b/WeatherAroundUs/Pods/Alamofire/Source/Manager.swift
deleted file mode 100644
index 9dbecfd..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/Manager.swift
+++ /dev/null
@@ -1,415 +0,0 @@
-// Manager.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-/**
- Responsible for creating and managing `Request` objects, as well as their underlying `NSURLSession`.
-*/
-public class Manager {
-
- // MARK: - Properties
-
- /**
- A shared instance of `Manager`, used by top-level Alamofire request methods, and suitable for use directly for any ad hoc requests.
- */
- public static let sharedInstance: Manager = {
- let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
- configuration.HTTPAdditionalHeaders = Manager.defaultHTTPHeaders
-
- return Manager(configuration: configuration)
- }()
-
- /**
- Creates default values for the "Accept-Encoding", "Accept-Language" and "User-Agent" headers.
-
- :returns: The default header values.
- */
- public static let defaultHTTPHeaders: [String: String] = {
- // Accept-Encoding HTTP Header; see http://tools.ietf.org/html/rfc7230#section-4.2.3
- let acceptEncoding: String = "gzip;q=1.0,compress;q=0.5"
-
- // Accept-Language HTTP Header; see http://tools.ietf.org/html/rfc7231#section-5.3.5
- let acceptLanguage: String = {
- var components: [String] = []
- for (index, languageCode) in enumerate(NSLocale.preferredLanguages() as! [String]) {
- let q = 1.0 - (Double(index) * 0.1)
- components.append("\(languageCode);q=\(q)")
- if q <= 0.5 {
- break
- }
- }
-
- return join(",", components)
- }()
-
- // User-Agent Header; see http://tools.ietf.org/html/rfc7231#section-5.5.3
- let userAgent: String = {
- if let info = NSBundle.mainBundle().infoDictionary {
- let executable: AnyObject = info[kCFBundleExecutableKey] ?? "Unknown"
- let bundle: AnyObject = info[kCFBundleIdentifierKey] ?? "Unknown"
- let version: AnyObject = info[kCFBundleVersionKey] ?? "Unknown"
- let os: AnyObject = NSProcessInfo.processInfo().operatingSystemVersionString ?? "Unknown"
-
- var mutableUserAgent = NSMutableString(string: "\(executable)/\(bundle) (\(version); OS \(os))") as CFMutableString
- let transform = NSString(string: "Any-Latin; Latin-ASCII; [:^ASCII:] Remove") as CFString
-
- if CFStringTransform(mutableUserAgent, nil, transform, 0) == 1 {
- return mutableUserAgent as String
- }
- }
-
- return "Alamofire"
- }()
-
- return [
- "Accept-Encoding": acceptEncoding,
- "Accept-Language": acceptLanguage,
- "User-Agent": userAgent
- ]
- }()
-
- let queue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL)
-
- /// The underlying session.
- public let session: NSURLSession
-
- /// The session delegate handling all the task and session delegate callbacks.
- public let delegate: SessionDelegate
-
- /// Whether to start requests immediately after being constructed. `true` by default.
- public var startRequestsImmediately: Bool = true
-
- /// The background completion handler closure provided by the UIApplicationDelegate `application:handleEventsForBackgroundURLSession:completionHandler:` method. By setting the background completion handler, the SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` closure implementation will automatically call the handler. If you need to handle your own events before the handler is called, then you need to override the SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` and manually call the handler when finished. `nil` by default.
- public var backgroundCompletionHandler: (() -> Void)?
-
- // MARK: - Lifecycle
-
- /**
- Initializes the Manager instance with the given configuration and server trust policy.
-
- :param: configuration The configuration used to construct the managed session. `nil` by default.
- :param: serverTrustPolicyManager The server trust policy manager to use for evaluating all server trust challenges. `nil` by default.
- */
- required public init(configuration: NSURLSessionConfiguration? = nil, serverTrustPolicyManager: ServerTrustPolicyManager? = nil) {
- self.delegate = SessionDelegate()
- self.session = NSURLSession(configuration: configuration, delegate: self.delegate, delegateQueue: nil)
- self.session.serverTrustPolicyManager = serverTrustPolicyManager
-
- self.delegate.sessionDidFinishEventsForBackgroundURLSession = { [weak self] session in
- if let strongSelf = self {
- strongSelf.backgroundCompletionHandler?()
- }
- }
- }
-
- deinit {
- session.invalidateAndCancel()
- }
-
- // MARK: - Request
-
- /**
- Creates a request for the specified method, URL string, parameters, and parameter encoding.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: parameters The parameters. `nil` by default.
- :param: encoding The parameter encoding. `.URL` by default.
- :param: headers The HTTP headers. `nil` by default.
-
- :returns: The created request.
- */
- public func request(
- method: Method,
- _ URLString: URLStringConvertible,
- parameters: [String: AnyObject]? = nil,
- encoding: ParameterEncoding = .URL,
- headers: [String: String]? = nil)
- -> Request
- {
- let mutableURLRequest = URLRequest(method, URLString, headers: headers)
- let encodedURLRequest = encoding.encode(mutableURLRequest, parameters: parameters).0
- return request(encodedURLRequest)
- }
-
- /**
- Creates a request for the specified URL request.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: URLRequest The URL request
-
- :returns: The created request.
- */
- public func request(URLRequest: URLRequestConvertible) -> Request {
- var dataTask: NSURLSessionDataTask!
-
- dispatch_sync(queue) {
- dataTask = self.session.dataTaskWithRequest(URLRequest.URLRequest)
- }
-
- let request = Request(session: session, task: dataTask)
- delegate[request.delegate.task] = request.delegate
-
- if startRequestsImmediately {
- request.resume()
- }
-
- return request
- }
-
- // MARK: - SessionDelegate
-
- /**
- Responsible for handling all delegate callbacks for the underlying session.
- */
- public final class SessionDelegate: NSObject, NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate {
- private var subdelegates: [Int: Request.TaskDelegate] = [:]
- private let subdelegateQueue = dispatch_queue_create(nil, DISPATCH_QUEUE_CONCURRENT)
-
- subscript(task: NSURLSessionTask) -> Request.TaskDelegate? {
- get {
- var subdelegate: Request.TaskDelegate?
- dispatch_sync(subdelegateQueue) {
- subdelegate = self.subdelegates[task.taskIdentifier]
- }
-
- return subdelegate
- }
-
- set {
- dispatch_barrier_async(subdelegateQueue) {
- self.subdelegates[task.taskIdentifier] = newValue
- }
- }
- }
-
- // MARK: - NSURLSessionDelegate
-
- // MARK: Override Closures
-
- /// NSURLSessionDelegate override closure for `URLSession:didBecomeInvalidWithError:` method.
- public var sessionDidBecomeInvalidWithError: ((NSURLSession, NSError?) -> Void)?
-
- /// NSURLSessionDelegate override closure for `URLSession:didReceiveChallenge:completionHandler:` method.
- public var sessionDidReceiveChallenge: ((NSURLSession, NSURLAuthenticationChallenge) -> (NSURLSessionAuthChallengeDisposition, NSURLCredential!))?
-
- /// NSURLSessionDelegate override closure for `URLSessionDidFinishEventsForBackgroundURLSession:` method.
- public var sessionDidFinishEventsForBackgroundURLSession: ((NSURLSession) -> Void)?
-
- // MARK: Delegate Methods
-
- public func URLSession(session: NSURLSession, didBecomeInvalidWithError error: NSError?) {
- sessionDidBecomeInvalidWithError?(session, error)
- }
-
- public func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)) {
- var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling
- var credential: NSURLCredential!
-
- if let sessionDidReceiveChallenge = sessionDidReceiveChallenge {
- (disposition, credential) = sessionDidReceiveChallenge(session, challenge)
- } else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
- let host = challenge.protectionSpace.host
-
- if let
- serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicyForHost(host),
- serverTrust = challenge.protectionSpace.serverTrust
- {
- if serverTrustPolicy.evaluateServerTrust(serverTrust, isValidForHost: host) {
- disposition = .UseCredential
- credential = NSURLCredential(forTrust: serverTrust)
- } else {
- disposition = .CancelAuthenticationChallenge
- }
- }
- }
-
- completionHandler(disposition, credential)
- }
-
- public func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) {
- sessionDidFinishEventsForBackgroundURLSession?(session)
- }
-
- // MARK: - NSURLSessionTaskDelegate
-
- // MARK: Override Closures
-
- /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:`.
- public var taskWillPerformHTTPRedirection: ((NSURLSession, NSURLSessionTask, NSHTTPURLResponse, NSURLRequest) -> NSURLRequest?)?
-
- /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:didReceiveChallenge:completionHandler:`.
- public var taskDidReceiveChallenge: ((NSURLSession, NSURLSessionTask, NSURLAuthenticationChallenge) -> (NSURLSessionAuthChallengeDisposition, NSURLCredential!))?
-
- /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:session:task:needNewBodyStream:`.
- public var taskNeedNewBodyStream: ((NSURLSession, NSURLSessionTask) -> NSInputStream!)?
-
- /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`.
- public var taskDidSendBodyData: ((NSURLSession, NSURLSessionTask, Int64, Int64, Int64) -> Void)?
-
- /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:didCompleteWithError:`.
- public var taskDidComplete: ((NSURLSession, NSURLSessionTask, NSError?) -> Void)?
-
- // MARK: Delegate Methods
-
- public func URLSession(session: NSURLSession, task: NSURLSessionTask, willPerformHTTPRedirection response: NSHTTPURLResponse, newRequest request: NSURLRequest, completionHandler: ((NSURLRequest!) -> Void)) {
- var redirectRequest: NSURLRequest? = request
-
- if let taskWillPerformHTTPRedirection = taskWillPerformHTTPRedirection {
- redirectRequest = taskWillPerformHTTPRedirection(session, task, response, request)
- }
-
- completionHandler(redirectRequest)
- }
-
- public func URLSession(session: NSURLSession, task: NSURLSessionTask, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)) {
- if let taskDidReceiveChallenge = taskDidReceiveChallenge {
- completionHandler(taskDidReceiveChallenge(session, task, challenge))
- } else if let delegate = self[task] {
- delegate.URLSession(session, task: task, didReceiveChallenge: challenge, completionHandler: completionHandler)
- } else {
- URLSession(session, didReceiveChallenge: challenge, completionHandler: completionHandler)
- }
- }
-
- public func URLSession(session: NSURLSession, task: NSURLSessionTask, needNewBodyStream completionHandler: ((NSInputStream!) -> Void)) {
- if let taskNeedNewBodyStream = taskNeedNewBodyStream {
- completionHandler(taskNeedNewBodyStream(session, task))
- } else if let delegate = self[task] {
- delegate.URLSession(session, task: task, needNewBodyStream: completionHandler)
- }
- }
-
- public func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
- if let taskDidSendBodyData = taskDidSendBodyData {
- taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend)
- } else if let delegate = self[task] as? Request.UploadTaskDelegate {
- delegate.URLSession(session, task: task, didSendBodyData: bytesSent, totalBytesSent: totalBytesSent, totalBytesExpectedToSend: totalBytesExpectedToSend)
- }
- }
-
- public func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
- if let taskDidComplete = taskDidComplete {
- taskDidComplete(session, task, error)
- } else if let delegate = self[task] {
- delegate.URLSession(session, task: task, didCompleteWithError: error)
- self[task] = nil
- }
- }
-
- // MARK: - NSURLSessionDataDelegate
-
- // MARK: Override Closures
-
- /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:didReceiveResponse:completionHandler:`.
- public var dataTaskDidReceiveResponse: ((NSURLSession, NSURLSessionDataTask, NSURLResponse) -> NSURLSessionResponseDisposition)?
-
- /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:didBecomeDownloadTask:`.
- public var dataTaskDidBecomeDownloadTask: ((NSURLSession, NSURLSessionDataTask, NSURLSessionDownloadTask) -> Void)?
-
- /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:didReceiveData:`.
- public var dataTaskDidReceiveData: ((NSURLSession, NSURLSessionDataTask, NSData) -> Void)?
-
- /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:willCacheResponse:completionHandler:`.
- public var dataTaskWillCacheResponse: ((NSURLSession, NSURLSessionDataTask, NSCachedURLResponse) -> NSCachedURLResponse!)?
-
- // MARK: Delegate Methods
-
- public func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: ((NSURLSessionResponseDisposition) -> Void)) {
- var disposition: NSURLSessionResponseDisposition = .Allow
-
- if let dataTaskDidReceiveResponse = dataTaskDidReceiveResponse {
- disposition = dataTaskDidReceiveResponse(session, dataTask, response)
- }
-
- completionHandler(disposition)
- }
-
- public func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didBecomeDownloadTask downloadTask: NSURLSessionDownloadTask) {
- if let dataTaskDidBecomeDownloadTask = dataTaskDidBecomeDownloadTask {
- dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask)
- } else {
- let downloadDelegate = Request.DownloadTaskDelegate(task: downloadTask)
- self[downloadTask] = downloadDelegate
- }
- }
-
- public func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
- if let dataTaskDidReceiveData = dataTaskDidReceiveData {
- dataTaskDidReceiveData(session, dataTask, data)
- } else if let delegate = self[dataTask] as? Request.DataTaskDelegate {
- delegate.URLSession(session, dataTask: dataTask, didReceiveData: data)
- }
- }
-
- public func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, willCacheResponse proposedResponse: NSCachedURLResponse, completionHandler: ((NSCachedURLResponse!) -> Void)) {
- if let dataTaskWillCacheResponse = dataTaskWillCacheResponse {
- completionHandler(dataTaskWillCacheResponse(session, dataTask, proposedResponse))
- } else if let delegate = self[dataTask] as? Request.DataTaskDelegate {
- delegate.URLSession(session, dataTask: dataTask, willCacheResponse: proposedResponse, completionHandler: completionHandler)
- } else {
- completionHandler(proposedResponse)
- }
- }
-
- // MARK: - NSURLSessionDownloadDelegate
-
- // MARK: Override Closures
-
- /// Overrides default behavior for NSURLSessionDownloadDelegate method `URLSession:downloadTask:didFinishDownloadingToURL:`.
- public var downloadTaskDidFinishDownloadingToURL: ((NSURLSession, NSURLSessionDownloadTask, NSURL) -> Void)?
-
- /// Overrides default behavior for NSURLSessionDownloadDelegate method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:`.
- public var downloadTaskDidWriteData: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64, Int64) -> Void)?
-
- /// Overrides default behavior for NSURLSessionDownloadDelegate method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`.
- public var downloadTaskDidResumeAtOffset: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64) -> Void)?
-
- // MARK: Delegate Methods
-
- public func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
- if let downloadTaskDidFinishDownloadingToURL = downloadTaskDidFinishDownloadingToURL {
- downloadTaskDidFinishDownloadingToURL(session, downloadTask, location)
- } else if let delegate = self[downloadTask] as? Request.DownloadTaskDelegate {
- delegate.URLSession(session, downloadTask: downloadTask, didFinishDownloadingToURL: location)
- }
- }
-
- public func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
- if let downloadTaskDidWriteData = downloadTaskDidWriteData {
- downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite)
- } else if let delegate = self[downloadTask] as? Request.DownloadTaskDelegate {
- delegate.URLSession(session, downloadTask: downloadTask, didWriteData: bytesWritten, totalBytesWritten: totalBytesWritten, totalBytesExpectedToWrite: totalBytesExpectedToWrite)
- }
- }
-
- public func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {
- if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset {
- downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes)
- } else if let delegate = self[downloadTask] as? Request.DownloadTaskDelegate {
- delegate.URLSession(session, downloadTask: downloadTask, didResumeAtOffset: fileOffset, expectedTotalBytes: expectedTotalBytes)
- }
- }
- }
-}
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/MultipartFormData.swift b/WeatherAroundUs/Pods/Alamofire/Source/MultipartFormData.swift
deleted file mode 100644
index 8e9735e..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/MultipartFormData.swift
+++ /dev/null
@@ -1,694 +0,0 @@
-// MultipartFormData.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-#if os(iOS)
-import MobileCoreServices
-#elseif os(OSX)
-import CoreServices
-#endif
-
-/**
- Constructs `multipart/form-data` for uploads within an HTTP or HTTPS body. There are currently two ways to encode
- multipart form data. The first way is to encode the data directly in memory. This is very efficient, but can lead
- to memory issues if the dataset is too large. The second way is designed for larger datasets and will write all the
- data to a single file on disk with all the proper boundary segmentation. The second approach MUST be used for
- larger datasets such as video content, otherwise your app may run out of memory when trying to encode the dataset.
-
- For more information on `multipart/form-data` in general, please refer to the RFC-2388 and RFC-2045 specs as well
- and the w3 form documentation.
-
- - http://www.ietf.org/rfc/rfc2388.txt
- - http://www.ietf.org/rfc/rfc2045.txt
- - http://www.w3.org/TR/html401/interact/forms.html#h-17.13
-*/
-public class MultipartFormData {
-
- // MARK: - Helper Types
-
- /**
- Used to specify whether encoding was successful.
- */
- public enum EncodingResult {
- case Success(NSData)
- case Failure(NSError)
- }
-
- struct EncodingCharacters {
- static let CRLF = "\r\n"
- }
-
- struct BoundaryGenerator {
- enum BoundaryType {
- case Initial, Encapsulated, Final
- }
-
- static func randomBoundary() -> String {
- return String(format: "alamofire.boundary.%08x%08x", arc4random(), arc4random())
- }
-
- static func boundaryData(#boundaryType: BoundaryType, boundary: String) -> NSData {
- let boundaryText: String
-
- switch boundaryType {
- case .Initial:
- boundaryText = "--\(boundary)\(EncodingCharacters.CRLF)"
- case .Encapsulated:
- boundaryText = "\(EncodingCharacters.CRLF)--\(boundary)\(EncodingCharacters.CRLF)"
- case .Final:
- boundaryText = "\(EncodingCharacters.CRLF)--\(boundary)--\(EncodingCharacters.CRLF)"
- }
-
- return boundaryText.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
- }
- }
-
- class BodyPart {
- let headers: [String: String]
- let bodyStream: NSInputStream
- let bodyContentLength: UInt64
- var hasInitialBoundary = false
- var hasFinalBoundary = false
-
- init(headers: [String: String], bodyStream: NSInputStream, bodyContentLength: UInt64) {
- self.headers = headers
- self.bodyStream = bodyStream
- self.bodyContentLength = bodyContentLength
- }
- }
-
- // MARK: - Properties
-
- /// The `Content-Type` header value containing the boundary used to generate the `multipart/form-data`.
- public var contentType: String { return "multipart/form-data; boundary=\(boundary)" }
-
- /// The content length of all body parts used to generate the `multipart/form-data` not including the boundaries.
- public var contentLength: UInt64 { return bodyParts.reduce(0) { $0 + $1.bodyContentLength } }
-
- /// The boundary used to separate the body parts in the encoded form data.
- public let boundary: String
-
- private var bodyParts: [BodyPart]
- private var bodyPartError: NSError?
- private let streamBufferSize: Int
-
- // MARK: - Lifecycle
-
- /**
- Creates a multipart form data object.
-
- :returns: The multipart form data object.
- */
- public init() {
- self.boundary = BoundaryGenerator.randomBoundary()
- self.bodyParts = []
-
- /**
- * The optimal read/write buffer size in bytes for input and output streams is 1024 (1KB). For more
- * information, please refer to the following article:
- * - https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html
- */
-
- self.streamBufferSize = 1024
- }
-
- // MARK: - Body Parts
-
- /**
- Creates a body part from the data and appends it to the multipart form data object.
-
- The body part data will be encoded using the following format:
-
- - `Content-Disposition: form-data; name=#{name}` (HTTP Header)
- - Encoded data
- - Multipart form boundary
-
- :param: data The data to encode into the multipart form data.
- :param: name The name to associate with the data in the `Content-Disposition` HTTP header.
- */
- public func appendBodyPart(#data: NSData, name: String) {
- let headers = contentHeaders(name: name)
- let stream = NSInputStream(data: data)
- let length = UInt64(data.length)
-
- appendBodyPart(stream: stream, length: length, headers: headers)
- }
-
- /**
- Creates a body part from the data and appends it to the multipart form data object.
-
- The body part data will be encoded using the following format:
-
- - `Content-Disposition: form-data; name=#{name}` (HTTP Header)
- - `Content-Type: #{generated mimeType}` (HTTP Header)
- - Encoded data
- - Multipart form boundary
-
- :param: data The data to encode into the multipart form data.
- :param: name The name to associate with the data in the `Content-Disposition` HTTP header.
- :param: mimeType The MIME type to associate with the data content type in the `Content-Type` HTTP header.
- */
- public func appendBodyPart(#data: NSData, name: String, mimeType: String) {
- let headers = contentHeaders(name: name, mimeType: mimeType)
- let stream = NSInputStream(data: data)
- let length = UInt64(data.length)
-
- appendBodyPart(stream: stream, length: length, headers: headers)
- }
-
- /**
- Creates a body part from the data and appends it to the multipart form data object.
-
- The body part data will be encoded using the following format:
-
- - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header)
- - `Content-Type: #{mimeType}` (HTTP Header)
- - Encoded file data
- - Multipart form boundary
-
- :param: data The data to encode into the multipart form data.
- :param: name The name to associate with the data in the `Content-Disposition` HTTP header.
- :param: fileName The filename to associate with the data in the `Content-Disposition` HTTP header.
- :param: mimeType The MIME type to associate with the data in the `Content-Type` HTTP header.
- */
- public func appendBodyPart(#data: NSData, name: String, fileName: String, mimeType: String) {
- let headers = contentHeaders(name: name, fileName: fileName, mimeType: mimeType)
- let stream = NSInputStream(data: data)
- let length = UInt64(data.length)
-
- appendBodyPart(stream: stream, length: length, headers: headers)
- }
-
- /**
- Creates a body part from the file and appends it to the multipart form data object.
-
- The body part data will be encoded using the following format:
-
- - `Content-Disposition: form-data; name=#{name}; filename=#{generated filename}` (HTTP Header)
- - `Content-Type: #{generated mimeType}` (HTTP Header)
- - Encoded file data
- - Multipart form boundary
-
- The filename in the `Content-Disposition` HTTP header is generated from the last path component of the
- `fileURL`. The `Content-Type` HTTP header MIME type is generated by mapping the `fileURL` extension to the
- system associated MIME type.
-
- :param: fileURL The URL of the file whose content will be encoded into the multipart form data.
- :param: name The name to associate with the file content in the `Content-Disposition` HTTP header.
- */
- public func appendBodyPart(#fileURL: NSURL, name: String) {
- if let
- fileName = fileURL.lastPathComponent,
- pathExtension = fileURL.pathExtension
- {
- let mimeType = mimeTypeForPathExtension(pathExtension)
- appendBodyPart(fileURL: fileURL, name: name, fileName: fileName, mimeType: mimeType)
- } else {
- let failureReason = "Failed to extract the fileName of the provided URL: \(fileURL)"
- let userInfo = [NSLocalizedFailureReasonErrorKey: failureReason]
- let error = NSError(domain: AlamofireErrorDomain, code: NSURLErrorBadURL, userInfo: userInfo)
-
- setBodyPartError(error)
- }
- }
-
- /**
- Creates a body part from the file and appends it to the multipart form data object.
-
- The body part data will be encoded using the following format:
-
- - Content-Disposition: form-data; name=#{name}; filename=#{filename} (HTTP Header)
- - Content-Type: #{mimeType} (HTTP Header)
- - Encoded file data
- - Multipart form boundary
-
- :param: fileURL The URL of the file whose content will be encoded into the multipart form data.
- :param: name The name to associate with the file content in the `Content-Disposition` HTTP header.
- :param: fileName The filename to associate with the file content in the `Content-Disposition` HTTP header.
- :param: mimeType The MIME type to associate with the file content in the `Content-Type` HTTP header.
- */
- public func appendBodyPart(#fileURL: NSURL, name: String, fileName: String, mimeType: String) {
- let headers = contentHeaders(name: name, fileName: fileName, mimeType: mimeType)
- var isDirectory: ObjCBool = false
- var error: NSError?
-
- if !fileURL.fileURL {
- error = errorWithCode(NSURLErrorBadURL, failureReason: "The URL does not point to a file URL: \(fileURL)")
- } else if !fileURL.checkResourceIsReachableAndReturnError(nil) {
- error = errorWithCode(NSURLErrorBadURL, failureReason: "The URL is not reachable: \(fileURL)")
- } else if NSFileManager.defaultManager().fileExistsAtPath(fileURL.path!, isDirectory: &isDirectory) && isDirectory {
- error = errorWithCode(NSURLErrorBadURL, failureReason: "The URL is a directory, not a file: \(fileURL)")
- }
-
- if let error = error {
- setBodyPartError(error)
- return
- }
-
- let length: UInt64
-
- if let
- path = fileURL.path,
- attributes = NSFileManager.defaultManager().attributesOfItemAtPath(path, error: &error),
- fileSize = (attributes[NSFileSize] as? NSNumber)?.unsignedLongLongValue
- {
- length = fileSize
- } else {
- let failureReason = "Could not fetch attributes from the URL: \(fileURL)"
- let error = errorWithCode(NSURLErrorBadURL, failureReason: failureReason)
-
- setBodyPartError(error)
-
- return
- }
-
- if let stream = NSInputStream(URL: fileURL) {
- appendBodyPart(stream: stream, length: length, headers: headers)
- } else {
- let failureReason = "Failed to create an input stream from the URL: \(fileURL)"
- let error = errorWithCode(NSURLErrorCannotOpenFile, failureReason: failureReason)
-
- setBodyPartError(error)
- }
- }
-
- /**
- Creates a body part from the stream and appends it to the multipart form data object.
-
- The body part data will be encoded using the following format:
-
- - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header)
- - `Content-Type: #{mimeType}` (HTTP Header)
- - Encoded stream data
- - Multipart form boundary
-
- :param: stream The input stream to encode in the multipart form data.
- :param: length The content length of the stream.
- :param: name The name to associate with the stream content in the `Content-Disposition` HTTP header.
- :param: fileName The filename to associate with the stream content in the `Content-Disposition` HTTP header.
- :param: mimeType The MIME type to associate with the stream content in the `Content-Type` HTTP header.
- */
- public func appendBodyPart(#stream: NSInputStream, length: UInt64, name: String, fileName: String, mimeType: String) {
- let headers = contentHeaders(name: name, fileName: fileName, mimeType: mimeType)
- appendBodyPart(stream: stream, length: length, headers: headers)
- }
-
- /**
- Creates a body part with the headers, stream and length and appends it to the multipart form data object.
-
- The body part data will be encoded using the following format:
-
- - HTTP headers
- - Encoded stream data
- - Multipart form boundary
-
- :param: stream The input stream to encode in the multipart form data.
- :param: length The content length of the stream.
- :param: headers The HTTP headers for the body part.
- */
- public func appendBodyPart(#stream: NSInputStream, length: UInt64, headers: [String: String]) {
- let bodyPart = BodyPart(headers: headers, bodyStream: stream, bodyContentLength: length)
- bodyParts.append(bodyPart)
- }
-
- // MARK: - Data Encoding
-
- /**
- Encodes all the appended body parts into a single `NSData` object.
-
- It is important to note that this method will load all the appended body parts into memory all at the same
- time. This method should only be used when the encoded data will have a small memory footprint. For large data
- cases, please use the `writeEncodedDataToDisk(fileURL:completionHandler:)` method.
-
- :returns: EncodingResult containing an `NSData` object if the encoding succeeded, an `NSError` otherwise.
- */
- public func encode() -> EncodingResult {
- if let bodyPartError = bodyPartError {
- return .Failure(bodyPartError)
- }
-
- var encoded = NSMutableData()
-
- bodyParts.first?.hasInitialBoundary = true
- bodyParts.last?.hasFinalBoundary = true
-
- for bodyPart in bodyParts {
- let encodedDataResult = encodeBodyPart(bodyPart)
-
- switch encodedDataResult {
- case .Failure:
- return encodedDataResult
- case let .Success(data):
- encoded.appendData(data)
- }
- }
-
- return .Success(encoded)
- }
-
- /**
- Writes the appended body parts into the given file URL asynchronously and calls the `completionHandler`
- when finished.
-
- This process is facilitated by reading and writing with input and output streams, respectively. Thus,
- this approach is very memory efficient and should be used for large body part data.
-
- :param: fileURL The file URL to write the multipart form data into.
- :param: completionHandler A closure to be executed when writing is finished.
- */
- public func writeEncodedDataToDisk(fileURL: NSURL, completionHandler: (NSError?) -> Void) {
- if let bodyPartError = bodyPartError {
- completionHandler(bodyPartError)
- return
- }
-
- var error: NSError?
-
- if let path = fileURL.path where NSFileManager.defaultManager().fileExistsAtPath(path) {
- let failureReason = "A file already exists at the given file URL: \(fileURL)"
- error = errorWithCode(NSURLErrorBadURL, failureReason: failureReason)
- } else if !fileURL.fileURL {
- let failureReason = "The URL does not point to a valid file: \(fileURL)"
- error = errorWithCode(NSURLErrorBadURL, failureReason: failureReason)
- }
-
- if let error = error {
- completionHandler(error)
- return
- }
-
- let outputStream: NSOutputStream
-
- if let possibleOutputStream = NSOutputStream(URL: fileURL, append: false) {
- outputStream = possibleOutputStream
- } else {
- let failureReason = "Failed to create an output stream with the given URL: \(fileURL)"
- let error = errorWithCode(NSURLErrorCannotOpenFile, failureReason: failureReason)
-
- completionHandler(error)
- return
- }
-
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
- outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
- outputStream.open()
-
- self.bodyParts.first?.hasInitialBoundary = true
- self.bodyParts.last?.hasFinalBoundary = true
-
- var error: NSError?
-
- for bodyPart in self.bodyParts {
- if let writeError = self.writeBodyPart(bodyPart, toOutputStream: outputStream) {
- error = writeError
- break
- }
- }
-
- outputStream.close()
- outputStream.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
-
- dispatch_async(dispatch_get_main_queue()) {
- completionHandler(error)
- }
- }
- }
-
- // MARK: - Private - Body Part Encoding
-
- private func encodeBodyPart(bodyPart: BodyPart) -> EncodingResult {
- let encoded = NSMutableData()
-
- let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData()
- encoded.appendData(initialData)
-
- let headerData = encodeHeaderDataForBodyPart(bodyPart)
- encoded.appendData(headerData)
-
- let bodyStreamResult = encodeBodyStreamDataForBodyPart(bodyPart)
-
- switch bodyStreamResult {
- case .Failure:
- return bodyStreamResult
- case let .Success(data):
- encoded.appendData(data)
- }
-
- if bodyPart.hasFinalBoundary {
- encoded.appendData(finalBoundaryData())
- }
-
- return .Success(encoded)
- }
-
- private func encodeHeaderDataForBodyPart(bodyPart: BodyPart) -> NSData {
- var headerText = ""
-
- for (key, value) in bodyPart.headers {
- headerText += "\(key): \(value)\(EncodingCharacters.CRLF)"
- }
- headerText += EncodingCharacters.CRLF
-
- return headerText.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
- }
-
- private func encodeBodyStreamDataForBodyPart(bodyPart: BodyPart) -> EncodingResult {
- let inputStream = bodyPart.bodyStream
- inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
- inputStream.open()
-
- var error: NSError?
- let encoded = NSMutableData()
-
- while inputStream.hasBytesAvailable {
- var buffer = [UInt8](count: streamBufferSize, repeatedValue: 0)
- let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize)
-
- if inputStream.streamError != nil {
- error = inputStream.streamError
- break
- }
-
- if bytesRead > 0 {
- encoded.appendBytes(buffer, length: bytesRead)
- } else if bytesRead < 0 {
- let failureReason = "Failed to read from input stream: \(inputStream)"
- error = errorWithCode(AlamofireInputStreamReadFailed, failureReason: failureReason)
- break
- } else {
- break
- }
- }
-
- inputStream.close()
- inputStream.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
-
- if let error = error {
- return .Failure(error)
- }
-
- return .Success(encoded)
- }
-
- // MARK: - Private - Writing Body Part to Output Stream
-
- private func writeBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) -> NSError? {
- if let error = writeInitialBoundaryDataForBodyPart(bodyPart, toOutputStream: outputStream) {
- return error
- }
-
- if let error = writeHeaderDataForBodyPart(bodyPart, toOutputStream: outputStream) {
- return error
- }
-
- if let error = writeBodyStreamForBodyPart(bodyPart, toOutputStream: outputStream) {
- return error
- }
-
- if let error = writeFinalBoundaryDataForBodyPart(bodyPart, toOutputStream: outputStream) {
- return error
- }
-
- return nil
- }
-
- private func writeInitialBoundaryDataForBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) -> NSError? {
- let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData()
- return writeData(initialData, toOutputStream: outputStream)
- }
-
- private func writeHeaderDataForBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) -> NSError? {
- let headerData = encodeHeaderDataForBodyPart(bodyPart)
- return writeData(headerData, toOutputStream: outputStream)
- }
-
- private func writeBodyStreamForBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) -> NSError? {
- var error: NSError?
-
- let inputStream = bodyPart.bodyStream
- inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
- inputStream.open()
-
- while inputStream.hasBytesAvailable {
- var buffer = [UInt8](count: streamBufferSize, repeatedValue: 0)
- let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize)
-
- if inputStream.streamError != nil {
- error = inputStream.streamError
- break
- }
-
- if bytesRead > 0 {
- if buffer.count != bytesRead {
- buffer = Array(buffer[0.. NSError? {
- if bodyPart.hasFinalBoundary {
- return writeData(finalBoundaryData(), toOutputStream: outputStream)
- }
-
- return nil
- }
-
- // MARK: - Private - Writing Buffered Data to Output Stream
-
- private func writeData(data: NSData, toOutputStream outputStream: NSOutputStream) -> NSError? {
- var buffer = [UInt8](count: data.length, repeatedValue: 0)
- data.getBytes(&buffer, length: data.length)
-
- return writeBuffer(&buffer, toOutputStream: outputStream)
- }
-
- private func writeBuffer(inout buffer: [UInt8], toOutputStream outputStream: NSOutputStream) -> NSError? {
- var error: NSError?
-
- var bytesToWrite = buffer.count
-
- while bytesToWrite > 0 {
- if outputStream.hasSpaceAvailable {
- let bytesWritten = outputStream.write(buffer, maxLength: bytesToWrite)
-
- if outputStream.streamError != nil {
- error = outputStream.streamError
- break
- }
-
- if bytesWritten < 0 {
- let failureReason = "Failed to write to output stream: \(outputStream)"
- error = errorWithCode(AlamofireOutputStreamWriteFailed, failureReason: failureReason)
- break
- }
-
- bytesToWrite -= bytesWritten
-
- if bytesToWrite > 0 {
- buffer = Array(buffer[bytesWritten.. String {
- let identifier = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, nil).takeRetainedValue()
-
- if let contentType = UTTypeCopyPreferredTagWithClass(identifier, kUTTagClassMIMEType) {
- return contentType.takeRetainedValue() as String
- }
-
- return "application/octet-stream"
- }
-
- // MARK: - Private - Content Headers
-
- private func contentHeaders(#name: String) -> [String: String] {
- return ["Content-Disposition": "form-data; name=\"\(name)\""]
- }
-
- private func contentHeaders(#name: String, mimeType: String) -> [String: String] {
- return [
- "Content-Disposition": "form-data; name=\"\(name)\"",
- "Content-Type": "\(mimeType)"
- ]
- }
-
- private func contentHeaders(#name: String, fileName: String, mimeType: String) -> [String: String] {
- return [
- "Content-Disposition": "form-data; name=\"\(name)\"; filename=\"\(fileName)\"",
- "Content-Type": "\(mimeType)"
- ]
- }
-
- // MARK: - Private - Boundary Encoding
-
- private func initialBoundaryData() -> NSData {
- return BoundaryGenerator.boundaryData(boundaryType: .Initial, boundary: boundary)
- }
-
- private func encapsulatedBoundaryData() -> NSData {
- return BoundaryGenerator.boundaryData(boundaryType: .Encapsulated, boundary: boundary)
- }
-
- private func finalBoundaryData() -> NSData {
- return BoundaryGenerator.boundaryData(boundaryType: .Final, boundary: boundary)
- }
-
- // MARK: - Private - Errors
-
- private func setBodyPartError(error: NSError) {
- if bodyPartError == nil {
- bodyPartError = error
- }
- }
-
- private func errorWithCode(code: Int, failureReason: String) -> NSError {
- let userInfo = [NSLocalizedFailureReasonErrorKey: failureReason]
- return NSError(domain: AlamofireErrorDomain, code: code, userInfo: userInfo)
- }
-}
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/ParameterEncoding.swift b/WeatherAroundUs/Pods/Alamofire/Source/ParameterEncoding.swift
deleted file mode 100644
index 42806dd..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/ParameterEncoding.swift
+++ /dev/null
@@ -1,194 +0,0 @@
-// ParameterEncoding.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-/**
- HTTP method definitions.
-
- See http://tools.ietf.org/html/rfc7231#section-4.3
-*/
-public enum Method: String {
- case OPTIONS = "OPTIONS"
- case GET = "GET"
- case HEAD = "HEAD"
- case POST = "POST"
- case PUT = "PUT"
- case PATCH = "PATCH"
- case DELETE = "DELETE"
- case TRACE = "TRACE"
- case CONNECT = "CONNECT"
-}
-
-// MARK: - ParameterEncoding
-
-/**
- Used to specify the way in which a set of parameters are applied to a URL request.
-*/
-public enum ParameterEncoding {
- /**
- A query string to be set as or appended to any existing URL query for `GET`, `HEAD`, and `DELETE` requests, or set as the body for requests with any other HTTP method. The `Content-Type` HTTP header field of an encoded request with HTTP body is set to `application/x-www-form-urlencoded`. Since there is no published specification for how to encode collection types, the convention of appending `[]` to the key for array values (`foo[]=1&foo[]=2`), and appending the key surrounded by square brackets for nested dictionary values (`foo[bar]=baz`).
- */
- case URL
-
- /**
- Uses `NSJSONSerialization` to create a JSON representation of the parameters object, which is set as the body of the request. The `Content-Type` HTTP header field of an encoded request is set to `application/json`.
- */
- case JSON
-
- /**
- Uses `NSPropertyListSerialization` to create a plist representation of the parameters object, according to the associated format and write options values, which is set as the body of the request. The `Content-Type` HTTP header field of an encoded request is set to `application/x-plist`.
- */
- case PropertyList(NSPropertyListFormat, NSPropertyListWriteOptions)
-
- /**
- Uses the associated closure value to construct a new request given an existing request and parameters.
- */
- case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?))
-
- /**
- Creates a URL request by encoding parameters and applying them onto an existing request.
-
- :param: URLRequest The request to have parameters applied
- :param: parameters The parameters to apply
-
- :returns: A tuple containing the constructed request and the error that occurred during parameter encoding, if any.
- */
- public func encode(URLRequest: URLRequestConvertible, parameters: [String: AnyObject]?) -> (NSMutableURLRequest, NSError?) {
- var mutableURLRequest: NSMutableURLRequest = URLRequest.URLRequest.mutableCopy() as! NSMutableURLRequest
-
- if parameters == nil {
- return (mutableURLRequest, nil)
- }
-
- var error: NSError? = nil
-
- switch self {
- case .URL:
- func query(parameters: [String: AnyObject]) -> String {
- var components: [(String, String)] = []
- for key in sorted(Array(parameters.keys), <) {
- let value: AnyObject! = parameters[key]
- components += queryComponents(key, value)
- }
-
- return join("&", components.map { "\($0)=\($1)" } as [String])
- }
-
- func encodesParametersInURL(method: Method) -> Bool {
- switch method {
- case .GET, .HEAD, .DELETE:
- return true
- default:
- return false
- }
- }
-
- if let method = Method(rawValue: mutableURLRequest.HTTPMethod) where encodesParametersInURL(method) {
- if let URLComponents = NSURLComponents(URL: mutableURLRequest.URL!, resolvingAgainstBaseURL: false) {
- URLComponents.percentEncodedQuery = (URLComponents.percentEncodedQuery.map { $0 + "&" } ?? "") + query(parameters!)
- mutableURLRequest.URL = URLComponents.URL
- }
- } else {
- if mutableURLRequest.valueForHTTPHeaderField("Content-Type") == nil {
- mutableURLRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
- }
-
- mutableURLRequest.HTTPBody = query(parameters!).dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
- }
- case .JSON:
- let options = NSJSONWritingOptions.allZeros
-
- if let data = NSJSONSerialization.dataWithJSONObject(parameters!, options: options, error: &error) {
- mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
- mutableURLRequest.HTTPBody = data
- }
- case .PropertyList(let (format, options)):
- if let data = NSPropertyListSerialization.dataWithPropertyList(parameters!, format: format, options: options, error: &error) {
- mutableURLRequest.setValue("application/x-plist", forHTTPHeaderField: "Content-Type")
- mutableURLRequest.HTTPBody = data
- }
- case .Custom(let closure):
- (mutableURLRequest, error) = closure(mutableURLRequest, parameters)
- }
-
- return (mutableURLRequest, error)
- }
-
- func queryComponents(key: String, _ value: AnyObject) -> [(String, String)] {
- var components: [(String, String)] = []
- if let dictionary = value as? [String: AnyObject] {
- for (nestedKey, value) in dictionary {
- components += queryComponents("\(key)[\(nestedKey)]", value)
- }
- } else if let array = value as? [AnyObject] {
- for value in array {
- components += queryComponents("\(key)[]", value)
- }
- } else {
- components.append((escape(key), escape("\(value)")))
- }
-
- return components
- }
-
- /**
- Returns a percent escaped string following RFC 3986 for query string formatting.
-
- RFC 3986 states that the following characters are "reserved" characters.
-
- - General Delimiters: ":", "#", "[", "]", "@", "?", "/"
- - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "="
-
- Core Foundation interprets RFC 3986 in terms of legal and illegal characters.
-
- - Legal Numbers: "0123456789"
- - Legal Letters: "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- - Legal Characters: "!", "$", "&", "'", "(", ")", "*", "+", ",", "-",
- ".", "/", ":", ";", "=", "?", "@", "_", "~", "\""
- - Illegal Characters: All characters not listed as Legal
-
- While the Core Foundation `CFURLCreateStringByAddingPercentEscapes` documentation states
- that it follows RFC 3986, the headers actually point out that it follows RFC 2396. This
- explains why it does not consider "[", "]" and "#" to be "legal" characters even though
- they are specified as "reserved" characters in RFC 3986. The following rdar has been filed
- to hopefully get the documentation updated.
-
- - https://openradar.appspot.com/radar?id=5058257274011648
-
- In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow
- query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/"
- should be percent escaped in the query string.
-
- :param: string The string to be percent escaped.
-
- :returns: The percent escaped string.
- */
- func escape(string: String) -> String {
- let generalDelimiters = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
- let subDelimiters = "!$&'()*+,;="
-
- let legalURLCharactersToBeEscaped: CFStringRef = generalDelimiters + subDelimiters
-
- return CFURLCreateStringByAddingPercentEscapes(nil, string, nil, legalURLCharactersToBeEscaped, CFStringBuiltInEncodings.UTF8.rawValue) as String
- }
-}
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/Request.swift b/WeatherAroundUs/Pods/Alamofire/Source/Request.swift
deleted file mode 100644
index c0fb5e6..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/Request.swift
+++ /dev/null
@@ -1,485 +0,0 @@
-// Request.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-/**
- Responsible for sending a request and receiving the response and associated data from the server, as well as managing its underlying `NSURLSessionTask`.
-*/
-public class Request {
-
- // MARK: - Properties
-
- /// The delegate for the underlying task.
- public let delegate: TaskDelegate
-
- /// The underlying task.
- public var task: NSURLSessionTask { return delegate.task }
-
- /// The session belonging to the underlying task.
- public let session: NSURLSession
-
- /// The request sent or to be sent to the server.
- public var request: NSURLRequest { return task.originalRequest }
-
- /// The response received from the server, if any.
- public var response: NSHTTPURLResponse? { return task.response as? NSHTTPURLResponse }
-
- /// The progress of the request lifecycle.
- public var progress: NSProgress { return delegate.progress }
-
- // MARK: - Lifecycle
-
- init(session: NSURLSession, task: NSURLSessionTask) {
- self.session = session
-
- switch task {
- case is NSURLSessionUploadTask:
- self.delegate = UploadTaskDelegate(task: task)
- case is NSURLSessionDataTask:
- self.delegate = DataTaskDelegate(task: task)
- case is NSURLSessionDownloadTask:
- self.delegate = DownloadTaskDelegate(task: task)
- default:
- self.delegate = TaskDelegate(task: task)
- }
- }
-
- // MARK: - Authentication
-
- /**
- Associates an HTTP Basic credential with the request.
-
- :param: user The user.
- :param: password The password.
- :param: persistence The URL credential persistence. `.ForSession` by default.
-
- :returns: The request.
- */
- public func authenticate(#user: String, password: String, persistence: NSURLCredentialPersistence = .ForSession) -> Self {
- let credential = NSURLCredential(user: user, password: password, persistence: persistence)
-
- return authenticate(usingCredential: credential)
- }
-
- /**
- Associates a specified credential with the request.
-
- :param: credential The credential.
-
- :returns: The request.
- */
- public func authenticate(usingCredential credential: NSURLCredential) -> Self {
- delegate.credential = credential
-
- return self
- }
-
- // MARK: - Progress
-
- /**
- Sets a closure to be called periodically during the lifecycle of the request as data is written to or read from the server.
-
- - For uploads, the progress closure returns the bytes written, total bytes written, and total bytes expected to write.
- - For downloads and data tasks, the progress closure returns the bytes read, total bytes read, and total bytes expected to read.
-
- :param: closure The code to be executed periodically during the lifecycle of the request.
-
- :returns: The request.
- */
- public func progress(closure: ((Int64, Int64, Int64) -> Void)? = nil) -> Self {
- if let uploadDelegate = delegate as? UploadTaskDelegate {
- uploadDelegate.uploadProgress = closure
- } else if let dataDelegate = delegate as? DataTaskDelegate {
- dataDelegate.dataProgress = closure
- } else if let downloadDelegate = delegate as? DownloadTaskDelegate {
- downloadDelegate.downloadProgress = closure
- }
-
- return self
- }
-
- /**
- Sets a closure to be called periodically during the lifecycle of the request as data is read from the server.
-
- This closure returns the bytes most recently received from the server, not including data from previous calls. If this closure is set, data will only be available within this closure, and will not be saved elsewhere. It is also important to note that the `response` closure will be called with nil `responseData`.
-
- :param: closure The code to be executed periodically during the lifecycle of the request.
-
- :returns: The request.
- */
- public func stream(closure: (NSData -> Void)? = nil) -> Self {
- if let dataDelegate = delegate as? DataTaskDelegate {
- dataDelegate.dataStream = closure
- }
-
- return self
- }
-
- // MARK: - State
-
- /**
- Suspends the request.
- */
- public func suspend() {
- task.suspend()
- }
-
- /**
- Resumes the request.
- */
- public func resume() {
- task.resume()
- }
-
- /**
- Cancels the request.
- */
- public func cancel() {
- if let
- downloadDelegate = delegate as? DownloadTaskDelegate,
- downloadTask = downloadDelegate.downloadTask
- {
- downloadTask.cancelByProducingResumeData { data in
- downloadDelegate.resumeData = data
- }
- } else {
- task.cancel()
- }
- }
-
- // MARK: - TaskDelegate
-
- /**
- The task delegate is responsible for handling all delegate callbacks for the underlying task as well as
- executing all operations attached to the serial operation queue upon task completion.
- */
- public class TaskDelegate: NSObject {
-
- /// The serial operation queue used to execute all operations after the task completes.
- public let queue: NSOperationQueue
-
- let task: NSURLSessionTask
- let progress: NSProgress
-
- var data: NSData? { return nil }
- var error: NSError?
-
- var credential: NSURLCredential?
-
- init(task: NSURLSessionTask) {
- self.task = task
- self.progress = NSProgress(totalUnitCount: 0)
- self.queue = {
- let operationQueue = NSOperationQueue()
- operationQueue.maxConcurrentOperationCount = 1
- operationQueue.suspended = true
-
- if operationQueue.respondsToSelector("qualityOfService") {
- operationQueue.qualityOfService = NSQualityOfService.Utility
- }
-
- return operationQueue
- }()
- }
-
- deinit {
- queue.cancelAllOperations()
- queue.suspended = true
- }
-
- // MARK: - NSURLSessionTaskDelegate
-
- // MARK: Override Closures
-
- var taskWillPerformHTTPRedirection: ((NSURLSession, NSURLSessionTask, NSHTTPURLResponse, NSURLRequest) -> NSURLRequest?)?
- var taskDidReceiveChallenge: ((NSURLSession, NSURLSessionTask, NSURLAuthenticationChallenge) -> (NSURLSessionAuthChallengeDisposition, NSURLCredential?))?
- var taskNeedNewBodyStream: ((NSURLSession, NSURLSessionTask) -> NSInputStream?)?
- var taskDidCompleteWithError: ((NSURLSession, NSURLSessionTask, NSError?) -> Void)?
-
- // MARK: Delegate Methods
-
- func URLSession(session: NSURLSession, task: NSURLSessionTask, willPerformHTTPRedirection response: NSHTTPURLResponse, newRequest request: NSURLRequest, completionHandler: ((NSURLRequest!) -> Void)) {
- var redirectRequest: NSURLRequest? = request
-
- if let taskWillPerformHTTPRedirection = taskWillPerformHTTPRedirection {
- redirectRequest = taskWillPerformHTTPRedirection(session, task, response, request)
- }
-
- completionHandler(redirectRequest)
- }
-
- func URLSession(session: NSURLSession, task: NSURLSessionTask, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential!) -> Void)) {
- var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling
- var credential: NSURLCredential?
-
- if let taskDidReceiveChallenge = taskDidReceiveChallenge {
- (disposition, credential) = taskDidReceiveChallenge(session, task, challenge)
- } else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
- let host = challenge.protectionSpace.host
-
- if let
- serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicyForHost(host),
- serverTrust = challenge.protectionSpace.serverTrust
- {
- if serverTrustPolicy.evaluateServerTrust(serverTrust, isValidForHost: host) {
- disposition = .UseCredential
- credential = NSURLCredential(forTrust: serverTrust)
- } else {
- disposition = .CancelAuthenticationChallenge
- }
- }
- } else {
- if challenge.previousFailureCount > 0 {
- disposition = .CancelAuthenticationChallenge
- } else {
- credential = self.credential ?? session.configuration.URLCredentialStorage?.defaultCredentialForProtectionSpace(challenge.protectionSpace)
-
- if credential != nil {
- disposition = .UseCredential
- }
- }
- }
-
- completionHandler(disposition, credential)
- }
-
- func URLSession(session: NSURLSession, task: NSURLSessionTask, needNewBodyStream completionHandler: ((NSInputStream!) -> Void)) {
- var bodyStream: NSInputStream?
-
- if let taskNeedNewBodyStream = taskNeedNewBodyStream {
- bodyStream = taskNeedNewBodyStream(session, task)
- }
-
- completionHandler(bodyStream)
- }
-
- func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
- if let taskDidCompleteWithError = taskDidCompleteWithError {
- taskDidCompleteWithError(session, task, error)
- } else {
- if let error = error {
- self.error = error
-
- if let
- downloadDelegate = self as? DownloadTaskDelegate,
- userInfo = error.userInfo as? [String: AnyObject],
- resumeData = userInfo[NSURLSessionDownloadTaskResumeData] as? NSData
- {
- downloadDelegate.resumeData = resumeData
- }
- }
-
- queue.suspended = false
- }
- }
- }
-
- // MARK: - DataTaskDelegate
-
- class DataTaskDelegate: TaskDelegate, NSURLSessionDataDelegate {
- var dataTask: NSURLSessionDataTask? { return task as? NSURLSessionDataTask }
-
- private var totalBytesReceived: Int64 = 0
- private var mutableData: NSMutableData
- override var data: NSData? {
- if dataStream != nil {
- return nil
- } else {
- return mutableData
- }
- }
-
- private var expectedContentLength: Int64?
- private var dataProgress: ((bytesReceived: Int64, totalBytesReceived: Int64, totalBytesExpectedToReceive: Int64) -> Void)?
- private var dataStream: ((data: NSData) -> Void)?
-
- override init(task: NSURLSessionTask) {
- mutableData = NSMutableData()
- super.init(task: task)
- }
-
- // MARK: - NSURLSessionDataDelegate
-
- // MARK: Override Closures
-
- var dataTaskDidReceiveResponse: ((NSURLSession, NSURLSessionDataTask, NSURLResponse) -> NSURLSessionResponseDisposition)?
- var dataTaskDidBecomeDownloadTask: ((NSURLSession, NSURLSessionDataTask, NSURLSessionDownloadTask) -> Void)?
- var dataTaskDidReceiveData: ((NSURLSession, NSURLSessionDataTask, NSData) -> Void)?
- var dataTaskWillCacheResponse: ((NSURLSession, NSURLSessionDataTask, NSCachedURLResponse) -> NSCachedURLResponse?)?
-
- // MARK: Delegate Methods
-
- func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: ((NSURLSessionResponseDisposition) -> Void)) {
- var disposition: NSURLSessionResponseDisposition = .Allow
-
- expectedContentLength = response.expectedContentLength
-
- if let dataTaskDidReceiveResponse = dataTaskDidReceiveResponse {
- disposition = dataTaskDidReceiveResponse(session, dataTask, response)
- }
-
- completionHandler(disposition)
- }
-
- func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didBecomeDownloadTask downloadTask: NSURLSessionDownloadTask) {
- dataTaskDidBecomeDownloadTask?(session, dataTask, downloadTask)
- }
-
- func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
- if let dataTaskDidReceiveData = dataTaskDidReceiveData {
- dataTaskDidReceiveData(session, dataTask, data)
- } else {
- if let dataStream = dataStream {
- dataStream(data: data)
- } else {
- mutableData.appendData(data)
- }
-
- totalBytesReceived += data.length
- let totalBytesExpectedToReceive = dataTask.response?.expectedContentLength ?? NSURLSessionTransferSizeUnknown
-
- progress.totalUnitCount = totalBytesExpectedToReceive
- progress.completedUnitCount = totalBytesReceived
-
- dataProgress?(bytesReceived: Int64(data.length), totalBytesReceived: totalBytesReceived, totalBytesExpectedToReceive: totalBytesExpectedToReceive)
- }
- }
-
- func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, willCacheResponse proposedResponse: NSCachedURLResponse, completionHandler: ((NSCachedURLResponse!) -> Void)) {
- var cachedResponse: NSCachedURLResponse? = proposedResponse
-
- if let dataTaskWillCacheResponse = dataTaskWillCacheResponse {
- cachedResponse = dataTaskWillCacheResponse(session, dataTask, proposedResponse)
- }
-
- completionHandler(cachedResponse)
- }
- }
-}
-
-// MARK: - Printable
-
-extension Request: Printable {
- /// The textual representation used when written to an output stream, which includes the HTTP method and URL, as well as the response status code if a response has been received.
- public var description: String {
- var components: [String] = []
-
- if let HTTPMethod = request.HTTPMethod {
- components.append(HTTPMethod)
- }
-
- components.append(request.URL!.absoluteString!)
-
- if let response = response {
- components.append("(\(response.statusCode))")
- }
-
- return join(" ", components)
- }
-}
-
-// MARK: - DebugPrintable
-
-extension Request: DebugPrintable {
- func cURLRepresentation() -> String {
- var components: [String] = ["$ curl -i"]
-
- let URL = request.URL
-
- if let HTTPMethod = request.HTTPMethod where HTTPMethod != "GET" {
- components.append("-X \(HTTPMethod)")
- }
-
- if let credentialStorage = session.configuration.URLCredentialStorage {
- let protectionSpace = NSURLProtectionSpace(
- host: URL!.host!,
- port: URL!.port?.integerValue ?? 0,
- `protocol`: URL!.scheme!,
- realm: URL!.host!,
- authenticationMethod: NSURLAuthenticationMethodHTTPBasic
- )
-
- if let credentials = credentialStorage.credentialsForProtectionSpace(protectionSpace)?.values.array {
- for credential: NSURLCredential in (credentials as! [NSURLCredential]) {
- components.append("-u \(credential.user!):\(credential.password!)")
- }
- } else {
- if let credential = delegate.credential {
- components.append("-u \(credential.user!):\(credential.password!)")
- }
- }
- }
-
- // Temporarily disabled on OS X due to build failure for CocoaPods
- // See https://github.com/CocoaPods/swift/issues/24
- #if !os(OSX)
- if session.configuration.HTTPShouldSetCookies {
- if let
- cookieStorage = session.configuration.HTTPCookieStorage,
- cookies = cookieStorage.cookiesForURL(URL!) as? [NSHTTPCookie] where !cookies.isEmpty
- {
- let string = cookies.reduce(""){ $0 + "\($1.name)=\($1.value ?? String());" }
- components.append("-b \"\(string.substringToIndex(string.endIndex.predecessor()))\"")
- }
- }
- #endif
-
- if let headerFields = request.allHTTPHeaderFields {
- for (field, value) in headerFields {
- switch field {
- case "Cookie":
- continue
- default:
- components.append("-H \"\(field): \(value)\"")
- }
- }
- }
-
- if let additionalHeaders = session.configuration.HTTPAdditionalHeaders {
- for (field, value) in additionalHeaders {
- switch field {
- case "Cookie":
- continue
- default:
- components.append("-H \"\(field): \(value)\"")
- }
- }
- }
-
- if let
- HTTPBody = request.HTTPBody,
- escapedBody = NSString(data: HTTPBody, encoding: NSUTF8StringEncoding)?.stringByReplacingOccurrencesOfString("\"", withString: "\\\"")
- {
- components.append("-d \"\(escapedBody)\"")
- }
-
- components.append("\"\(URL!.absoluteString!)\"")
-
- return join(" \\\n\t", components)
- }
-
- /// The textual representation used when written to an output stream, in the form of a cURL command.
- public var debugDescription: String {
- return cURLRepresentation()
- }
-}
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/ResponseSerialization.swift b/WeatherAroundUs/Pods/Alamofire/Source/ResponseSerialization.swift
deleted file mode 100644
index 062a001..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/ResponseSerialization.swift
+++ /dev/null
@@ -1,259 +0,0 @@
-// ResponseSerialization.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-// MARK: - ResponseSerializer
-
-/**
- The type in which all response serializers must conform to in order to serialize a response.
-*/
-public protocol ResponseSerializer {
- /// The type of serialized object to be created by this `ResponseSerializer`.
- typealias SerializedObject
-
- /// A closure used by response handlers that takes a request, response, and data and returns a serialized object and any error that occured in the process.
- var serializeResponse: (NSURLRequest?, NSHTTPURLResponse?, NSData?) -> (SerializedObject?, NSError?) { get }
-}
-
-/**
- A generic `ResponseSerializer` used to serialize a request, response, and data into a serialized object.
-*/
-public struct GenericResponseSerializer: ResponseSerializer {
- /// The type of serialized object to be created by this `ResponseSerializer`.
- public typealias SerializedObject = T
-
- /// A closure used by response handlers that takes a request, response, and data and returns a serialized object and any error that occured in the process.
- public var serializeResponse: (NSURLRequest?, NSHTTPURLResponse?, NSData?) -> (SerializedObject?, NSError?)
-
- /**
- Initializes the `GenericResponseSerializer` instance with the given serialize response closure.
-
- :param: serializeResponse The closure used to serialize the response.
-
- :returns: The new generic response serializer instance.
- */
- public init(serializeResponse: (NSURLRequest?, NSHTTPURLResponse?, NSData?) -> (SerializedObject?, NSError?)) {
- self.serializeResponse = serializeResponse
- }
-}
-
-// MARK: - Default
-
-extension Request {
-
- /**
- Adds a handler to be called once the request has finished.
-
- :param: queue The queue on which the completion handler is dispatched.
- :param: responseSerializer The response serializer responsible for serializing the request, response, and data.
- :param: completionHandler The code to be executed once the request has finished.
-
- :returns: The request.
- */
- public func response(
- queue: dispatch_queue_t? = nil,
- responseSerializer: T,
- completionHandler: (NSURLRequest, NSHTTPURLResponse?, V?, NSError?) -> Void)
- -> Self
- {
- delegate.queue.addOperationWithBlock {
- let result: V?
- let error: NSError?
-
- (result, error) = responseSerializer.serializeResponse(self.request, self.response, self.delegate.data)
-
- dispatch_async(queue ?? dispatch_get_main_queue()) {
- completionHandler(self.request, self.response, result, self.delegate.error ?? error)
- }
- }
-
- return self
- }
-}
-
-// MARK: - Data
-
-extension Request {
-
- /**
- Creates a response serializer that returns the associated data as-is.
-
- :returns: A data response serializer.
- */
- public static func dataResponseSerializer() -> GenericResponseSerializer {
- return GenericResponseSerializer { request, response, data in
- return (data, nil)
- }
- }
-
- /**
- Adds a handler to be called once the request has finished.
-
- :param: completionHandler The code to be executed once the request has finished.
-
- :returns: The request.
- */
- public func response(completionHandler: (NSURLRequest, NSHTTPURLResponse?, NSData?, NSError?) -> Void) -> Self {
- return response(responseSerializer: Request.dataResponseSerializer(), completionHandler: completionHandler)
- }
-}
-
-// MARK: - String
-
-extension Request {
-
- /**
- Creates a response serializer that returns a string initialized from the response data with the specified string encoding.
-
- :param: encoding The string encoding. If `nil`, the string encoding will be determined from the server response, falling back to the default HTTP default character set, ISO-8859-1.
-
- :returns: A string response serializer.
- */
- public static func stringResponseSerializer(var encoding: NSStringEncoding? = nil) -> GenericResponseSerializer {
- return GenericResponseSerializer { _, response, data in
- if data == nil || data?.length == 0 {
- return (nil, nil)
- }
-
- if let encodingName = response?.textEncodingName where encoding == nil {
- encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding(encodingName))
- }
-
- let string = NSString(data: data!, encoding: encoding ?? NSISOLatin1StringEncoding) as? String
-
- return (string, nil)
- }
- }
-
- /**
- Adds a handler to be called once the request has finished.
-
- :param: encoding The string encoding. If `nil`, the string encoding will be determined from the server response, falling back to the default HTTP default character set, ISO-8859-1.
- :param: completionHandler A closure to be executed once the request has finished. The closure takes 4 arguments: the URL request, the URL response, if one was received, the string, if one could be created from the URL response and data, and any error produced while creating the string.
-
- :returns: The request.
- */
- public func responseString(
- encoding: NSStringEncoding? = nil,
- completionHandler: (NSURLRequest, NSHTTPURLResponse?, String?, NSError?) -> Void)
- -> Self
- {
- return response(
- responseSerializer: Request.stringResponseSerializer(encoding: encoding),
- completionHandler: completionHandler
- )
- }
-}
-
-// MARK: - JSON
-
-extension Request {
-
- /**
- Creates a response serializer that returns a JSON object constructed from the response data using `NSJSONSerialization` with the specified reading options.
-
- :param: options The JSON serialization reading options. `.AllowFragments` by default.
-
- :returns: A JSON object response serializer.
- */
- public static func JSONResponseSerializer(options: NSJSONReadingOptions = .AllowFragments) -> GenericResponseSerializer {
- return GenericResponseSerializer { request, response, data in
- if data == nil || data?.length == 0 {
- return (nil, nil)
- }
-
- var serializationError: NSError?
- let JSON: AnyObject? = NSJSONSerialization.JSONObjectWithData(data!, options: options, error: &serializationError)
-
- return (JSON, serializationError)
- }
- }
-
- /**
- Adds a handler to be called once the request has finished.
-
- :param: options The JSON serialization reading options. `.AllowFragments` by default.
- :param: completionHandler A closure to be executed once the request has finished. The closure takes 4 arguments: the URL request, the URL response, if one was received, the JSON object, if one could be created from the URL response and data, and any error produced while creating the JSON object.
-
- :returns: The request.
- */
- public func responseJSON(
- options: NSJSONReadingOptions = .AllowFragments,
- completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void)
- -> Self
- {
- return response(
- responseSerializer: Request.JSONResponseSerializer(options: options),
- completionHandler: completionHandler
- )
- }
-}
-
-// MARK: - Property List
-
-extension Request {
-
- /**
- Creates a response serializer that returns an object constructed from the response data using `NSPropertyListSerialization` with the specified reading options.
-
- :param: options The property list reading options. `0` by default.
-
- :returns: A property list object response serializer.
- */
- public static func propertyListResponseSerializer(options: NSPropertyListReadOptions = 0) -> GenericResponseSerializer {
- return GenericResponseSerializer { request, response, data in
- if data == nil || data?.length == 0 {
- return (nil, nil)
- }
-
- var propertyListSerializationError: NSError?
- let plist: AnyObject? = NSPropertyListSerialization.propertyListWithData(
- data!,
- options: options,
- format: nil,
- error: &propertyListSerializationError
- )
-
- return (plist, propertyListSerializationError)
- }
- }
-
- /**
- Adds a handler to be called once the request has finished.
-
- :param: options The property list reading options. `0` by default.
- :param: completionHandler A closure to be executed once the request has finished. The closure takes 4 arguments: the URL request, the URL response, if one was received, the property list, if one could be created from the URL response and data, and any error produced while creating the property list.
-
- :returns: The request.
- */
- public func responsePropertyList(
- options: NSPropertyListReadOptions = 0,
- completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void)
- -> Self
- {
- return response(
- responseSerializer: Request.propertyListResponseSerializer(options: options),
- completionHandler: completionHandler
- )
- }
-}
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/ServerTrustPolicy.swift b/WeatherAroundUs/Pods/Alamofire/Source/ServerTrustPolicy.swift
deleted file mode 100644
index c3719d2..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/ServerTrustPolicy.swift
+++ /dev/null
@@ -1,286 +0,0 @@
-// ServerTrustPolicy.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-/// Responsible for managing the mapping of `ServerTrustPolicy` objects to a given host.
-public class ServerTrustPolicyManager {
- let policies: [String: ServerTrustPolicy]
-
- /**
- Initializes the `ServerTrustPolicyManager` instance with the given policies.
-
- Since different servers and web services can have different leaf certificates, intermediate and even root
- certficates, it is important to have the flexibility to specify evaluation policies on a per host basis. This
- allows for scenarios such as using default evaluation for host1, certificate pinning for host2, public key
- pinning for host3 and disabling evaluation for host4.
-
- :param: policies A dictionary of all policies mapped to a particular host.
-
- :returns: The new `ServerTrustPolicyManager` instance.
- */
- public init(policies: [String: ServerTrustPolicy]) {
- self.policies = policies
- }
-
- func serverTrustPolicyForHost(host: String) -> ServerTrustPolicy? {
- return policies[host]
- }
-}
-
-// MARK: -
-
-extension NSURLSession {
- private struct AssociatedKeys {
- static var ManagerKey = "NSURLSession.ServerTrustPolicyManager"
- }
-
- var serverTrustPolicyManager: ServerTrustPolicyManager? {
- get {
- return objc_getAssociatedObject(self, &AssociatedKeys.ManagerKey) as? ServerTrustPolicyManager
- }
- set (manager) {
- objc_setAssociatedObject(self, &AssociatedKeys.ManagerKey, manager, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
- }
- }
-}
-
-// MARK: - ServerTrustPolicy
-
-/**
- The `ServerTrustPolicy` evaluates the server trust generally provided by an `NSURLAuthenticationChallenge` when
- connecting to a server over a secure HTTPS connection. The policy configuration then evaluates the server trust
- with a given set of criteria to determine whether the server trust is valid and the connection should be made.
-
- Using pinned certificates or public keys for evaluation helps prevent man-in-the-middle (MITM) attacks and other
- vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged
- to route all communication over an HTTPS connection with pinning enabled.
-
- - PerformDefaultEvaluation: Uses the default server trust evaluation while allowing you to control whether to
- validate the host provided by the challenge. Applications are encouraged to always
- validate the host in production environments to guarantee the validity of the server's
- certificate chain.
-
- - PinCertificates: Uses the pinned certificates to validate the server trust. The server trust is
- considered valid if one of the pinned certificates match one of the server certificates.
- By validating both the certificate chain and host, certificate pinning provides a very
- secure form of server trust validation mitigating most, if not all, MITM attacks.
- Applications are encouraged to always validate the host and require a valid certificate
- chain in production environments.
-
- - PinPublicKeys: Uses the pinned public keys to validate the server trust. The server trust is considered
- valid if one of the pinned public keys match one of the server certificate public keys.
- By validating both the certificate chain and host, public key pinning provides a very
- secure form of server trust validation mitigating most, if not all, MITM attacks.
- Applications are encouraged to always validate the host and require a valid certificate
- chain in production environments.
-
- - DisableEvaluation: Disables all evaluation which in turn will always consider any server trust as valid.
-
- - CustomEvaluation: Uses the associated closure to evaluate the validity of the server trust.
-*/
-public enum ServerTrustPolicy {
- case PerformDefaultEvaluation(validateHost: Bool)
- case PinCertificates(certificates: [SecCertificate], validateCertificateChain: Bool, validateHost: Bool)
- case PinPublicKeys(publicKeys: [SecKey], validateCertificateChain: Bool, validateHost: Bool)
- case DisableEvaluation
- case CustomEvaluation((serverTrust: SecTrust, host: String) -> Bool)
-
- // MARK: - Bundle Location
-
- /**
- Returns all certificates within the given bundle with a `.cer` file extension.
-
- :param: bundle The bundle to search for all `.cer` files.
-
- :returns: All certificates within the given bundle.
- */
- public static func certificatesInBundle(bundle: NSBundle = NSBundle.mainBundle()) -> [SecCertificate] {
- var certificates: [SecCertificate] = []
-
- for path in bundle.pathsForResourcesOfType(".cer", inDirectory: nil) as! [String] {
- if let
- certificateData = NSData(contentsOfFile: path),
- certificate = SecCertificateCreateWithData(nil, certificateData)?.takeRetainedValue()
- {
- certificates.append(certificate)
- }
- }
-
- return certificates
- }
-
- /**
- Returns all public keys within the given bundle with a `.cer` file extension.
-
- :param: bundle The bundle to search for all `*.cer` files.
-
- :returns: All public keys within the given bundle.
- */
- public static func publicKeysInBundle(bundle: NSBundle = NSBundle.mainBundle()) -> [SecKey] {
- var publicKeys: [SecKey] = []
-
- for certificate in certificatesInBundle(bundle: bundle) {
- if let publicKey = publicKeyForCertificate(certificate) {
- publicKeys.append(publicKey)
- }
- }
-
- return publicKeys
- }
-
- // MARK: - Evaluation
-
- /**
- Evaluates whether the server trust is valid for the given host.
-
- :param: serverTrust The server trust to evaluate.
- :param: host The host of the challenge protection space.
-
- :returns: Whether the server trust is valid.
- */
- public func evaluateServerTrust(serverTrust: SecTrust, isValidForHost host: String) -> Bool {
- var serverTrustIsValid = false
-
- switch self {
- case let .PerformDefaultEvaluation(validateHost):
- let policy = validateHost ? SecPolicyCreateSSL(1, host as CFString) : SecPolicyCreateBasicX509()
- SecTrustSetPolicies(serverTrust, [policy.takeRetainedValue()])
-
- serverTrustIsValid = trustIsValid(serverTrust)
- case let .PinCertificates(pinnedCertificates, validateCertificateChain, validateHost):
- if validateCertificateChain {
- let policy = validateHost ? SecPolicyCreateSSL(1, host as CFString) : SecPolicyCreateBasicX509()
- SecTrustSetPolicies(serverTrust, [policy.takeRetainedValue()])
-
- SecTrustSetAnchorCertificates(serverTrust, pinnedCertificates)
- SecTrustSetAnchorCertificatesOnly(serverTrust, 1)
-
- serverTrustIsValid = trustIsValid(serverTrust)
- } else {
- let serverCertificatesDataArray = certificateDataForTrust(serverTrust)
- let pinnedCertificatesDataArray = certificateDataForCertificates(pinnedCertificates)
-
- outerLoop: for serverCertificateData in serverCertificatesDataArray {
- for pinnedCertificateData in pinnedCertificatesDataArray {
- if serverCertificateData.isEqualToData(pinnedCertificateData) {
- serverTrustIsValid = true
- break outerLoop
- }
- }
- }
- }
- case let .PinPublicKeys(pinnedPublicKeys, validateCertificateChain, validateHost):
- var certificateChainEvaluationPassed = true
-
- if validateCertificateChain {
- let policy = validateHost ? SecPolicyCreateSSL(1, host as CFString) : SecPolicyCreateBasicX509()
- SecTrustSetPolicies(serverTrust, [policy.takeRetainedValue()])
-
- certificateChainEvaluationPassed = trustIsValid(serverTrust)
- }
-
- if certificateChainEvaluationPassed {
- let serverKeys = ServerTrustPolicy.publicKeysForTrust(serverTrust)
- outerLoop: for serverPublicKey in ServerTrustPolicy.publicKeysForTrust(serverTrust) as [AnyObject] {
- for pinnedPublicKey in pinnedPublicKeys as [AnyObject] {
- if serverPublicKey.isEqual(pinnedPublicKey) {
- serverTrustIsValid = true
- break outerLoop
- }
- }
- }
- }
- case .DisableEvaluation:
- serverTrustIsValid = true
- case let .CustomEvaluation(closure):
- serverTrustIsValid = closure(serverTrust: serverTrust, host: host)
- }
-
- return serverTrustIsValid
- }
-
- // MARK: - Private - Trust Validation
-
- private func trustIsValid(trust: SecTrust) -> Bool {
- var isValid = false
-
- var result = SecTrustResultType(kSecTrustResultInvalid)
- let status = SecTrustEvaluate(trust, &result)
-
- if status == errSecSuccess {
- let unspecified = SecTrustResultType(kSecTrustResultUnspecified)
- let proceed = SecTrustResultType(kSecTrustResultProceed)
-
- isValid = result == unspecified || result == proceed
- }
-
- return isValid
- }
-
- // MARK: - Private - Certificate Data
-
- private func certificateDataForTrust(trust: SecTrust) -> [NSData] {
- var certificates: [SecCertificate] = []
-
- for index in 0.. [NSData] {
- return certificates.map { SecCertificateCopyData($0).takeRetainedValue() as NSData }
- }
-
- // MARK: - Private - Public Key Extraction
-
- private static func publicKeysForTrust(trust: SecTrust) -> [SecKey] {
- var publicKeys: [SecKey] = []
-
- for index in 0.. SecKey? {
- var publicKey: SecKey?
-
- let policy = SecPolicyCreateBasicX509().takeRetainedValue()
- var unmanagedTrust: Unmanaged?
- let trustCreationStatus = SecTrustCreateWithCertificates(certificate, policy, &unmanagedTrust)
-
- if let trust = unmanagedTrust?.takeRetainedValue() where trustCreationStatus == errSecSuccess {
- publicKey = SecTrustCopyPublicKey(trust).takeRetainedValue()
- }
-
- return publicKey
- }
-}
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/Upload.swift b/WeatherAroundUs/Pods/Alamofire/Source/Upload.swift
deleted file mode 100644
index 802381d..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/Upload.swift
+++ /dev/null
@@ -1,350 +0,0 @@
-// Upload.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-extension Manager {
- private enum Uploadable {
- case Data(NSURLRequest, NSData)
- case File(NSURLRequest, NSURL)
- case Stream(NSURLRequest, NSInputStream)
- }
-
- private func upload(uploadable: Uploadable) -> Request {
- var uploadTask: NSURLSessionUploadTask!
- var HTTPBodyStream: NSInputStream?
-
- switch uploadable {
- case .Data(let request, let data):
- dispatch_sync(queue) {
- uploadTask = self.session.uploadTaskWithRequest(request, fromData: data)
- }
- case .File(let request, let fileURL):
- dispatch_sync(queue) {
- uploadTask = self.session.uploadTaskWithRequest(request, fromFile: fileURL)
- }
- case .Stream(let request, var stream):
- dispatch_sync(queue) {
- uploadTask = self.session.uploadTaskWithStreamedRequest(request)
- }
-
- HTTPBodyStream = stream
- }
-
- let request = Request(session: session, task: uploadTask)
-
- if HTTPBodyStream != nil {
- request.delegate.taskNeedNewBodyStream = { _, _ in
- return HTTPBodyStream
- }
- }
-
- delegate[request.delegate.task] = request.delegate
-
- if startRequestsImmediately {
- request.resume()
- }
-
- return request
- }
-
- // MARK: File
-
- /**
- Creates a request for uploading a file to the specified URL request.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: URLRequest The URL request
- :param: file The file to upload
-
- :returns: The created upload request.
- */
- public func upload(URLRequest: URLRequestConvertible, file: NSURL) -> Request {
- return upload(.File(URLRequest.URLRequest, file))
- }
-
- /**
- Creates a request for uploading a file to the specified URL request.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: file The file to upload.
-
- :returns: The created upload request.
- */
- public func upload(method: Method, _ URLString: URLStringConvertible, headers: [String: String]? = nil, file: NSURL) -> Request {
- let mutableURLRequest = URLRequest(method, URLString, headers: headers)
- return upload(mutableURLRequest, file: file)
- }
-
- // MARK: Data
-
- /**
- Creates a request for uploading data to the specified URL request.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: URLRequest The URL request.
- :param: data The data to upload.
-
- :returns: The created upload request.
- */
- public func upload(URLRequest: URLRequestConvertible, data: NSData) -> Request {
- return upload(.Data(URLRequest.URLRequest, data))
- }
-
- /**
- Creates a request for uploading data to the specified URL request.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: data The data to upload.
-
- :returns: The created upload request.
- */
- public func upload(method: Method, _ URLString: URLStringConvertible, headers: [String: String]? = nil, data: NSData) -> Request {
- let mutableURLRequest = URLRequest(method, URLString, headers: headers)
-
- return upload(mutableURLRequest, data: data)
- }
-
- // MARK: Stream
-
- /**
- Creates a request for uploading a stream to the specified URL request.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: URLRequest The URL request.
- :param: stream The stream to upload.
-
- :returns: The created upload request.
- */
- public func upload(URLRequest: URLRequestConvertible, stream: NSInputStream) -> Request {
- return upload(.Stream(URLRequest.URLRequest, stream))
- }
-
- /**
- Creates a request for uploading a stream to the specified URL request.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: stream The stream to upload.
-
- :returns: The created upload request.
- */
- public func upload(method: Method, _ URLString: URLStringConvertible, headers: [String: String]? = nil, stream: NSInputStream) -> Request {
- let mutableURLRequest = URLRequest(method, URLString, headers: headers)
-
- return upload(mutableURLRequest, stream: stream)
- }
-
- // MARK: MultipartFormData
-
- /// Default memory threshold used when encoding `MultipartFormData`.
- public static let MultipartFormDataEncodingMemoryThreshold: UInt64 = 10 * 1024 * 1024
-
- /**
- Defines whether the `MultipartFormData` encoding was successful and contains result of the encoding as
- associated values.
-
- - Success: Represents a successful `MultipartFormData` encoding and contains the new `Request` along with
- streaming information.
- - Failure: Used to represent a failure in the `MultipartFormData` encoding and also contains the encoding
- error.
- */
- public enum MultipartFormDataEncodingResult {
- case Success(request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?)
- case Failure(NSError)
- }
-
- /**
- Encodes the `MultipartFormData` and creates a request to upload the result to the specified URL request.
-
- It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative
- payload is small, encoding the data in-memory and directly uploading to a server is the by far the most
- efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to
- be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory
- footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be
- used for larger payloads such as video content.
-
- The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory
- or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`,
- encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk
- during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding
- technique was used.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: method The HTTP method.
- :param: URLString The URL string.
- :param: headers The HTTP headers. `nil` by default.
- :param: multipartFormData The closure used to append body parts to the `MultipartFormData`.
- :param: encodingMemoryThreshold The encoding memory threshold in bytes. `MultipartFormDataEncodingMemoryThreshold`
- by default.
- :param: encodingCompletion The closure called when the `MultipartFormData` encoding is complete.
- */
- public func upload(
- method: Method,
- _ URLString: URLStringConvertible,
- headers: [String: String]? = nil,
- multipartFormData: MultipartFormData -> Void,
- encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold,
- encodingCompletion: (MultipartFormDataEncodingResult -> Void)?)
- {
- let mutableURLRequest = URLRequest(method, URLString, headers: headers)
-
- return upload(
- mutableURLRequest,
- multipartFormData: multipartFormData,
- encodingMemoryThreshold: encodingMemoryThreshold,
- encodingCompletion: encodingCompletion
- )
- }
-
- /**
- Encodes the `MultipartFormData` and creates a request to upload the result to the specified URL request.
-
- It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative
- payload is small, encoding the data in-memory and directly uploading to a server is the by far the most
- efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to
- be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory
- footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be
- used for larger payloads such as video content.
-
- The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory
- or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`,
- encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk
- during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding
- technique was used.
-
- If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.
-
- :param: URLRequest The URL request.
- :param: multipartFormData The closure used to append body parts to the `MultipartFormData`.
- :param: encodingMemoryThreshold The encoding memory threshold in bytes. `MultipartFormDataEncodingMemoryThreshold`
- by default.
- :param: encodingCompletion The closure called when the `MultipartFormData` encoding is complete.
- */
- public func upload(
- URLRequest: URLRequestConvertible,
- multipartFormData: MultipartFormData -> Void,
- encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold,
- encodingCompletion: (MultipartFormDataEncodingResult -> Void)?)
- {
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
- let formData = MultipartFormData()
- multipartFormData(formData)
-
- let URLRequestWithContentType = URLRequest.URLRequest.mutableCopy() as! NSMutableURLRequest
- URLRequestWithContentType.setValue(formData.contentType, forHTTPHeaderField: "Content-Type")
-
- if formData.contentLength < encodingMemoryThreshold {
- let encodingResult = formData.encode()
-
- dispatch_async(dispatch_get_main_queue()) {
- switch encodingResult {
- case .Success(let data):
- let encodingResult = MultipartFormDataEncodingResult.Success(
- request: self.upload(URLRequestWithContentType, data: data),
- streamingFromDisk: false,
- streamFileURL: nil
- )
- encodingCompletion?(encodingResult)
- case .Failure(let error):
- encodingCompletion?(.Failure(error))
- }
- }
- } else {
- let fileManager = NSFileManager.defaultManager()
- let tempDirectoryURL = NSURL(fileURLWithPath: NSTemporaryDirectory())!
- let directoryURL = tempDirectoryURL.URLByAppendingPathComponent("com.alamofire.manager/multipart.form.data")
- let fileName = NSUUID().UUIDString
- let fileURL = directoryURL.URLByAppendingPathComponent(fileName)
-
- var error: NSError?
-
- if fileManager.createDirectoryAtURL(directoryURL, withIntermediateDirectories: true, attributes: nil, error: &error) {
- formData.writeEncodedDataToDisk(fileURL) { error in
- dispatch_async(dispatch_get_main_queue()) {
- if let error = error {
- encodingCompletion?(.Failure(error))
- } else {
- let encodingResult = MultipartFormDataEncodingResult.Success(
- request: self.upload(URLRequestWithContentType, file: fileURL),
- streamingFromDisk: true,
- streamFileURL: fileURL
- )
- encodingCompletion?(encodingResult)
- }
- }
- }
- } else {
- dispatch_async(dispatch_get_main_queue()) {
- encodingCompletion?(.Failure(error!))
- }
- }
- }
- }
- }
-}
-
-// MARK: -
-
-extension Request {
-
- // MARK: - UploadTaskDelegate
-
- class UploadTaskDelegate: DataTaskDelegate {
- var uploadTask: NSURLSessionUploadTask? { return task as? NSURLSessionUploadTask }
- var uploadProgress: ((Int64, Int64, Int64) -> Void)!
-
- // MARK: - NSURLSessionTaskDelegate
-
- // MARK: Override Closures
-
- var taskDidSendBodyData: ((NSURLSession, NSURLSessionTask, Int64, Int64, Int64) -> Void)?
-
- // MARK: Delegate Methods
-
- func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
- if let taskDidSendBodyData = taskDidSendBodyData {
- taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend)
- } else {
- progress.totalUnitCount = totalBytesExpectedToSend
- progress.completedUnitCount = totalBytesSent
-
- uploadProgress?(bytesSent, totalBytesSent, totalBytesExpectedToSend)
- }
- }
- }
-}
diff --git a/WeatherAroundUs/Pods/Alamofire/Source/Validation.swift b/WeatherAroundUs/Pods/Alamofire/Source/Validation.swift
deleted file mode 100644
index 18be5da..0000000
--- a/WeatherAroundUs/Pods/Alamofire/Source/Validation.swift
+++ /dev/null
@@ -1,153 +0,0 @@
-// Validation.swift
-//
-// Copyright (c) 2014–2015 Alamofire Software Foundation (http://alamofire.org/)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-import Foundation
-
-extension Request {
-
- /**
- A closure used to validate a request that takes a URL request and URL response, and returns whether the request was valid.
- */
- public typealias Validation = (NSURLRequest, NSHTTPURLResponse) -> Bool
-
- /**
- Validates the request, using the specified closure.
-
- If validation fails, subsequent calls to response handlers will have an associated error.
-
- :param: validation A closure to validate the request.
-
- :returns: The request.
- */
- public func validate(validation: Validation) -> Self {
- delegate.queue.addOperationWithBlock {
- if let response = self.response where self.delegate.error == nil && !validation(self.request, response) {
- self.delegate.error = NSError(domain: AlamofireErrorDomain, code: -1, userInfo: nil)
- }
- }
-
- return self
- }
-
- // MARK: - Status Code
-
- /**
- Validates that the response has a status code in the specified range.
-
- If validation fails, subsequent calls to response handlers will have an associated error.
-
- :param: range The range of acceptable status codes.
-
- :returns: The request.
- */
- public func validate(statusCode acceptableStatusCode: S) -> Self {
- return validate { _, response in
- return contains(acceptableStatusCode, response.statusCode)
- }
- }
-
- // MARK: - Content-Type
-
- private struct MIMEType {
- let type: String
- let subtype: String
-
- init?(_ string: String) {
- let components = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
- .substringToIndex(string.rangeOfString(";")?.endIndex ?? string.endIndex)
- .componentsSeparatedByString("/")
-
- if let
- type = components.first,
- subtype = components.last
- {
- self.type = type
- self.subtype = subtype
- } else {
- return nil
- }
- }
-
- func matches(MIME: MIMEType) -> Bool {
- switch (type, subtype) {
- case (MIME.type, MIME.subtype), (MIME.type, "*"), ("*", MIME.subtype), ("*", "*"):
- return true
- default:
- return false
- }
- }
- }
-
- /**
- Validates that the response has a content type in the specified array.
-
- If validation fails, subsequent calls to response handlers will have an associated error.
-
- :param: contentType The acceptable content types, which may specify wildcard types and/or subtypes.
-
- :returns: The request.
- */
- public func validate(contentType acceptableContentTypes: S) -> Self {
- return validate { _, response in
- if let
- responseContentType = response.MIMEType,
- responseMIMEType = MIMEType(responseContentType)
- {
- for contentType in acceptableContentTypes {
- if let acceptableMIMEType = MIMEType(contentType) where acceptableMIMEType.matches(responseMIMEType) {
- return true
- }
- }
- } else {
- for contentType in acceptableContentTypes {
- if let MIMEType = MIMEType(contentType) where MIMEType.type == "*" && MIMEType.subtype == "*" {
- return true
- }
- }
- }
-
- return false
- }
- }
-
- // MARK: - Automatic
-
- /**
- Validates that the response has a status code in the default acceptable range of 200...299, and that the content type matches any specified in the Accept HTTP header field.
-
- If validation fails, subsequent calls to response handlers will have an associated error.
-
- :returns: The request.
- */
- public func validate() -> Self {
- let acceptableStatusCodes: Range = 200..<300
- let acceptableContentTypes: [String] = {
- if let accept = self.request.valueForHTTPHeaderField("Accept") {
- return accept.componentsSeparatedByString(",")
- }
-
- return ["*/*"]
- }()
-
- return validate(statusCode: acceptableStatusCodes).validate(contentType: acceptableContentTypes)
- }
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/CGSize+Swift.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/CGSize+Swift.swift
deleted file mode 100644
index 618d14f..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/CGSize+Swift.swift
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// CGSize+Swift.swift
-// Haneke
-//
-// Created by Oriol Blanc Gimeno on 09/09/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-extension CGSize {
-
- func hnk_aspectFillSize(size: CGSize) -> CGSize {
- let scaleWidth = size.width / self.width
- let scaleHeight = size.height / self.height
- let scale = max(scaleWidth, scaleHeight)
-
- let resultSize = CGSizeMake(self.width * scale, self.height * scale)
- return CGSizeMake(ceil(resultSize.width), ceil(resultSize.height))
- }
-
- func hnk_aspectFitSize(size: CGSize) -> CGSize {
- let targetAspect = size.width / size.height
- let sourceAspect = self.width / self.height
- var resultSize = size
-
- if (targetAspect > sourceAspect) {
- resultSize.width = size.height * sourceAspect
- }
- else {
- resultSize.height = size.width / sourceAspect
- }
- return CGSizeMake(ceil(resultSize.width), ceil(resultSize.height))
- }
-}
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Cache.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/Cache.swift
deleted file mode 100644
index e39df1e..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Cache.swift
+++ /dev/null
@@ -1,280 +0,0 @@
-//
-// Cache.swift
-// Haneke
-//
-// Created by Luis Ascorbe on 23/07/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-// Used to add T to NSCache
-class ObjectWrapper : NSObject {
- let value: Any
-
- init(value: Any) {
- self.value = value
- }
-}
-
-extension HanekeGlobals {
-
- // It'd be better to define this in the Cache class but Swift doesn't allow statics in a generic type
- public struct Cache {
-
- public static let OriginalFormatName = "original"
-
- public enum ErrorCode : Int {
- case ObjectNotFound = -100
- case FormatNotFound = -101
- }
-
- }
-
-}
-
-public class Cache {
-
- let name : String
-
- var memoryWarningObserver : NSObjectProtocol!
-
- public init(name : String) {
- self.name = name
-
- let notifications = NSNotificationCenter.defaultCenter()
- // Using block-based observer to avoid subclassing NSObject
- memoryWarningObserver = notifications.addObserverForName(UIApplicationDidReceiveMemoryWarningNotification,
- object: nil,
- queue: NSOperationQueue.mainQueue(),
- usingBlock: { [unowned self] (notification : NSNotification!) -> Void in
- self.onMemoryWarning()
- }
- )
-
- var originalFormat = Format(name: HanekeGlobals.Cache.OriginalFormatName)
- self.addFormat(originalFormat)
- }
-
- deinit {
- let notifications = NSNotificationCenter.defaultCenter()
- notifications.removeObserver(memoryWarningObserver, name: UIApplicationDidReceiveMemoryWarningNotification, object: nil)
- }
-
- public func set(#value : T, key: String, formatName : String = HanekeGlobals.Cache.OriginalFormatName, success succeed : ((T) -> ())? = nil) {
- if let (format, memoryCache, diskCache) = self.formats[formatName] {
- self.format(value: value, format: format) { formattedValue in
- let wrapper = ObjectWrapper(value: formattedValue)
- memoryCache.setObject(wrapper, forKey: key)
- // Value data is sent as @autoclosure to be executed in the disk cache queue.
- diskCache.setData(self.dataFromValue(formattedValue, format: format), key: key)
- succeed?(formattedValue)
- }
- } else {
- assertionFailure("Can't set value before adding format")
- }
- }
-
- public func fetch(#key : String, formatName : String = HanekeGlobals.Cache.OriginalFormatName, failure fail : Fetch.Failer? = nil, success succeed : Fetch.Succeeder? = nil) -> Fetch {
- let fetch = Cache.buildFetch(failure: fail, success: succeed)
- if let (format, memoryCache, diskCache) = self.formats[formatName] {
- if let wrapper = memoryCache.objectForKey(key) as? ObjectWrapper, let result = wrapper.value as? T {
- fetch.succeed(result)
- diskCache.updateAccessDate(self.dataFromValue(result, format: format), key: key)
- return fetch
- }
-
- self.fetchFromDiskCache(diskCache, key: key, memoryCache: memoryCache, failure: { error in
- fetch.fail(error)
- }) { value in
- fetch.succeed(value)
- }
-
- } else {
- let localizedFormat = NSLocalizedString("Format %@ not found", comment: "Error description")
- let description = String(format:localizedFormat, formatName)
- let error = errorWithCode(HanekeGlobals.Cache.ErrorCode.FormatNotFound.rawValue, description: description)
- fetch.fail(error)
- }
- return fetch
- }
-
- public func fetch(#fetcher : Fetcher, formatName : String = HanekeGlobals.Cache.OriginalFormatName, failure fail : Fetch.Failer? = nil, success succeed : Fetch.Succeeder? = nil) -> Fetch {
- let key = fetcher.key
- let fetch = Cache.buildFetch(failure: fail, success: succeed)
- self.fetch(key: key, formatName: formatName, failure: { error in
- if error?.code == HanekeGlobals.Cache.ErrorCode.FormatNotFound.rawValue {
- fetch.fail(error)
- }
-
- if let (format, _, _) = self.formats[formatName] {
- self.fetchAndSet(fetcher, format: format, failure: {error in
- fetch.fail(error)
- }) {value in
- fetch.succeed(value)
- }
- }
-
- // Unreachable code. Formats can't be removed from Cache.
- }) { value in
- fetch.succeed(value)
- }
- return fetch
- }
-
- public func remove(#key : String, formatName : String = HanekeGlobals.Cache.OriginalFormatName) {
- if let (_, memoryCache, diskCache) = self.formats[formatName] {
- memoryCache.removeObjectForKey(key)
- diskCache.removeData(key)
- }
- }
-
- public func removeAll() {
- for (_, (_, memoryCache, diskCache)) in self.formats {
- memoryCache.removeAllObjects()
- diskCache.removeAllData()
- }
- }
-
- // MARK: Notifications
-
- func onMemoryWarning() {
- for (_, (_, memoryCache, _)) in self.formats {
- memoryCache.removeAllObjects()
- }
- }
-
- // MARK: Formats
-
- var formats : [String : (Format, NSCache, DiskCache)] = [:]
-
- public func addFormat(format : Format) {
- let name = format.name
- let formatPath = self.formatPath(formatName: name)
- let memoryCache = NSCache()
- let diskCache = DiskCache(path: formatPath, capacity : format.diskCapacity)
- self.formats[name] = (format, memoryCache, diskCache)
- }
-
- // MARK: Internal
-
- lazy var cachePath : String = {
- let basePath = DiskCache.basePath()
- let cachePath = basePath.stringByAppendingPathComponent(self.name)
- return cachePath
- }()
-
- func formatPath(#formatName : String) -> String {
- let formatPath = self.cachePath.stringByAppendingPathComponent(formatName)
- var error : NSError? = nil
- let success = NSFileManager.defaultManager().createDirectoryAtPath(formatPath, withIntermediateDirectories: true, attributes: nil, error: &error)
- if (!success) {
- Log.error("Failed to create directory \(formatPath)", error)
- }
- return formatPath
- }
-
- // MARK: Private
-
- func dataFromValue(value : T, format : Format) -> NSData? {
- if let data = format.convertToData?(value) {
- return data
- }
- return value.asData()
- }
-
- private func fetchFromDiskCache(diskCache : DiskCache, key : String, memoryCache : NSCache, failure fail : ((NSError?) -> ())?, success succeed : (T) -> ()) {
- diskCache.fetchData(key, failure: { error in
- if let block = fail {
- if (error?.code == NSFileReadNoSuchFileError) {
- let localizedFormat = NSLocalizedString("Object not found for key %@", comment: "Error description")
- let description = String(format:localizedFormat, key)
- let error = errorWithCode(HanekeGlobals.Cache.ErrorCode.ObjectNotFound.rawValue, description: description)
- block(error)
- } else {
- block(error)
- }
- }
- }) { data in
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
- var value = T.convertFromData(data)
- if let value = value {
- let descompressedValue = self.decompressedImageIfNeeded(value)
- dispatch_async(dispatch_get_main_queue(), {
- succeed(descompressedValue)
- let wrapper = ObjectWrapper(value: descompressedValue)
- memoryCache.setObject(wrapper, forKey: key)
- })
- }
- })
- }
- }
-
- private func fetchAndSet(fetcher : Fetcher, format : Format, failure fail : ((NSError?) -> ())?, success succeed : (T) -> ()) {
- fetcher.fetch(failure: { error in
- let _ = fail?(error)
- }) { value in
- self.set(value: value, key: fetcher.key, formatName: format.name, success: succeed)
- }
- }
-
- private func format(#value : T, format : Format, success succeed : (T) -> ()) {
- // HACK: Ideally Cache shouldn't treat images differently but I can't think of any other way of doing this that doesn't complicate the API for other types.
- if format.isIdentity && !(value is UIImage) {
- succeed(value)
- } else {
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
- var formatted = format.apply(value)
-
- if let formattedImage = formatted as? UIImage {
- let originalImage = value as? UIImage
- if formattedImage === originalImage {
- formatted = self.decompressedImageIfNeeded(formatted)
- }
- }
-
- dispatch_async(dispatch_get_main_queue()) {
- succeed(formatted)
- }
- }
- }
- }
-
- private func decompressedImageIfNeeded(value : T) -> T {
- if let image = value as? UIImage {
- let decompressedImage = image.hnk_decompressedImage() as? T
- return decompressedImage!
- }
- return value
- }
-
- private class func buildFetch(failure fail : Fetch.Failer? = nil, success succeed : Fetch.Succeeder? = nil) -> Fetch {
- let fetch = Fetch()
- if let succeed = succeed {
- fetch.onSuccess(succeed)
- }
- if let fail = fail {
- fetch.onFailure(fail)
- }
- return fetch
- }
-
- // MARK: Convenience fetch
- // Ideally we would put each of these in the respective fetcher file as a Cache extension. Unfortunately, this fails to link when using the framework in a project as of Xcode 6.1.
-
- public func fetch(#key : String, @autoclosure(escaping) value getValue : () -> T.Result, formatName : String = HanekeGlobals.Cache.OriginalFormatName, success succeed : Fetch.Succeeder? = nil) -> Fetch {
- let fetcher = SimpleFetcher(key: key, value: getValue)
- return self.fetch(fetcher: fetcher, formatName: formatName, success: succeed)
- }
-
- public func fetch(#path : String, formatName : String = HanekeGlobals.Cache.OriginalFormatName, failure fail : Fetch.Failer? = nil, success succeed : Fetch.Succeeder? = nil) -> Fetch {
- let fetcher = DiskFetcher(path: path)
- return self.fetch(fetcher: fetcher, formatName: formatName, failure: fail, success: succeed)
- }
-
- public func fetch(#URL : NSURL, formatName : String = HanekeGlobals.Cache.OriginalFormatName, failure fail : Fetch.Failer? = nil, success succeed : Fetch.Succeeder? = nil) -> Fetch {
- let fetcher = NetworkFetcher(URL: URL)
- return self.fetch(fetcher: fetcher, formatName: formatName, failure: fail, success: succeed)
- }
-
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/CryptoSwiftMD5.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/CryptoSwiftMD5.swift
deleted file mode 100755
index a479684..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/CryptoSwiftMD5.swift
+++ /dev/null
@@ -1,201 +0,0 @@
-//
-// CryptoSwiftMD5.Swif
-//
-// To date, adding CommonCrypto to a Swift framework is problematic. See:
-// http://stackoverflow.com/questions/25248598/importing-commoncrypto-in-a-swift-framework
-// We're using a subset of CryptoSwift as a (temporary?) alternative.
-// The following is an altered source version that only includes MD5. The original software can be found at:
-// https://github.com/krzyzanowskim/CryptoSwift
-// This is the original copyright notice:
-
-/*
-Copyright (C) 2014 Marcin Krzyżanowski
-This software is provided 'as-is', without any express or implied warranty.
-
-In no event will the authors be held liable for any damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
-
-- The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation is required.
-- Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-- This notice may not be removed or altered from any source or binary distribution.
-*/
-
-import Foundation
-
-/** array of bytes, little-endian representation */
-func arrayOfBytes(value:T, length:Int? = nil) -> [UInt8] {
- let totalBytes = length ?? (sizeofValue(value) * 8)
- var v = value
-
- var valuePointer = UnsafeMutablePointer.alloc(1)
- valuePointer.memory = value
-
- var bytesPointer = UnsafeMutablePointer(valuePointer)
- var bytes = [UInt8](count: totalBytes, repeatedValue: 0)
- for j in 0.. [UInt8] {
- return arrayOfBytes(self, length: totalBytes)
- }
-
-}
-
-extension NSMutableData {
-
- /** Convenient way to append bytes */
- internal func appendBytes(arrayOfBytes: [UInt8]) {
- self.appendBytes(arrayOfBytes, length: arrayOfBytes.count)
- }
-
-}
-
-class HashBase {
-
- var message: NSData
-
- init(_ message: NSData) {
- self.message = message
- }
-
- /** Common part for hash calculation. Prepare header data. */
- func prepare(_ len:Int = 64) -> NSMutableData {
- var tmpMessage: NSMutableData = NSMutableData(data: self.message)
-
- // Step 1. Append Padding Bits
- tmpMessage.appendBytes([0x80]) // append one bit (UInt8 with one bit) to message
-
- // append "0" bit until message length in bits ≡ 448 (mod 512)
- var msgLength = tmpMessage.length
- var counter = 0
- while msgLength % len != (len - 8) {
- counter++
- msgLength++
- }
- var bufZeros = UnsafeMutablePointer(calloc(counter, sizeof(UInt8)))
- tmpMessage.appendBytes(bufZeros, length: counter)
-
- return tmpMessage
- }
-}
-
-func rotateLeft(v:UInt32, n:UInt32) -> UInt32 {
- return ((v << n) & 0xFFFFFFFF) | (v >> (32 - n))
-}
-
-class MD5 : HashBase {
-
- /** specifies the per-round shift amounts */
- private let s: [UInt32] = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
- 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
- 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
- 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]
-
- /** binary integer part of the sines of integers (Radians) */
- private let k: [UInt32] = [0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,
- 0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,
- 0x698098d8,0x8b44f7af,0xffff5bb1,0x895cd7be,
- 0x6b901122,0xfd987193,0xa679438e,0x49b40821,
- 0xf61e2562,0xc040b340,0x265e5a51,0xe9b6c7aa,
- 0xd62f105d,0x2441453,0xd8a1e681,0xe7d3fbc8,
- 0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,
- 0xa9e3e905,0xfcefa3f8,0x676f02d9,0x8d2a4c8a,
- 0xfffa3942,0x8771f681,0x6d9d6122,0xfde5380c,
- 0xa4beea44,0x4bdecfa9,0xf6bb4b60,0xbebfbc70,
- 0x289b7ec6,0xeaa127fa,0xd4ef3085,0x4881d05,
- 0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,
- 0xf4292244,0x432aff97,0xab9423a7,0xfc93a039,
- 0x655b59c3,0x8f0ccc92,0xffeff47d,0x85845dd1,
- 0x6fa87e4f,0xfe2ce6e0,0xa3014314,0x4e0811a1,
- 0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391]
-
- private let h:[UInt32] = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]
-
- func calculate() -> NSData {
- var tmpMessage = prepare()
-
- // hash values
- var hh = h
-
- // Step 2. Append Length a 64-bit representation of lengthInBits
- var lengthInBits = (message.length * 8)
- var lengthBytes = lengthInBits.bytes(64 / 8)
- tmpMessage.appendBytes(reverse(lengthBytes))
-
- // Process the message in successive 512-bit chunks:
- let chunkSizeBytes = 512 / 8 // 64
- var leftMessageBytes = tmpMessage.length
- for (var i = 0; i < tmpMessage.length; i = i + chunkSizeBytes, leftMessageBytes -= chunkSizeBytes) {
- let chunk = tmpMessage.subdataWithRange(NSRange(location: i, length: min(chunkSizeBytes,leftMessageBytes)))
- let bytes = tmpMessage.bytes
-
- // break chunk into sixteen 32-bit words M[j], 0 ≤ j ≤ 15
- var M:[UInt32] = [UInt32](count: 16, repeatedValue: 0)
- let range = NSRange(location:0, length: M.count * sizeof(UInt32))
- chunk.getBytes(UnsafeMutablePointer(M), range: range)
-
- // Initialize hash value for this chunk:
- var A:UInt32 = hh[0]
- var B:UInt32 = hh[1]
- var C:UInt32 = hh[2]
- var D:UInt32 = hh[3]
-
- var dTemp:UInt32 = 0
-
- // Main loop
- for j in 0.. () in
- var i:UInt32 = item.littleEndian
- buf.appendBytes(&i, length: sizeofValue(i))
- })
-
- return buf.copy() as! NSData
- }
-}
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Data.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/Data.swift
deleted file mode 100644
index 9c35a31..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Data.swift
+++ /dev/null
@@ -1,117 +0,0 @@
-//
-// Data.swift
-// Haneke
-//
-// Created by Hermes Pique on 9/19/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-// See: http://stackoverflow.com/questions/25922152/not-identical-to-self
-public protocol DataConvertible {
- typealias Result
-
- static func convertFromData(data:NSData) -> Result?
-}
-
-public protocol DataRepresentable {
-
- func asData() -> NSData!
-}
-
-extension UIImage : DataConvertible, DataRepresentable {
-
- public typealias Result = UIImage
-
- public class func convertFromData(data:NSData) -> Result? {
- let image = UIImage(data: data)
- return image
- }
-
- public func asData() -> NSData! {
- return self.hnk_data()
- }
-
-}
-
-extension String : DataConvertible, DataRepresentable {
-
- public typealias Result = String
-
- public static func convertFromData(data:NSData) -> Result? {
- var string = NSString(data: data, encoding: NSUTF8StringEncoding)
- return string as? Result
- }
-
- public func asData() -> NSData! {
- return self.dataUsingEncoding(NSUTF8StringEncoding)
- }
-
-}
-
-extension NSData : DataConvertible, DataRepresentable {
-
- public typealias Result = NSData
-
- public class func convertFromData(data:NSData) -> Result? {
- return data
- }
-
- public func asData() -> NSData! {
- return self
- }
-
-}
-
-public enum JSON : DataConvertible, DataRepresentable {
- public typealias Result = JSON
-
- case Dictionary([String:AnyObject])
- case Array([AnyObject])
-
- public static func convertFromData(data:NSData) -> Result? {
- var error : NSError?
- if let object : AnyObject = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) {
- switch (object) {
- case let dictionary as [String:AnyObject]:
- return JSON.Dictionary(dictionary)
- case let array as [AnyObject]:
- return JSON.Array(array)
- default:
- return nil
- }
- } else {
- Log.error("Invalid JSON data", error)
- return nil
- }
- }
-
- public func asData() -> NSData! {
- switch (self) {
- case .Dictionary(let dictionary):
- return NSJSONSerialization.dataWithJSONObject(dictionary, options: NSJSONWritingOptions.allZeros, error: nil)
- case .Array(let array):
- return NSJSONSerialization.dataWithJSONObject(array, options: NSJSONWritingOptions.allZeros, error: nil)
- }
- }
-
- public var array : [AnyObject]! {
- switch (self) {
- case .Dictionary(let _):
- return nil
- case .Array(let array):
- return array
- }
- }
-
- public var dictionary : [String:AnyObject]! {
- switch (self) {
- case .Dictionary(let dictionary):
- return dictionary
- case .Array(let _):
- return nil
- }
- }
-
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/DiskCache.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/DiskCache.swift
deleted file mode 100644
index f407bb6..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/DiskCache.swift
+++ /dev/null
@@ -1,208 +0,0 @@
-//
-// DiskCache.swift
-// Haneke
-//
-// Created by Hermes Pique on 8/10/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import Foundation
-
-public class DiskCache {
-
- public class func basePath() -> String {
- let cachesPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String
- let hanekePathComponent = HanekeGlobals.Domain
- let basePath = cachesPath.stringByAppendingPathComponent(hanekePathComponent)
- // TODO: Do not recaculate basePath value
- return basePath
- }
-
- public let path : String
-
- public var size : UInt64 = 0
-
- public var capacity : UInt64 = 0 {
- didSet {
- dispatch_async(self.cacheQueue, {
- self.controlCapacity()
- })
- }
- }
-
- public lazy var cacheQueue : dispatch_queue_t = {
- let queueName = HanekeGlobals.Domain + "." + self.path.lastPathComponent
- let cacheQueue = dispatch_queue_create(queueName, nil)
- return cacheQueue
- }()
-
- public init(path : String, capacity : UInt64 = UINT64_MAX) {
- self.path = path
- self.capacity = capacity
- dispatch_async(self.cacheQueue, {
- self.calculateSize()
- self.controlCapacity()
- })
- }
-
- public func setData(@autoclosure(escaping) getData : () -> NSData?, key : String) {
- dispatch_async(cacheQueue, {
- if let data = getData() {
- self.setDataSync(data, key: key)
- } else {
- Log.error("Failed to get data for key \(key)")
- }
- })
- }
-
- public func fetchData(key : String, failure fail : ((NSError?) -> ())? = nil, success succeed : (NSData) -> ()) {
- dispatch_async(cacheQueue, {
- let path = self.pathForKey(key)
- var error: NSError? = nil
- if let data = NSData(contentsOfFile: path, options: NSDataReadingOptions.allZeros, error: &error) {
- dispatch_async(dispatch_get_main_queue(), {
- succeed(data)
- })
- self.updateDiskAccessDateAtPath(path)
- } else if let block = fail {
- dispatch_async(dispatch_get_main_queue(), {
- block(error)
- })
- }
- })
- }
-
- public func removeData(key : String) {
- dispatch_async(cacheQueue, {
- let path = self.pathForKey(key)
- self.removeFileAtPath(path)
- })
- }
-
- public func removeAllData() {
- let fileManager = NSFileManager.defaultManager()
- let cachePath = self.path
- dispatch_async(cacheQueue, {
- var error: NSError? = nil
- if let contents = fileManager.contentsOfDirectoryAtPath(cachePath, error: &error) as? [String] {
- for pathComponent in contents {
- let path = cachePath.stringByAppendingPathComponent(pathComponent)
- if !fileManager.removeItemAtPath(path, error: &error) {
- Log.error("Failed to remove path \(path)", error)
- }
- }
- self.calculateSize()
- } else {
- Log.error("Failed to list directory", error)
- }
- })
- }
-
- public func updateAccessDate(@autoclosure(escaping) getData : () -> NSData?, key : String) {
- dispatch_async(cacheQueue, {
- let path = self.pathForKey(key)
- let fileManager = NSFileManager.defaultManager()
- if (!self.updateDiskAccessDateAtPath(path) && !fileManager.fileExistsAtPath(path)){
- if let data = getData() {
- self.setDataSync(data, key: key)
- } else {
- Log.error("Failed to get data for key \(key)")
- }
- }
- })
- }
-
- public func pathForKey(key : String) -> String {
- var escapedFilename = key.escapedFilename()
- let filename = count(escapedFilename) < Int(NAME_MAX) ? escapedFilename : key.MD5Filename()
- let keyPath = self.path.stringByAppendingPathComponent(filename)
- return keyPath
- }
-
- // MARK: Private
-
- private func calculateSize() {
- let fileManager = NSFileManager.defaultManager()
- size = 0
- let cachePath = self.path
- var error : NSError?
- if let contents = fileManager.contentsOfDirectoryAtPath(cachePath, error: &error) as? [String] {
- for pathComponent in contents {
- let path = cachePath.stringByAppendingPathComponent(pathComponent)
- if let attributes : NSDictionary = fileManager.attributesOfItemAtPath(path, error: &error) {
- size += attributes.fileSize()
- } else {
- Log.error("Failed to read file size of \(path)", error)
- }
- }
- } else {
- Log.error("Failed to list directory", error)
- }
- }
-
- private func controlCapacity() {
- if self.size <= self.capacity { return }
-
- let fileManager = NSFileManager.defaultManager()
- let cachePath = self.path
- fileManager.enumerateContentsOfDirectoryAtPath(cachePath, orderedByProperty: NSURLContentModificationDateKey, ascending: true) { (URL : NSURL, _, inout stop : Bool) -> Void in
-
- if let path = URL.path {
- self.removeFileAtPath(path)
-
- stop = self.size <= self.capacity
- }
- }
- }
-
- private func setDataSync(data: NSData, key : String) {
- let path = self.pathForKey(key)
- var error: NSError?
- let fileManager = NSFileManager.defaultManager()
- let previousAttributes : NSDictionary? = fileManager.attributesOfItemAtPath(path, error: nil)
- let success = data.writeToFile(path, options: NSDataWritingOptions.AtomicWrite, error:&error)
- if (!success) {
- Log.error("Failed to write key \(key)", error)
- }
- if let attributes = previousAttributes {
- self.size -= attributes.fileSize()
- }
- self.size += UInt64(data.length)
- self.controlCapacity()
- }
-
- private func updateDiskAccessDateAtPath(path : String) -> Bool {
- let fileManager = NSFileManager.defaultManager()
- let now = NSDate()
- var error : NSError?
- let success = fileManager.setAttributes([NSFileModificationDate : now], ofItemAtPath: path, error: &error)
- if !success {
- Log.error("Failed to update access date", error)
- }
- return success
- }
-
- private func removeFileAtPath(path:String) {
- var error : NSError?
- let fileManager = NSFileManager.defaultManager()
- if let attributes : NSDictionary = fileManager.attributesOfItemAtPath(path, error: &error) {
- let fileSize = attributes.fileSize()
- if fileManager.removeItemAtPath(path, error: &error) {
- self.size -= fileSize
- } else {
- Log.error("Failed to remove file", error)
- }
- } else if isNoSuchFileError(error) {
- Log.debug("File not found", error)
- } else {
- Log.error("Failed to remove file", error)
- }
- }
-}
-
-private func isNoSuchFileError(error : NSError?) -> Bool {
- if let error = error {
- return NSCocoaErrorDomain == error.domain && error.code == NSFileReadNoSuchFileError
- }
- return false
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/DiskFetcher.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/DiskFetcher.swift
deleted file mode 100644
index 7b5b7c5..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/DiskFetcher.swift
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// DiskFetcher.swift
-// Haneke
-//
-// Created by Joan Romano on 9/16/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import Foundation
-
-extension HanekeGlobals {
-
- // It'd be better to define this in the DiskFetcher class but Swift doesn't allow to declare an enum in a generic type
- public struct DiskFetcher {
-
- public enum ErrorCode : Int {
- case InvalidData = -500
- }
-
- }
-
-}
-
-public class DiskFetcher : Fetcher {
-
- let path : String
- var cancelled = false
-
- public init(path : String) {
- self.path = path
- let key = path
- super.init(key: key)
- }
-
- // MARK: Fetcher
-
- public override func fetch(failure fail : ((NSError?) -> ()), success succeed : (T.Result) -> ()) {
- self.cancelled = false
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { [weak self] in
- if let strongSelf = self {
- strongSelf.privateFetch(failure: fail, success: succeed)
- }
- })
- }
-
- public override func cancelFetch() {
- self.cancelled = true
- }
-
- // MARK: Private
-
- private func privateFetch(failure fail : ((NSError?) -> ()), success succeed : (T.Result) -> ()) {
- if self.cancelled {
- return
- }
-
- var error: NSError?
- let data = NSData(contentsOfFile: self.path, options: NSDataReadingOptions.allZeros, error: &error)
- if data == nil {
- dispatch_async(dispatch_get_main_queue()) {
- fail(error)
- }
- return
- }
-
- if self.cancelled {
- return
- }
-
- let value : T.Result? = T.convertFromData(data!)
-
- if value == nil {
- let localizedFormat = NSLocalizedString("Failed to convert value from data at path %@", comment: "Error description")
- let description = String(format:localizedFormat, self.path)
- let error = errorWithCode(HanekeGlobals.DiskFetcher.ErrorCode.InvalidData.rawValue, description: description)
- dispatch_async(dispatch_get_main_queue()) {
- fail(error)
- }
- return
- }
-
- dispatch_async(dispatch_get_main_queue(), {
- if self.cancelled {
- return
- }
- succeed(value!)
- })
- }
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Fetch.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/Fetch.swift
deleted file mode 100644
index 05fe0c5..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Fetch.swift
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// Fetch.swift
-// Haneke
-//
-// Created by Hermes Pique on 9/28/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import Foundation
-
-enum FetchState {
- case Pending
- // Using Wrapper as a workaround for error 'unimplemented IR generation feature non-fixed multi-payload enum layout'
- // See: http://swiftradar.tumblr.com/post/88314603360/swift-fails-to-compile-enum-with-two-data-cases
- // See: http://owensd.io/2014/08/06/fixed-enum-layout.html
- case Success(Wrapper)
- case Failure(NSError?)
-}
-
-public class Fetch {
-
- public typealias Succeeder = (T) -> ()
-
- public typealias Failer = (NSError?) -> ()
-
- private var onSuccess : Succeeder?
-
- private var onFailure : Failer?
-
- private var state : FetchState = FetchState.Pending
-
- public init() {}
-
- public func onSuccess(onSuccess : Succeeder) -> Self {
- self.onSuccess = onSuccess
- switch self.state {
- case FetchState.Success(let wrapper):
- onSuccess(wrapper.value)
- default:
- break
- }
- return self
- }
-
- public func onFailure(onFailure : Failer) -> Self {
- self.onFailure = onFailure
- switch self.state {
- case FetchState.Failure(let error):
- onFailure(error)
- default:
- break
- }
- return self
- }
-
- func succeed(value : T) {
- self.state = FetchState.Success(Wrapper(value))
- self.onSuccess?(value)
- }
-
- func fail(_ error : NSError? = nil) {
- self.state = FetchState.Failure(error)
- self.onFailure?(error)
- }
-
- var hasFailed : Bool {
- switch self.state {
- case FetchState.Failure(_):
- return true
- default:
- return false
- }
- }
-
- var hasSucceeded : Bool {
- switch self.state {
- case FetchState.Success(_):
- return true
- default:
- return false
- }
- }
-
-}
-
-public class Wrapper {
- public let value: T
- public init(_ value: T) { self.value = value }
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Fetcher.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/Fetcher.swift
deleted file mode 100644
index 23a885b..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Fetcher.swift
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Fetcher.swift
-// Haneke
-//
-// Created by Hermes Pique on 9/9/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-// See: http://stackoverflow.com/questions/25915306/generic-closure-in-protocol
-public class Fetcher {
-
- public let key : String
-
- init(key : String) {
- self.key = key
- }
-
- func fetch(failure fail : ((NSError?) -> ()), success succeed : (T.Result) -> ()) {}
-
- func cancelFetch() {}
-}
-
-class SimpleFetcher : Fetcher {
-
- let getValue : () -> T.Result
-
- init(key : String, @autoclosure(escaping) value getValue : () -> T.Result) {
- self.getValue = getValue
- super.init(key: key)
- }
-
- override func fetch(failure fail : ((NSError?) -> ()), success succeed : (T.Result) -> ()) {
- let value = getValue()
- succeed(value)
- }
-
- override func cancelFetch() {}
-
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Format.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/Format.swift
deleted file mode 100644
index 5388757..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Format.swift
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-// Format.swift
-// Haneke
-//
-// Created by Hermes Pique on 8/27/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-public struct Format {
-
- public let name : String
-
- public let diskCapacity : UInt64
-
- public var transform : ((T) -> (T))?
-
- public var convertToData : (T -> NSData)?
-
- public init(name : String, diskCapacity : UInt64 = UINT64_MAX, transform : ((T) -> (T))? = nil) {
- self.name = name
- self.diskCapacity = diskCapacity
- self.transform = transform
- }
-
- public func apply(value : T) -> T {
- var transformed = value
- if let transform = self.transform {
- transformed = transform(value)
- }
- return transformed
- }
-
- var isIdentity : Bool {
- return self.transform == nil
- }
-
-}
-
-public struct ImageResizer {
-
- public enum ScaleMode : String {
- case Fill = "fill", AspectFit = "aspectfit", AspectFill = "aspectfill", None = "none"
- }
-
- public typealias T = UIImage
-
- public let allowUpscaling : Bool
-
- public let size : CGSize
-
- public let scaleMode: ScaleMode
-
- public let compressionQuality : Float
-
- public init(size : CGSize = CGSizeZero, scaleMode : ScaleMode = .None, allowUpscaling: Bool = true, compressionQuality : Float = 1.0) {
- self.size = size
- self.scaleMode = scaleMode
- self.allowUpscaling = allowUpscaling
- self.compressionQuality = compressionQuality
- }
-
- public func resizeImage(image: UIImage) -> UIImage {
- var resizeToSize: CGSize
- switch self.scaleMode {
- case .Fill:
- resizeToSize = self.size
- case .AspectFit:
- resizeToSize = image.size.hnk_aspectFitSize(self.size)
- case .AspectFill:
- resizeToSize = image.size.hnk_aspectFillSize(self.size)
- case .None:
- return image
- }
- assert(self.size.width > 0 && self.size.height > 0, "Expected non-zero size. Use ScaleMode.None to avoid resizing.")
-
- // If does not allow to scale up the image
- if (!self.allowUpscaling) {
- if (resizeToSize.width > image.size.width || resizeToSize.height > image.size.height) {
- return image
- }
- }
-
- // Avoid unnecessary computations
- if (resizeToSize.width == image.size.width && resizeToSize.height == image.size.height) {
- return image
- }
-
- let resizedImage = image.hnk_imageByScalingToSize(resizeToSize)
- return resizedImage
- }
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Haneke.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/Haneke.swift
deleted file mode 100644
index 96a0c5f..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Haneke.swift
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// Haneke.swift
-// Haneke
-//
-// Created by Hermes Pique on 9/9/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-public struct HanekeGlobals {
-
- public static let Domain = "io.haneke"
-
-}
-
-public struct Shared {
-
- public static var imageCache : Cache {
- struct Static {
- static let name = "shared-images"
- static let cache = Cache(name: name)
- }
- return Static.cache
- }
-
- public static var dataCache : Cache {
- struct Static {
- static let name = "shared-data"
- static let cache = Cache(name: name)
- }
- return Static.cache
- }
-
- public static var stringCache : Cache {
- struct Static {
- static let name = "shared-strings"
- static let cache = Cache(name: name)
- }
- return Static.cache
- }
-
- public static var JSONCache : Cache {
- struct Static {
- static let name = "shared-json"
- static let cache = Cache(name: name)
- }
- return Static.cache
- }
-}
-
-func errorWithCode(code : Int, #description : String) -> NSError {
- let userInfo = [NSLocalizedDescriptionKey: description]
- return NSError(domain: HanekeGlobals.Domain, code: code, userInfo: userInfo)
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Log.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/Log.swift
deleted file mode 100644
index 265350b..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/Log.swift
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// Log.swift
-// Haneke
-//
-// Created by Hermes Pique on 11/10/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import Foundation
-
-struct Log {
-
- private static let Tag = "[HANEKE]"
-
- private enum Level : String {
- case Debug = "[DEBUG]"
- case Error = "[ERROR]"
- }
-
- private static func log(level : Level, @autoclosure _ message: () -> String, _ error : NSError? = nil) {
- if let error = error {
- NSLog("%@%@ %@ with error %@", Tag, level.rawValue, message(), error);
- } else {
- NSLog("%@%@ %@", Tag, level.rawValue, message())
- }
- }
-
- static func debug(@autoclosure message: () -> String, _ error : NSError? = nil) {
- #if DEBUG
- log(.Debug, message, error)
- #endif
- }
-
- static func error(@autoclosure message: () -> String, _ error : NSError? = nil) {
- log(.Error, message, error)
- }
-
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/NSFileManager+Haneke.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/NSFileManager+Haneke.swift
deleted file mode 100644
index b3ab5a4..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/NSFileManager+Haneke.swift
+++ /dev/null
@@ -1,63 +0,0 @@
-//
-// NSFileManager+Haneke.swift
-// Haneke
-//
-// Created by Hermes Pique on 8/26/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import Foundation
-
-extension NSFileManager {
-
- func enumerateContentsOfDirectoryAtPath(path : String, orderedByProperty property : String, ascending : Bool, usingBlock block : (NSURL, Int, inout Bool) -> Void ) {
-
- let directoryURL = NSURL(fileURLWithPath: path)
- if directoryURL == nil { return }
- var error : NSError?
- if let contents = self.contentsOfDirectoryAtURL(directoryURL!, includingPropertiesForKeys: [property], options: NSDirectoryEnumerationOptions.allZeros, error: &error) as? [NSURL] {
-
- let sortedContents = contents.sorted({(URL1 : NSURL, URL2 : NSURL) -> Bool in
-
- // Maybe there's a better way to do this. See: http://stackoverflow.com/questions/25502914/comparing-anyobject-in-swift
-
- var value1 : AnyObject?
- if !URL1.getResourceValue(&value1, forKey: property, error: nil) { return true }
- var value2 : AnyObject?
- if !URL2.getResourceValue(&value2, forKey: property, error: nil) { return false }
-
-
- if let string1 = value1 as? String, let string2 = value2 as? String {
- return ascending ? string1 < string2 : string2 < string1
- }
-
- if let date1 = value1 as? NSDate, let date2 = value2 as? NSDate {
- return ascending ? date1 < date2 : date2 < date1
- }
-
- if let number1 = value1 as? NSNumber, let number2 = value2 as? NSNumber {
- return ascending ? number1 < number2 : number2 < number1
- }
-
- return false
- })
-
- for (i, v) in enumerate(sortedContents) {
- var stop : Bool = false
- block(v, i, &stop)
- if stop { break }
- }
- } else {
- Log.error("Failed to list directory", error)
- }
- }
-
-}
-
-func < (lhs: NSDate, rhs: NSDate) -> Bool {
- return lhs.compare(rhs) == NSComparisonResult.OrderedAscending
-}
-
-func < (lhs: NSNumber, rhs: NSNumber) -> Bool {
- return lhs.compare(rhs) == NSComparisonResult.OrderedAscending
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/NSHTTPURLResponse+Haneke.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/NSHTTPURLResponse+Haneke.swift
deleted file mode 100644
index db55c54..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/NSHTTPURLResponse+Haneke.swift
+++ /dev/null
@@ -1,22 +0,0 @@
-//
-// NSHTTPURLResponse+Haneke.swift
-// Haneke
-//
-// Created by Hermes Pique on 9/12/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import Foundation
-
-extension NSHTTPURLResponse {
-
- func hnk_validateLengthOfData(data : NSData) -> Bool {
- let expectedContentLength = self.expectedContentLength
- if (expectedContentLength > -1) {
- let dataLength = data.length
- return Int64(dataLength) >= expectedContentLength
- }
- return true
- }
-
-}
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/NetworkFetcher.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/NetworkFetcher.swift
deleted file mode 100644
index ff9ae59..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/NetworkFetcher.swift
+++ /dev/null
@@ -1,113 +0,0 @@
-//
-// NetworkFetcher.swift
-// Haneke
-//
-// Created by Hermes Pique on 9/12/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-extension HanekeGlobals {
-
- // It'd be better to define this in the NetworkFetcher class but Swift doesn't allow to declare an enum in a generic type
- public struct NetworkFetcher {
-
- public enum ErrorCode : Int {
- case InvalidData = -400
- case MissingData = -401
- case InvalidStatusCode = -402
- }
-
- }
-
-}
-
-public class NetworkFetcher : Fetcher {
-
- let URL : NSURL
-
- public init(URL : NSURL) {
- self.URL = URL
-
- let key = URL.absoluteString!
- super.init(key: key)
- }
-
- public var session : NSURLSession { return NSURLSession.sharedSession() }
-
- var task : NSURLSessionDataTask? = nil
-
- var cancelled = false
-
- // MARK: Fetcher
-
- public override func fetch(failure fail : ((NSError?) -> ()), success succeed : (T.Result) -> ()) {
- self.cancelled = false
- self.task = self.session.dataTaskWithURL(self.URL) {[weak self] (data : NSData!, response : NSURLResponse!, error : NSError!) -> Void in
- if let strongSelf = self {
- strongSelf.onReceiveData(data, response: response, error: error, failure: fail, success: succeed)
- }
- }
- self.task?.resume()
- }
-
- public override func cancelFetch() {
- self.task?.cancel()
- self.cancelled = true
- }
-
- // MARK: Private
-
- private func onReceiveData(data : NSData!, response : NSURLResponse!, error : NSError!, failure fail : ((NSError?) -> ()), success succeed : (T.Result) -> ()) {
-
- if cancelled { return }
-
- let URL = self.URL
-
- if let error = error {
- if (error.domain == NSURLErrorDomain && error.code == NSURLErrorCancelled) { return }
-
- Log.debug("Request \(URL.absoluteString!) failed", error)
- dispatch_async(dispatch_get_main_queue(), { fail(error) })
- return
- }
-
- // Intentionally avoiding `if let` to continue in golden path style.
- let httpResponse : NSHTTPURLResponse! = response as? NSHTTPURLResponse
- if httpResponse == nil {
- Log.debug("Request \(URL.absoluteString!) received unknown response \(response)")
- return
- }
-
- if httpResponse?.statusCode != 200 {
- let description = NSHTTPURLResponse.localizedStringForStatusCode(httpResponse.statusCode)
- self.failWithCode(.InvalidStatusCode, localizedDescription: description, failure: fail)
- return
- }
-
- if !httpResponse.hnk_validateLengthOfData(data) {
- let localizedFormat = NSLocalizedString("Request expected %ld bytes and received %ld bytes", comment: "Error description")
- let description = String(format:localizedFormat, response.expectedContentLength, data.length)
- self.failWithCode(.MissingData, localizedDescription: description, failure: fail)
- return
- }
-
- let value : T.Result? = T.convertFromData(data)
- if value == nil {
- let localizedFormat = NSLocalizedString("Failed to convert value from data at URL %@", comment: "Error description")
- let description = String(format:localizedFormat, URL.absoluteString!)
- self.failWithCode(.InvalidData, localizedDescription: description, failure: fail)
- return
- }
-
- dispatch_async(dispatch_get_main_queue()) { succeed(value!) }
-
- }
-
- private func failWithCode(code : HanekeGlobals.NetworkFetcher.ErrorCode, localizedDescription : String, failure fail : ((NSError?) -> ())) {
- let error = errorWithCode(code.rawValue, description: localizedDescription)
- Log.debug(localizedDescription, error)
- dispatch_async(dispatch_get_main_queue()) { fail(error) }
- }
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/String+Haneke.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/String+Haneke.swift
deleted file mode 100644
index 93a4a4b..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/String+Haneke.swift
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// String+Haneke.swift
-// Haneke
-//
-// Created by Hermes Pique on 8/30/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import Foundation
-
-extension String {
-
- func escapedFilename() -> String {
- let originalString = self as NSString as CFString
- let charactersToLeaveUnescaped = " \\" as NSString as CFString // TODO: Add more characters that are valid in paths but not in URLs
- let legalURLCharactersToBeEscaped = "/:" as NSString as CFString
- let encoding = CFStringBuiltInEncodings.UTF8.rawValue
- let escapedPath = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, originalString, charactersToLeaveUnescaped, legalURLCharactersToBeEscaped, encoding)
- return escapedPath as NSString as String
- }
-
- func MD5String() -> String {
- if let data = self.dataUsingEncoding(NSUTF8StringEncoding) {
- let MD5Calculator = MD5(data)
- let MD5Data = MD5Calculator.calculate()
- let resultBytes = UnsafeMutablePointer(MD5Data.bytes)
- let resultEnumerator = UnsafeBufferPointer(start: resultBytes, count: MD5Data.length)
- let MD5String = NSMutableString()
- for c in resultEnumerator {
- MD5String.appendFormat("%02x", c)
- }
- return MD5String as String
- } else {
- return self
- }
- }
-
- func MD5Filename() -> String {
- let MD5String = self.MD5String()
- let pathExtension = self.pathExtension
- if count(pathExtension) > 0 {
- return MD5String.stringByAppendingPathExtension(pathExtension) ?? MD5String
- } else {
- return MD5String
- }
- }
-
-}
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIButton+Haneke.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIButton+Haneke.swift
deleted file mode 100644
index fdddc01..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIButton+Haneke.swift
+++ /dev/null
@@ -1,232 +0,0 @@
-//
-// UIButton+Haneke.swift
-// Haneke
-//
-// Created by Joan Romano on 10/1/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-public extension UIButton {
-
- public var hnk_imageFormat : Format {
- let bounds = self.bounds
- assert(bounds.size.width > 0 && bounds.size.height > 0, "[\(reflect(self).summary) \(__FUNCTION__)]: UIButton size is zero. Set its frame, call sizeToFit or force layout first. You can also set a custom format with a defined size if you don't want to force layout.")
- let contentRect = self.contentRectForBounds(bounds)
- let imageInsets = self.imageEdgeInsets
- let scaleMode = self.contentHorizontalAlignment != UIControlContentHorizontalAlignment.Fill || self.contentVerticalAlignment != UIControlContentVerticalAlignment.Fill ? ImageResizer.ScaleMode.AspectFit : ImageResizer.ScaleMode.Fill
- let imageSize = CGSizeMake(CGRectGetWidth(contentRect) - imageInsets.left - imageInsets.right, CGRectGetHeight(contentRect) - imageInsets.top - imageInsets.bottom)
-
- return HanekeGlobals.UIKit.formatWithSize(imageSize, scaleMode: scaleMode, allowUpscaling: scaleMode == ImageResizer.ScaleMode.AspectFit ? false : true)
- }
-
- public func hnk_setImageFromURL(URL : NSURL, state : UIControlState = .Normal, placeholder : UIImage? = nil, format : Format? = nil, failure fail : ((NSError?) -> ())? = nil, success succeed : ((UIImage) -> ())? = nil) {
- let fetcher = NetworkFetcher(URL: URL)
- self.hnk_setImageFromFetcher(fetcher, state: state, placeholder: placeholder, format: format, failure: fail, success: succeed)
- }
-
- public func hnk_setImage(image : UIImage, key : String, state : UIControlState = .Normal, placeholder : UIImage? = nil, format : Format? = nil, success succeed : ((UIImage) -> ())? = nil) {
- let fetcher = SimpleFetcher(key: key, value: image)
- self.hnk_setImageFromFetcher(fetcher, state: state, placeholder: placeholder, format: format, success: succeed)
- }
-
- public func hnk_setImageFromFile(path : String, state : UIControlState = .Normal, placeholder : UIImage? = nil, format : Format? = nil, failure fail : ((NSError?) -> ())? = nil, success succeed : ((UIImage) -> ())? = nil) {
- let fetcher = DiskFetcher(path: path)
- self.hnk_setImageFromFetcher(fetcher, state: state, placeholder: placeholder, format: format, failure: fail, success: succeed)
- }
-
- public func hnk_setImageFromFetcher(fetcher : Fetcher, state : UIControlState = .Normal, placeholder : UIImage? = nil, format : Format? = nil, failure fail : ((NSError?) -> ())? = nil, success succeed : ((UIImage) -> ())? = nil){
- self.hnk_cancelSetImage()
- self.hnk_imageFetcher = fetcher
-
- let didSetImage = self.hnk_fetchImageForFetcher(fetcher, state: state, format : format, failure: fail, success: succeed)
-
- if didSetImage { return }
-
- if let placeholder = placeholder {
- self.setImage(placeholder, forState: state)
- }
- }
-
- public func hnk_cancelSetImage() {
- if let fetcher = self.hnk_imageFetcher {
- fetcher.cancelFetch()
- self.hnk_imageFetcher = nil
- }
- }
-
- // MARK: Internal Image
-
- // See: http://stackoverflow.com/questions/25907421/associating-swift-things-with-nsobject-instances
- var hnk_imageFetcher : Fetcher! {
- get {
- let wrapper = objc_getAssociatedObject(self, &HanekeGlobals.UIKit.SetImageFetcherKey) as? ObjectWrapper
- let fetcher = wrapper?.value as? Fetcher
- return fetcher
- }
- set (fetcher) {
- var wrapper : ObjectWrapper?
- if let fetcher = fetcher {
- wrapper = ObjectWrapper(value: fetcher)
- }
- objc_setAssociatedObject(self, &HanekeGlobals.UIKit.SetImageFetcherKey, wrapper, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
- }
- }
-
- func hnk_fetchImageForFetcher(fetcher : Fetcher, state : UIControlState = .Normal, format : Format? = nil, failure fail : ((NSError?) -> ())?, success succeed : ((UIImage) -> ())?) -> Bool {
- let format = format ?? self.hnk_imageFormat
- let cache = Shared.imageCache
- if cache.formats[format.name] == nil {
- cache.addFormat(format)
- }
- var animated = false
- let fetch = cache.fetch(fetcher: fetcher, formatName: format.name, failure: {[weak self] error in
- if let strongSelf = self {
- if strongSelf.hnk_shouldCancelImageForKey(fetcher.key) { return }
-
- strongSelf.hnk_imageFetcher = nil
-
- fail?(error)
- }
- }) { [weak self] image in
- if let strongSelf = self {
- if strongSelf.hnk_shouldCancelImageForKey(fetcher.key) { return }
-
- strongSelf.hnk_setImage(image, state: state, animated: false, success: succeed)
- }
- }
- animated = true
- return fetch.hasSucceeded
- }
-
-
- func hnk_setImage(image : UIImage, state : UIControlState, animated : Bool, success succeed : ((UIImage) -> ())?) {
- self.hnk_imageFetcher = nil
-
- if let succeed = succeed {
- succeed(image)
- } else {
- let duration : NSTimeInterval = animated ? 0.1 : 0
- UIView.transitionWithView(self, duration: duration, options: .TransitionCrossDissolve, animations: {
- self.setImage(image, forState: state)
- }, completion: nil)
- }
- }
-
- func hnk_shouldCancelImageForKey(key:String) -> Bool {
- if self.hnk_imageFetcher?.key == key { return false }
-
- Log.debug("Cancelled set image for \(key.lastPathComponent)")
- return true
- }
-
- // MARK: Background image
-
- public var hnk_backgroundImageFormat : Format {
- let bounds = self.bounds
- assert(bounds.size.width > 0 && bounds.size.height > 0, "[\(reflect(self).summary) \(__FUNCTION__)]: UIButton size is zero. Set its frame, call sizeToFit or force layout first. You can also set a custom format with a defined size if you don't want to force layout.")
- let imageSize = self.backgroundRectForBounds(bounds).size
-
- return HanekeGlobals.UIKit.formatWithSize(imageSize, scaleMode: .Fill)
- }
-
- public func hnk_setBackgroundImageFromURL(URL : NSURL, state : UIControlState = .Normal, placeholder : UIImage? = nil, format : Format? = nil, failure fail : ((NSError?) -> ())? = nil, success succeed : ((UIImage) -> ())? = nil) {
- let fetcher = NetworkFetcher(URL: URL)
- self.hnk_setBackgroundImageFromFetcher(fetcher, state: state, placeholder: placeholder, format: format, failure: fail, success: succeed)
- }
-
- public func hnk_setBackgroundImage(image : UIImage, key : String, state : UIControlState = .Normal, placeholder : UIImage? = nil, format : Format? = nil, success succeed : ((UIImage) -> ())? = nil) {
- let fetcher = SimpleFetcher(key: key, value: image)
- self.hnk_setBackgroundImageFromFetcher(fetcher, state: state, placeholder: placeholder, format: format, success: succeed)
- }
-
- public func hnk_setBackgroundImageFromFile(path : String, state : UIControlState = .Normal, placeholder : UIImage? = nil, format : Format? = nil, failure fail : ((NSError?) -> ())? = nil, success succeed : ((UIImage) -> ())? = nil) {
- let fetcher = DiskFetcher(path: path)
- self.hnk_setBackgroundImageFromFetcher(fetcher, state: state, placeholder: placeholder, format: format, failure: fail, success: succeed)
- }
-
- public func hnk_setBackgroundImageFromFetcher(fetcher : Fetcher, state : UIControlState = .Normal, placeholder : UIImage? = nil, format : Format? = nil, failure fail : ((NSError?) -> ())? = nil, success succeed : ((UIImage) -> ())? = nil){
- self.hnk_cancelSetBackgroundImage()
- self.hnk_backgroundImageFetcher = fetcher
-
- let didSetImage = self.hnk_fetchBackgroundImageForFetcher(fetcher, state: state, format : format, failure: fail, success: succeed)
-
- if didSetImage { return }
-
- if let placeHolder = placeholder {
- self.setBackgroundImage(placeholder, forState: state)
- }
- }
-
- public func hnk_cancelSetBackgroundImage() {
- if let fetcher = self.hnk_backgroundImageFetcher {
- fetcher.cancelFetch()
- self.hnk_backgroundImageFetcher = nil
- }
- }
-
- // MARK: Internal Background image
-
- // See: http://stackoverflow.com/questions/25907421/associating-swift-things-with-nsobject-instances
- var hnk_backgroundImageFetcher : Fetcher! {
- get {
- let wrapper = objc_getAssociatedObject(self, &HanekeGlobals.UIKit.SetBackgroundImageFetcherKey) as? ObjectWrapper
- let fetcher = wrapper?.value as? Fetcher
- return fetcher
- }
- set (fetcher) {
- var wrapper : ObjectWrapper?
- if let fetcher = fetcher {
- wrapper = ObjectWrapper(value: fetcher)
- }
- objc_setAssociatedObject(self, &HanekeGlobals.UIKit.SetBackgroundImageFetcherKey, wrapper, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
- }
- }
-
- func hnk_fetchBackgroundImageForFetcher(fetcher : Fetcher, state : UIControlState = .Normal, format : Format? = nil, failure fail : ((NSError?) -> ())?, success succeed : ((UIImage) -> ())?) -> Bool {
- let format = format ?? self.hnk_backgroundImageFormat
- let cache = Shared.imageCache
- if cache.formats[format.name] == nil {
- cache.addFormat(format)
- }
- var animated = false
- let fetch = cache.fetch(fetcher: fetcher, formatName: format.name, failure: {[weak self] error in
- if let strongSelf = self {
- if strongSelf.hnk_shouldCancelBackgroundImageForKey(fetcher.key) { return }
-
- strongSelf.hnk_backgroundImageFetcher = nil
-
- fail?(error)
- }
- }) { [weak self] image in
- if let strongSelf = self {
- if strongSelf.hnk_shouldCancelBackgroundImageForKey(fetcher.key) { return }
-
- strongSelf.hnk_setBackgroundImage(image, state: state, animated: false, success: succeed)
- }
- }
- animated = true
- return fetch.hasSucceeded
- }
-
- func hnk_setBackgroundImage(image : UIImage, state : UIControlState, animated : Bool, success succeed : ((UIImage) -> ())?) {
- self.hnk_backgroundImageFetcher = nil
-
- if let succeed = succeed {
- succeed(image)
- } else {
- let duration : NSTimeInterval = animated ? 0.1 : 0
- UIView.transitionWithView(self, duration: duration, options: .TransitionCrossDissolve, animations: {
- self.setBackgroundImage(image, forState: state)
- }, completion: nil)
- }
- }
-
- func hnk_shouldCancelBackgroundImageForKey(key:String) -> Bool {
- if self.hnk_backgroundImageFetcher?.key == key { return false }
-
- Log.debug("Cancelled set background image for \(key.lastPathComponent)")
- return true
- }
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIImage+Haneke.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIImage+Haneke.swift
deleted file mode 100644
index 0b62806..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIImage+Haneke.swift
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// UIImage+Haneke.swift
-// Haneke
-//
-// Created by Hermes Pique on 8/10/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-extension UIImage {
-
- func hnk_imageByScalingToSize(toSize: CGSize) -> UIImage {
- UIGraphicsBeginImageContextWithOptions(toSize, !hnk_hasAlpha(), 0.0)
- drawInRect(CGRectMake(0, 0, toSize.width, toSize.height))
- let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
- UIGraphicsEndImageContext()
- return resizedImage
- }
-
- func hnk_hasAlpha() -> Bool {
- let alpha = CGImageGetAlphaInfo(self.CGImage)
- switch alpha {
- case .First, .Last, .PremultipliedFirst, .PremultipliedLast, .Only:
- return true
- case .None, .NoneSkipFirst, .NoneSkipLast:
- return false
- }
- }
-
- func hnk_data(compressionQuality: Float = 1.0) -> NSData! {
- let hasAlpha = self.hnk_hasAlpha()
- let data = hasAlpha ? UIImagePNGRepresentation(self) : UIImageJPEGRepresentation(self, CGFloat(compressionQuality))
- return data
- }
-
- func hnk_decompressedImage() -> UIImage! {
- let originalImageRef = self.CGImage
- let originalBitmapInfo = CGImageGetBitmapInfo(originalImageRef)
- let alphaInfo = CGImageGetAlphaInfo(originalImageRef)
-
- // See: http://stackoverflow.com/questions/23723564/which-cgimagealphainfo-should-we-use
- var bitmapInfo = originalBitmapInfo
- switch (alphaInfo) {
- case .None:
- bitmapInfo &= ~CGBitmapInfo.AlphaInfoMask
- bitmapInfo |= CGBitmapInfo(CGImageAlphaInfo.NoneSkipFirst.rawValue)
- case .PremultipliedFirst, .PremultipliedLast, .NoneSkipFirst, .NoneSkipLast:
- break
- case .Only, .Last, .First: // Unsupported
- return self
- }
-
- let colorSpace = CGColorSpaceCreateDeviceRGB()
- let pixelSize = CGSizeMake(self.size.width * self.scale, self.size.height * self.scale)
- if let context = CGBitmapContextCreate(nil, Int(ceil(pixelSize.width)), Int(ceil(pixelSize.height)), CGImageGetBitsPerComponent(originalImageRef), 0, colorSpace, bitmapInfo) {
-
- let imageRect = CGRectMake(0, 0, pixelSize.width, pixelSize.height)
- UIGraphicsPushContext(context)
-
- // Flip coordinate system. See: http://stackoverflow.com/questions/506622/cgcontextdrawimage-draws-image-upside-down-when-passed-uiimage-cgimage
- CGContextTranslateCTM(context, 0, pixelSize.height)
- CGContextScaleCTM(context, 1.0, -1.0)
-
- // UIImage and drawInRect takes into account image orientation, unlike CGContextDrawImage.
- self.drawInRect(imageRect)
- UIGraphicsPopContext()
- let decompressedImageRef = CGBitmapContextCreateImage(context)
-
- let scale = UIScreen.mainScreen().scale
- let image = UIImage(CGImage: decompressedImageRef, scale:scale, orientation:UIImageOrientation.Up)
-
- return image
-
- } else {
- return self
- }
- }
-
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIImageView+Haneke.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIImageView+Haneke.swift
deleted file mode 100644
index ede29ac..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIImageView+Haneke.swift
+++ /dev/null
@@ -1,138 +0,0 @@
-//
-// UIImageView+Haneke.swift
-// Haneke
-//
-// Created by Hermes Pique on 9/17/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-public extension UIImageView {
-
- public var hnk_format : Format {
- let viewSize = self.bounds.size
- assert(viewSize.width > 0 && viewSize.height > 0, "[\(reflect(self).summary) \(__FUNCTION__)]: UImageView size is zero. Set its frame, call sizeToFit or force layout first.")
- let scaleMode = self.hnk_scaleMode
- return HanekeGlobals.UIKit.formatWithSize(viewSize, scaleMode: scaleMode)
- }
-
- public func hnk_setImageFromURL(URL: NSURL, placeholder : UIImage? = nil, format : Format? = nil, failure fail : ((NSError?) -> ())? = nil, success succeed : ((UIImage) -> ())? = nil) {
- let fetcher = NetworkFetcher(URL: URL)
- self.hnk_setImageFromFetcher(fetcher, placeholder: placeholder, format: format, failure: fail, success: succeed)
- }
-
- public func hnk_setImage(@autoclosure(escaping) image: () -> UIImage, key : String, placeholder : UIImage? = nil, format : Format? = nil, success succeed : ((UIImage) -> ())? = nil) {
- let fetcher = SimpleFetcher(key: key, value: image)
- self.hnk_setImageFromFetcher(fetcher, placeholder: placeholder, format: format, success: succeed)
- }
-
- public func hnk_setImageFromFile(path : String, placeholder : UIImage? = nil, format : Format? = nil, failure fail : ((NSError?) -> ())? = nil, success succeed : ((UIImage) -> ())? = nil) {
- let fetcher = DiskFetcher(path: path)
- self.hnk_setImageFromFetcher(fetcher, placeholder: placeholder, format: format, failure: fail, success: succeed)
- }
-
- public func hnk_setImageFromFetcher(fetcher : Fetcher,
- placeholder : UIImage? = nil,
- format : Format? = nil,
- failure fail : ((NSError?) -> ())? = nil,
- success succeed : ((UIImage) -> ())? = nil) {
-
- self.hnk_cancelSetImage()
-
- self.hnk_fetcher = fetcher
-
- let didSetImage = self.hnk_fetchImageForFetcher(fetcher, format: format, failure: fail, success: succeed)
-
- if didSetImage { return }
-
- if let placeholder = placeholder {
- self.image = placeholder
- }
- }
-
- public func hnk_cancelSetImage() {
- if let fetcher = self.hnk_fetcher {
- fetcher.cancelFetch()
- self.hnk_fetcher = nil
- }
- }
-
- // MARK: Internal
-
- // See: http://stackoverflow.com/questions/25907421/associating-swift-things-with-nsobject-instances
- var hnk_fetcher : Fetcher! {
- get {
- let wrapper = objc_getAssociatedObject(self, &HanekeGlobals.UIKit.SetImageFetcherKey) as? ObjectWrapper
- let fetcher = wrapper?.value as? Fetcher
- return fetcher
- }
- set (fetcher) {
- var wrapper : ObjectWrapper?
- if let fetcher = fetcher {
- wrapper = ObjectWrapper(value: fetcher)
- }
- objc_setAssociatedObject(self, &HanekeGlobals.UIKit.SetImageFetcherKey, wrapper, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
- }
- }
-
- public var hnk_scaleMode : ImageResizer.ScaleMode {
- switch (self.contentMode) {
- case .ScaleToFill:
- return .Fill
- case .ScaleAspectFit:
- return .AspectFit
- case .ScaleAspectFill:
- return .AspectFill
- case .Redraw, .Center, .Top, .Bottom, .Left, .Right, .TopLeft, .TopRight, .BottomLeft, .BottomRight:
- return .None
- }
- }
-
- func hnk_fetchImageForFetcher(fetcher : Fetcher, format : Format? = nil, failure fail : ((NSError?) -> ())?, success succeed : ((UIImage) -> ())?) -> Bool {
- let cache = Shared.imageCache
- let format = format ?? self.hnk_format
- if cache.formats[format.name] == nil {
- cache.addFormat(format)
- }
- var animated = false
- let fetch = cache.fetch(fetcher: fetcher, formatName: format.name, failure: {[weak self] error in
- if let strongSelf = self {
- if strongSelf.hnk_shouldCancelForKey(fetcher.key) { return }
-
- strongSelf.hnk_fetcher = nil
-
- fail?(error)
- }
- }) { [weak self] image in
- if let strongSelf = self {
- if strongSelf.hnk_shouldCancelForKey(fetcher.key) { return }
-
- strongSelf.hnk_setImage(image, animated:animated, success:succeed)
- }
- }
- animated = true
- return fetch.hasSucceeded
- }
-
- func hnk_setImage(image : UIImage, animated : Bool, success succeed : ((UIImage) -> ())?) {
- self.hnk_fetcher = nil
-
- if let succeed = succeed {
- succeed(image)
- } else {
- let duration : NSTimeInterval = animated ? 0.1 : 0
- UIView.transitionWithView(self, duration: duration, options: .TransitionCrossDissolve, animations: {
- self.image = image
- }, completion: nil)
- }
- }
-
- func hnk_shouldCancelForKey(key:String) -> Bool {
- if self.hnk_fetcher?.key == key { return false }
-
- Log.debug("Cancelled set image for \(key.lastPathComponent)")
- return true
- }
-
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIView+Haneke.swift b/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIView+Haneke.swift
deleted file mode 100644
index 9923978..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/Haneke/UIView+Haneke.swift
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// UIView+Haneke.swift
-// Haneke
-//
-// Created by Joan Romano on 15/10/14.
-// Copyright (c) 2014 Haneke. All rights reserved.
-//
-
-import UIKit
-
-public extension HanekeGlobals {
-
- public struct UIKit {
-
- static func formatWithSize(size : CGSize, scaleMode : ImageResizer.ScaleMode, allowUpscaling: Bool = true) -> Format {
- let name = "auto-\(size.width)x\(size.height)-\(scaleMode.rawValue)"
- let cache = Shared.imageCache
- if let (format,_,_) = cache.formats[name] {
- return format
- }
-
- var format = Format(name: name,
- diskCapacity: HanekeGlobals.UIKit.DefaultFormat.DiskCapacity) {
- let resizer = ImageResizer(size:size,
- scaleMode: scaleMode,
- allowUpscaling: allowUpscaling,
- compressionQuality: HanekeGlobals.UIKit.DefaultFormat.CompressionQuality)
- return resizer.resizeImage($0)
- }
- format.convertToData = {(image : UIImage) -> NSData in
- image.hnk_data(compressionQuality: HanekeGlobals.UIKit.DefaultFormat.CompressionQuality)
- }
- return format
- }
-
- public struct DefaultFormat {
-
- public static let DiskCapacity : UInt64 = 10 * 1024 * 1024
- public static let CompressionQuality : Float = 0.75
-
- }
-
- static var SetImageFetcherKey = 0
- static var SetBackgroundImageFetcherKey = 1
- }
-
-}
diff --git a/WeatherAroundUs/Pods/HanekeSwift/LICENSE b/WeatherAroundUs/Pods/HanekeSwift/LICENSE
deleted file mode 100644
index ad410e1..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/HanekeSwift/README.md b/WeatherAroundUs/Pods/HanekeSwift/README.md
deleted file mode 100644
index 579c8ee..0000000
--- a/WeatherAroundUs/Pods/HanekeSwift/README.md
+++ /dev/null
@@ -1,247 +0,0 @@
-
-
-[](https://github.com/Carthage/Carthage)
-
-Haneke is a lightweight *generic* cache for iOS written in Swift 1.2. It's designed to be super-simple to use. Here's how you would initalize a JSON cache and fetch objects from a url:
-
-```swift
-let cache = Cache(name: "github")
-let URL = NSURL(string: "https://api.github.com/users/haneke")!
-
-cache.fetch(URL: URL).onSuccess { JSON in
- println(JSON.dictionary?["bio"])
-}
-```
-
-Haneke provides a memory and LRU disk cache for `UIImage`, `NSData`, `JSON`, `String` or any other type that can be read or written as data.
-
-Particularly, Haneke excels at working with images. It includes a zero-config image cache with automatic resizing. Everything is done in background, allowing for fast, responsive scrolling. Asking Haneke to load, resize, cache and display an *appropriately sized image* is as simple as:
-
-```swift
-imageView.hnk_setImageFromURL(url)
-```
-
-_Really._
-
-## Features
-
-* Generic cache with out-of-the-box support for `UIImage`, `NSData`, `JSON` and `String`
-* First-level memory cache using `NSCache`
-* Second-level LRU disk cache using the file system
-* Asynchronous [fetching](#fetchers) of original values from network or disk
-* All disk access is performed in background
-* Thread-safe
-* Automatic cache eviction on memory warnings or disk capacity reached
-* Comprehensive unit tests
-* Extensible by defining [custom formats](#formats), supporting [additional types](#supporting-additional-types) or implementing [custom fetchers](#custom-fetchers)
-
-For images:
-
-* Zero-config `UIImageView` and `UIButton` extensions to use the cache, optimized for `UITableView` and `UICollectionView` cell reuse
-* Background image resizing and decompression
-
-## Installation
-
-Using [CocoaPods](http://cocoapods.org/):
-
-```ruby
-use_frameworks!
-pod 'Haneke', :git => 'https://github.com/Haneke/HanekeSwift.git'
-```
-
-Using [Carthage](https://github.com/Carthage/Carthage):
-
-```
-github "Haneke/HanekeSwift"
-```
-
-Manually:
-
-1. Drag `Haneke.xcodeproj` to your project in the _Project Navigator_.
-2. Select your project and then your app target. Open the _Build Phases_ panel.
-3. Expand the _Target Dependencies_ group, and add `Haneke.framework`.
-4. Click on the `+` button at the top left of the panel and select _New Copy Files Phase_. Set _Destination_ to _Frameworks_, and add `Haneke.framework`.
-5. `import Haneke` whenever you want to use Haneke.
-
-## Requirements
-
-- iOS 8.0+
-- Xcode 6.3
-
-
-## Using the cache
-
-Haneke provides shared caches for `UIImage`, `NSData`, `JSON` and `String`. You can also create your own caches.
-
-The cache is a key-value store. For example, here's how you would cache and then fetch some data.
-
-```Swift
-let cache = Shared.dataCache
-
-cache.set(value: data, key: "funny-games.mp4")
-
-// Eventually...
-
-cache.fetch(key: "funny-games.mp4").onSuccess { data in
- // Do something with data
-}
-```
-
-In most cases the value will not be readily available and will have to be fetched from network or disk. Haneke offers convenience `fetch` functions for these cases. Let's go back to the first example, now using a shared cache:
-
-```Swift
-let cache = Shared.JSONCache
-let cache = Haneke.sharedJSONCache
-let URL = NSURL(string: "https://api.github.com/users/haneke")!
-
-cache.fetch(URL: URL).onSuccess { JSON in
- println(JSON.dictionary?["bio"])
-}
-```
-
-The above call will first attempt to fetch the required JSON from (in order) memory, disk or `NSURLCache`. If not available, Haneke will fetch the JSON from the source, return it and then cache it. In this case, the URL itself is used as the key.
-
-Further customization can be achieved by using [formats](#formats), [supporting additional types](#supporting-additional-types) or implementing [custom fetchers](#custom-fetchers).
-
-## Extra ♡ for images
-
-Need to cache and display images? Haneke provides convenience methods for `UIImageView` and `UIButton` with optimizations for `UITableView` and `UICollectionView` cell reuse. Images will be resized appropriately and cached in a shared cache.
-
-```swift
-// Setting a remote image
-imageView.hnk_setImageFromURL(url)
-
-// Setting an image manually. Requires you to provide a key.
-imageView.hnk_setImage(image, key: key)
-```
-
-The above lines take care of:
-
-1. If cached, retrieving an appropriately sized image (based on the `bounds` and `contentMode` of the `UIImageView`) from the memory or disk cache. Disk access is performed in background.
-2. If not cached, loading the original image from web/memory and producing an appropriately sized image, both in background. Remote images will be retrieved from the shared `NSURLCache` if available.
-3. Setting the image and animating the change if appropriate.
-4. Or doing nothing if the `UIImageView` was reused during any of the above steps.
-5. Caching the resulting image.
-6. If needed, evicting the least recently used images in the cache.
-
-## Formats
-
-Formats allow to specify the disk cache size and any transformations to the values before being cached. For example, the `UIImageView` extension uses a format that resizes images to fit or fill the image view as needed.
-
-You can also use custom formats. Say you want to limit the disk capacity for icons to 10MB and apply rounded corners to the images. This is how it could look like:
-
-```swift
-let cache = Shared.imageCache
-
-let iconFormat = Format(name: "icons", diskCapacity: 10 * 1024 * 1024) { image in
- return imageByRoundingCornersOfImage(image)
-}
-cache.addFormat(iconFormat)
-
-let URL = NSURL(string: "http://haneke.io/icon.png")!
-cache.fetch(URL: URL, formatName: "icons").onSuccess { image in
- // image will be a nice rounded icon
-}
-```
-
-Because we told the cache to use the `"icons"` format Haneke will execute the format transformation in background and return the resulting value.
-
-Formats can also be used from the `UIKit` extensions:
-
-```swift
-imageView.hnk_setImageFromURL(url, format: iconFormat)
-```
-
-## Fetchers
-
-The `fetch` functions for urls and paths are actually convenience methods. Under the hood Haneke uses fetcher objects. To illustrate, here's another way of fetching from a url by explictly using a network fetcher:
-
-```swift
-let URL = NSURL(string: "http://haneke.io/icon.png")!
-let fetcher = NetworkFetcher(URL: URL)
-cache.fetch(fetcher: fetcher).onSuccess { image in
- // Do something with image
-}
-```
-
-Fetching an original value from network or disk is an expensive operation. Fetchers act as a proxy for the value, and allow Haneke to perform the fetch operation only if absolutely necessary.
-
-In the above example the fetcher will be executed only if there is no value associated with `"http://haneke.io/icon.png"` in the memory or disk cache. If that happens, the fetcher will be responsible from fetching the original value, which will then be cached to avoid further network activity.
-
-Haneke provides two specialized fetchers: `NetworkFetcher` and `DiskFetcher`. You can also implement your own fetchers by subclassing `Fetcher`.
-
-### Custom fetchers
-
-Through custom fetchers you can fetch original values from other sources than network or disk (e.g., Core Data), or even change how Haneke acceses network or disk (e.g., use [Alamofire](https://github.com/Alamofire/Alamofire) for networking instead of `NSURLSession`). A custom fetcher must subclass `Fetcher` and is responsible for:
-
-* Providing the key (e.g., `NSURL.absoluteString` in the case of `NetworkFetcher`) associated with the value to be fetched
-* Fetching the value in background and calling the success or failure closure accordingly, both in the main queue
-* Cancelling the fetch on demand, if possible
-
-Fetchers are generic, and the only restriction on their type is that it must implement `DataConvertible`.
-
-## Supporting additional types
-
-Haneke can cache any type that can be read and saved as data. This is indicated to Haneke by implementing the protocols `DataConvertible` and `DataRepresentable`.
-
-```Swift
-public protocol DataConvertible {
- typealias Result
-
- class func convertFromData(data:NSData) -> Result?
-
-}
-
-public protocol DataRepresentable {
-
- func asData() -> NSData!
-
-}
-```
-
-This is how one could add support for `NSDictionary`:
-
-```Swift
-extension NSDictionary : DataConvertible, DataRepresentable {
-
- public typealias Result = NSDictionary
-
- public class func convertFromData(data:NSData) -> Result? {
- return NSKeyedUnarchiver.unarchiveObjectWithData(data) as? NSDictionary
- }
-
- public func asData() -> NSData! {
- return NSKeyedArchiver.archivedDataWithRootObject(self)
- }
-
-}
-```
-
-Then creating a `NSDictionary` cache would be as simple as:
-
-```swift
-let cache = Cache(name: "dictionaries")
-```
-
-## Roadmap
-
-Haneke Swift is in initial development and its public API should not be considered stable.
-
-## License
-
- Copyright 2014 Hermes Pique ([@hpique](https://twitter.com/hpique))
- 2014 Joan Romano ([@joanromano](https://twitter.com/joanromano))
- 2014 Luis Ascorbe ([@lascorbe](https://twitter.com/Lascorbe))
- 2014 Oriol Blanc ([@oriolblanc](https://twitter.com/oriolblanc))
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/WeatherAroundUs/Pods/Headers/Private/MKMapViewZoom/MKMapView+ZoomLevel.h b/WeatherAroundUs/Pods/Headers/Private/MKMapViewZoom/MKMapView+ZoomLevel.h
deleted file mode 120000
index 420724d..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/MKMapViewZoom/MKMapView+ZoomLevel.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../MKMapViewZoom/MKMapView+ZoomLevel.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Private/Shimmer/FBShimmering.h b/WeatherAroundUs/Pods/Headers/Private/Shimmer/FBShimmering.h
deleted file mode 120000
index 6127444..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/Shimmer/FBShimmering.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../Shimmer/FBShimmering/FBShimmering.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Private/Shimmer/FBShimmeringLayer.h b/WeatherAroundUs/Pods/Headers/Private/Shimmer/FBShimmeringLayer.h
deleted file mode 120000
index 039fed3..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/Shimmer/FBShimmeringLayer.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../Shimmer/FBShimmering/FBShimmeringLayer.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Private/Shimmer/FBShimmeringView.h b/WeatherAroundUs/Pods/Headers/Private/Shimmer/FBShimmeringView.h
deleted file mode 120000
index 9885aa3..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/Shimmer/FBShimmeringView.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../Shimmer/FBShimmering/FBShimmeringView.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/ZipArchive.h b/WeatherAroundUs/Pods/Headers/Private/ZipArchive/ZipArchive.h
deleted file mode 120000
index 1f670ea..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/ZipArchive.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../ZipArchive/ZipArchive.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/crypt.h b/WeatherAroundUs/Pods/Headers/Private/ZipArchive/crypt.h
deleted file mode 120000
index 421e430..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/crypt.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../ZipArchive/minizip/crypt.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/ioapi.h b/WeatherAroundUs/Pods/Headers/Private/ZipArchive/ioapi.h
deleted file mode 120000
index 8ca6aa2..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/ioapi.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../ZipArchive/minizip/ioapi.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/mztools.h b/WeatherAroundUs/Pods/Headers/Private/ZipArchive/mztools.h
deleted file mode 120000
index 2c3ff9d..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/mztools.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../ZipArchive/minizip/mztools.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/unzip.h b/WeatherAroundUs/Pods/Headers/Private/ZipArchive/unzip.h
deleted file mode 120000
index 0af7f35..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/unzip.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../ZipArchive/minizip/unzip.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/zip.h b/WeatherAroundUs/Pods/Headers/Private/ZipArchive/zip.h
deleted file mode 120000
index 6b6cb2c..0000000
--- a/WeatherAroundUs/Pods/Headers/Private/ZipArchive/zip.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../ZipArchive/minizip/zip.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Public/AMapSearch/AMapSearchKit/AMapCommonObj.h b/WeatherAroundUs/Pods/Headers/Public/AMapSearch/AMapSearchKit/AMapCommonObj.h
deleted file mode 120000
index 9e15d08..0000000
--- a/WeatherAroundUs/Pods/Headers/Public/AMapSearch/AMapSearchKit/AMapCommonObj.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapCommonObj.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Public/AMapSearch/AMapSearchKit/AMapSearchAPI.h b/WeatherAroundUs/Pods/Headers/Public/AMapSearch/AMapSearchKit/AMapSearchAPI.h
deleted file mode 120000
index 913cc33..0000000
--- a/WeatherAroundUs/Pods/Headers/Public/AMapSearch/AMapSearchKit/AMapSearchAPI.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapSearchAPI.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/Headers/Public/AMapSearch/AMapSearchKit/AMapSearchObj.h b/WeatherAroundUs/Pods/Headers/Public/AMapSearch/AMapSearchKit/AMapSearchObj.h
deleted file mode 120000
index 021a569..0000000
--- a/WeatherAroundUs/Pods/Headers/Public/AMapSearch/AMapSearchKit/AMapSearchObj.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../AMapSearch/AMapSearchKit.framework/Versions/2.6.0.29103c6/Headers/AMapSearchObj.h
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/MKMapViewZoom/License.txt b/WeatherAroundUs/Pods/MKMapViewZoom/License.txt
deleted file mode 100644
index d51021f..0000000
--- a/WeatherAroundUs/Pods/MKMapViewZoom/License.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-License
-
-Copyright (c) 2010 Troy Brant
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this
-software and associated documentation files (the "Software"), to deal in the Software
-without restriction, including without limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies
-or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/MKMapViewZoom/MKMapView+ZoomLevel.h b/WeatherAroundUs/Pods/MKMapViewZoom/MKMapView+ZoomLevel.h
deleted file mode 100644
index c87fe64..0000000
--- a/WeatherAroundUs/Pods/MKMapViewZoom/MKMapView+ZoomLevel.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// MKMapView+ZoomLevel.h
-#import
-
-@interface MKMapView (ZoomLevel)
-
-- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
- zoomLevel:(NSUInteger)zoomLevel
- animated:(BOOL)animated;
-
--(MKCoordinateRegion)coordinateRegionWithMapView:(MKMapView *)mapView
- centerCoordinate:(CLLocationCoordinate2D)centerCoordinate
- andZoomLevel:(NSUInteger)zoomLevel;
-- (NSUInteger) zoomLevel;
-
-@end
diff --git a/WeatherAroundUs/Pods/MKMapViewZoom/MKMapView+ZoomLevel.m b/WeatherAroundUs/Pods/MKMapViewZoom/MKMapView+ZoomLevel.m
deleted file mode 100644
index f6ba926..0000000
--- a/WeatherAroundUs/Pods/MKMapViewZoom/MKMapView+ZoomLevel.m
+++ /dev/null
@@ -1,168 +0,0 @@
-#import "MKMapView+ZoomLevel.h"
-
-#define MERCATOR_OFFSET 268435456
-#define MERCATOR_RADIUS 85445659.44705395
-
-@implementation MKMapView (ZoomLevel)
-
-#pragma mark -
-#pragma mark Map conversion methods
-
-+ (double)longitudeToPixelSpaceX:(double)longitude
-{
- return round(MERCATOR_OFFSET + MERCATOR_RADIUS * longitude * M_PI / 180.0);
-}
-
-+ (double)latitudeToPixelSpaceY:(double)latitude
-{
- if (latitude == 90.0) {
- return 0;
- } else if (latitude == -90.0) {
- return MERCATOR_OFFSET * 2;
- } else {
- return round(MERCATOR_OFFSET - MERCATOR_RADIUS * logf((1 + sinf(latitude * M_PI / 180.0)) / (1 - sinf(latitude * M_PI / 180.0))) / 2.0);
- }
-}
-
-+ (double)pixelSpaceXToLongitude:(double)pixelX
-{
- return ((round(pixelX) - MERCATOR_OFFSET) / MERCATOR_RADIUS) * 180.0 / M_PI;
-}
-
-+ (double)pixelSpaceYToLatitude:(double)pixelY
-{
- return (M_PI / 2.0 - 2.0 * atan(exp((round(pixelY) - MERCATOR_OFFSET) / MERCATOR_RADIUS))) * 180.0 / M_PI;
-}
-
-#pragma mark -
-#pragma mark Helper methods
-
-- (MKCoordinateSpan)coordinateSpanWithMapView:(MKMapView *)mapView
- centerCoordinate:(CLLocationCoordinate2D)centerCoordinate
- andZoomLevel:(NSUInteger)zoomLevel
-{
- // convert center coordiate to pixel space
- double centerPixelX = [MKMapView longitudeToPixelSpaceX:centerCoordinate.longitude];
- double centerPixelY = [MKMapView latitudeToPixelSpaceY:centerCoordinate.latitude];
-
- // determine the scale value from the zoom level
- NSInteger zoomExponent = 20 - zoomLevel;
- double zoomScale = pow(2, zoomExponent);
-
- // scale the map’s size in pixel space
- CGSize mapSizeInPixels = mapView.bounds.size;
- double scaledMapWidth = mapSizeInPixels.width * zoomScale;
- double scaledMapHeight = mapSizeInPixels.height * zoomScale;
-
- // figure out the position of the top-left pixel
- double topLeftPixelX = centerPixelX - (scaledMapWidth / 2);
- double topLeftPixelY = centerPixelY - (scaledMapHeight / 2);
-
- // find delta between left and right longitudes
- CLLocationDegrees minLng = [MKMapView pixelSpaceXToLongitude:topLeftPixelX];
- CLLocationDegrees maxLng = [MKMapView pixelSpaceXToLongitude:topLeftPixelX + scaledMapWidth];
- CLLocationDegrees longitudeDelta = maxLng - minLng;
-
- // find delta between top and bottom latitudes
- CLLocationDegrees minLat = [MKMapView pixelSpaceYToLatitude:topLeftPixelY];
- CLLocationDegrees maxLat = [MKMapView pixelSpaceYToLatitude:topLeftPixelY + scaledMapHeight];
- CLLocationDegrees latitudeDelta = -1 * (maxLat - minLat);
-
- // create and return the lat/lng span
- MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
- return span;
-}
-
-#pragma mark -
-#pragma mark Public methods
-
-- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
- zoomLevel:(NSUInteger)zoomLevel
- animated:(BOOL)animated
-{
- // clamp large numbers to 28
- zoomLevel = MIN(zoomLevel, 28);
-
- // use the zoom level to compute the region
- MKCoordinateSpan span = [self coordinateSpanWithMapView:self centerCoordinate:centerCoordinate andZoomLevel:zoomLevel];
- MKCoordinateRegion region = MKCoordinateRegionMake(centerCoordinate, span);
-
- // set the region like normal
- [self setRegion:region animated:animated];
-}
-
-//KMapView cannot display tiles that cross the pole (as these would involve wrapping the map from top to bottom, something that a Mercator projection just cannot do).
--(MKCoordinateRegion)coordinateRegionWithMapView:(MKMapView *)mapView
- centerCoordinate:(CLLocationCoordinate2D)centerCoordinate
- andZoomLevel:(NSUInteger)zoomLevel
-{
- // clamp lat/long values to appropriate ranges
- centerCoordinate.latitude = MIN(MAX(-90.0, centerCoordinate.latitude), 90.0);
- centerCoordinate.longitude = fmod(centerCoordinate.longitude, 180.0);
-
- // convert center coordiate to pixel space
- double centerPixelX = [MKMapView longitudeToPixelSpaceX:centerCoordinate.longitude];
- double centerPixelY = [MKMapView latitudeToPixelSpaceY:centerCoordinate.latitude];
-
- // determine the scale value from the zoom level
- NSInteger zoomExponent = 20 - zoomLevel;
- double zoomScale = pow(2, zoomExponent);
-
- // scale the map’s size in pixel space
- CGSize mapSizeInPixels = mapView.bounds.size;
- double scaledMapWidth = mapSizeInPixels.width * zoomScale;
- double scaledMapHeight = mapSizeInPixels.height * zoomScale;
-
- // figure out the position of the left pixel
- double topLeftPixelX = centerPixelX - (scaledMapWidth / 2);
-
- // find delta between left and right longitudes
- CLLocationDegrees minLng = [MKMapView pixelSpaceXToLongitude:topLeftPixelX];
- CLLocationDegrees maxLng = [MKMapView pixelSpaceXToLongitude:topLeftPixelX + scaledMapWidth];
- CLLocationDegrees longitudeDelta = maxLng - minLng;
-
- // if we’re at a pole then calculate the distance from the pole towards the equator
- // as MKMapView doesn’t like drawing boxes over the poles
- double topPixelY = centerPixelY - (scaledMapHeight / 2);
- double bottomPixelY = centerPixelY + (scaledMapHeight / 2);
- BOOL adjustedCenterPoint = NO;
- if (topPixelY > MERCATOR_OFFSET * 2) {
- topPixelY = centerPixelY - scaledMapHeight;
- bottomPixelY = MERCATOR_OFFSET * 2;
- adjustedCenterPoint = YES;
- }
-
- // find delta between top and bottom latitudes
- CLLocationDegrees minLat = [MKMapView pixelSpaceYToLatitude:topPixelY];
- CLLocationDegrees maxLat = [MKMapView pixelSpaceYToLatitude:bottomPixelY];
- CLLocationDegrees latitudeDelta = -1 * (maxLat - minLat);
-
- // create and return the lat/lng span
- MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
- MKCoordinateRegion region = MKCoordinateRegionMake(centerCoordinate, span);
- // once again, MKMapView doesn’t like drawing boxes over the poles
- // so adjust the center coordinate to the center of the resulting region
- if (adjustedCenterPoint) {
- region.center.latitude = [MKMapView pixelSpaceYToLatitude:((bottomPixelY + topPixelY) / 2.0)];
- }
-
- return region;
-}
-
-- (NSUInteger) zoomLevel {
- MKCoordinateRegion region = self.region;
-
- double centerPixelX = [MKMapView longitudeToPixelSpaceX: region.center.longitude];
- double topLeftPixelX = [MKMapView longitudeToPixelSpaceX: region.center.longitude - region.span.longitudeDelta / 2];
-
- double scaledMapWidth = (centerPixelX - topLeftPixelX) * 2;
- CGSize mapSizeInPixels = self.bounds.size;
- double zoomScale = scaledMapWidth / mapSizeInPixels.width;
- double zoomExponent = log(zoomScale) / log(2);
- double zoomLevel = 20 - zoomExponent;
-
- return zoomLevel;
-}
-
-
-@end
\ No newline at end of file
diff --git a/WeatherAroundUs/Pods/MKMapViewZoom/README.markdown b/WeatherAroundUs/Pods/MKMapViewZoom/README.markdown
deleted file mode 100644
index d53f3b2..0000000
--- a/WeatherAroundUs/Pods/MKMapViewZoom/README.markdown
+++ /dev/null
@@ -1,55 +0,0 @@
-# About MKMapView category
-The included MKMapView category for supporting zoom level, code belongs to Troy Brant
-http://troybrant.net/blog/2010/01/mkmapview-and-zoom-levels-a-visual-guide/
-
-If you have ever built a web application using the Google Maps API, you are likely intimately familiar with this line of code:
-
-map.setCenter(new google.maps.LatLng(37.4419, -122.1419), 13);
-To implement this you can use the attached category.
-
-In your view controller where you declare MKMapView simply import "MKMapView+ZoomLevel.h"
-
-
-# Example
-
-
- MKCoordinateRegion region;
- CLLocationCoordinate2D c;
- c.latitude = 37.4419;
- c.longitude = -122.1419;
- region.center = c;
- [mapView setCenterCoordinate:c zoomLevel:13 animated:YES];
-
-
-
-# Note
-To get the current zoom level
-
- int level = [mapView zoomLevel];
-
-
-# Questions
-http://troybrant.net/blog/2010/01/set-the-zoom-level-of-an-mkmapview/
-
-
-# License
-Copyright (c) 2010 Troy Brant
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
diff --git a/WeatherAroundUs/Pods/Manifest.lock b/WeatherAroundUs/Pods/Manifest.lock
deleted file mode 100644
index 51aaa06..0000000
--- a/WeatherAroundUs/Pods/Manifest.lock
+++ /dev/null
@@ -1,31 +0,0 @@
-PODS:
- - Alamofire (1.3.0)
- - AMapSearch (2.6.0)
- - HanekeSwift (0.9.1)
- - MKMapViewZoom (1.0.0)
- - Shimmer (1.0.2)
- - Spring (1.0.3)
- - SwiftyJSON (2.2.1)
- - ZipArchive (1.4.0)
-
-DEPENDENCIES:
- - Alamofire
- - AMapSearch
- - HanekeSwift
- - MKMapViewZoom
- - Shimmer
- - Spring
- - SwiftyJSON
- - ZipArchive
-
-SPEC CHECKSUMS:
- Alamofire: 220403a8d5840e0b4c946a6fbaf209dbca124282
- AMapSearch: 0ea3101eec4b9f500b53e33dcda30d343d41613b
- HanekeSwift: 50d37bfbc4432edc649167e538c259feccb4a2bb
- MKMapViewZoom: dbd9c9d7fe85cbd2084492e87aac0646e63c7f7f
- Shimmer: c5374be1c2b0c9e292fb05b339a513cf291cac86
- Spring: 3f02b5dc3308572ef177b3cad0fa7bbc4b0706f7
- SwiftyJSON: ae2d0a3d68025d136602a33c4ee215091ced3e33
- ZipArchive: e25a4373192673e3229ac8d6e9f64a3e5713c966
-
-COCOAPODS: 0.38.2
diff --git a/WeatherAroundUs/Pods/Pods.xcodeproj/project.pbxproj b/WeatherAroundUs/Pods/Pods.xcodeproj/project.pbxproj
deleted file mode 100644
index 350497b..0000000
--- a/WeatherAroundUs/Pods/Pods.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,1780 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- 0170538B7D37FC47C88534AF528D2088 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = B43CB05C8B9D383EB77B9E0E58D3A6FF /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 0816B639E49071B5708A5BD729E4D543 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = DD594F85DDDD0066F1F3172B2D347F76 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 084A26CC6355487E7392E536B44D91A7 /* AsyncImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644DF8F1DD47151F078FE505B9287BE4 /* AsyncImageView.swift */; };
- 0C926B1D844554EFAF143C26682CB608 /* SpringView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB550BFBDE25FD73B2CAF77A9F8FBBD /* SpringView.swift */; };
- 1203414E1A6A2409ED8FA915D5018981 /* String+Haneke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2688F38E9975B0A9C7851B16352F68B6 /* String+Haneke.swift */; };
- 1747D48F36F47A0308697EE645ADFBEC /* UIView+Haneke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6459052CF7C4AA4B5E5739F804AA171F /* UIView+Haneke.swift */; };
- 193116BB008E967E8980D9352B55DE8E /* Shimmer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D8639B13878B312C21961CE8CEC9BB07 /* Shimmer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1B00470310CB7D51D6311F10D9A49C04 /* FBShimmering.h in Headers */ = {isa = PBXBuildFile; fileRef = CAB6334FC9C03B0E374088BA666297DC /* FBShimmering.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1BBD51E5B130BF0034599F782BB20717 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AA06EBCCE582F7DF0BB6BD322BA7F35 /* MultipartFormData.swift */; };
- 1DAE914A7C45A576F40E83D3840F3AA7 /* mztools.h in Headers */ = {isa = PBXBuildFile; fileRef = 35CB3FD8C911EDB05B66EC6D26B32541 /* mztools.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 1F6C49A9350A1C4261B9036B5F718070 /* UIButton+Haneke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2AB30ECAD983B762863734A1B5D167 /* UIButton+Haneke.swift */; };
- 23F5940A08DB5F0B129F9DFF7CCC3452 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E62DA073C367ACFC8C77B0B6180FD1 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 25285A8D837931B0E7ED1BB39EC1CAA9 /* Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = 876799520553674F1DEE15F94B0E9A8B /* Download.swift */; };
- 265582956057B0B54CC8F66F469B4F34 /* UIImageView+Haneke.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFBFFF072D406764842E20C1F566818B /* UIImageView+Haneke.swift */; };
- 27156FA2EE58423E96F91E849944DE33 /* DesignableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17786A103C8CD0AAB191C5A9353EBBFC /* DesignableView.swift */; };
- 276887C3869F383DA42BC7A4D2DBEF3C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D0DC7A051F9A27A8CBDF36A2019A873 /* Foundation.framework */; };
- 27A70C290E0E84454AAECF05A3E3F976 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = F10E06C4C98329F0D925F9F29BE80A72 /* ParameterEncoding.swift */; };
- 27AD0138589E1198D4453461821A8227 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D0DC7A051F9A27A8CBDF36A2019A873 /* Foundation.framework */; };
- 27BC4921AD4BE913FC743483E8463916 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7B0049834583D0E11C262891C9FD0D1F /* unzip.c */; settings = {COMPILER_FLAGS = "-Dunix -fno-objc-arc"; }; };
- 281ACA5F324A1A67F397E55FC273EDD0 /* AutoTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91059726DC94563BC9E3159625138DBE /* AutoTextView.swift */; };
- 2BB4F56EAD41F61D479EFBC090F0EAE9 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16F39B40985D84F3B75C931486230A04 /* Validation.swift */; };
- 2E3F1224A88484E263973CB39004C9BF /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 931FB6B0270A512FDC43267DDDF51FE8 /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 310E2610951EED58CA051372E9D3A49A /* ZipArchive-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AA3BD2274EACDA9C631D6FD64493221 /* ZipArchive-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 37572B8220677595722E2380672EED57 /* DiskFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F04B01B3A87BEB61AB910A3F5A5A34B1 /* DiskFetcher.swift */; };
- 3769B9433B301E32A9DC200E73038AF3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D0DC7A051F9A27A8CBDF36A2019A873 /* Foundation.framework */; };
- 39A8A7DB3537BDC61EF618B1737C1EB5 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F861572AEF58AF8E8738463397C601 /* SwiftyJSON.swift */; };
- 3B15962FE6CDF703F7517DBAF87AD6E4 /* DesignableLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 714B835B557B3F72D89945095C23B1A4 /* DesignableLabel.swift */; };
- 48AF93115931571350FBAD1AF02CA2C2 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F474217765A39B2E57AF5D0291D080 /* ServerTrustPolicy.swift */; };
- 494603C9A6CF414D46197B8B5E2C8BC3 /* MKMapView+ZoomLevel.m in Sources */ = {isa = PBXBuildFile; fileRef = E2D2D53215047E91E9F261FF38E73772 /* MKMapView+ZoomLevel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
- 4AC63369F44D2E1FF5754F4817036BE9 /* SpringButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F9CC2BB93470648CCEE42F06CF16EF1 /* SpringButton.swift */; };
- 4AEC16254AB33CD52714CBF96CB8A50D /* SpringTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B47A46C4CDA26763F8A89977615BA750 /* SpringTextField.swift */; };
- 59933F6A7B526CEA244AFD847609CC4C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D0DC7A051F9A27A8CBDF36A2019A873 /* Foundation.framework */; };
- 65331DFFA155E69BF6AA2A50BBA75C1C /* NSHTTPURLResponse+Haneke.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD308753C41D4DC016A33C45EB4A4FE /* NSHTTPURLResponse+Haneke.swift */; };
- 6898D00A17F0B59B9FB7D020642B0FE7 /* DesignableTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 243BD3D3C3D5BDAF745916587420D963 /* DesignableTabBarController.swift */; };
- 740D13AEC8B779101E30D9A2D86BDFD9 /* ZipArchive-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C26B8366E0195D62CF37DBC02A131DBB /* ZipArchive-dummy.m */; };
- 7480D7F88F7D6C491AC709D6A2485553 /* DesignableTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 747EC9F42A32387A595E40BE8E658168 /* DesignableTextField.swift */; };
- 7784ABE02E493AE3288BA2467DED9485 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6106FA0626AF6849CC0B8FA5321C5814 /* Images.xcassets */; };
- 78054845576BD105C4505ACCB26C9A77 /* DesignableButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5A10C62583F50B571B0FEE47047D3D8 /* DesignableButton.swift */; };
- 7BC58501973F839A4F0102ED5932DA44 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 0858FC261D64943E3062EDCA2B3263B8 /* ioapi.c */; settings = {COMPILER_FLAGS = "-Dunix -fno-objc-arc"; }; };
- 7F96A7724471938E8118883CEEB37E77 /* MKMapViewZoom-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 322340DEF6797609AE7F4AAB34665F72 /* MKMapViewZoom-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 858ED576E4AADE88999137E0AA25F219 /* Spring.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60B11326E117F16B77C4601D8FF6FC0B /* Spring.swift */; };
- 860E6166BDD6C7A2AF796EE6D7729971 /* DesignableImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B639C1CF665CE74FBD6494B9A6633AC /* DesignableImageView.swift */; };
- 8728E4834042CD181787DC18E037679D /* HanekeSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F24A0EA59C503834BFF11E311EC472BA /* HanekeSwift-dummy.m */; };
- 89403EFA84E7EDD8EDF37508DC5A12A2 /* Format.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6EF281208E188FB3042857324FA15F3 /* Format.swift */; };
- 898D4E31759FB047AE22A1DC0AB765C8 /* DesignableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28517CF1749DF981B83A9F1D8542FF5 /* DesignableTextView.swift */; };
- 8AC90AA4994A6B17D0C52A0BA584FE07 /* Misc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 108AA2994D7815017CD629C1646FFF61 /* Misc.swift */; };
- 8E5145BAD3B9E7B7568C19442976A3B4 /* Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 421E1F61AFA57EB2018CBBD8F4BAB19A /* Upload.swift */; };
- 8E6EDC704C8DAC1C18C5D295287059E5 /* Manager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035FD3BFAC0B64AA98BB59BCB5EB6E3E /* Manager.swift */; };
- 9011CA0E6EB252A3136B46FB2A176693 /* NSFileManager+Haneke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 535A8797C008384C2E1874CB7700E4D9 /* NSFileManager+Haneke.swift */; };
- 90EF20BB8DC0A183A97CEE5D4BE375EE /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A0D3575B7F9DE11C652ED4F55D4D976B /* SwiftyJSON-dummy.m */; };
- 929C257952D4E2F63CC38134A4160CD4 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1440CBDE29B275FC5365E59F1457DDAA /* MapKit.framework */; };
- 95A1E3A55448A592E460A589816DBC0E /* HanekeSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ACE837CC704D4E3AACB7518F798D758F /* HanekeSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 9D76A91C219AC230607C4AB4CD84652F /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = E7CA57A8EF809BF33DE8E4D3E930B39D /* zip.c */; settings = {COMPILER_FLAGS = "-Dunix -fno-objc-arc"; }; };
- 9DBFFAD7F8B33BDC6B65D751B687D799 /* FBShimmeringView.m in Sources */ = {isa = PBXBuildFile; fileRef = A7072B3942E04338C093F9FD993A1E39 /* FBShimmeringView.m */; };
- AB4EA4C8D120A234463BDFEBB42AD546 /* MKMapView+ZoomLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 140AAF9D48FF0B746775C79DE37E95E5 /* MKMapView+ZoomLevel.h */; settings = {ATTRIBUTES = (Public, ); }; };
- AFC0905E8B9FD7BD96E3305BEC6A408F /* SpringAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F9876D10625C1E9006562055D3BF119 /* SpringAnimation.swift */; };
- B1526F737F8754B9637038A81C19492A /* SpringImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017820BFEFFA04C8392724C5BE0810A8 /* SpringImageView.swift */; };
- B3006549161976151BA776A6BD4F81F8 /* LoadingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C55DE6BD2C60A6FC893D8DB339FC4553 /* LoadingView.xib */; };
- B37AD3E2F87A47B9EB5F0D023F33FF1D /* TransitionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83D313E70FABD3B63D31116FC62DDD68 /* TransitionManager.swift */; };
- B482EA178BE4F5AFF2EB9A111F811321 /* NetworkFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2B9BFE7D771871D1709B53B22F62F9A /* NetworkFetcher.swift */; };
- B4B0874ECDFE9BF01015A41C92208496 /* Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5CA0A91E5FC017E5125462981D891E9 /* Cache.swift */; };
- B52A287AD0B1FCFAE1C8AB59A82B7358 /* FBShimmeringLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A0902ADB8E3111A28A76F3DB955F1DB /* FBShimmeringLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- B5733524751399DED1A701C15EF79176 /* SpringLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2834662A3665BDF7D2F61BA3631A66AD /* SpringLabel.swift */; };
- B91966A7CE11AD92EEC3D61BA0A87828 /* MKMapViewZoom-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 547AF634B0F49312C0A6B4566F665BE8 /* MKMapViewZoom-dummy.m */; };
- BB19BDC8A893E31497CE6B23EDB3AB57 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDABACC0D05105635A0436B42803A09C /* Alamofire.swift */; };
- C0D2C01A6C49699CFCDF22D7AEFE93AF /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF1373004EE5CF38BDD54B6746887D0 /* LoadingView.swift */; };
- C282B84398D09BBD68F7660BDCC8340B /* DiskCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA12C598FE67557BA1058B45A374067 /* DiskCache.swift */; };
- C574F91F9E0F8F5944204747B555D9E5 /* FBShimmeringLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = FFC136A9DE0BB05B33E4AAB0B619F79A /* FBShimmeringLayer.m */; };
- CEA7DA76414B19CD1DF071D5250CA67E /* KeyboardLayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50AB8DC0029F616AC6A34A74FDAFD750 /* KeyboardLayoutConstraint.swift */; };
- D0A6C8CEDDCA42D5B17D0DF0AA66C563 /* CryptoSwiftMD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6679A825312C4644D3E5D1859576BE37 /* CryptoSwiftMD5.swift */; };
- D421EFCC02A4FDB2E325E1243674DFE0 /* Fetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 177CBD55BFB344823285C454DC9BC147 /* Fetcher.swift */; };
- D76E2FE9EAD8FA6C88A673D56D8B2328 /* Haneke.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE0A8AE6E786DA01910681255DBFB9A /* Haneke.swift */; };
- D9098E669199273B2BD82EB82BE303A6 /* AsyncButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C96B6E188B9C19B02F7A48882B460FF1 /* AsyncButton.swift */; };
- D9409597ED29A25E3FD5022EF13EDB9A /* Fetch.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3448DA109F8A3A40E828B9EDEE4CF61 /* Fetch.swift */; };
- DA8ABA13298C7710C0415705CF15A95F /* Spring-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F5FA4219C27344F5A01D3CDD86C3EAB /* Spring-dummy.m */; };
- DA8BA71C4D4C9A8DA9E1F13C34A272CE /* FBShimmeringView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A51732369582D461A7939FE4A0B3D00 /* FBShimmeringView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DBF5A843FFAEEF0E15601244E1FED5BF /* ZipArchive.m in Sources */ = {isa = PBXBuildFile; fileRef = D0B5C5D11FFFD6376EFAE451E22CA1CE /* ZipArchive.m */; settings = {COMPILER_FLAGS = "-Dunix -fno-objc-arc"; }; };
- DC44D6B952BB57A74224A1400A983C60 /* mztools.c in Sources */ = {isa = PBXBuildFile; fileRef = A8BB0A4AA680BBDDC196B1A360B1FDBB /* mztools.c */; settings = {COMPILER_FLAGS = "-Dunix -fno-objc-arc"; }; };
- DDF575AD6B47BCAFEB4BE7BF8B8F498D /* Spring-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ACF5E472382B95FBDED0550E24C18DB /* Spring-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DE200EFFBC7CAFECD11AB34E060A79D9 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B17575F6732905CF9C072C6D3887192 /* Alamofire-dummy.m */; };
- DE2D3333950BC882A7A83C95C2DB6E2C /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 941D8074C91BC5EEB9A835ED27E89EF9 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DEE8A398D6737576D007B8192FC18978 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A87EE8A615BF7F040DD2209957A1265 /* ResponseSerialization.swift */; };
- E1F712B6D131E860B9250EBA825D6633 /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC9523D9D377FCFD38FB4375D2564F4 /* Log.swift */; };
- E3BBBEB248B2748C7C70617C63225CEF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D0DC7A051F9A27A8CBDF36A2019A873 /* Foundation.framework */; };
- E445E02BAE699D3CD97213973DCDC5FE /* TransitionZoom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E4A04412784B2B3A8735C7186E1AE16 /* TransitionZoom.swift */; };
- E487B7F6727BA4670549E64A6B6ED642 /* CGSize+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8ADDE9311ADA936736737A37415D82E /* CGSize+Swift.swift */; };
- E615F80797992EE126EC7C1860509646 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2263E0C92F0CB6DF19D539B7C184320 /* Data.swift */; };
- E6D355B8760661369050BD92BA9CBC5E /* UnwindSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE0B4A3C8430E8D9BAC52FE90BB00CF2 /* UnwindSegue.swift */; };
- E966FEC692FAE9B9C135DD52FF9BF4CF /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE6EED747BDF4BBCE8EE8096E5D7A98B /* Request.swift */; };
- E9D54407268E0C066760E9A3A283F8FC /* SpringTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73DD0FB30CDB217927C27FE7D04F75EE /* SpringTextView.swift */; };
- EA99C5E65D55AA9CEF09E17D00546D5F /* ImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F2691BBD99CF1196A45A047DB048B5 /* ImageLoader.swift */; };
- EAA07C1588FB2ABC190AEFCF2484D88B /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = AC9673FAF6B6E528356A09924A32688B /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EB5CA5FA3A5CF90B0049265EEBE338E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D0DC7A051F9A27A8CBDF36A2019A873 /* Foundation.framework */; };
- EB85E0DDC89B2D2890D978112E6416A8 /* Pods-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7639C273C50A51215D1CD76C57190924 /* Pods-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- EEEC34124BDE044858B71648D9A0E77E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D0DC7A051F9A27A8CBDF36A2019A873 /* Foundation.framework */; };
- F15C937A892DC93ABC84866DB0B18A87 /* UIImage+Haneke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301180EE4A0F70332726C5722DF9AE69 /* UIImage+Haneke.swift */; };
- F25A1F5BF7035884B330E4CED131AD64 /* BlurView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37F3D3BA73F633688D4B0A041AFDFEFF /* BlurView.swift */; };
- F52D832EBBBDEDFB98AA0E4383603937 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D0DC7A051F9A27A8CBDF36A2019A873 /* Foundation.framework */; };
- F93456185711E0982FA62AB17DEF3F4F /* Shimmer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FF38E7E56D7FB09242FEFB315D04315 /* Shimmer-dummy.m */; };
- FA906CD49AAF753299CE1E7F938D27B1 /* ZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 180F7828E6E851F8ACC9CEDDE32C31C8 /* ZipArchive.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FDD11A163E0E272D38230B50C4202AEE /* SoundPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21C0F51565A5346A442CC17CBFEE3FBD /* SoundPlayer.swift */; };
- FF6FA5FC6B016AC0C4C1749FC565A9D9 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7142C069EAF7D4CF2F173051C1C766C2 /* Pods-dummy.m */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 1A099C81A76C2A9214C152C96276329A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = B9A04D3C9B208813656510FDA8ADAE02;
- remoteInfo = SwiftyJSON;
- };
- 315D76850BE9D1A10C7674342D056F09 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 5B5845A84B46F7E72E7221D6DBE90591;
- remoteInfo = Shimmer;
- };
- 66D00781E6D12573466BEFAD2A2306C5 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 4ADDC830F1F3957A877DC0A28F0CBD4E;
- remoteInfo = Spring;
- };
- 68A6E984E2C8D1F0234EA5F563722245 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = D6C958378EE291D5092C55A3A1AB153B;
- remoteInfo = HanekeSwift;
- };
- 8DDC4295C907F7B94E73CA449CA879C7 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 868335F8DCDFA01A5CEE24D6FFC83A88;
- remoteInfo = ZipArchive;
- };
- 9CC7F9202234CFCF540079D8374F09CD /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = EB12D7FD25E6BBF9A012DFD5F32DCDE8;
- remoteInfo = MKMapViewZoom;
- };
- F5D736DE99C9EB057FD71FC8217C7534 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 7311CDB6F74DD463B6392FD679D5F4D1;
- remoteInfo = Alamofire;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 014F3AFC0E97E641AA05E771E1AEBCFA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 017820BFEFFA04C8392724C5BE0810A8 /* SpringImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpringImageView.swift; path = Spring/SpringImageView.swift; sourceTree = ""; };
- 02CFCB241DDD0A1E9F36DFA6F755162A /* Spring-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Spring-prefix.pch"; sourceTree = ""; };
- 035FD3BFAC0B64AA98BB59BCB5EB6E3E /* Manager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manager.swift; path = Source/Manager.swift; sourceTree = ""; };
- 04F20E99B650FE9E85C3D52966E9C8CC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 07235BCDFF9DDCE56B231B2EB58C45D9 /* HanekeSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = HanekeSwift.modulemap; sourceTree = ""; };
- 0858FC261D64943E3062EDCA2B3263B8 /* ioapi.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = ioapi.c; path = minizip/ioapi.c; sourceTree = ""; };
- 0AA3BD2274EACDA9C631D6FD64493221 /* ZipArchive-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZipArchive-umbrella.h"; sourceTree = ""; };
- 0B17575F6732905CF9C072C6D3887192 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; };
- 0C1EA8E146CC08E75D44706897205367 /* Shimmer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Shimmer-prefix.pch"; sourceTree = ""; };
- 108AA2994D7815017CD629C1646FFF61 /* Misc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Misc.swift; path = Spring/Misc.swift; sourceTree = ""; };
- 12340658B7EEA99B55BC27A83673D4C9 /* ZipArchive.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = ZipArchive.modulemap; sourceTree = ""; };
- 140AAF9D48FF0B746775C79DE37E95E5 /* MKMapView+ZoomLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MKMapView+ZoomLevel.h"; sourceTree = ""; };
- 1440CBDE29B275FC5365E59F1457DDAA /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/MapKit.framework; sourceTree = DEVELOPER_DIR; };
- 16F39B40985D84F3B75C931486230A04 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; };
- 17786A103C8CD0AAB191C5A9353EBBFC /* DesignableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DesignableView.swift; path = Spring/DesignableView.swift; sourceTree = ""; };
- 177CBD55BFB344823285C454DC9BC147 /* Fetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fetcher.swift; path = Haneke/Fetcher.swift; sourceTree = ""; };
- 180F7828E6E851F8ACC9CEDDE32C31C8 /* ZipArchive.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZipArchive.h; sourceTree = ""; };
- 181AE3A654B6C1DF5F14BFCEF9C499F7 /* MKMapViewZoom-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MKMapViewZoom-prefix.pch"; sourceTree = ""; };
- 1A87EE8A615BF7F040DD2209957A1265 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; };
- 1BD1602C5FF4446D3A6FFFE0ED9DD275 /* Shimmer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Shimmer.xcconfig; sourceTree = ""; };
- 21C0F51565A5346A442CC17CBFEE3FBD /* SoundPlayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SoundPlayer.swift; path = Spring/SoundPlayer.swift; sourceTree = ""; };
- 243BD3D3C3D5BDAF745916587420D963 /* DesignableTabBarController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DesignableTabBarController.swift; path = Spring/DesignableTabBarController.swift; sourceTree = ""; };
- 2688F38E9975B0A9C7851B16352F68B6 /* String+Haneke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Haneke.swift"; path = "Haneke/String+Haneke.swift"; sourceTree = ""; };
- 2834662A3665BDF7D2F61BA3631A66AD /* SpringLabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpringLabel.swift; path = Spring/SpringLabel.swift; sourceTree = ""; };
- 2A2AB30ECAD983B762863734A1B5D167 /* UIButton+Haneke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Haneke.swift"; path = "Haneke/UIButton+Haneke.swift"; sourceTree = ""; };
- 2FC9523D9D377FCFD38FB4375D2564F4 /* Log.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Log.swift; path = Haneke/Log.swift; sourceTree = ""; };
- 301180EE4A0F70332726C5722DF9AE69 /* UIImage+Haneke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+Haneke.swift"; path = "Haneke/UIImage+Haneke.swift"; sourceTree = ""; };
- 305347828AA08338C9B82AE2B860073B /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SwiftyJSON.modulemap; sourceTree = ""; };
- 30F474217765A39B2E57AF5D0291D080 /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; };
- 31E050B2DE5C8DF455C623B1C02DC81E /* MKMapViewZoom.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MKMapViewZoom.xcconfig; sourceTree = ""; };
- 31F861572AEF58AF8E8738463397C601 /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON.swift; sourceTree = ""; };
- 322340DEF6797609AE7F4AAB34665F72 /* MKMapViewZoom-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MKMapViewZoom-umbrella.h"; sourceTree = ""; };
- 35CB3FD8C911EDB05B66EC6D26B32541 /* mztools.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mztools.h; path = minizip/mztools.h; sourceTree = ""; };
- 37F3D3BA73F633688D4B0A041AFDFEFF /* BlurView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlurView.swift; path = Spring/BlurView.swift; sourceTree = ""; };
- 3F9CC2BB93470648CCEE42F06CF16EF1 /* SpringButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpringButton.swift; path = Spring/SpringButton.swift; sourceTree = ""; };
- 421E1F61AFA57EB2018CBBD8F4BAB19A /* Upload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Upload.swift; path = Source/Upload.swift; sourceTree = ""; };
- 451746300E823F97EB2F05F955A14B46 /* Spring.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Spring.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 4ACF5E472382B95FBDED0550E24C18DB /* Spring-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Spring-umbrella.h"; sourceTree = ""; };
- 4C303E896612B3F929CEFBD42EC7C96B /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; };
- 4CF5D921B107827517EAB3BD2BB26843 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 4DF1373004EE5CF38BDD54B6746887D0 /* LoadingView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoadingView.swift; path = Spring/LoadingView.swift; sourceTree = ""; };
- 4FF38E7E56D7FB09242FEFB315D04315 /* Shimmer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Shimmer-dummy.m"; sourceTree = ""; };
- 50AB8DC0029F616AC6A34A74FDAFD750 /* KeyboardLayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyboardLayoutConstraint.swift; path = Spring/KeyboardLayoutConstraint.swift; sourceTree = ""; };
- 5183F5D8E29E1743F34BFBC43FDF5C68 /* MKMapViewZoom-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MKMapViewZoom-Private.xcconfig"; sourceTree = ""; };
- 5257CE25DB9D566DF377189BDDCC0BBA /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 52AD2DE6A5E61D41C0BF320DA9A72BA8 /* ZipArchive.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZipArchive.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 535A8797C008384C2E1874CB7700E4D9 /* NSFileManager+Haneke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSFileManager+Haneke.swift"; path = "Haneke/NSFileManager+Haneke.swift"; sourceTree = ""; };
- 547AF634B0F49312C0A6B4566F665BE8 /* MKMapViewZoom-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MKMapViewZoom-dummy.m"; sourceTree = ""; };
- 58166BCB3511CAB9BA979B89DB9B877C /* SwiftyJSON.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.xcconfig; sourceTree = ""; };
- 60B11326E117F16B77C4601D8FF6FC0B /* Spring.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Spring.swift; path = Spring/Spring.swift; sourceTree = ""; };
- 6106FA0626AF6849CC0B8FA5321C5814 /* Images.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = SpringApp/Images.xcassets; sourceTree = ""; };
- 620981BCB193B1230AD768E14618FB55 /* Spring.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Spring.xcconfig; sourceTree = ""; };
- 644DF8F1DD47151F078FE505B9287BE4 /* AsyncImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncImageView.swift; path = Spring/AsyncImageView.swift; sourceTree = ""; };
- 6459052CF7C4AA4B5E5739F804AA171F /* UIView+Haneke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Haneke.swift"; path = "Haneke/UIView+Haneke.swift"; sourceTree = ""; };
- 6679A825312C4644D3E5D1859576BE37 /* CryptoSwiftMD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CryptoSwiftMD5.swift; path = Haneke/CryptoSwiftMD5.swift; sourceTree = ""; };
- 6829698A2AB639557688CD03C718CC32 /* Alamofire-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Alamofire-Private.xcconfig"; sourceTree = ""; };
- 6AA06EBCCE582F7DF0BB6BD322BA7F35 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; };
- 6B54B7F4DD9219089876126A95D4A623 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 6D0DC7A051F9A27A8CBDF36A2019A873 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
- 6DAD1D5A3D1B76A21AB17100CC1AA724 /* AMapSearchKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapSearchKit.framework; sourceTree = ""; };
- 6EC66001F82E93BE86240D6A3D1B709F /* HanekeSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HanekeSwift.xcconfig; sourceTree = ""; };
- 6F5FA4219C27344F5A01D3CDD86C3EAB /* Spring-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Spring-dummy.m"; sourceTree = ""; };
- 6F9F673884C81711B7B11D3A146BEE87 /* ZipArchive-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZipArchive-prefix.pch"; sourceTree = ""; };
- 7142C069EAF7D4CF2F173051C1C766C2 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; };
- 714B835B557B3F72D89945095C23B1A4 /* DesignableLabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DesignableLabel.swift; path = Spring/DesignableLabel.swift; sourceTree = ""; };
- 732DCB2BC47E61A3A8DEBE5C0C37D11E /* Shimmer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Shimmer.modulemap; sourceTree = ""; };
- 73DD0FB30CDB217927C27FE7D04F75EE /* SpringTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpringTextView.swift; path = Spring/SpringTextView.swift; sourceTree = ""; };
- 747EC9F42A32387A595E40BE8E658168 /* DesignableTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DesignableTextField.swift; path = Spring/DesignableTextField.swift; sourceTree = ""; };
- 7639C273C50A51215D1CD76C57190924 /* Pods-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-umbrella.h"; sourceTree = ""; };
- 79A9DEDC89FE8336BF5FEDAAF75BF7FC /* Pods.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Pods.modulemap; sourceTree = ""; };
- 7A0902ADB8E3111A28A76F3DB955F1DB /* FBShimmeringLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBShimmeringLayer.h; path = FBShimmering/FBShimmeringLayer.h; sourceTree = ""; };
- 7B0049834583D0E11C262891C9FD0D1F /* unzip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = unzip.c; path = minizip/unzip.c; sourceTree = ""; };
- 7B639C1CF665CE74FBD6494B9A6633AC /* DesignableImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DesignableImageView.swift; path = Spring/DesignableImageView.swift; sourceTree = ""; };
- 80C31B885256EC2E146862BE93338AF2 /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; };
- 81F0099C4E946AC3C0F522072343DB34 /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; };
- 83D313E70FABD3B63D31116FC62DDD68 /* TransitionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransitionManager.swift; path = Spring/TransitionManager.swift; sourceTree = ""; };
- 85E62DA073C367ACFC8C77B0B6180FD1 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; };
- 863B3CFA6B0FC7A90568A6D88BADAF92 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 876799520553674F1DEE15F94B0E9A8B /* Download.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Download.swift; path = Source/Download.swift; sourceTree = ""; };
- 87B213035BAC5F75386F62D3C75D2342 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; };
- 8D8E38787266E84D8EDF0487370C170A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 91059726DC94563BC9E3159625138DBE /* AutoTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AutoTextView.swift; path = Spring/AutoTextView.swift; sourceTree = ""; };
- 931FB6B0270A512FDC43267DDDF51FE8 /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = unzip.h; path = minizip/unzip.h; sourceTree = ""; };
- 936EA872CF8E0965EED1956E3083186F /* Spring-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Spring-Private.xcconfig"; sourceTree = ""; };
- 941D8074C91BC5EEB9A835ED27E89EF9 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; };
- 968B0CD6A4D3FDCD5191BEC3FD7875CC /* ZipArchive-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ZipArchive-Private.xcconfig"; sourceTree = ""; };
- 9A51732369582D461A7939FE4A0B3D00 /* FBShimmeringView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBShimmeringView.h; path = FBShimmering/FBShimmeringView.h; sourceTree = ""; };
- 9E4A04412784B2B3A8735C7186E1AE16 /* TransitionZoom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransitionZoom.swift; path = Spring/TransitionZoom.swift; sourceTree = ""; };
- 9F9876D10625C1E9006562055D3BF119 /* SpringAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpringAnimation.swift; path = Spring/SpringAnimation.swift; sourceTree = ""; };
- A0D3575B7F9DE11C652ED4F55D4D976B /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; };
- A7072B3942E04338C093F9FD993A1E39 /* FBShimmeringView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBShimmeringView.m; path = FBShimmering/FBShimmeringView.m; sourceTree = ""; };
- A8ADDE9311ADA936736737A37415D82E /* CGSize+Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGSize+Swift.swift"; path = "Haneke/CGSize+Swift.swift"; sourceTree = ""; };
- A8BB0A4AA680BBDDC196B1A360B1FDBB /* mztools.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mztools.c; path = minizip/mztools.c; sourceTree = ""; };
- AAA12C598FE67557BA1058B45A374067 /* DiskCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiskCache.swift; path = Haneke/DiskCache.swift; sourceTree = ""; };
- AC9673FAF6B6E528356A09924A32688B /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ioapi.h; path = minizip/ioapi.h; sourceTree = ""; };
- ACE837CC704D4E3AACB7518F798D758F /* HanekeSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HanekeSwift-umbrella.h"; sourceTree = ""; };
- B43CB05C8B9D383EB77B9E0E58D3A6FF /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = zip.h; path = minizip/zip.h; sourceTree = ""; };
- B47A46C4CDA26763F8A89977615BA750 /* SpringTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpringTextField.swift; path = Spring/SpringTextField.swift; sourceTree = ""; };
- B5FA64702B845329B21D7642032D0D58 /* Haneke.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Haneke.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
- BDFD6BDED1543DF5F7EBD546120C5980 /* SwiftyJSON-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "SwiftyJSON-Private.xcconfig"; sourceTree = ""; };
- C18B1E94C7C74C99EDC53F28EA6A5CEE /* MKMapViewZoom.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MKMapViewZoom.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- C26B8366E0195D62CF37DBC02A131DBB /* ZipArchive-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZipArchive-dummy.m"; sourceTree = ""; };
- C28517CF1749DF981B83A9F1D8542FF5 /* DesignableTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DesignableTextView.swift; path = Spring/DesignableTextView.swift; sourceTree = ""; };
- C2B9BFE7D771871D1709B53B22F62F9A /* NetworkFetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkFetcher.swift; path = Haneke/NetworkFetcher.swift; sourceTree = ""; };
- C55DE6BD2C60A6FC893D8DB339FC4553 /* LoadingView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = LoadingView.xib; path = Spring/LoadingView.xib; sourceTree = ""; };
- C6683E713C85700DE883AB8CADB511CD /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; };
- C96B6E188B9C19B02F7A48882B460FF1 /* AsyncButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncButton.swift; path = Spring/AsyncButton.swift; sourceTree = ""; };
- CA6BA20CE1A9CFDA27A9B33C32E3FA41 /* MKMapViewZoom.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = MKMapViewZoom.modulemap; sourceTree = ""; };
- CAB6334FC9C03B0E374088BA666297DC /* FBShimmering.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBShimmering.h; path = FBShimmering/FBShimmering.h; sourceTree = ""; };
- CBC0F7C552B739C909B650A0F42F7F38 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; };
- CC7E79288A0B122CACB595AE308519DB /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Alamofire.modulemap; sourceTree = ""; };
- CDD308753C41D4DC016A33C45EB4A4FE /* NSHTTPURLResponse+Haneke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSHTTPURLResponse+Haneke.swift"; path = "Haneke/NSHTTPURLResponse+Haneke.swift"; sourceTree = ""; };
- CFBFFF072D406764842E20C1F566818B /* UIImageView+Haneke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImageView+Haneke.swift"; path = "Haneke/UIImageView+Haneke.swift"; sourceTree = ""; };
- D0405803033A2A777B8E4DFA0C1800ED /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; };
- D0B5C5D11FFFD6376EFAE451E22CA1CE /* ZipArchive.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = ZipArchive.m; sourceTree = ""; };
- D2263E0C92F0CB6DF19D539B7C184320 /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = Haneke/Data.swift; sourceTree = ""; };
- D2355870B251E9C1248E26D17E32396D /* Shimmer-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Shimmer-Private.xcconfig"; sourceTree = ""; };
- D3216392808CAFABEE91272B90C94991 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; };
- D6CAEDD49D0F7BCA6216335E883D5FB6 /* HanekeSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HanekeSwift-prefix.pch"; sourceTree = ""; };
- D8639B13878B312C21961CE8CEC9BB07 /* Shimmer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Shimmer-umbrella.h"; sourceTree = ""; };
- DAB550BFBDE25FD73B2CAF77A9F8FBBD /* SpringView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpringView.swift; path = Spring/SpringView.swift; sourceTree = "