├── .DS_Store ├── .travis.yml ├── Podfile ├── Podfile.lock ├── Pods ├── .DS_Store ├── Alamofire │ ├── LICENSE │ ├── README.md │ └── Source │ │ ├── AFError.swift │ │ ├── Alamofire.swift │ │ ├── DispatchQueue+Alamofire.swift │ │ ├── MultipartFormData.swift │ │ ├── NetworkReachabilityManager.swift │ │ ├── Notifications.swift │ │ ├── ParameterEncoding.swift │ │ ├── Request.swift │ │ ├── Response.swift │ │ ├── ResponseSerialization.swift │ │ ├── Result.swift │ │ ├── ServerTrustPolicy.swift │ │ ├── SessionDelegate.swift │ │ ├── SessionManager.swift │ │ ├── TaskDelegate.swift │ │ ├── Timeline.swift │ │ └── Validation.swift ├── FloatingActionSheetController │ ├── FloatingActionSheetController │ │ ├── FloatingAction.swift │ │ ├── FloatingActionGroup.swift │ │ └── FloatingActionSheetController.swift │ ├── LICENSE │ └── README.md ├── Local Podspecs │ ├── Alamofire.podspec.json │ └── FloatingActionSheetController.podspec.json ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── chaos.xcuserdatad │ │ └── xcschemes │ │ ├── Alamofire.xcscheme │ │ ├── FloatingActionSheetController.xcscheme │ │ ├── Pods-RainReminder.xcscheme │ │ ├── SDWebImage.xcscheme │ │ └── xcschememanagement.plist ├── SDWebImage │ ├── LICENSE │ ├── README.md │ └── SDWebImage │ │ ├── NSData+ImageContentType.h │ │ ├── NSData+ImageContentType.m │ │ ├── SDImageCache.h │ │ ├── SDImageCache.m │ │ ├── SDWebImageCompat.h │ │ ├── SDWebImageCompat.m │ │ ├── SDWebImageDecoder.h │ │ ├── SDWebImageDecoder.m │ │ ├── SDWebImageDownloader.h │ │ ├── SDWebImageDownloader.m │ │ ├── SDWebImageDownloaderOperation.h │ │ ├── SDWebImageDownloaderOperation.m │ │ ├── SDWebImageManager.h │ │ ├── SDWebImageManager.m │ │ ├── SDWebImageOperation.h │ │ ├── SDWebImagePrefetcher.h │ │ ├── SDWebImagePrefetcher.m │ │ ├── UIButton+WebCache.h │ │ ├── UIButton+WebCache.m │ │ ├── UIImage+GIF.h │ │ ├── UIImage+GIF.m │ │ ├── UIImage+MultiFormat.h │ │ ├── UIImage+MultiFormat.m │ │ ├── UIImageView+HighlightedWebCache.h │ │ ├── UIImageView+HighlightedWebCache.m │ │ ├── UIImageView+WebCache.h │ │ ├── UIImageView+WebCache.m │ │ ├── UIView+WebCacheOperation.h │ │ └── UIView+WebCacheOperation.m └── Target Support Files │ ├── Alamofire │ ├── Alamofire-dummy.m │ ├── Alamofire-prefix.pch │ ├── Alamofire-umbrella.h │ ├── Alamofire.modulemap │ ├── Alamofire.xcconfig │ └── Info.plist │ ├── FloatingActionSheetController │ ├── FloatingActionSheetController-dummy.m │ ├── FloatingActionSheetController-prefix.pch │ ├── FloatingActionSheetController-umbrella.h │ ├── FloatingActionSheetController.modulemap │ ├── FloatingActionSheetController.xcconfig │ └── Info.plist │ ├── Pods-RainReminder │ ├── Info.plist │ ├── Pods-RainReminder-acknowledgements.markdown │ ├── Pods-RainReminder-acknowledgements.plist │ ├── Pods-RainReminder-dummy.m │ ├── Pods-RainReminder-frameworks.sh │ ├── Pods-RainReminder-resources.sh │ ├── Pods-RainReminder-umbrella.h │ ├── Pods-RainReminder.debug.xcconfig │ ├── Pods-RainReminder.modulemap │ └── Pods-RainReminder.release.xcconfig │ └── SDWebImage │ ├── Info.plist │ ├── SDWebImage-dummy.m │ ├── SDWebImage-prefix.pch │ ├── SDWebImage-umbrella.h │ ├── SDWebImage.modulemap │ └── SDWebImage.xcconfig ├── README.md ├── RainReminder.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── chaos.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── xcshareddata │ └── xcschemes │ │ └── RainReminder.xcscheme └── xcuserdata │ └── chaos.xcuserdatad │ └── xcschemes │ ├── today.xcscheme │ └── xcschememanagement.plist ├── RainReminder.xcworkspace ├── contents.xcworkspacedata ├── xcshareddata │ └── RainReminder.xcscmblueprint └── xcuserdata │ └── chaos.xcuserdatad │ ├── UserInterfaceState.xcuserstate │ └── xcdebugger │ └── Breakpoints_v2.xcbkptlist ├── RainReminder ├── .DS_Store ├── AppDelegate.swift ├── Assets.xcassets │ ├── .DS_Store │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-29@2x-1.png │ │ ├── Icon-29@3x.png │ │ ├── Icon-40@2x.png │ │ ├── Icon-40@3x.png │ │ ├── Icon-60@2x.png │ │ └── Icon-60@3x.png │ ├── BackgroundIAP.imageset │ │ ├── BackgroundIAP@2x~iphone.png │ │ └── Contents.json │ ├── BackgroundPattern.imageset │ │ ├── BackgroundPattern@2x.png │ │ ├── BackgroundPattern@3x.png │ │ └── Contents.json │ ├── BackgroundShareSina.imageset │ │ ├── BackgroundShareSina.png │ │ ├── BackgroundShareSina@2x.png │ │ ├── BackgroundShareSina@3x.png │ │ └── Contents.json │ ├── Brand Assets.launchimage │ │ └── Contents.json │ ├── ButtonShareLogin.imageset │ │ ├── ButtonShareLogin.png │ │ ├── ButtonShareLogin@2x.png │ │ ├── ButtonShareLogin@3x.png │ │ └── Contents.json │ ├── ButtonShareSubmit.imageset │ │ ├── ButtonShareSubmit.png │ │ ├── ButtonShareSubmit@2x.png │ │ ├── ButtonShareSubmit@3x.png │ │ └── Contents.json │ ├── Contents.json │ ├── HuaTiShouYeSearchIcon.imageset │ │ ├── Contents.json │ │ ├── HuaTiShouYeSearchIcon@2x-1.png │ │ └── HuaTiShouYeSearchIcon@2x.png │ ├── IconFollowUs.imageset │ │ ├── Contents.json │ │ ├── IconFollowUs.png │ │ ├── IconFollowUs@2x.png │ │ └── IconFollowUs@3x.png │ ├── IconSetting.imageset │ │ ├── Contents.json │ │ ├── IconSetting.png │ │ ├── IconSetting@2x.png │ │ └── IconSetting@3x.png │ ├── IconShareClose.imageset │ │ ├── Contents.json │ │ ├── IconShareClose.png │ │ ├── IconShareClose@2x.png │ │ └── IconShareClose@3x.png │ ├── LaunchImage-700.imageset │ │ ├── Contents.json │ │ └── LaunchImage-700@2x.png │ ├── Loading.imageset │ │ ├── Contents.json │ │ ├── Loading@2x.png │ │ └── Loading@3x.png │ ├── Location.imageset │ │ ├── Contents.json │ │ ├── Location@2x.png │ │ └── Location@3x.png │ ├── Shape.imageset │ │ ├── Contents.json │ │ ├── Shape@2x.png │ │ └── Shape@3x.png │ ├── ShareSheetSinaWeibo.imageset │ │ ├── Contents.json │ │ ├── ShareSheetSinaWeibo.png │ │ ├── ShareSheetSinaWeibo@2x.png │ │ └── ShareSheetSinaWeibo@3x.png │ ├── background.imageset │ │ ├── Contents.json │ │ └── background.png │ ├── dark.imageset │ │ ├── Contents.json │ │ └── dark.png │ ├── low.imageset │ │ ├── Contents.json │ │ └── low.png │ ├── nowWeather.imageset │ │ ├── Contents.json │ │ ├── launch-1.png │ │ └── launch.png │ ├── shareBtn_topic_blank.imageset │ │ ├── Contents.json │ │ ├── shareBtn_topic_blank@2x.png │ │ └── shareBtn_topic_blank@3x.png │ └── spring.imageset │ │ ├── Contents.json │ │ └── spring.jpeg ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── City.swift ├── CityListCell.swift ├── CityListCell.xib ├── CityListViewController.swift ├── Citys.xml ├── DINNextLTPro-Light.otf ├── DailyResult.swift ├── DataModel.swift ├── DimmingPresentationController.swift ├── FirstView.swift ├── FirstView.xib ├── Functions.swift ├── GeoInfoModel.swift ├── GradientView.swift ├── HomeController.swift ├── Info.plist ├── InteractiveAnimation.swift ├── LaunchViewController.swift ├── MBProgressHUD.h ├── MBProgressHUD.m ├── NSDate+WeatherDate.swift ├── NetWorkTools.swift ├── ParserXML.swift ├── RRouter.swift ├── RainReminder-Bridging-Header.h ├── RainReminder.entitlements ├── Reachability.swift ├── ServerResult.swift ├── SupportTableTableViewController.swift ├── SwiftyJSON.swift ├── TimePickerViewController.swift ├── WeatherIcon.swift ├── WeatherResult.swift ├── WeekWeatherCell.swift ├── WeekWeatherCell.xib ├── WeekWeatherCollectionView.swift ├── WeiboAlert.swift ├── WeiboAlert.xib ├── chinese.ttf ├── iToast.h ├── iToast.m ├── libWeiboSDK │ ├── WBHttpRequest+WeiboGame.h │ ├── WBHttpRequest+WeiboShare.h │ ├── WBHttpRequest+WeiboToken.h │ ├── WBHttpRequest+WeiboUser.h │ ├── WBHttpRequest.h │ ├── WBSDKBasicButton.h │ ├── WBSDKCommentButton.h │ ├── WBSDKRelationshipButton.h │ ├── WeiboSDK+Statistics.h │ ├── WeiboSDK.bundle │ │ ├── images │ │ │ ├── alert_error_icon@2x.png │ │ │ ├── alert_success_icon@2x.png │ │ │ ├── close.png │ │ │ ├── close@2x.png │ │ │ ├── common_button_big_blue@2x.png │ │ │ ├── common_button_big_blue_disable@2x.png │ │ │ ├── common_button_big_blue_highlighted@2x.png │ │ │ ├── common_button_white.png │ │ │ ├── common_button_white@2x.png │ │ │ ├── common_button_white_highlighted.png │ │ │ ├── common_button_white_highlighted@2x.png │ │ │ ├── common_icon_arrow@2x.png │ │ │ ├── compose_keyboardbutton_background.png │ │ │ ├── compose_keyboardbutton_background@2x.png │ │ │ ├── compose_toolbar_background.png │ │ │ ├── compose_toolbar_background@2x.png │ │ │ ├── empty_failed.png │ │ │ ├── empty_failed@2x.png │ │ │ ├── login_background@2x.png │ │ │ ├── login_country_background@2x.png │ │ │ ├── login_country_background_highlighted@2x.png │ │ │ ├── navigationbar_background.png │ │ │ ├── navigationbar_background@2x.png │ │ │ ├── navigationbar_background_os7.png │ │ │ ├── navigationbar_background_os7@2x.png │ │ │ ├── progresshud_background@2x.png │ │ │ ├── sdk_weibo_logo.png │ │ │ ├── sdk_weibo_logo@2x.png │ │ │ ├── sdk_weibo_logo@3x.png │ │ │ ├── timeline_relationship_icon_addattention.png │ │ │ ├── timeline_relationship_icon_addattention@2x.png │ │ │ ├── timeline_relationship_icon_addattention@3x.png │ │ │ ├── timeline_relationship_icon_attention.png │ │ │ ├── timeline_relationship_icon_attention@2x.png │ │ │ ├── timeline_relationship_icon_attention@3x.png │ │ │ ├── verify_code_button@2x.png │ │ │ ├── verify_code_button@3x.png │ │ │ ├── verify_code_button_highlighted@2x.png │ │ │ └── verify_code_button_highlighted@3x.png │ │ └── others │ │ │ ├── countryList │ │ │ └── mfp.cer │ ├── WeiboSDK.h │ ├── WeiboUser.h │ └── libWeiboSDK.a └── weathericons-regular-webfont.ttf ├── screenshort ├── IMG_0215.jpg ├── IMG_0216.jpg ├── IMG_0217.jpg ├── IMG_0218.jpg ├── IMG_0219.jpg ├── notify.gif ├── search.gif ├── share.gif ├── start.gif ├── today.gif └── weeklist.gif ├── scripts ├── .DS_Store └── travis │ ├── add-key.sh │ ├── remove-key.sh │ └── testflight.sh └── today ├── .DS_Store ├── Base.lproj └── MainInterface.storyboard ├── Info.plist ├── TodayViewController.swift ├── today.entitlements └── weathericons-regular-webfont.ttf /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/.DS_Store -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode8.2.1 3 | sudo: false 4 | 5 | before_install: 6 | - gem install cocoapods --no-rdoc --no-ri --no-document --quiet 7 | - pod install && cd $TRAVIS_BUILD_DIR 8 | 9 | script: 10 | - xctool -workspace RainReminder.xcworkspace -scheme RainReminder -destination 'platform=iOS Simulator,name=iPhone 6s,OS=9.3' ONLY_ACTIVE_ARCH=NO; 11 | 12 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | use_frameworks! 3 | target “RainReminder” do 4 | pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '4.0.1' 5 | pod 'SDWebImage' 6 | pod "FloatingActionSheetController", :git => 'https://github.com/ra1028/FloatingActionSheetController.git', :tag => '2.0.0' 7 | end 8 | 9 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (4.0.1) 3 | - FloatingActionSheetController (2.0.0) 4 | - SDWebImage (3.7.5): 5 | - SDWebImage/Core (= 3.7.5) 6 | - SDWebImage/Core (3.7.5) 7 | 8 | DEPENDENCIES: 9 | - Alamofire (from `https://github.com/Alamofire/Alamofire.git`, tag `4.0.1`) 10 | - FloatingActionSheetController (from `https://github.com/ra1028/FloatingActionSheetController.git`, tag `2.0.0`) 11 | - SDWebImage 12 | 13 | EXTERNAL SOURCES: 14 | Alamofire: 15 | :git: https://github.com/Alamofire/Alamofire.git 16 | :tag: 4.0.1 17 | FloatingActionSheetController: 18 | :git: https://github.com/ra1028/FloatingActionSheetController.git 19 | :tag: 2.0.0 20 | 21 | CHECKOUT OPTIONS: 22 | Alamofire: 23 | :git: https://github.com/Alamofire/Alamofire.git 24 | :tag: 4.0.1 25 | FloatingActionSheetController: 26 | :git: https://github.com/ra1028/FloatingActionSheetController.git 27 | :tag: 2.0.0 28 | 29 | SPEC CHECKSUMS: 30 | Alamofire: 7682d43245de14874acd142ec137b144aa1dd335 31 | FloatingActionSheetController: d2cebff313e56709438abae1aff4eb8f1726ba98 32 | SDWebImage: 69c6303e3348fba97e03f65d65d4fbc26740f461 33 | 34 | PODFILE CHECKSUM: c29ed4a5bd9ccb71ac590fc2e2dee9641f4aebc8 35 | 36 | COCOAPODS: 1.0.1 37 | -------------------------------------------------------------------------------- /Pods/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/Pods/.DS_Store -------------------------------------------------------------------------------- /Pods/Alamofire/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/DispatchQueue+Alamofire.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DispatchQueue+Alamofire.swift 3 | // 4 | // Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Dispatch 26 | import Foundation 27 | 28 | extension DispatchQueue { 29 | static var userInteractive: DispatchQueue { return DispatchQueue.global(qos: .userInteractive) } 30 | static var userInitiated: DispatchQueue { return DispatchQueue.global(qos: .userInitiated) } 31 | static var utility: DispatchQueue { return DispatchQueue.global(qos: .utility) } 32 | static var background: DispatchQueue { return DispatchQueue.global(qos: .background) } 33 | 34 | func after(_ delay: TimeInterval, execute closure: @escaping () -> Void) { 35 | asyncAfter(deadline: .now() + delay, execute: closure) 36 | } 37 | 38 | func syncResult(_ closure: () -> T) -> T { 39 | var result: T! 40 | sync { result = closure() } 41 | return result 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/Notifications.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Notifications.swift 3 | // 4 | // Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | extension Notification.Name { 28 | /// Used as a namespace for all `URLSessionTask` related notifications. 29 | public struct Task { 30 | /// Posted when a `URLSessionTask` is resumed. The notification `object` contains the resumed `URLSessionTask`. 31 | public static let DidResume = Notification.Name(rawValue: "org.alamofire.notification.name.task.didResume") 32 | 33 | /// Posted when a `URLSessionTask` is suspended. The notification `object` contains the suspended `URLSessionTask`. 34 | public static let DidSuspend = Notification.Name(rawValue: "org.alamofire.notification.name.task.didSuspend") 35 | 36 | /// Posted when a `URLSessionTask` is cancelled. The notification `object` contains the cancelled `URLSessionTask`. 37 | public static let DidCancel = Notification.Name(rawValue: "org.alamofire.notification.name.task.didCancel") 38 | 39 | /// Posted when a `URLSessionTask` is completed. The notification `object` contains the completed `URLSessionTask`. 40 | public static let DidComplete = Notification.Name(rawValue: "org.alamofire.notification.name.task.didComplete") 41 | } 42 | } 43 | 44 | // MARK: - 45 | 46 | extension Notification { 47 | /// Used as a namespace for all `Notification` user info dictionary keys. 48 | public struct Key { 49 | /// User info dictionary key representing the `URLSessionTask` associated with the notification. 50 | public static let Task = "org.alamofire.notification.key.task" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/Result.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Result.swift 3 | // 4 | // Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | /// Used to represent whether a request was successful or encountered an error. 28 | /// 29 | /// - success: The request and all post processing operations were successful resulting in the serialization of the 30 | /// provided associated value. 31 | /// 32 | /// - failure: The request encountered an error resulting in a failure. The associated values are the original data 33 | /// provided by the server as well as the error that caused the failure. 34 | public enum Result { 35 | case success(Value) 36 | case failure(Error) 37 | 38 | /// Returns `true` if the result is a success, `false` otherwise. 39 | public var isSuccess: Bool { 40 | switch self { 41 | case .success: 42 | return true 43 | case .failure: 44 | return false 45 | } 46 | } 47 | 48 | /// Returns `true` if the result is a failure, `false` otherwise. 49 | public var isFailure: Bool { 50 | return !isSuccess 51 | } 52 | 53 | /// Returns the associated value if the result is a success, `nil` otherwise. 54 | public var value: Value? { 55 | switch self { 56 | case .success(let value): 57 | return value 58 | case .failure: 59 | return nil 60 | } 61 | } 62 | 63 | /// Returns the associated error value if the result is a failure, `nil` otherwise. 64 | public var error: Error? { 65 | switch self { 66 | case .success: 67 | return nil 68 | case .failure(let error): 69 | return error 70 | } 71 | } 72 | } 73 | 74 | // MARK: - CustomStringConvertible 75 | 76 | extension Result: CustomStringConvertible { 77 | /// The textual representation used when written to an output stream, which includes whether the result was a 78 | /// success or failure. 79 | public var description: String { 80 | switch self { 81 | case .success: 82 | return "SUCCESS" 83 | case .failure: 84 | return "FAILURE" 85 | } 86 | } 87 | } 88 | 89 | // MARK: - CustomDebugStringConvertible 90 | 91 | extension Result: CustomDebugStringConvertible { 92 | /// The debug textual representation used when written to an output stream, which includes whether the result was a 93 | /// success or failure in addition to the value or error. 94 | public var debugDescription: String { 95 | switch self { 96 | case .success(let value): 97 | return "SUCCESS: \(value)" 98 | case .failure(let error): 99 | return "FAILURE: \(error)" 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /Pods/FloatingActionSheetController/FloatingActionSheetController/FloatingAction.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FloatingAction.swift 3 | // FloatingActionSheetController 4 | // 5 | // Created by Ryo Aoyama on 10/25/15. 6 | // Copyright © 2015 Ryo Aoyama. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public final class FloatingAction { 12 | 13 | // MARK: Public 14 | 15 | public private(set) var title: String? 16 | public var tintColor: UIColor? 17 | public var textColor: UIColor? 18 | public var font: UIFont? 19 | 20 | public init(title: String, handleImmediately: Bool = false, handler: ((FloatingAction) -> Void)?) { 21 | self.title = title 22 | self.handleImmediately = handleImmediately 23 | self.handler = handler 24 | } 25 | 26 | // MARK: Internal 27 | 28 | private(set) var handler: ((FloatingAction) -> Void)? 29 | private(set) var handleImmediately = false 30 | } 31 | -------------------------------------------------------------------------------- /Pods/FloatingActionSheetController/FloatingActionSheetController/FloatingActionGroup.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FloatingActionGroup.swift 3 | // FloatingActionSheetController 4 | // 5 | // Created by Ryo Aoyama on 10/25/15. 6 | // Copyright © 2015 Ryo Aoyama. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public final class FloatingActionGroup { 12 | 13 | // MARK: Public 14 | 15 | public init() {} 16 | 17 | public init(action: FloatingAction...) { 18 | action.forEach { add(action: $0) } 19 | } 20 | 21 | public init(actions: [FloatingAction]) { 22 | add(actions: actions) 23 | } 24 | 25 | @discardableResult 26 | public func add(action: FloatingAction...) -> FloatingActionGroup { 27 | actions += action 28 | return self 29 | } 30 | 31 | @discardableResult 32 | public func add(actions: [FloatingAction]) -> FloatingActionGroup { 33 | self.actions += actions 34 | return self 35 | } 36 | 37 | // MARK: Internal 38 | 39 | private(set) var actions = [FloatingAction]() 40 | } 41 | -------------------------------------------------------------------------------- /Pods/FloatingActionSheetController/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 ra1028 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/FloatingActionSheetController/README.md: -------------------------------------------------------------------------------- 1 | # FloationgActionSheetController 2 | ![Platform](http://img.shields.io/badge/platform-iOS-blue.svg?style=flat) 3 | [![Language](https://img.shields.io/badge/swift3-compatible-4BC51D.svg?style=flat)](https://developer.apple.com/swift) 4 | [![CocoaPods Shield](https://img.shields.io/cocoapods/v/FloatingActionSheetController.svg)](https://cocoapods.org/pods/FloatingActionSheetController) 5 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 6 | [![License](http://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/ra1028/FloatingActionSheetController/blob/master/LICENSE) 7 | 8 | FloatingActionSheetController is a cool design ActionSheetController library written in Swift2. 9 | 10 | ## Overview 11 | 12 | 13 | 14 | 15 | ## Requirements 16 | - Xcode 8+ 17 | - Swift3 18 | - iOS 8.0+ 19 | 20 | ## Installation 21 | 22 | ### CocoaPods 23 | ```ruby 24 | # Podfile 25 | use_frameworks! 26 | target 'YOUR_TARGET_NAME' do 27 | pod "FloatingActionSheetController" 28 | end 29 | ``` 30 | 31 | ### Carthage 32 | ```ruby 33 | # Cartfile 34 | github "ra1028/FloatingActionSheetController" 35 | ``` 36 | 37 | ## Usage 38 | 39 | __Import FloationgActionSheetController at first.__ 40 | ```swift 41 | import FloatingActionSheetController 42 | ``` 43 | 44 | ### example 45 | ```swift 46 | let action1 = FloatingAction(title: "title") { action in 47 | // Do something. 48 | } 49 | let action2 = FloatingAction(title: "title") { action in 50 | // Do something. 51 | } 52 | let action3 = FloatingAction(title: "title", handleImmediately: true) { action in 53 | // Do something. 54 | // If set to 'true' the handleImmediately, handler will be execute soon when Action was select. 55 | } 56 | let group1 = FloatingActionGroup(action: action1) 57 | let group2 = FloatingActionGroup(action: action2, action3) 58 | FloatingActionSheetController(actionGroup: group1, group2) 59 | .present(in: self) 60 | ``` 61 | We have prepared a rich initializer to each Class. Please refer to the demo app and source code. 62 | 63 | ### animations 64 | Custom animation styles. 65 | Please check the overview or demo app for animation details 66 | ```swift 67 | public enum AnimationStyle { 68 | case slideUp 69 | case slideDown 70 | case slideLeft 71 | case slideRight 72 | case pop 73 | } 74 | ``` 75 | How to use 76 | ```swift 77 | FloatingActionSheetController(actionGroup: group, animationStyle: .slideLeft) 78 | ``` 79 | ```swift 80 | let actionSheet = FloatingActionSheetController(actionGroup: group) 81 | actionSheet.animationStyle = .slideLeft 82 | ``` 83 | 84 | ### appearance customization 85 | ```swift 86 | let actionSheet = FloatingActionSheetController(actionGroup: group1) 87 | // Color of action sheet 88 | actionSheet.itemTintColor = .white 89 | // Color of title texts 90 | actionSheet.textColor = .black 91 | // Font of title texts 92 | actionSheet.font = .boldSystemFont(ofSize: 15) 93 | // background dimming color 94 | actionSheet.dimmingColor = UIColor(white: 1, alpha: 0.7) 95 | ``` 96 | If you wants to customize FloatingAction individually. 97 | ```swift 98 | var action = FloatingAction(title: "title") { action in 99 | // Do something. 100 | } 101 | action.tintColor = .whiteColor() 102 | action.textColor = .blackColor() 103 | action.font = .boldSystemFont(ofSize: 15) 104 | ``` 105 | 106 | ## License 107 | FloatingActionSheetController is available under the MIT license. See the LICENSE file for more info. 108 | -------------------------------------------------------------------------------- /Pods/Local Podspecs/Alamofire.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Alamofire", 3 | "version": "4.0.1", 4 | "license": "MIT", 5 | "summary": "Elegant HTTP Networking in Swift", 6 | "homepage": "https://github.com/Alamofire/Alamofire", 7 | "social_media_url": "http://twitter.com/AlamofireSF", 8 | "authors": { 9 | "Alamofire Software Foundation": "info@alamofire.org" 10 | }, 11 | "source": { 12 | "git": "https://github.com/Alamofire/Alamofire.git", 13 | "tag": "4.0.1" 14 | }, 15 | "platforms": { 16 | "ios": "9.0", 17 | "osx": "10.11", 18 | "tvos": "9.0", 19 | "watchos": "2.0" 20 | }, 21 | "source_files": "Source/*.swift" 22 | } 23 | -------------------------------------------------------------------------------- /Pods/Local Podspecs/FloatingActionSheetController.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FloatingActionSheetController", 3 | "version": "2.0.0", 4 | "authors": { 5 | "ra1028": "r.fe51028.r@gmail.com" 6 | }, 7 | "homepage": "https://github.com/ra1028", 8 | "summary": "FloatingActionSheetController is a cool design ActionSheetController library written in Swift2", 9 | "source": { 10 | "git": "https://github.com/ra1028/FloatingActionSheetController.git", 11 | "tag": "2.0.0" 12 | }, 13 | "license": { 14 | "type": "MIT", 15 | "file": "LICENSE" 16 | }, 17 | "platforms": { 18 | "ios": "8.0" 19 | }, 20 | "source_files": "FloatingActionSheetController/*.swift", 21 | "requires_arc": true, 22 | "ios": { 23 | "frameworks": [ 24 | "UIKit", 25 | "Foundation" 26 | ] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (4.0.1) 3 | - FloatingActionSheetController (2.0.0) 4 | - SDWebImage (3.7.5): 5 | - SDWebImage/Core (= 3.7.5) 6 | - SDWebImage/Core (3.7.5) 7 | 8 | DEPENDENCIES: 9 | - Alamofire (from `https://github.com/Alamofire/Alamofire.git`, tag `4.0.1`) 10 | - FloatingActionSheetController (from `https://github.com/ra1028/FloatingActionSheetController.git`, tag `2.0.0`) 11 | - SDWebImage 12 | 13 | EXTERNAL SOURCES: 14 | Alamofire: 15 | :git: https://github.com/Alamofire/Alamofire.git 16 | :tag: 4.0.1 17 | FloatingActionSheetController: 18 | :git: https://github.com/ra1028/FloatingActionSheetController.git 19 | :tag: 2.0.0 20 | 21 | CHECKOUT OPTIONS: 22 | Alamofire: 23 | :git: https://github.com/Alamofire/Alamofire.git 24 | :tag: 4.0.1 25 | FloatingActionSheetController: 26 | :git: https://github.com/ra1028/FloatingActionSheetController.git 27 | :tag: 2.0.0 28 | 29 | SPEC CHECKSUMS: 30 | Alamofire: 7682d43245de14874acd142ec137b144aa1dd335 31 | FloatingActionSheetController: d2cebff313e56709438abae1aff4eb8f1726ba98 32 | SDWebImage: 69c6303e3348fba97e03f65d65d4fbc26740f461 33 | 34 | PODFILE CHECKSUM: c29ed4a5bd9ccb71ac590fc2e2dee9641f4aebc8 35 | 36 | COCOAPODS: 1.0.1 37 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/chaos.xcuserdatad/xcschemes/Alamofire.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/chaos.xcuserdatad/xcschemes/FloatingActionSheetController.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/chaos.xcuserdatad/xcschemes/Pods-RainReminder.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/chaos.xcuserdatad/xcschemes/SDWebImage.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/chaos.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Alamofire.xcscheme 8 | 9 | isShown 10 | 11 | 12 | FloatingActionSheetController.xcscheme 13 | 14 | isShown 15 | 16 | 17 | Pods-RainReminder.xcscheme 18 | 19 | isShown 20 | 21 | 22 | SDWebImage.xcscheme 23 | 24 | isShown 25 | 26 | 27 | 28 | SuppressBuildableAutocreation 29 | 30 | 24F1A207D88A59E877C9759487479CDF 31 | 32 | primary 33 | 34 | 35 | 53C154809BC3D8C615A38B55646E96BC 36 | 37 | primary 38 | 39 | 40 | 88E9EC28B8B46C3631E6B242B50F4442 41 | 42 | primary 43 | 44 | 45 | F9CD46030E323F2B559E90B4756DB869 46 | 47 | primary 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /Pods/SDWebImage/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009 Olivier Poitrey 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | 21 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Fabrice Aneche on 06/01/14. 3 | // Copyright (c) 2014 Dailymotion. All rights reserved. 4 | // 5 | 6 | #import 7 | 8 | @interface NSData (ImageContentType) 9 | 10 | /** 11 | * Compute the content type for an image data 12 | * 13 | * @param data the input data 14 | * 15 | * @return the content type as string (i.e. image/jpeg, image/gif) 16 | */ 17 | + (NSString *)sd_contentTypeForImageData:(NSData *)data; 18 | 19 | @end 20 | 21 | 22 | @interface NSData (ImageContentTypeDeprecated) 23 | 24 | + (NSString *)contentTypeForImageData:(NSData *)data __deprecated_msg("Use `sd_contentTypeForImageData:`"); 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Fabrice Aneche on 06/01/14. 3 | // Copyright (c) 2014 Dailymotion. All rights reserved. 4 | // 5 | 6 | #import "NSData+ImageContentType.h" 7 | 8 | 9 | @implementation NSData (ImageContentType) 10 | 11 | + (NSString *)sd_contentTypeForImageData:(NSData *)data { 12 | uint8_t c; 13 | [data getBytes:&c length:1]; 14 | switch (c) { 15 | case 0xFF: 16 | return @"image/jpeg"; 17 | case 0x89: 18 | return @"image/png"; 19 | case 0x47: 20 | return @"image/gif"; 21 | case 0x49: 22 | case 0x4D: 23 | return @"image/tiff"; 24 | case 0x52: 25 | // R as RIFF for WEBP 26 | if ([data length] < 12) { 27 | return nil; 28 | } 29 | 30 | NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding]; 31 | if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) { 32 | return @"image/webp"; 33 | } 34 | 35 | return nil; 36 | } 37 | return nil; 38 | } 39 | 40 | @end 41 | 42 | 43 | @implementation NSData (ImageContentTypeDeprecated) 44 | 45 | + (NSString *)contentTypeForImageData:(NSData *)data { 46 | return [self sd_contentTypeForImageData:data]; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/SDWebImageCompat.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Jamie Pinkham 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import 11 | 12 | #ifdef __OBJC_GC__ 13 | #error SDWebImage does not support Objective-C Garbage Collection 14 | #endif 15 | 16 | #if __IPHONE_OS_VERSION_MIN_REQUIRED != 20000 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 17 | #error SDWebImage doesn't support Deployment Target version < 5.0 18 | #endif 19 | 20 | #if !TARGET_OS_IPHONE 21 | #import 22 | #ifndef UIImage 23 | #define UIImage NSImage 24 | #endif 25 | #ifndef UIImageView 26 | #define UIImageView NSImageView 27 | #endif 28 | #else 29 | 30 | #import 31 | 32 | #endif 33 | 34 | #ifndef NS_ENUM 35 | #define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type 36 | #endif 37 | 38 | #ifndef NS_OPTIONS 39 | #define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type 40 | #endif 41 | 42 | #if OS_OBJECT_USE_OBJC 43 | #undef SDDispatchQueueRelease 44 | #undef SDDispatchQueueSetterSementics 45 | #define SDDispatchQueueRelease(q) 46 | #define SDDispatchQueueSetterSementics strong 47 | #else 48 | #undef SDDispatchQueueRelease 49 | #undef SDDispatchQueueSetterSementics 50 | #define SDDispatchQueueRelease(q) (dispatch_release(q)) 51 | #define SDDispatchQueueSetterSementics assign 52 | #endif 53 | 54 | extern UIImage *SDScaledImageForKey(NSString *key, UIImage *image); 55 | 56 | typedef void(^SDWebImageNoParamsBlock)(); 57 | 58 | extern NSString *const SDWebImageErrorDomain; 59 | 60 | #define dispatch_main_sync_safe(block)\ 61 | if ([NSThread isMainThread]) {\ 62 | block();\ 63 | } else {\ 64 | dispatch_sync(dispatch_get_main_queue(), block);\ 65 | } 66 | 67 | #define dispatch_main_async_safe(block)\ 68 | if ([NSThread isMainThread]) {\ 69 | block();\ 70 | } else {\ 71 | dispatch_async(dispatch_get_main_queue(), block);\ 72 | } 73 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/SDWebImageCompat.m: -------------------------------------------------------------------------------- 1 | // 2 | // SDWebImageCompat.m 3 | // SDWebImage 4 | // 5 | // Created by Olivier Poitrey on 11/12/12. 6 | // Copyright (c) 2012 Dailymotion. All rights reserved. 7 | // 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | #if !__has_feature(objc_arc) 12 | #error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag 13 | #endif 14 | 15 | inline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) { 16 | if (!image) { 17 | return nil; 18 | } 19 | 20 | if ([image.images count] > 0) { 21 | NSMutableArray *scaledImages = [NSMutableArray array]; 22 | 23 | for (UIImage *tempImage in image.images) { 24 | [scaledImages addObject:SDScaledImageForKey(key, tempImage)]; 25 | } 26 | 27 | return [UIImage animatedImageWithImages:scaledImages duration:image.duration]; 28 | } 29 | else { 30 | if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { 31 | CGFloat scale = [UIScreen mainScreen].scale; 32 | if (key.length >= 8) { 33 | NSRange range = [key rangeOfString:@"@2x."]; 34 | if (range.location != NSNotFound) { 35 | scale = 2.0; 36 | } 37 | 38 | range = [key rangeOfString:@"@3x."]; 39 | if (range.location != NSNotFound) { 40 | scale = 3.0; 41 | } 42 | } 43 | 44 | UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation]; 45 | image = scaledImage; 46 | } 47 | return image; 48 | } 49 | } 50 | 51 | NSString *const SDWebImageErrorDomain = @"SDWebImageErrorDomain"; 52 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * Created by james on 9/28/11. 6 | * 7 | * For the full copyright and license information, please view the LICENSE 8 | * file that was distributed with this source code. 9 | */ 10 | 11 | #import 12 | #import "SDWebImageCompat.h" 13 | 14 | @interface UIImage (ForceDecode) 15 | 16 | + (UIImage *)decodedImageWithImage:(UIImage *)image; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * Created by james on 9/28/11. 6 | * 7 | * For the full copyright and license information, please view the LICENSE 8 | * file that was distributed with this source code. 9 | */ 10 | 11 | #import "SDWebImageDecoder.h" 12 | 13 | @implementation UIImage (ForceDecode) 14 | 15 | + (UIImage *)decodedImageWithImage:(UIImage *)image { 16 | // while downloading huge amount of images 17 | // autorelease the bitmap context 18 | // and all vars to help system to free memory 19 | // when there are memory warning. 20 | // on iOS7, do not forget to call 21 | // [[SDImageCache sharedImageCache] clearMemory]; 22 | @autoreleasepool{ 23 | // do not decode animated images 24 | if (image.images) { return image; } 25 | 26 | CGImageRef imageRef = image.CGImage; 27 | 28 | CGImageAlphaInfo alpha = CGImageGetAlphaInfo(imageRef); 29 | BOOL anyAlpha = (alpha == kCGImageAlphaFirst || 30 | alpha == kCGImageAlphaLast || 31 | alpha == kCGImageAlphaPremultipliedFirst || 32 | alpha == kCGImageAlphaPremultipliedLast); 33 | 34 | if (anyAlpha) { return image; } 35 | 36 | size_t width = CGImageGetWidth(imageRef); 37 | size_t height = CGImageGetHeight(imageRef); 38 | 39 | // current 40 | CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(CGImageGetColorSpace(imageRef)); 41 | CGColorSpaceRef colorspaceRef = CGImageGetColorSpace(imageRef); 42 | 43 | bool unsupportedColorSpace = (imageColorSpaceModel == 0 || imageColorSpaceModel == -1 || imageColorSpaceModel == kCGColorSpaceModelCMYK || imageColorSpaceModel == kCGColorSpaceModelIndexed); 44 | if (unsupportedColorSpace) 45 | colorspaceRef = CGColorSpaceCreateDeviceRGB(); 46 | 47 | CGContextRef context = CGBitmapContextCreate(NULL, width, 48 | height, 49 | CGImageGetBitsPerComponent(imageRef), 50 | 0, 51 | colorspaceRef, 52 | kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); 53 | 54 | // Draw the image into the context and retrieve the new image, which will now have an alpha layer 55 | CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); 56 | CGImageRef imageRefWithAlpha = CGBitmapContextCreateImage(context); 57 | UIImage *imageWithAlpha = [UIImage imageWithCGImage:imageRefWithAlpha scale:image.scale orientation:image.imageOrientation]; 58 | 59 | if (unsupportedColorSpace) 60 | CGColorSpaceRelease(colorspaceRef); 61 | 62 | CGContextRelease(context); 63 | CGImageRelease(imageRefWithAlpha); 64 | 65 | return imageWithAlpha; 66 | } 67 | } 68 | 69 | @end 70 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageDownloader.h" 11 | #import "SDWebImageOperation.h" 12 | 13 | extern NSString *const SDWebImageDownloadStartNotification; 14 | extern NSString *const SDWebImageDownloadReceiveResponseNotification; 15 | extern NSString *const SDWebImageDownloadStopNotification; 16 | extern NSString *const SDWebImageDownloadFinishNotification; 17 | 18 | @interface SDWebImageDownloaderOperation : NSOperation 19 | 20 | /** 21 | * The request used by the operation's connection. 22 | */ 23 | @property (strong, nonatomic, readonly) NSURLRequest *request; 24 | 25 | 26 | @property (assign, nonatomic) BOOL shouldDecompressImages; 27 | 28 | /** 29 | * Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. 30 | * 31 | * This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. 32 | */ 33 | @property (nonatomic, assign) BOOL shouldUseCredentialStorage; 34 | 35 | /** 36 | * The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. 37 | * 38 | * This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. 39 | */ 40 | @property (nonatomic, strong) NSURLCredential *credential; 41 | 42 | /** 43 | * The SDWebImageDownloaderOptions for the receiver. 44 | */ 45 | @property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options; 46 | 47 | /** 48 | * The expected size of data. 49 | */ 50 | @property (assign, nonatomic) NSInteger expectedSize; 51 | 52 | /** 53 | * The response returned by the operation's connection. 54 | */ 55 | @property (strong, nonatomic) NSURLResponse *response; 56 | 57 | /** 58 | * Initializes a `SDWebImageDownloaderOperation` object 59 | * 60 | * @see SDWebImageDownloaderOperation 61 | * 62 | * @param request the URL request 63 | * @param options downloader options 64 | * @param progressBlock the block executed when a new chunk of data arrives. 65 | * @note the progress block is executed on a background queue 66 | * @param completedBlock the block executed when the download is done. 67 | * @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue 68 | * @param cancelBlock the block executed if the download (operation) is cancelled 69 | * 70 | * @return the initialized instance 71 | */ 72 | - (id)initWithRequest:(NSURLRequest *)request 73 | options:(SDWebImageDownloaderOptions)options 74 | progress:(SDWebImageDownloaderProgressBlock)progressBlock 75 | completed:(SDWebImageDownloaderCompletedBlock)completedBlock 76 | cancelled:(SDWebImageNoParamsBlock)cancelBlock; 77 | 78 | @end 79 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | 11 | @protocol SDWebImageOperation 12 | 13 | - (void)cancel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageManager.h" 11 | 12 | @class SDWebImagePrefetcher; 13 | 14 | @protocol SDWebImagePrefetcherDelegate 15 | 16 | @optional 17 | 18 | /** 19 | * Called when an image was prefetched. 20 | * 21 | * @param imagePrefetcher The current image prefetcher 22 | * @param imageURL The image url that was prefetched 23 | * @param finishedCount The total number of images that were prefetched (successful or not) 24 | * @param totalCount The total number of images that were to be prefetched 25 | */ 26 | - (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didPrefetchURL:(NSURL *)imageURL finishedCount:(NSUInteger)finishedCount totalCount:(NSUInteger)totalCount; 27 | 28 | /** 29 | * Called when all images are prefetched. 30 | * @param imagePrefetcher The current image prefetcher 31 | * @param totalCount The total number of images that were prefetched (whether successful or not) 32 | * @param skippedCount The total number of images that were skipped 33 | */ 34 | - (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didFinishWithTotalCount:(NSUInteger)totalCount skippedCount:(NSUInteger)skippedCount; 35 | 36 | @end 37 | 38 | typedef void(^SDWebImagePrefetcherProgressBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls); 39 | typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls); 40 | 41 | /** 42 | * Prefetch some URLs in the cache for future use. Images are downloaded in low priority. 43 | */ 44 | @interface SDWebImagePrefetcher : NSObject 45 | 46 | /** 47 | * The web image manager 48 | */ 49 | @property (strong, nonatomic, readonly) SDWebImageManager *manager; 50 | 51 | /** 52 | * Maximum number of URLs to prefetch at the same time. Defaults to 3. 53 | */ 54 | @property (nonatomic, assign) NSUInteger maxConcurrentDownloads; 55 | 56 | /** 57 | * SDWebImageOptions for prefetcher. Defaults to SDWebImageLowPriority. 58 | */ 59 | @property (nonatomic, assign) SDWebImageOptions options; 60 | 61 | /** 62 | * Queue options for Prefetcher. Defaults to Main Queue. 63 | */ 64 | @property (nonatomic, assign) dispatch_queue_t prefetcherQueue; 65 | 66 | @property (weak, nonatomic) id delegate; 67 | 68 | /** 69 | * Return the global image prefetcher instance. 70 | */ 71 | + (SDWebImagePrefetcher *)sharedImagePrefetcher; 72 | 73 | /** 74 | * Allows you to instantiate a prefetcher with any arbitrary image manager. 75 | */ 76 | - (id)initWithImageManager:(SDWebImageManager *)manager; 77 | 78 | /** 79 | * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching, 80 | * currently one image is downloaded at a time, 81 | * and skips images for failed downloads and proceed to the next image in the list 82 | * 83 | * @param urls list of URLs to prefetch 84 | */ 85 | - (void)prefetchURLs:(NSArray *)urls; 86 | 87 | /** 88 | * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching, 89 | * currently one image is downloaded at a time, 90 | * and skips images for failed downloads and proceed to the next image in the list 91 | * 92 | * @param urls list of URLs to prefetch 93 | * @param progressBlock block to be called when progress updates; 94 | * first parameter is the number of completed (successful or not) requests, 95 | * second parameter is the total number of images originally requested to be prefetched 96 | * @param completionBlock block to be called when prefetching is completed 97 | * first param is the number of completed (successful or not) requests, 98 | * second parameter is the number of skipped requests 99 | */ 100 | - (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock; 101 | 102 | /** 103 | * Remove and cancel queued list 104 | */ 105 | - (void)cancelPrefetching; 106 | 107 | 108 | @end 109 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/UIImage+GIF.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+GIF.h 3 | // LBGIFImage 4 | // 5 | // Created by Laurin Brandner on 06.01.12. 6 | // Copyright (c) 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (GIF) 12 | 13 | + (UIImage *)sd_animatedGIFNamed:(NSString *)name; 14 | 15 | + (UIImage *)sd_animatedGIFWithData:(NSData *)data; 16 | 17 | - (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+MultiFormat.h 3 | // SDWebImage 4 | // 5 | // Created by Olivier Poitrey on 07/06/13. 6 | // Copyright (c) 2013 Dailymotion. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (MultiFormat) 12 | 13 | + (UIImage *)sd_imageWithData:(NSData *)data; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+MultiFormat.m 3 | // SDWebImage 4 | // 5 | // Created by Olivier Poitrey on 07/06/13. 6 | // Copyright (c) 2013 Dailymotion. All rights reserved. 7 | // 8 | 9 | #import "UIImage+MultiFormat.h" 10 | #import "UIImage+GIF.h" 11 | #import "NSData+ImageContentType.h" 12 | #import 13 | 14 | #ifdef SD_WEBP 15 | #import "UIImage+WebP.h" 16 | #endif 17 | 18 | @implementation UIImage (MultiFormat) 19 | 20 | + (UIImage *)sd_imageWithData:(NSData *)data { 21 | if (!data) { 22 | return nil; 23 | } 24 | 25 | UIImage *image; 26 | NSString *imageContentType = [NSData sd_contentTypeForImageData:data]; 27 | if ([imageContentType isEqualToString:@"image/gif"]) { 28 | image = [UIImage sd_animatedGIFWithData:data]; 29 | } 30 | #ifdef SD_WEBP 31 | else if ([imageContentType isEqualToString:@"image/webp"]) 32 | { 33 | image = [UIImage sd_imageWithWebPData:data]; 34 | } 35 | #endif 36 | else { 37 | image = [[UIImage alloc] initWithData:data]; 38 | UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data]; 39 | if (orientation != UIImageOrientationUp) { 40 | image = [UIImage imageWithCGImage:image.CGImage 41 | scale:image.scale 42 | orientation:orientation]; 43 | } 44 | } 45 | 46 | 47 | return image; 48 | } 49 | 50 | 51 | +(UIImageOrientation)sd_imageOrientationFromImageData:(NSData *)imageData { 52 | UIImageOrientation result = UIImageOrientationUp; 53 | CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL); 54 | if (imageSource) { 55 | CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); 56 | if (properties) { 57 | CFTypeRef val; 58 | int exifOrientation; 59 | val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation); 60 | if (val) { 61 | CFNumberGetValue(val, kCFNumberIntType, &exifOrientation); 62 | result = [self sd_exifOrientationToiOSOrientation:exifOrientation]; 63 | } // else - if it's not set it remains at up 64 | CFRelease((CFTypeRef) properties); 65 | } else { 66 | //NSLog(@"NO PROPERTIES, FAIL"); 67 | } 68 | CFRelease(imageSource); 69 | } 70 | return result; 71 | } 72 | 73 | #pragma mark EXIF orientation tag converter 74 | // Convert an EXIF image orientation to an iOS one. 75 | // reference see here: http://sylvana.net/jpegcrop/exif_orientation.html 76 | + (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation { 77 | UIImageOrientation orientation = UIImageOrientationUp; 78 | switch (exifOrientation) { 79 | case 1: 80 | orientation = UIImageOrientationUp; 81 | break; 82 | 83 | case 3: 84 | orientation = UIImageOrientationDown; 85 | break; 86 | 87 | case 8: 88 | orientation = UIImageOrientationLeft; 89 | break; 90 | 91 | case 6: 92 | orientation = UIImageOrientationRight; 93 | break; 94 | 95 | case 2: 96 | orientation = UIImageOrientationUpMirrored; 97 | break; 98 | 99 | case 4: 100 | orientation = UIImageOrientationDownMirrored; 101 | break; 102 | 103 | case 5: 104 | orientation = UIImageOrientationLeftMirrored; 105 | break; 106 | 107 | case 7: 108 | orientation = UIImageOrientationRightMirrored; 109 | break; 110 | default: 111 | break; 112 | } 113 | return orientation; 114 | } 115 | 116 | 117 | 118 | @end 119 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageManager.h" 11 | 12 | @interface UIView (WebCacheOperation) 13 | 14 | /** 15 | * Set the image load operation (storage in a UIView based dictionary) 16 | * 17 | * @param operation the operation 18 | * @param key key for storing the operation 19 | */ 20 | - (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key; 21 | 22 | /** 23 | * Cancel all operations for the current UIView and key 24 | * 25 | * @param key key for identifying the operations 26 | */ 27 | - (void)sd_cancelImageLoadOperationWithKey:(NSString *)key; 28 | 29 | /** 30 | * Just remove the operations corresponding to the current UIView and key without cancelling them 31 | * 32 | * @param key key for identifying the operations 33 | */ 34 | - (void)sd_removeImageLoadOperationWithKey:(NSString *)key; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "UIView+WebCacheOperation.h" 10 | #import "objc/runtime.h" 11 | 12 | static char loadOperationKey; 13 | 14 | @implementation UIView (WebCacheOperation) 15 | 16 | - (NSMutableDictionary *)operationDictionary { 17 | NSMutableDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey); 18 | if (operations) { 19 | return operations; 20 | } 21 | operations = [NSMutableDictionary dictionary]; 22 | objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 23 | return operations; 24 | } 25 | 26 | - (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key { 27 | [self sd_cancelImageLoadOperationWithKey:key]; 28 | NSMutableDictionary *operationDictionary = [self operationDictionary]; 29 | [operationDictionary setObject:operation forKey:key]; 30 | } 31 | 32 | - (void)sd_cancelImageLoadOperationWithKey:(NSString *)key { 33 | // Cancel in progress downloader from queue 34 | NSMutableDictionary *operationDictionary = [self operationDictionary]; 35 | id operations = [operationDictionary objectForKey:key]; 36 | if (operations) { 37 | if ([operations isKindOfClass:[NSArray class]]) { 38 | for (id operation in operations) { 39 | if (operation) { 40 | [operation cancel]; 41 | } 42 | } 43 | } else if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){ 44 | [(id) operations cancel]; 45 | } 46 | [operationDictionary removeObjectForKey:key]; 47 | } 48 | } 49 | 50 | - (void)sd_removeImageLoadOperationWithKey:(NSString *)key { 51 | NSMutableDictionary *operationDictionary = [self operationDictionary]; 52 | [operationDictionary removeObjectForKey:key]; 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double AlamofireVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire.modulemap: -------------------------------------------------------------------------------- 1 | framework module Alamofire { 2 | umbrella header "Alamofire-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Alamofire 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 4.0.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FloatingActionSheetController/FloatingActionSheetController-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_FloatingActionSheetController : NSObject 3 | @end 4 | @implementation PodsDummy_FloatingActionSheetController 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FloatingActionSheetController/FloatingActionSheetController-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FloatingActionSheetController/FloatingActionSheetController-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double FloatingActionSheetControllerVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char FloatingActionSheetControllerVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FloatingActionSheetController/FloatingActionSheetController.modulemap: -------------------------------------------------------------------------------- 1 | framework module FloatingActionSheetController { 2 | umbrella header "FloatingActionSheetController-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FloatingActionSheetController/FloatingActionSheetController.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FloatingActionSheetController 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FloatingActionSheetController/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 2.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-RainReminder/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-RainReminder/Pods-RainReminder-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## Alamofire 5 | 6 | Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | 27 | ## FloatingActionSheetController 28 | 29 | The MIT License (MIT) 30 | 31 | Copyright (c) 2015 ra1028 32 | 33 | Permission is hereby granted, free of charge, to any person obtaining a copy 34 | of this software and associated documentation files (the "Software"), to deal 35 | in the Software without restriction, including without limitation the rights 36 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 37 | copies of the Software, and to permit persons to whom the Software is 38 | furnished to do so, subject to the following conditions: 39 | 40 | The above copyright notice and this permission notice shall be included in all 41 | copies or substantial portions of the Software. 42 | 43 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 44 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 45 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 46 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 47 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 48 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 49 | SOFTWARE. 50 | 51 | 52 | ## SDWebImage 53 | 54 | Copyright (c) 2009 Olivier Poitrey 55 | 56 | Permission is hereby granted, free of charge, to any person obtaining a copy 57 | of this software and associated documentation files (the "Software"), to deal 58 | in the Software without restriction, including without limitation the rights 59 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 60 | copies of the Software, and to permit persons to whom the Software is furnished 61 | to do so, subject to the following conditions: 62 | 63 | The above copyright notice and this permission notice shall be included in all 64 | copies or substantial portions of the Software. 65 | 66 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 67 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 68 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 69 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 70 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 71 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 72 | THE SOFTWARE. 73 | 74 | 75 | Generated by CocoaPods - https://cocoapods.org 76 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-RainReminder/Pods-RainReminder-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_RainReminder : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_RainReminder 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-RainReminder/Pods-RainReminder-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "$BUILT_PRODUCTS_DIR/Alamofire/Alamofire.framework" 88 | install_framework "$BUILT_PRODUCTS_DIR/FloatingActionSheetController/FloatingActionSheetController.framework" 89 | install_framework "$BUILT_PRODUCTS_DIR/SDWebImage/SDWebImage.framework" 90 | fi 91 | if [[ "$CONFIGURATION" == "Release" ]]; then 92 | install_framework "$BUILT_PRODUCTS_DIR/Alamofire/Alamofire.framework" 93 | install_framework "$BUILT_PRODUCTS_DIR/FloatingActionSheetController/FloatingActionSheetController.framework" 94 | install_framework "$BUILT_PRODUCTS_DIR/SDWebImage/SDWebImage.framework" 95 | fi 96 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-RainReminder/Pods-RainReminder-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_RainReminderVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_RainReminderVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-RainReminder/Pods-RainReminder.debug.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/FloatingActionSheetController" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FloatingActionSheetController/FloatingActionSheetController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "FloatingActionSheetController" -framework "SDWebImage" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-RainReminder/Pods-RainReminder.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_RainReminder { 2 | umbrella header "Pods-RainReminder-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-RainReminder/Pods-RainReminder.release.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/FloatingActionSheetController" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FloatingActionSheetController/FloatingActionSheetController.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "FloatingActionSheetController" -framework "SDWebImage" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.7.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "NSData+ImageContentType.h" 4 | #import "SDImageCache.h" 5 | #import "SDWebImageCompat.h" 6 | #import "SDWebImageDecoder.h" 7 | #import "SDWebImageDownloader.h" 8 | #import "SDWebImageDownloaderOperation.h" 9 | #import "SDWebImageManager.h" 10 | #import "SDWebImageOperation.h" 11 | #import "SDWebImagePrefetcher.h" 12 | #import "UIButton+WebCache.h" 13 | #import "UIImage+GIF.h" 14 | #import "UIImage+MultiFormat.h" 15 | #import "UIImageView+HighlightedWebCache.h" 16 | #import "UIImageView+WebCache.h" 17 | #import "UIView+WebCacheOperation.h" 18 | 19 | FOUNDATION_EXPORT double SDWebImageVersionNumber; 20 | FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; 21 | 22 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module SDWebImage { 2 | umbrella header "SDWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SDWebImage 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_LDFLAGS = -framework "ImageIO" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](http://ww4.sinaimg.cn/large/7a1656d9gw1f343yvzdn5j20mf099jrk.jpg) 2 | 3 | # RainReminder 4 | 5 | **Version 1.4.0** ![](https://travis-ci.org/ChaosTong/RainReminder.svg?branch=develop) 6 | 7 | **Update to Swift3** date 2017.08.29 8 | 9 | > 简洁的Swift天气预报软件.(ps:简洁是因为复杂的我还不会orz) 10 | 11 | 明天要下雨,你记得要带伞了吗? 12 | 明天要降温,你记得要多穿衣服了吗? 13 | 明天要刮风,你记得要口罩了吗? 14 | 15 | 简洁的天气预报软件,简洁的操作,手势下拉搜索,或上滑显示七天预报. 16 | 还可以使用中文搜索中国其它地区的天气哦. 17 | 目前只支持中国国内地区,搜索暂不支持海外. 18 | 设置中可以设置提醒的时间.下雨或异常天气才会提醒哦. 19 | 20 | 支持微博分享当天天气内容. 21 | 22 | 联系邮箱: easyulife@gmail.com 23 | 讨论Q群: 188255611 24 | 25 | ####WebSite: [RainReminder-Swift天气应用](http://www.tongchao.xyz/2016/05/04/rainreminder-swifttian-qi-ying-yong/) 26 | ####AppStore: [已上架AppStore](https://itunes.apple.com/us/app/rainreminder/id1102738128?l=zh&ls=1&mt=8) 27 | 28 | ## GIF 29 | 30 | ![探索应用](http://ww4.sinaimg.cn/large/7a1656d9gw1f3jrhog0r0g20af0ij48m.gif) 31 | ![七天预报](http://ww3.sinaimg.cn/large/7a1656d9gw1f3jrid7oqag20af0ij1e0.gif) 32 | ![通知](http://ww4.sinaimg.cn/large/7a1656d9gw1f3jrgot1p0g20af0ij7ot.gif) 33 | ![搜索](http://ww3.sinaimg.cn/large/7a1656d9gw1f3jrh3l5wmg20af0ijmzh.gif) 34 | ![分享到微博](http://ww4.sinaimg.cn/large/7a1656d9gw1f3jrhcmnj7g20af0ijgzi.gif) 35 | ![Today Widget](http://ww4.sinaimg.cn/large/7a1656d9gw1f3jri3fcalg20af0ijdsl.gif) 36 | 37 | 38 | ## Installing/Getting started 39 | 40 | 41 | - 拥有一台Mac,并且安装了最新的Xcode. 42 | - 需要开发证书,个人证书(free自行google),苹果开发者购买(99$/year) or taobao(ps:虚拟机开发不许要证书,相关开发功能受限,区别自行google) 43 | - 安装cocoapods.(自行google) 44 | - git clone project,then 使用terminal 45 | 46 | ```shell 47 | pod install 48 | ``` 49 | 50 | - 打开`RainReminder.xcworkspace`,修改`Bundle Identifier`名称,修改`Team`里的证书 51 | - 在`Build Settings` -> `Code Signing`, 修改签名. 52 | 53 | > 没有开发者证书的,把`today`相关信息删除.这个是Today Widget部分. 54 | > 注意有两个分支通常以通过审核版本会放在master里,开发版会放在develop里。 55 | > 出现任何问题可以make a issue,或者发送email:info@easyulife.com(尽可能一次性描述你的问题) 56 | 57 | ## Developing 58 | 59 | 如何学习此项目(首先,写的不好,仅限初学者学习) 60 | 代码比较易懂,没有过多的封装,所以没有很详细的介绍. 61 | 通过本项目可以比较熟悉的了解以下内容: 62 | 63 | - 使用Alamofire库进行网络请求 64 | - 使用SwiftyJSON解析JSON数据 65 | - 使用UserDefault保存数据 66 | - 使用NSCoding协议归档数据 67 | - 使用TableView,CollectionView 68 | - 使用SDWebImage获取网络图片 69 | - WeiboSDK获取授权并发送微博 70 | - 本地通知 71 | - 商品内购 72 | - 使用定位服务并获取`CLPlacemark`相关信息 73 | - Today Widget 74 | 75 | > 以上内容都会以项目代码为实例`‘尽快’`编写相关教程(如果这个项目有人star的话...目标100个就写好不好) 76 | 77 | ## Features 78 | 79 | ***这款应用能干什么呢?*** 80 | 81 | * 当然是获取天气啦,信息由和风天气提供3小时更新,7天预报 82 | * 搜索中国地区天气 83 | * 设置提醒(明天要下雨啦,明天降温了,明天热死了) 84 | * 分享到微博,App专用小尾巴(来自RainReminder) 85 | * Today Widget 86 | 87 | ## Contributing 88 | 89 | - [Alamofire](https://github.com/Alamofire/Alamofire) 90 | - [SDWebImage](https://github.com/rs/SDWebImage) 91 | - [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON) 92 | - [icon](https://erikflowers.github.io/weather-icons/) 93 | - [FloatingActionSheetController](https://github.com/ra1028/FloatingActionSheetController) 94 | - 使用知乎日报启动图片api(总是推广告图片,烦死了,目前图片地址给我写死了,改天换代码家的妹子图) 95 | - 我看这个入门的[SwiftWeather](https://github.com/JakeLin/SwiftWeather)(对了,图标也是他们家的) 96 | - 搬了很多他的代码[UmbrellaWeather](https://github.com/ZeroJian/UmbrellaWeather) 97 | - 和风天气api,记得用自己的key,免费用户一天只有3000(这个项目会有人看吗?) 98 | 99 | ## Contact Me 100 | 101 | - [weibo](http://weibo.com/2048284377) 102 | - 103 | - Job for me[简历](https://github.com/ChaosTong/resume), 坐标: 上海 104 | 105 | ## Licensing 106 | 107 | The MIT License (MIT) 108 | 109 | Copyright (c) 2015 ChaosTong 110 | 111 | 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: 112 | 113 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 114 | 115 | 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. 116 | 117 | 118 | -------------------------------------------------------------------------------- /RainReminder.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /RainReminder.xcodeproj/project.xcworkspace/xcuserdata/chaos.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder.xcodeproj/project.xcworkspace/xcuserdata/chaos.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /RainReminder.xcodeproj/xcshareddata/xcschemes/RainReminder.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 69 | 70 | 71 | 72 | 73 | 74 | 80 | 82 | 88 | 89 | 90 | 91 | 93 | 94 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /RainReminder.xcodeproj/xcuserdata/chaos.xcuserdatad/xcschemes/today.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 16 | 22 | 23 | 24 | 30 | 36 | 37 | 38 | 39 | 40 | 45 | 46 | 47 | 48 | 54 | 55 | 56 | 57 | 58 | 59 | 70 | 72 | 78 | 79 | 80 | 81 | 82 | 83 | 90 | 92 | 98 | 99 | 100 | 101 | 103 | 104 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /RainReminder.xcodeproj/xcuserdata/chaos.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | RainReminder.xcscheme_^#shared#^_ 8 | 9 | isShown 10 | 11 | orderHint 12 | 6 13 | 14 | today.xcscheme 15 | 16 | isShown 17 | 18 | orderHint 19 | 5 20 | 21 | 22 | SuppressBuildableAutocreation 23 | 24 | C44BA0841CD871A6009FA914 25 | 26 | primary 27 | 28 | 29 | C495795B1CB507CB0051D7C8 30 | 31 | primary 32 | 33 | 34 | C4DA1FD81CD9A2150040F802 35 | 36 | primary 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /RainReminder.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /RainReminder.xcworkspace/xcshareddata/RainReminder.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "24FABFB38516C24E75F0D96FFF4243FB2E0EAB9A", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "24FABFB38516C24E75F0D96FFF4243FB2E0EAB9A" : 0, 8 | "D6D7E8BF6D471A28DF4F59BB0B462FDE5B4509FC" : 0 9 | }, 10 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "40126F07-204C-46ED-B710-A77BE3590AD4", 11 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 12 | "24FABFB38516C24E75F0D96FFF4243FB2E0EAB9A" : "RainReminder\/", 13 | "D6D7E8BF6D471A28DF4F59BB0B462FDE5B4509FC" : "RainReminder\/RainReminder\/UmbrellaWeather\/" 14 | }, 15 | "DVTSourceControlWorkspaceBlueprintNameKey" : "RainReminder", 16 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 17 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "RainReminder.xcworkspace", 18 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 19 | { 20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:ChaosTong\/RainReminder.git", 21 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 22 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "24FABFB38516C24E75F0D96FFF4243FB2E0EAB9A" 23 | }, 24 | { 25 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/ZeroJian\/UmbrellaWeather.git", 26 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "D6D7E8BF6D471A28DF4F59BB0B462FDE5B4509FC" 28 | } 29 | ] 30 | } -------------------------------------------------------------------------------- /RainReminder.xcworkspace/xcuserdata/chaos.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder.xcworkspace/xcuserdata/chaos.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /RainReminder.xcworkspace/xcuserdata/chaos.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 20 | 21 | 22 | 24 | 36 | 37 | 38 | 40 | 52 | 53 | 54 | 56 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /RainReminder/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/.DS_Store -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/.DS_Store -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "size" : "29x29", 15 | "idiom" : "iphone", 16 | "filename" : "Icon-29@2x-1.png", 17 | "scale" : "2x" 18 | }, 19 | { 20 | "size" : "29x29", 21 | "idiom" : "iphone", 22 | "filename" : "Icon-29@3x.png", 23 | "scale" : "3x" 24 | }, 25 | { 26 | "size" : "40x40", 27 | "idiom" : "iphone", 28 | "filename" : "Icon-40@2x.png", 29 | "scale" : "2x" 30 | }, 31 | { 32 | "size" : "40x40", 33 | "idiom" : "iphone", 34 | "filename" : "Icon-40@3x.png", 35 | "scale" : "3x" 36 | }, 37 | { 38 | "size" : "60x60", 39 | "idiom" : "iphone", 40 | "filename" : "Icon-60@2x.png", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "size" : "60x60", 45 | "idiom" : "iphone", 46 | "filename" : "Icon-60@3x.png", 47 | "scale" : "3x" 48 | } 49 | ], 50 | "info" : { 51 | "version" : 1, 52 | "author" : "xcode" 53 | } 54 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/BackgroundIAP.imageset/BackgroundIAP@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/BackgroundIAP.imageset/BackgroundIAP@2x~iphone.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/BackgroundIAP.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "iphone", 9 | "filename" : "BackgroundIAP@2x~iphone.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "iphone", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/BackgroundPattern.imageset/BackgroundPattern@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/BackgroundPattern.imageset/BackgroundPattern@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/BackgroundPattern.imageset/BackgroundPattern@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/BackgroundPattern.imageset/BackgroundPattern@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/BackgroundPattern.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "BackgroundPattern@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "BackgroundPattern@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/BackgroundShareSina.imageset/BackgroundShareSina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/BackgroundShareSina.imageset/BackgroundShareSina.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/BackgroundShareSina.imageset/BackgroundShareSina@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/BackgroundShareSina.imageset/BackgroundShareSina@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/BackgroundShareSina.imageset/BackgroundShareSina@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/BackgroundShareSina.imageset/BackgroundShareSina@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/BackgroundShareSina.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "BackgroundShareSina.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "BackgroundShareSina@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "BackgroundShareSina@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Brand Assets.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "minimum-system-version" : "7.0", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "orientation" : "portrait", 11 | "idiom" : "iphone", 12 | "minimum-system-version" : "7.0", 13 | "subtype" : "retina4", 14 | "scale" : "2x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ButtonShareLogin.imageset/ButtonShareLogin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/ButtonShareLogin.imageset/ButtonShareLogin.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ButtonShareLogin.imageset/ButtonShareLogin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/ButtonShareLogin.imageset/ButtonShareLogin@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ButtonShareLogin.imageset/ButtonShareLogin@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/ButtonShareLogin.imageset/ButtonShareLogin@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ButtonShareLogin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ButtonShareLogin.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ButtonShareLogin@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ButtonShareLogin@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ButtonShareSubmit.imageset/ButtonShareSubmit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/ButtonShareSubmit.imageset/ButtonShareSubmit.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ButtonShareSubmit.imageset/ButtonShareSubmit@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/ButtonShareSubmit.imageset/ButtonShareSubmit@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ButtonShareSubmit.imageset/ButtonShareSubmit@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/ButtonShareSubmit.imageset/ButtonShareSubmit@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ButtonShareSubmit.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ButtonShareSubmit.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ButtonShareSubmit@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ButtonShareSubmit@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/HuaTiShouYeSearchIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "HuaTiShouYeSearchIcon@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "HuaTiShouYeSearchIcon@2x-1.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/HuaTiShouYeSearchIcon.imageset/HuaTiShouYeSearchIcon@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/HuaTiShouYeSearchIcon.imageset/HuaTiShouYeSearchIcon@2x-1.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/HuaTiShouYeSearchIcon.imageset/HuaTiShouYeSearchIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/HuaTiShouYeSearchIcon.imageset/HuaTiShouYeSearchIcon@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconFollowUs.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "IconFollowUs.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "IconFollowUs@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "IconFollowUs@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconFollowUs.imageset/IconFollowUs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/IconFollowUs.imageset/IconFollowUs.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconFollowUs.imageset/IconFollowUs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/IconFollowUs.imageset/IconFollowUs@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconFollowUs.imageset/IconFollowUs@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/IconFollowUs.imageset/IconFollowUs@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconSetting.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "IconSetting.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "IconSetting@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "IconSetting@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconSetting.imageset/IconSetting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/IconSetting.imageset/IconSetting.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconSetting.imageset/IconSetting@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/IconSetting.imageset/IconSetting@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconSetting.imageset/IconSetting@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/IconSetting.imageset/IconSetting@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconShareClose.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "IconShareClose.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "IconShareClose@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "IconShareClose@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconShareClose.imageset/IconShareClose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/IconShareClose.imageset/IconShareClose.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconShareClose.imageset/IconShareClose@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/IconShareClose.imageset/IconShareClose@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/IconShareClose.imageset/IconShareClose@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/IconShareClose.imageset/IconShareClose@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/LaunchImage-700.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "LaunchImage-700@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/LaunchImage-700.imageset/LaunchImage-700@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/LaunchImage-700.imageset/LaunchImage-700@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Loading.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Loading@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "Loading@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Loading.imageset/Loading@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/Loading.imageset/Loading@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Loading.imageset/Loading@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/Loading.imageset/Loading@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Location.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Location@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "Location@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Location.imageset/Location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/Location.imageset/Location@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Location.imageset/Location@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/Location.imageset/Location@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Shape.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Shape@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "Shape@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Shape.imageset/Shape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/Shape.imageset/Shape@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/Shape.imageset/Shape@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/Shape.imageset/Shape@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ShareSheetSinaWeibo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ShareSheetSinaWeibo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ShareSheetSinaWeibo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ShareSheetSinaWeibo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ShareSheetSinaWeibo.imageset/ShareSheetSinaWeibo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/ShareSheetSinaWeibo.imageset/ShareSheetSinaWeibo.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ShareSheetSinaWeibo.imageset/ShareSheetSinaWeibo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/ShareSheetSinaWeibo.imageset/ShareSheetSinaWeibo@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/ShareSheetSinaWeibo.imageset/ShareSheetSinaWeibo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/ShareSheetSinaWeibo.imageset/ShareSheetSinaWeibo@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "background.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/background.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/background.imageset/background.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "dark.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/dark.imageset/dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/dark.imageset/dark.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/low.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "low.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/low.imageset/low.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/low.imageset/low.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/nowWeather.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "launch-1.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "launch.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/nowWeather.imageset/launch-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/nowWeather.imageset/launch-1.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/nowWeather.imageset/launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/nowWeather.imageset/launch.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/shareBtn_topic_blank.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "shareBtn_topic_blank@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "shareBtn_topic_blank@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/shareBtn_topic_blank.imageset/shareBtn_topic_blank@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/shareBtn_topic_blank.imageset/shareBtn_topic_blank@2x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/shareBtn_topic_blank.imageset/shareBtn_topic_blank@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/shareBtn_topic_blank.imageset/shareBtn_topic_blank@3x.png -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/spring.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "spring.jpeg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /RainReminder/Assets.xcassets/spring.imageset/spring.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/Assets.xcassets/spring.imageset/spring.jpeg -------------------------------------------------------------------------------- /RainReminder/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /RainReminder/City.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Citys.swift 3 | // UmberellaWeather 4 | // 5 | // Created by ZeroJianMBP on 15/12/25. 6 | // Copyright © 2015年 ZeroJian. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class City: NSObject,NSCoding{ 12 | var cityCN = "" 13 | 14 | override init(){ 15 | super.init() 16 | } 17 | 18 | 19 | required init?(coder aDecoder: NSCoder) { 20 | cityCN = aDecoder.decodeObject(forKey: "CityCN") as! String 21 | super.init() 22 | } 23 | 24 | func encode(with aCoder: NSCoder) { 25 | aCoder.encode(cityCN, forKey: "CityCN") 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /RainReminder/CityListCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CityListCell.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/11. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CityListCell: UITableViewCell { 12 | 13 | @IBOutlet weak var labelOfCity: UILabel! 14 | 15 | func addCityName(_ city: City){ 16 | labelOfCity.text = city.cityCN 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /RainReminder/DINNextLTPro-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/DINNextLTPro-Light.otf -------------------------------------------------------------------------------- /RainReminder/DailyResult.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DailyResult.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/7. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class DailyResult: NSObject,NSCoding{ 12 | var dailyTmpMax = "" 13 | var dailyTmpMin = "" 14 | var dailyState = "" 15 | var dailyDate = "" 16 | var dailyPop = 0 17 | var dailyStateCode = 0 18 | 19 | override init() { 20 | super.init() 21 | } 22 | 23 | required init?(coder aDecoder: NSCoder) { 24 | dailyTmpMax = aDecoder.decodeObject(forKey: "DailyTmpMax") as! String 25 | dailyTmpMin = aDecoder.decodeObject(forKey: "DailyTmpMin") as! String 26 | dailyState = aDecoder.decodeObject(forKey: "DailyState") as! String 27 | dailyDate = aDecoder.decodeObject(forKey: "DailyDate") as! String 28 | dailyPop = aDecoder.decodeInteger(forKey: "DailyPop") 29 | dailyStateCode = aDecoder.decodeInteger(forKey: "DailyStateCode") 30 | super.init() 31 | } 32 | 33 | func encode(with aCoder: NSCoder) { 34 | aCoder.encode(dailyTmpMax, forKey: "DailyTmpMax") 35 | aCoder.encode(dailyTmpMin, forKey: "DailyTmpMin") 36 | aCoder.encode(dailyState, forKey: "DailyState") 37 | aCoder.encode(dailyDate, forKey: "DailyDate") 38 | aCoder.encode(dailyPop, forKey: "DailyPop") 39 | aCoder.encode(dailyStateCode, forKey: "DailyStateCode") 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /RainReminder/DimmingPresentationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DimmingPresentationController.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/12. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DimmingPresentationController: UIPresentationController{ 12 | override var shouldRemovePresentersView : Bool { 13 | return false 14 | } 15 | 16 | lazy var dimmingView = GradientView(frame: CGRect.zero) 17 | override func presentationTransitionWillBegin() { 18 | dimmingView.frame = containerView!.bounds 19 | containerView!.insertSubview(dimmingView, at: 0) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /RainReminder/FirstView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FirstView.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/11. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FirstView: UIView { 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | loadViewFormNib() 16 | } 17 | 18 | required init?(coder aDecoder: NSCoder) { 19 | super.init(coder: aDecoder) 20 | loadViewFormNib() 21 | fatalError("init(coder:) has not been implemented") 22 | } 23 | 24 | func loadViewFormNib(){ 25 | let bundle = Bundle(for: type(of: self)) 26 | let nib = UINib(nibName: "FirstView", bundle: bundle) 27 | let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 28 | view.frame = bounds 29 | self.addSubview(view) 30 | } 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /RainReminder/Functions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Functions.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/6. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Dispatch 11 | 12 | func afterDelay(_ seconds: Double, closure: @escaping () -> ()) { 13 | let when = DispatchTime.now() + Double(Int64(seconds * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC) 14 | DispatchQueue.main.asyncAfter(deadline: when, execute: closure) 15 | } 16 | 17 | -------------------------------------------------------------------------------- /RainReminder/GeoInfoModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GeoInfoModel.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/7. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct GeoinfoModel { 12 | 13 | var country = "" 14 | var country_code = "" 15 | var province = "" 16 | var city = "" 17 | var district = "" 18 | var street = "" 19 | //var postalCode = "" 20 | var name = "" 21 | 22 | init(country: String, country_code: String, province: String, city: String, district: String, street: String, name: String) { 23 | self.country = country 24 | self.country_code = country_code 25 | self.province = province 26 | self.city = city 27 | self.district = district 28 | self.street = street 29 | //self.postalCode = postalCode 30 | self.name = name 31 | } 32 | 33 | static func encode(_ geoinfo: GeoinfoModel) { 34 | let geoinfomodelClassObject = HelperClass(geoinfo: geoinfo) 35 | NSKeyedArchiver.archiveRootObject(geoinfomodelClassObject, toFile: HelperClass.path()) 36 | } 37 | 38 | static func decode() -> GeoinfoModel? { 39 | let geoinfomodelClassObject = NSKeyedUnarchiver.unarchiveObject(withFile: HelperClass.path()) as? HelperClass 40 | return geoinfomodelClassObject?.geoinfo 41 | } 42 | 43 | } 44 | 45 | extension GeoinfoModel { 46 | class HelperClass: NSObject, NSCoding { 47 | 48 | var geoinfo: GeoinfoModel? 49 | 50 | init(geoinfo: GeoinfoModel) { 51 | self.geoinfo = geoinfo 52 | super.init() 53 | } 54 | 55 | class func path() -> String { 56 | let documentsPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first 57 | let path = (documentsPath)! + "/GeoInfo.plist" 58 | return path 59 | } 60 | 61 | required init?(coder aDecoder: NSCoder) { 62 | guard let country = aDecoder.decodeObject(forKey: "country") as? String else { geoinfo = nil; super.init(); return nil } 63 | guard let country_code = aDecoder.decodeObject(forKey: "country_code") as? String else { geoinfo = nil; super.init(); return nil } 64 | guard let province = aDecoder.decodeObject(forKey: "province") as? String else { geoinfo = nil; super.init(); return nil } 65 | guard let city = aDecoder.decodeObject(forKey: "city") as? String else { geoinfo = nil; super.init(); return nil } 66 | guard let district = aDecoder.decodeObject(forKey: "district") as? String else { geoinfo = nil; super.init(); return nil } 67 | guard let street = aDecoder.decodeObject(forKey: "street") as? String else { geoinfo = nil; super.init(); return nil } 68 | //guard let postalCode = aDecoder.decodeObjectForKey("postalCode") as? String else { geoinfo = nil; super.init(); return nil } 69 | guard let name = aDecoder.decodeObject(forKey: "name") as? String else { geoinfo = nil; super.init(); return nil } 70 | 71 | geoinfo = GeoinfoModel(country: country, country_code: country_code, province: province, city: city, district: district, street: street, name: name) 72 | 73 | super.init() 74 | } 75 | 76 | func encode(with aCoder: NSCoder) { 77 | aCoder.encode(geoinfo!.country, forKey: "country") 78 | aCoder.encode(geoinfo!.country_code, forKey: "country_code") 79 | aCoder.encode(geoinfo!.province, forKey: "province") 80 | aCoder.encode(geoinfo!.city, forKey: "city") 81 | aCoder.encode(geoinfo!.district, forKey: "district") 82 | aCoder.encode(geoinfo!.street, forKey: "street") 83 | //aCoder.encodeObject(geoinfo!.postalCode, forKey: "postalCode") 84 | aCoder.encode(geoinfo!.name, forKey: "name") 85 | } 86 | } 87 | } 88 | 89 | //创建全局数据 90 | var geoInfo:GeoinfoModel? 91 | -------------------------------------------------------------------------------- /RainReminder/GradientView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GradientView.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/12. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class GradientView: UIView{ 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | 16 | backgroundColor = UIColor.clear 17 | } 18 | 19 | required init?(coder aDecoder: NSCoder) { 20 | super.init(coder: aDecoder) 21 | backgroundColor = UIColor.clear 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /RainReminder/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.easyulife.RainReminder 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | RainReminder 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.4.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleURLTypes 22 | 23 | 24 | CFBundleTypeRole 25 | Editor 26 | CFBundleURLName 27 | com.weibo 28 | CFBundleURLSchemes 29 | 30 | wb599717178 31 | 32 | 33 | 34 | CFBundleTypeRole 35 | Editor 36 | CFBundleURLName 37 | com.easyulife.rainreminder 38 | CFBundleURLSchemes 39 | 40 | RainReminder 41 | 42 | 43 | 44 | CFBundleVersion 45 | 24 46 | LSApplicationQueriesSchemes 47 | 48 | sinaweibohd 49 | sinaweibo 50 | sinaweibosso 51 | weibosdk 52 | weibosdk2.5 53 | 54 | LSRequiresIPhoneOS 55 | 56 | NSAppTransportSecurity 57 | 58 | NSAllowsArbitraryLoads 59 | 60 | 61 | NSLocationWhenInUseUsageDescription 62 | 此程序需要使用您的地理位置信息 63 | UIAppFonts 64 | 65 | chinese.ttf 66 | weathericons-regular-webfont.ttf 67 | DINNextLTPro-Light.otf 68 | 69 | UIApplicationShortcutItems 70 | 71 | 72 | UIApplicationShortcutItemIconFile 73 | HuaTiShouYeSearchIcon 74 | UIApplicationShortcutItemTitle 75 | 搜索 76 | UIApplicationShortcutItemType 77 | com.easyulife.RainReminder.search 78 | 79 | 80 | UIApplicationShortcutItemIconFile 81 | IconFollowUs 82 | UIApplicationShortcutItemSubtitle 83 | 天气信息 84 | UIApplicationShortcutItemTitle 85 | 当前位置天气 86 | UIApplicationShortcutItemType 87 | com.easyulife.RainReminder.nowWeather 88 | 89 | 90 | UIBackgroundModes 91 | 92 | fetch 93 | 94 | UILaunchStoryboardName 95 | LaunchScreen 96 | UIMainStoryboardFile 97 | Main 98 | UIRequiredDeviceCapabilities 99 | 100 | armv7 101 | 102 | UISupportedInterfaceOrientations 103 | 104 | UIInterfaceOrientationPortrait 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /RainReminder/InteractiveAnimation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InteractiveAnimation.swift 3 | // UmbrellaWeather 4 | // 5 | // Created by ZeroJianMBP on 16/1/24. 6 | // Copyright © 2016年 ZeroJian. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | typealias animationFinshion = (Bool) -> Void 12 | 13 | 14 | func springAnimation1(_ currtntView: UIView){ 15 | currtntView.transform = CGAffineTransform(scaleX: 0.8, y: 0.8) 16 | UIView.animate(withDuration: 0.3, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.0, options: [], animations: { () -> Void in 17 | currtntView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) 18 | }, completion: nil) 19 | } 20 | 21 | func animationWithColor(_ superView: UIView,color: UIColor){ 22 | UIView.transition(with: superView, duration: 1.0, options: UIViewAnimationOptions.transitionCrossDissolve, animations: { () -> Void in 23 | superView.backgroundColor = color 24 | }, completion: nil) 25 | } 26 | 27 | func loadingAnimation(_ imageView: UIImageView){ 28 | if imageView.isHidden{ 29 | imageView.isHidden = false 30 | } 31 | rotationAnimated(imageView) 32 | } 33 | 34 | private func rotationAnimated(_ imageView: UIImageView){ 35 | let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation.z") 36 | rotationAnimation.toValue = NSNumber(value: M_PI * 2.0 as Double) 37 | rotationAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) 38 | rotationAnimation.duration = 0.3 39 | rotationAnimation.repeatCount = MAXFLOAT 40 | rotationAnimation.isCumulative = false 41 | rotationAnimation.isRemovedOnCompletion = false 42 | rotationAnimation.fillMode = kCAFillModeForwards 43 | imageView.layer.add(rotationAnimation, forKey: "Rotation") 44 | } 45 | 46 | func launchAnimation(_ currentView: UIView,finishion: @escaping animationFinshion){ 47 | var animationDone = false 48 | let launchView = UIImageView(frame: currentView.bounds) 49 | //launchView.imageWithResolution() 50 | currentView.transform = CGAffineTransform(scaleX: 0.8, y: 0.8) 51 | launchView.transform = CGAffineTransform(scaleX: 1.25, y: 1.25) 52 | currentView.addSubview(launchView) 53 | //启动图片扩大消失动画 54 | UIView.animate(withDuration: 0.3, delay: 0.9, options: [], animations: { 55 | launchView.transform = CGAffineTransform(scaleX: 2.0, y: 2.0) 56 | launchView.alpha = 0.0 57 | }) { (_) in 58 | launchView.removeFromSuperview() 59 | } 60 | //主视图扩大弹跳动画 61 | UIView.animate(withDuration: 0.3, delay: 1.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1.0, options: [], animations: { () -> Void in 62 | currentView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) 63 | }){ (_) in 64 | animationDone = true 65 | finishion(animationDone) 66 | } 67 | } 68 | 69 | -------------------------------------------------------------------------------- /RainReminder/NSDate+WeatherDate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSDate+WeatherDate.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/5/5. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Date { 12 | /// 从微博服务端字符串获取日期 13 | static func dateFromeWeiboDateStr(_ dateString: String) -> Date { 14 | let dateFormatter = DateFormatter() 15 | dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" 16 | dateFormatter.locale = Locale(identifier: "en") 17 | return dateFormatter.date(from: dateString)! 18 | } 19 | /// 返回日期的描述文字,1分钟内:刚刚,1小时内:xx分钟前,1天内:HH:mm,昨天:昨天 HH:mm,1年内:MM-dd HH:mm,更早时间:yyyy-MM-dd HH:mm 20 | func weiboDescriptionDate() -> String { 21 | let calendar = Calendar.current 22 | var dateFormat = "HH:mm" 23 | // 如果是一天之内 24 | if calendar.isDateInToday(self) { 25 | let since = Date().timeIntervalSince(self) 26 | //一分钟内 27 | if since < 60.0 { 28 | return "刚刚" 29 | } 30 | if since < 3600.0 { 31 | return "\(Int(since/60))分钟前" 32 | } 33 | return "\(Int(since/3600.0))小时前" 34 | } 35 | // 如果是昨天 36 | if calendar.isDateInYesterday(self) { 37 | dateFormat = "昨天 " + dateFormat 38 | } else { 39 | dateFormat = "MM-dd " + dateFormat 40 | let component = (calendar as NSCalendar).components([NSCalendar.Unit.year], from: self, to: Date(), options: []) 41 | if component.year! > 1 { 42 | dateFormat = "yyyy-" + dateFormat 43 | } 44 | } 45 | let dateFormatter = DateFormatter() 46 | dateFormatter.dateFormat = dateFormat 47 | dateFormatter.locale = Locale(identifier: "en") 48 | return dateFormatter.string(from: self) 49 | } 50 | } 51 | 52 | -------------------------------------------------------------------------------- /RainReminder/NetWorkTools.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NetWorkTools.swift 3 | // RainReminder 4 | // 5 | // Created by ChaosTong on 2017/1/2. 6 | // Copyright © 2017年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Alamofire 11 | 12 | enum MethodType { 13 | case get 14 | case post 15 | } 16 | 17 | class NetworkTools { 18 | class func requestData(_ type : MethodType, URLString : String, parameters : [String : Any]? = nil, finishedCallback: @escaping (_ result : Any) -> ()) { 19 | 20 | // 1.获取类型 21 | let method = type == .get ? HTTPMethod.get : HTTPMethod.post 22 | 23 | // 2.发送网络请求 24 | Alamofire.request(URLString, method: method, parameters: parameters).responseJSON { (response) in 25 | // 3.获取结果 26 | guard let result = response.result.value else { 27 | print(response.result.error ?? "default error") 28 | return 29 | } 30 | // 4.将结果回调出去 31 | finishedCallback(result) 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /RainReminder/ParserXML.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ParserXML.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/8. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class ParserXML: NSObject,XMLParserDelegate{ 12 | 13 | var elementName = "" 14 | var cities = [City]() 15 | 16 | override init(){ 17 | super.init() 18 | parseXMLResource() 19 | } 20 | 21 | func parseXMLResource(){ 22 | let parser = XMLParser(contentsOf: URL(fileURLWithPath: Bundle.main.path(forResource: "Citys", ofType: "xml")!)) 23 | if let parser = parser{ 24 | parser.delegate = self 25 | parser.parse() 26 | } 27 | } 28 | 29 | func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 30 | self.elementName = elementName 31 | } 32 | 33 | func parser(_ parser: XMLParser, foundCharacters string: String) { 34 | let str = string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) 35 | if elementName == "city"{ 36 | let city = City() 37 | city.cityCN = str 38 | cities.append(city) 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /RainReminder/RRouter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RRouter.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/5/3. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Alamofire 11 | 12 | //enum RRouter: URLRequestConvertible { 13 | // static let baseURLString = "https://api.heweather.com/x3/weather" 14 | // static let key = "04f6c6c770d94aee8f738758a829d826" 15 | // //城市名称、支持中英文,不区分大小写和空格,城市和国家之间用英文逗号分割 16 | // case fetchWeather(city: String, key: String) 17 | 18 | // MARK: URLRequestConvertible 19 | // var URLRequest: NSMutableURLRequest { 20 | // let result: (path: String, parameters: [String: AnyObject], method: String) = { 21 | // switch self { 22 | // case .fetchWeather(let city, let key): 23 | // return ("", ["city": city as AnyObject, "key": key as AnyObject], "GET") 24 | // } 25 | // 26 | // }() 27 | // 28 | // let URL = Foundation.URL(string: RRouter.baseURLString)! 29 | // let URLRequest = Foundation.URLRequest(url: URL.appendingPathComponent(result.path)) 30 | // let encoding = Alamofire.URLEncoding.queryString 31 | // let request = encoding.encode(URLRequest, parameters: result.parameters).0 32 | // request.HTTPMethod = result.method 33 | // return request 34 | // } 35 | //} 36 | -------------------------------------------------------------------------------- /RainReminder/RainReminder-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "MBProgressHUD.h" 6 | #import "iToast.h" 7 | #import "WeiboSDK.h" -------------------------------------------------------------------------------- /RainReminder/RainReminder.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.rainreminderShareDefault 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /RainReminder/ServerResult.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ServerResult.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/7. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Alamofire 11 | 12 | class ServerResult { 13 | 14 | //https://api.heweather.com/x3/weather?cityid=CN101020100&key=04f6c6c770d94aee8f738758a829d826 15 | let BaseURL = "https://api.heweather.com/x3/weather" 16 | let key = "04f6c6c770d94aee8f738758a829d826" 17 | var weatherResult = WeatherResult() 18 | 19 | func performResult() { 20 | parseWeatherData() 21 | } 22 | 23 | fileprivate func parseWeatherData() -> WeatherResult { 24 | 25 | let params:[String: AnyObject] = ["cityid": "CN101020100" as AnyObject,"key": key as AnyObject] 26 | 27 | // Alamofire.request(.GET, BaseURL, parameters: params).responseJSON { 28 | Alamofire.request(BaseURL, method: .get, parameters: params, encoding: JSONEncoding.default).responseJSON { 29 | response in 30 | 31 | guard response.result.error == nil, let dat = response.result.value else { 32 | print(response.result) 33 | return 34 | } 35 | 36 | let json = JSON(dat) 37 | let data = json["HeWeather data service 3.0"][0] 38 | let status = data["status"].stringValue 39 | let city = data["basic"]["city"].stringValue 40 | if status == "ok" { 41 | 42 | if let ServiceState = data["status"].string{ 43 | self.weatherResult.ServiceStatus = ServiceState 44 | } 45 | 46 | if let jsonCity = data["basic"]["city"].string{ 47 | self.weatherResult.city = jsonCity 48 | } 49 | if let state = data["now"]["cond"]["txt"].string{ 50 | self.weatherResult.state = state 51 | } 52 | if let stateCode = data["now"]["cond"]["code"].string{ 53 | self.weatherResult.stateCode = Int(stateCode)! 54 | } 55 | 56 | let dailyArrays = data["daily_forecast"] 57 | let dailyDayTmp = dailyArrays[0]["tmp"] 58 | if let pop = dailyArrays[0]["pop"].string{ 59 | self.weatherResult.dayRain = pop 60 | } 61 | if let dayTemMax = dailyDayTmp["max"].string{ 62 | self.weatherResult.dayTemMax = dayTemMax + "˚" 63 | } 64 | if let dayTmpMin = dailyDayTmp["min"].string{ 65 | self.weatherResult.dayTmpMin = dayTmpMin + "˚" 66 | } 67 | 68 | for (_,subJson):(String, JSON) in data["daily_forecast"]{ 69 | let dailyResult = DailyResult() 70 | 71 | if let dates = subJson["date"].string{ 72 | dailyResult.dailyDate = dates 73 | } 74 | if let pop = subJson["pop"].string{ 75 | dailyResult.dailyPop = Int(pop)! 76 | } 77 | if let tmpsMax = subJson["tmp"]["max"].string{ 78 | dailyResult.dailyTmpMax = tmpsMax + "˚" 79 | } 80 | if let tmpsMin = subJson["tmp"]["min"].string{ 81 | dailyResult.dailyTmpMin = tmpsMin + "˚" 82 | } 83 | if let conds = subJson["cond"]["txt_d"].string{ 84 | dailyResult.dailyState = conds 85 | } 86 | if let stateCode = subJson["cond"]["code_d"].string{ 87 | dailyResult.dailyStateCode = Int(stateCode)! 88 | } 89 | self.weatherResult.dailyResults.append(dailyResult) 90 | } 91 | let dataModel = DataModel() 92 | dataModel.dailyResults = self.weatherResult.dailyResults 93 | dataModel.currentCity = city 94 | dataModel.saveData() 95 | } 96 | 97 | } 98 | return self.weatherResult 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /RainReminder/TimePickerViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TimePickerViewController.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/12. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol TimePickerViewControllerDelegate: class{ 12 | func timePickerViewControllerDidSelect(_ controller: TimePickerViewController, didSelectTime time: String) 13 | func timePickerViewControllerDidCancel(_ controller: TimePickerViewController) 14 | } 15 | 16 | class TimePickerViewController: UIViewController { 17 | @IBOutlet weak var datePicker: UIDatePicker! 18 | 19 | weak var delegate: TimePickerViewControllerDelegate? 20 | 21 | 22 | @IBAction func cancel(_ sender: AnyObject) { 23 | delegate?.timePickerViewControllerDidCancel(self) 24 | } 25 | 26 | @IBAction func done(_ sender: AnyObject) { 27 | let formatter = DateFormatter() 28 | formatter.dateFormat = "HH:mm" 29 | let dateString = formatter.string(from: datePicker.date) 30 | 31 | delegate?.timePickerViewControllerDidSelect(self, didSelectTime: dateString) 32 | } 33 | 34 | override func viewDidLoad() { 35 | super.viewDidLoad() 36 | view.backgroundColor = UIColor.clear 37 | } 38 | 39 | required init?(coder aDecoder: NSCoder) { 40 | super.init(coder: aDecoder) 41 | modalPresentationStyle = .custom 42 | transitioningDelegate = self 43 | } 44 | } 45 | 46 | extension TimePickerViewController: UIViewControllerTransitioningDelegate{ 47 | func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { 48 | return DimmingPresentationController(presentedViewController: presented, presenting: presenting) 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /RainReminder/WeatherResult.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WeatherResult.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/7. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class WeatherResult { 12 | var city = "" 13 | var state = "" 14 | var dayRain = "" 15 | var dayTemMax = "" 16 | var dayTmpMin = "" 17 | var stateCode = 0 18 | var dailyResults = [DailyResult]() 19 | var ServiceStatus = "" 20 | var tempNow = "" 21 | 22 | fileprivate func documentsDirectory() -> String{ 23 | let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 24 | return paths[0] 25 | } 26 | 27 | fileprivate func dataFilePath() -> String{ 28 | return (documentsDirectory() as NSString).appendingPathComponent("WeatherModel.plist") 29 | } 30 | 31 | func saveData(){ 32 | let data = NSMutableData() 33 | let archiver = NSKeyedArchiver(forWritingWith: data) 34 | archiver.encode(city, forKey: "city") 35 | archiver.encode(state, forKey: "state") 36 | archiver.encode(dayRain, forKey: "dayRain") 37 | archiver.encode(dayTemMax, forKey: "dayTemMax") 38 | archiver.encode(dayTmpMin, forKey: "dayTmpMin") 39 | archiver.encode(dailyResults, forKey: "DailyResults") 40 | archiver.finishEncoding() 41 | data.write(toFile: dataFilePath(), atomically: true) 42 | } 43 | 44 | func loadData(){ 45 | let path = dataFilePath() 46 | if FileManager.default.fileExists(atPath: path){ 47 | if let data = try? Data(contentsOf: URL(fileURLWithPath: path)){ 48 | let unarchiver = NSKeyedUnarchiver(forReadingWith: data) 49 | city = unarchiver.decodeObject(forKey: "city") as! String 50 | state = unarchiver.decodeObject(forKey: "state") as! String 51 | dayRain = unarchiver.decodeObject(forKey: "dayRain") as! String 52 | dayTemMax = unarchiver.decodeObject(forKey: "dayTemMax") as! String 53 | dayTmpMin = unarchiver.decodeObject(forKey: "dayTmpMin") as! String 54 | dailyResults = unarchiver.decodeObject(forKey: "DailyResults") as! [DailyResult] 55 | unarchiver.finishDecoding() 56 | } 57 | } 58 | } 59 | } 60 | 61 | -------------------------------------------------------------------------------- /RainReminder/WeekWeatherCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WeekWeatherCell.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/11. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class WeekWeatherCell: UICollectionViewCell { 12 | 13 | @IBOutlet weak var labelOfdate: UILabel! 14 | @IBOutlet weak var weatherIcon: UILabel! 15 | @IBOutlet weak var labelOftmpMin: UILabel! 16 | @IBOutlet weak var labelOftmpMax: UILabel! 17 | @IBOutlet weak var labelOfScheme: UILabel! 18 | @IBOutlet weak var labelOfpersent: UILabel! 19 | 20 | 21 | override func awakeFromNib() { 22 | super.awakeFromNib() 23 | // Initialization code 24 | } 25 | 26 | func configureForDailyResult(_ dailyResult: DailyResult){ 27 | 28 | labelOfdate.text = dailyResult.dailyDate 29 | labelOfScheme.text = dailyResult.dailyState 30 | labelOftmpMax.text = dailyResult.dailyTmpMax + " /" 31 | labelOftmpMin.text = dailyResult.dailyTmpMin 32 | labelOfpersent.text = 33 | "\(dailyResult.dailyPop)" + "%" 34 | let Icon = WeatherIcon(condition: dailyResult.dailyStateCode, iconString: "day").iconText 35 | weatherIcon.text = Icon 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /RainReminder/WeekWeatherCollectionView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WeekWeatherCollectionView.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/11. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class WeekWeatherCollectionView: UICollectionView { 12 | 13 | required init?(coder aDecoder: NSCoder) { 14 | super.init(coder: aDecoder) 15 | let cellNib = UINib(nibName: "WeekWeatherCell", bundle: nil) 16 | self.register(cellNib, forCellWithReuseIdentifier: "WeekWeatherCell") 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /RainReminder/WeiboAlert.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WeiboAlert.swift 3 | // RainReminder 4 | // 5 | // Created by 童超 on 16/4/25. 6 | // Copyright © 2016年 ChaosTong. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class WeiboAlert: UIView { 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | loadViewFormNib() 16 | } 17 | 18 | required init?(coder aDecoder: NSCoder) { 19 | super.init(coder: aDecoder) 20 | loadViewFormNib() 21 | fatalError("init(coder:) has not been implemented") 22 | } 23 | 24 | func loadViewFormNib(){ 25 | let bundle = Bundle(for: type(of: self)) 26 | let nib = UINib(nibName: "WeiboAlert", bundle: bundle) 27 | let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 28 | view.frame = bounds 29 | self.addSubview(view) 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /RainReminder/WeiboAlert.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /RainReminder/chinese.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/chinese.ttf -------------------------------------------------------------------------------- /RainReminder/iToast.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import 4 | #import 5 | 6 | #define kMsgWindowDidDismiss @"msgWindowHide" 7 | 8 | typedef enum iToastGravity { 9 | iToastGravityTop = 1000001, 10 | iToastGravityBottom, 11 | iToastGravityCenter 12 | }iToastGravity; 13 | 14 | 15 | typedef enum iToastDelay{ 16 | iToastDelayLong = 1000, 17 | iToastDelayNormal = 300, 18 | iToastDelayShort = 100, 19 | iToastDelayNone = 0 20 | }iToastDelay; 21 | 22 | typedef enum iToastDuration{ 23 | iToastDurationLong = 10000, 24 | iToastDurationNormal = 3000, 25 | iToastDurationShort = 1000 26 | }iToastDuration; 27 | 28 | typedef enum iToastType { 29 | iToastTypeInfo = -100000, 30 | iToastTypeNotice, 31 | iToastTypeWarning, 32 | iToastTypeError, 33 | iToastTypeCustom, 34 | iToastTypeCustom1, 35 | iToastTypeCustom2 36 | }iToastType; 37 | 38 | 39 | @class iToastSettings; 40 | 41 | @interface iToast : NSObject { 42 | iToastSettings *_settings; 43 | NSInteger _offsetLeft; 44 | NSInteger _offsetTop; 45 | 46 | UIView *_view; 47 | NSString *_title; 48 | NSString *_text; 49 | 50 | UIImage *_img; 51 | CGSize _imgSz; 52 | 53 | } 54 | 55 | @property (nonatomic, strong) iToastSettings *settings; 56 | @property (nonatomic, strong) NSString *title; 57 | @property (nonatomic, strong) NSString *group; 58 | 59 | - (void) show; 60 | 61 | - (iToast *) setDelay:(CGFloat) delay; 62 | - (iToast *) setDuration:(CGFloat) duration; 63 | - (iToast *) setGravity:(iToastGravity) gravity 64 | offsetLeft:(CGFloat) left 65 | offsetTop:(CGFloat) top; 66 | - (iToast *) setGravity:(iToastGravity) gravity; 67 | - (iToast *) setPostion:(CGPoint) position; 68 | - (iToast *) setToastType:(iToastType) type; 69 | 70 | + (iToast *) makeText:(NSString *)text; 71 | + (iToast *) makeText:(NSString *)text group:(NSString*)group; 72 | + (iToast *) makeText:(NSString *)text title:(NSString*)title; 73 | + (void) cancelGroup:(NSString*)group; 74 | 75 | + (iToast *) makeImage:(UIImage *)img; 76 | + (iToast *) makeImage:(UIImage *)img forSize:(CGSize)sz; 77 | 78 | @end 79 | 80 | 81 | 82 | @interface iToastSettings : NSObject{ 83 | CGFloat _delay; 84 | CGFloat _duration; 85 | iToastGravity _gravity; 86 | CGPoint _postition; 87 | iToastType _toastType; 88 | 89 | NSDictionary *_images; 90 | 91 | BOOL _positionIsSet; 92 | } 93 | 94 | @property(nonatomic, assign) CGFloat _delay; 95 | @property(nonatomic, assign) CGFloat _duration; 96 | @property(nonatomic, assign) iToastGravity _gravity; 97 | @property(nonatomic, assign) iToastType _toastType; 98 | @property(nonatomic, assign) CGPoint _postition; 99 | @property(nonatomic, readonly) NSDictionary *_images; 100 | 101 | 102 | - (void) setImage:(UIImage *)img forType:(iToastType) type; 103 | + (iToastSettings *) getSharedSettings; 104 | 105 | @end -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WBHttpRequest+WeiboShare.h: -------------------------------------------------------------------------------- 1 | // 2 | // WBHttpRequest+WeiboShare.h 3 | // WeiboSDK 4 | // 5 | // Created by DannionQiu on 14/10/31. 6 | // Copyright (c) 2014年 SINA iOS Team. All rights reserved. 7 | // 8 | 9 | #import "WBHttpRequest.h" 10 | 11 | @class WBImageObject; 12 | 13 | @interface WBHttpRequest (WeiboShare) 14 | 15 | /*! 16 | @method 17 | 18 | @abstract 19 | 获得当前授权用户的微博id列表。 20 | 21 | @param userID 当前授权用户的uid 22 | 23 | @param accessToken 当前授权用户的accessToken 24 | 25 | @param otherProperties 一个NSDictionary字典,承载任意想额外添加到请求中的参数。 26 | 27 | @param queue 指定发送请求的NSOperationQueue,如果这个参数为nil,则请求会发送在MainQueue( [NSOperationQueue mainQueue] )中。 28 | 29 | @param handler 完成请求后会回调handler,处理完成请求后的逻辑。 30 | */ 31 | + (WBHttpRequest *)requestForStatusIDsFromCurrentUser:(NSString*)userID 32 | withAccessToken:(NSString*)accessToken 33 | andOtherProperties:(NSDictionary*)otherProperties 34 | queue:(NSOperationQueue*)queue 35 | withCompletionHandler:(WBRequestHandler)handler; 36 | 37 | /*! 38 | @method 39 | 40 | @abstract 41 | 转发微博。转发微博id所对应的微博。 42 | 43 | @param statusID 微博id,微博的唯一标识符。 44 | 45 | @param text 添加的转发文本,内容不超过140个汉字,不填则默认为“转发微博”。 46 | 47 | @param accessToken 当前授权用户的accessToken 48 | 49 | @param otherProperties 一个NSDictionary字典,承载任意想额外添加到请求中的参数。 50 | 51 | @param queue 指定发送请求的NSOperationQueue,如果这个参数为nil,则请求会发送在MainQueue( [NSOperationQueue mainQueue] )中。 52 | 53 | @param handler 完成请求后会回调handler,处理完成请求后的逻辑。 54 | */ 55 | + (WBHttpRequest *)requestForRepostAStatus:(NSString*)statusID 56 | repostText:(NSString*)text 57 | withAccessToken:(NSString*)accessToken 58 | andOtherProperties:(NSDictionary*)otherProperties 59 | queue:(NSOperationQueue*)queue 60 | withCompletionHandler:(WBRequestHandler)handler; 61 | 62 | /*! 63 | @method 64 | 65 | @abstract 66 | 发表一个微博(无图或者带一张图片的微博)。 67 | 68 | @param statusText 要发布的微博文本内容,内容不超过140个汉字。 69 | 70 | @param imageObject 要上传的图片,仅支持JPEG、GIF、PNG格式,图片大小小于5M。这个参数可为nil。由于只能传一张图片,若imageObject和url都有值,请看@caution。 71 | 72 | @param url 图片的URL地址,必须以http开头。这个参数可为nil,由于只能传一张图片,若imageObject和url都有值,请看@caution。 73 | 74 | @param accessToken 当前授权用户的accessToken 75 | 76 | @param otherProperties 一个NSDictionary字典,承载任意想额外添加到请求中的参数。 77 | 78 | @param queue 指定发送请求的NSOperationQueue,如果这个参数为nil,则请求会发送在MainQueue( [NSOperationQueue mainQueue] )中。 79 | 80 | @param handler 完成请求后会回调handler,处理完成请求后的逻辑。 81 | 82 | @caution 注意,如果参数imageObject和url都有值,则发布带有imageObject所对应的图片,忽略url所对应的图片。 83 | */ 84 | + (WBHttpRequest *)requestForShareAStatus:(NSString*)statusText 85 | contatinsAPicture:(WBImageObject*)imageObject 86 | orPictureUrl:(NSString*)url 87 | withAccessToken:(NSString*)accessToken 88 | andOtherProperties:(NSDictionary*)otherProperties 89 | queue:(NSOperationQueue*)queue 90 | withCompletionHandler:(WBRequestHandler)handler; 91 | 92 | 93 | @end 94 | -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WBHttpRequest+WeiboToken.h: -------------------------------------------------------------------------------- 1 | // 2 | // WBHttpRequest+WeiboToken.h 3 | // WeiboSDK 4 | // 5 | // Created by DannionQiu on 14/11/6. 6 | // Copyright (c) 2014年 SINA iOS Team. All rights reserved. 7 | // 8 | 9 | #import "WBHttpRequest.h" 10 | 11 | @interface WBHttpRequest (WeiboToken) 12 | /*! 13 | @method 14 | 15 | @abstract 16 | 使用RefreshToken去换取新的身份凭证AccessToken. 17 | 18 | @discussion 19 | 在SSO授权登录后,服务器会下发有效期为7天的refreshToken以及有效期为1天的AccessToken。 20 | 当有效期为1天的AccessToken过期时,可以调用该接口带着refreshToken信息区换取新的AccessToken。 21 | @param refreshToken refreshToken 22 | 23 | @param queue 指定发送请求的NSOperationQueue,如果这个参数为nil,则请求会发送在MainQueue( [NSOperationQueue mainQueue] )中。 24 | 25 | @param handler 完成请求后会回调handler,处理完成请求后的逻辑。 26 | */ 27 | + (WBHttpRequest *)requestForRenewAccessTokenWithRefreshToken:(NSString*)refreshToken 28 | queue:(NSOperationQueue*)queue 29 | withCompletionHandler:(WBRequestHandler)handler; 30 | @end 31 | -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WBSDKBasicButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // WBSDKBasicButton.h 3 | // WeiboSDK 4 | // 5 | // Created by DannionQiu on 14/10/24. 6 | // Copyright (c) 2014年 SINA iOS Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class WBSDKBasicButton; 12 | typedef void (^WBSDKButtonHandler)(WBSDKBasicButton *button, 13 | BOOL isSuccess, 14 | NSDictionary *resultDict); 15 | 16 | @interface WBSDKBasicButton : UIButton 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WBSDKCommentButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // WBSDKCommentButton.h 3 | // WeiboSDK 4 | // 5 | // Created by DannionQiu on 14/10/26. 6 | // Copyright (c) 2014年 SINA iOS Team. All rights reserved. 7 | // 8 | 9 | #import "WBSDKBasicButton.h" 10 | 11 | @interface WBSDKCommentButton : WBSDKBasicButton 12 | 13 | /** 14 | 初始化一个社会化评论按钮 15 | @param frame 按钮的frame值 16 | @param accessToken 用户授权后获取的Token 17 | @param keyWord 社会化评论的热点词 18 | @param urlString 社会化评论链接,可传空 19 | @param category 领域ID, 此参数为必选参数。 20 | @param handler 回调函数,当用户点击按钮,进行完与社会化评论组件相关的交互之后,回调的函数。 21 | */ 22 | - (id)initWithFrame:(CGRect)frame 23 | accessToken:(NSString*)accessToken 24 | keyword:(NSString*)keyWord 25 | urlString:(NSString*)urlString 26 | category:(NSString*)category 27 | completionHandler:(WBSDKButtonHandler)handler; 28 | 29 | @property (nonatomic, strong)NSString* keyWord; 30 | @property (nonatomic, strong)NSString* accessToken; 31 | @property (nonatomic, strong)NSString* urlString; 32 | @property (nonatomic, strong)NSString* category; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WBSDKRelationshipButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // WBSDKRelationshipButton.h 3 | // WeiboSDK 4 | // 5 | // Created by DannionQiu on 14/10/26. 6 | // Copyright (c) 2014年 SINA iOS Team. All rights reserved. 7 | // 8 | 9 | #import "WBSDKBasicButton.h" 10 | 11 | enum 12 | { 13 | WBSDKRelationshipButtonStateFollow, 14 | WBSDKRelationshipButtonStateUnfollow 15 | }; 16 | typedef NSUInteger WBSDKRelationshipButtonState; 17 | 18 | 19 | 20 | @interface WBSDKRelationshipButton : WBSDKBasicButton 21 | 22 | /** 23 | 初始化一个关注组件按钮 24 | @param frame 按钮的frame值 25 | @param accessToken 用户授权后获取的Token 26 | @param currentUserID 当前用户的uid值 27 | @param followerUserID 希望当前用户加关注的用户uid值 28 | @param handler 回调函数,当用户点击按钮,进行完关注组件相关的交互之后,回调的函数。 29 | */ 30 | - (id)initWithFrame:(CGRect)frame 31 | accessToken:(NSString*)accessToken 32 | currentUser:(NSString*)currentUserID 33 | followUser:(NSString*)followerUserID 34 | completionHandler:(WBSDKButtonHandler)handler; 35 | 36 | @property (nonatomic, strong)NSString* accessToken; 37 | @property (nonatomic, strong)NSString* currentUserID; 38 | @property (nonatomic, strong)NSString* followUserID; 39 | 40 | 41 | @property (nonatomic, assign)WBSDKRelationshipButtonState currentRelationShip; 42 | 43 | 44 | /** 45 | 获取最新的关注状态 46 | 该方法会调用OpenApi,获取当前用户与目标用户之间的关注状态,并将按钮的状态改变为正确的状态。 47 | */ 48 | - (void)checkCurrentRelationship; 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK+Statistics.h: -------------------------------------------------------------------------------- 1 | // 2 | // WeiboSDK+Statistics.h 3 | // WeiboSDK 4 | // 5 | // Created by DannionQiu on 15/4/13. 6 | // Copyright (c) 2015年 SINA iOS Team. All rights reserved. 7 | // 8 | 9 | #import "WeiboSDK.h" 10 | 11 | @interface WeiboSDK(Statistics) 12 | 13 | /** 设置是否开启统计模式, 默认为NO. 14 | @param value 为YES, SDK会开启统计功能,记录日志,并在合适的实际传上服务器。 15 | @return void. 16 | */ 17 | + (void)setStatisticsEnabled:(BOOL)value; 18 | 19 | #pragma mark - Optional Configs Setting 20 | /** 设置是否打印SDK的log信息, 默认NO(不打印log). 21 | @param value 设置为YES, WeiboSDK 会输出log信息可供调试参考. 除非特殊需要,否则发布产品时需改回NO. 22 | @return void. 23 | */ 24 | + (void)setStatisticsLogEnabled:(BOOL)value; 25 | 26 | /** 设置版本信息. 27 | @param version 版本号,为nil或@""时, 默认为Build号(CFBundleVersion) 28 | @return void. 29 | */ 30 | + (void)setVersion:(NSString*)version; 31 | 32 | /** 设置渠道信息. 33 | @param channelID 渠道名称, 为nil或@""时, 默认为@"AppStore"渠道 34 | @return void. 35 | */ 36 | + (void)setChannelID:(NSString*)channelID; 37 | 38 | /** 设定日志上传的发送间隔 39 | @param frequecy 单位为秒,最小30秒,最大8*60*60秒(8小时)。默认为180秒(3分钟) 40 | @return void. 41 | */ 42 | + (void)setUploadFrequecy:(NSTimeInterval)frequecy; 43 | 44 | #pragma mark - Statistics Api 45 | /** 自动页面时长统计, 开始记录某个页面展示时长. 46 | 使用方法:必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据。 47 | 在该页面展示时调用beginLogPageView:,当退出该页面时调用endLogPageView: 48 | @param pageName 统计的页面名称. 49 | @return void. 50 | */ 51 | + (void)beginLogPageView:(NSString *)pageName; 52 | 53 | /** 自动页面时长统计, 结束记录某个页面展示时长. 54 | 使用方法:必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据。 55 | 在该页面展示时调用beginLogPageView:,当退出该页面时调用endLogPageView: 56 | @param pageName 统计的页面名称. 57 | @return void. 58 | */ 59 | + (void)endLogPageView:(NSString *)pageName; 60 | 61 | 62 | /** 自动事件时长统计, 开始记录某个事示时长. 63 | 使用方法:调用event:函数来完成自动统计。 64 | @param eventID 统计的事件标识符. 65 | @warning eventID不能使用空格和特殊字符,且长度不能超过255个字符(否则将截取前255个字符) 66 | */ 67 | + (void)event:(NSString *)eventID; 68 | 69 | /** 自动事件时长统计, 开始记录某个事示时长. 70 | 使用方法:调用event:函数来完成自动统计。 71 | @param eventID 统计的事件标识符. 72 | @param pageName 事件发生时所在页面. 73 | @param userInfo 事件相关信息. 74 | @return void. 75 | 76 | @warning 每个event的userInfo不能超过10个 77 | eventID、pageName、userInfo中key和value都不能使用空格和特殊字符,且长度不能超过255个字符(否则将截取前255个字符) 78 | */ 79 | + (void)event:(NSString *)eventID onPageView:(NSString*)pageName withUserInfo:(NSDictionary*)userInfo; 80 | 81 | /** 强制日志上传 82 | 调用后,若距离上次成功上传日志时间不小于30秒,立刻上传日志。 83 | */ 84 | + (void)forceUploadRecords; 85 | 86 | 87 | 88 | 89 | @end 90 | -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/alert_error_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/alert_error_icon@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/alert_success_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/alert_success_icon@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/close.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/close@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_big_blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_big_blue@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_big_blue_disable@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_big_blue_disable@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_big_blue_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_big_blue_highlighted@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_white.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_white@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_white_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_white_highlighted.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_white_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_button_white_highlighted@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_icon_arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/common_icon_arrow@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/compose_keyboardbutton_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/compose_keyboardbutton_background.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/compose_keyboardbutton_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/compose_keyboardbutton_background@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/compose_toolbar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/compose_toolbar_background.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/compose_toolbar_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/compose_toolbar_background@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/empty_failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/empty_failed.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/empty_failed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/empty_failed@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/login_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/login_background@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/login_country_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/login_country_background@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/login_country_background_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/login_country_background_highlighted@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/navigationbar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/navigationbar_background.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/navigationbar_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/navigationbar_background@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/navigationbar_background_os7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/navigationbar_background_os7.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/navigationbar_background_os7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/navigationbar_background_os7@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/progresshud_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/progresshud_background@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/sdk_weibo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/sdk_weibo_logo.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/sdk_weibo_logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/sdk_weibo_logo@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/sdk_weibo_logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/sdk_weibo_logo@3x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_addattention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_addattention.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_addattention@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_addattention@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_addattention@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_addattention@3x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_attention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_attention.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_attention@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_attention@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_attention@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/timeline_relationship_icon_attention@3x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/verify_code_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/verify_code_button@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/verify_code_button@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/verify_code_button@3x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/verify_code_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/verify_code_button_highlighted@2x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/images/verify_code_button_highlighted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/images/verify_code_button_highlighted@3x.png -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/others/countryList: -------------------------------------------------------------------------------- 1 | {"香港地区":{"code":"00852","rule":{"mcc":["454"]}},"台湾地区":{"code":"00886","rule":{"mcc":["466"]}},"澳门地区":{"code":"00853","rule":{"mcc":["455"]}},"日本":{"code":"0081","rule":{"mcc":["440","441"]}},"韩国":{"code":"0082","rule":{"mcc":["450"]}},"新加坡":{"code":"0065","rule":{"mcc":["525"]}},"马来西亚":{"code":"0060","rule":{"mcc":["502"]}},"美国":{"code":"001","rule":{"mcc":["310","311","316"]}},"加拿大":{"code":"001","rule":{"mcc":["302"]}},"澳大利亚":{"code":"0061","rule":{"mcc":["505"]}},"英国":{"code":"0044","rule":{"mcc":["234"]}},"法国":{"code":"0033","rule":{"mcc":["208"]}},"俄罗斯":{"code":"007","rule":{"mcc":["250"]}},"印度":{"code":"0091","rule":{"mcc":["404"]}},"泰国":{"code":"0066","rule":{"mcc":["520"]}},"德国":{"code":"0049","rule":{"mcc":["262"]}}} -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboSDK.bundle/others/mfp.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/WeiboSDK.bundle/others/mfp.cer -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/WeiboUser.h: -------------------------------------------------------------------------------- 1 | // 2 | // WeiboUser.h 3 | // WeiboSDK 4 | // 5 | // Created by DannionQiu on 14-9-23. 6 | // Copyright (c) 2014年 SINA iOS Team. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /*@ 12 | You can get the latest WeiboUser field description on http://open.weibo.com/wiki/2/friendships/friends/en . 13 | */ 14 | @interface WeiboUser : NSObject 15 | 16 | - (instancetype)initWithDictionary:(NSDictionary*)paraDict; 17 | + (instancetype)userWithDictionary:(NSDictionary*)paraDict; 18 | 19 | // Validate the dictionary to be converted. 20 | + (BOOL)isValidForDictionary:(NSDictionary *)dict; 21 | 22 | - (BOOL)updateWithDictionary:(NSDictionary*)paraDict; 23 | 24 | 25 | @property(readwrite, strong, nonatomic) NSString* userID; 26 | @property(readwrite, strong, nonatomic) NSString* userClass; 27 | @property(readwrite, strong, nonatomic) NSString* screenName; 28 | @property(readwrite, strong, nonatomic) NSString* name; 29 | @property(readwrite, strong, nonatomic) NSString* province; 30 | @property(readwrite, strong, nonatomic) NSString* city; 31 | @property(readwrite, strong, nonatomic) NSString* location; 32 | @property(readwrite, strong, nonatomic) NSString* userDescription; 33 | @property(readwrite, strong, nonatomic) NSString* url; 34 | @property(readwrite, strong, nonatomic) NSString* profileImageUrl; 35 | @property(readwrite, strong, nonatomic) NSString* coverImageUrl; 36 | @property(readwrite, strong, nonatomic) NSString* coverImageForPhoneUrl; 37 | @property(readwrite, strong, nonatomic) NSString* profileUrl; 38 | @property(readwrite, strong, nonatomic) NSString* userDomain; 39 | @property(readwrite, strong, nonatomic) NSString* weihao; 40 | @property(readwrite, strong, nonatomic) NSString* gender; 41 | @property(readwrite, strong, nonatomic) NSString* followersCount; 42 | @property(readwrite, strong, nonatomic) NSString* friendsCount; 43 | @property(readwrite, strong, nonatomic) NSString* pageFriendsCount; 44 | @property(readwrite, strong, nonatomic) NSString* statusesCount; 45 | @property(readwrite, strong, nonatomic) NSString* favouritesCount; 46 | @property(readwrite, strong, nonatomic) NSString* createdTime; 47 | @property(readwrite, assign, nonatomic) BOOL isFollowingMe; 48 | @property(readwrite, assign, nonatomic) BOOL isFollowingByMe; 49 | @property(readwrite, assign, nonatomic) BOOL isAllowAllActMsg; 50 | @property(readwrite, assign, nonatomic) BOOL isAllowAllComment; 51 | @property(readwrite, assign, nonatomic) BOOL isGeoEnabled; 52 | @property(readwrite, assign, nonatomic) BOOL isVerified; 53 | @property(readwrite, strong, nonatomic) NSString* verifiedType; 54 | @property(readwrite, strong, nonatomic) NSString* remark; 55 | @property(readwrite, strong, nonatomic) NSString* statusID; 56 | @property(readwrite, strong, nonatomic) NSString* ptype; 57 | @property(readwrite, strong, nonatomic) NSString* avatarLargeUrl; 58 | @property(readwrite, strong, nonatomic) NSString* avatarHDUrl; 59 | @property(readwrite, strong, nonatomic) NSString* verifiedReason; 60 | @property(readwrite, strong, nonatomic) NSString* verifiedTrade; 61 | @property(readwrite, strong, nonatomic) NSString* verifiedReasonUrl; 62 | @property(readwrite, strong, nonatomic) NSString* verifiedSource; 63 | @property(readwrite, strong, nonatomic) NSString* verifiedSourceUrl; 64 | @property(readwrite, strong, nonatomic) NSString* verifiedState; 65 | @property(readwrite, strong, nonatomic) NSString* verifiedLevel; 66 | @property(readwrite, strong, nonatomic) NSString* onlineStatus; 67 | @property(readwrite, strong, nonatomic) NSString* biFollowersCount; 68 | @property(readwrite, strong, nonatomic) NSString* language; 69 | @property(readwrite, strong, nonatomic) NSString* star; 70 | @property(readwrite, strong, nonatomic) NSString* mbtype; 71 | @property(readwrite, strong, nonatomic) NSString* mbrank; 72 | @property(readwrite, strong, nonatomic) NSString* block_word; 73 | @property(readwrite, strong, nonatomic) NSString* block_app; 74 | @property(readwrite, strong, nonatomic) NSString* credit_score; 75 | @property(readwrite, strong, nonatomic) NSDictionary* originParaDict; 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /RainReminder/libWeiboSDK/libWeiboSDK.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/libWeiboSDK/libWeiboSDK.a -------------------------------------------------------------------------------- /RainReminder/weathericons-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/RainReminder/weathericons-regular-webfont.ttf -------------------------------------------------------------------------------- /screenshort/IMG_0215.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/IMG_0215.jpg -------------------------------------------------------------------------------- /screenshort/IMG_0216.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/IMG_0216.jpg -------------------------------------------------------------------------------- /screenshort/IMG_0217.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/IMG_0217.jpg -------------------------------------------------------------------------------- /screenshort/IMG_0218.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/IMG_0218.jpg -------------------------------------------------------------------------------- /screenshort/IMG_0219.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/IMG_0219.jpg -------------------------------------------------------------------------------- /screenshort/notify.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/notify.gif -------------------------------------------------------------------------------- /screenshort/search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/search.gif -------------------------------------------------------------------------------- /screenshort/share.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/share.gif -------------------------------------------------------------------------------- /screenshort/start.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/start.gif -------------------------------------------------------------------------------- /screenshort/today.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/today.gif -------------------------------------------------------------------------------- /screenshort/weeklist.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/screenshort/weeklist.gif -------------------------------------------------------------------------------- /scripts/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/scripts/.DS_Store -------------------------------------------------------------------------------- /scripts/travis/add-key.sh: -------------------------------------------------------------------------------- 1 | security create-keychain -p travis ios-build.keychain 2 | security import ./scripts/travis/apple.cer -k ~/Library/Keychains/ios-build.keychain -T /usr/bin/codesign 3 | security import ./scripts/travis/dist.cer -k ~/Library/Keychains/ios-build.keychain -T /usr/bin/codesign 4 | security import ./scripts/travis/dist.p12 -k ~/Library/Keychains/ios-build.keychain -P $KEY_PASSWORD -T /usr/bin/codesign 5 | mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles 6 | cp ./scripts/travis/profile/* ~/Library/MobileDevice/Provisioning\ Profiles/ -------------------------------------------------------------------------------- /scripts/travis/remove-key.sh: -------------------------------------------------------------------------------- 1 | security delete-keychain ios-build.keychain 2 | rm -f ~/Library/MobileDevice/Provisioning\ Profiles/* -------------------------------------------------------------------------------- /scripts/travis/testflight.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | if [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then 3 | echo "This is a pull request. No deployment will be done." 4 | exit 0 5 | fi 6 | if [[ "$TRAVIS_BRANCH" != "master" ]]; then 7 | echo "Testing on a branch other than master. No deployment will be done." 8 | exit 0 9 | fi 10 | 11 | # Thanks @djacobs https://gist.github.com/djacobs/2411095 12 | 13 | PROVISIONING_PROFILE="$HOME/Library/MobileDevice/Provisioning Profiles/$PROFILE_UUID.mobileprovision" 14 | RELEASE_DATE=`date '+%Y-%m-%d %H:%M:%S'` 15 | OUTPUTDIR="$PWD/build/Release-iphoneos" 16 | 17 | echo "********************" 18 | echo "* Signing *" 19 | echo "********************" 20 | xcrun -log -sdk iphoneos PackageApplication "$OUTPUTDIR/$APPNAME.app" -o "$OUTPUTDIR/$APPNAME.ipa" -sign "$DEVELOPER_NAME" -embed "$PROVISIONING_PROFILE" 21 | 22 | RELEASE_NOTES="Build: $TRAVIS_BUILD_NUMBER\nUploaded: $RELEASE_DATE" 23 | 24 | zip -r -9 "$OUTPUTDIR/$APPNAME.app.dSYM.zip" "$OUTPUTDIR/$APPNAME.app.dSYM" 25 | 26 | echo "********************" 27 | echo "* Uploading *" 28 | echo "********************" 29 | curl http://testflightapp.com/api/builds.json \ 30 | -F file="@$OUTPUTDIR/$APPNAME.ipa" \ 31 | -F dsym="@$OUTPUTDIR/$APPNAME.app.dSYM.zip" \ 32 | -F api_token="$API_TOKEN" \ 33 | -F team_token="$TEAM_TOKEN" \ 34 | -F distribution_lists='Internal' \ 35 | -F notes="$RELEASE_NOTES" -v 36 | -------------------------------------------------------------------------------- /today/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/today/.DS_Store -------------------------------------------------------------------------------- /today/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | RainReminder 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIcons 12 | 13 | CFBundleIcons~ipad 14 | 15 | CFBundleIdentifier 16 | com.easyulife.RainReminder.RRToday 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | RainReminderTodayWidget 21 | CFBundlePackageType 22 | XPC! 23 | CFBundleShortVersionString 24 | 1.4.0 25 | CFBundleSignature 26 | ???? 27 | CFBundleVersion 28 | 24 29 | NSExtension 30 | 31 | NSExtensionMainStoryboard 32 | MainInterface 33 | NSExtensionPointIdentifier 34 | com.apple.widget-extension 35 | 36 | UIAppFonts 37 | 38 | weathericons-regular-webfont.ttf 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /today/today.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.rainreminderShareDefault 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /today/weathericons-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChaosTong/RainReminder/fc054c79ad4ead6e08d358016496e7f65e7b4c48/today/weathericons-regular-webfont.ttf --------------------------------------------------------------------------------