├── .DS_Store ├── .codeclimate.yml ├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── Evil Insult.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── Dmitri.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── UserInterfaceState_conflict-20161030-174053.xcuserstate └── xcuserdata │ └── Dmitri.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── Evil Insult.xcscheme │ └── xcschememanagement.plist ├── Evil Insult.xcworkspace ├── contents.xcworkspacedata └── xcuserdata │ └── Dmitri.xcuserdatad │ ├── UserInterfaceState.xcuserstate │ └── xcdebugger │ └── Breakpoints_v2.xcbkptlist ├── Evil Insult ├── .DS_Store ├── 1024x1366.storyboard ├── 320x568.storyboard ├── 375x667.storyboard ├── 414x736.storyboard ├── 768x1024.storyboard ├── AppDelegate.swift ├── Base.lproj │ ├── .DS_Store │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── DKLanguagePickerVC.swift ├── DKNavigationController.swift ├── DKSettingsVC.swift ├── Evil Insult-Bridging-Header.h ├── Evil Insult.entitlements ├── GoogleService-Info.plist ├── Images.xcassets │ ├── .DS_Store │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-40.png │ │ ├── Icon-40@2x.png │ │ ├── Icon-40@3x.png │ │ ├── Icon-60@2x.png │ │ ├── Icon-60@3x.png │ │ ├── Icon-72.png │ │ ├── Icon-72@2x.png │ │ ├── Icon-76.png │ │ ├── Icon-76@2x.png │ │ ├── Icon-83.5@2x.png │ │ ├── Icon-Small-50.png │ │ ├── Icon-Small-50@2x.png │ │ ├── Icon-Small.png │ │ ├── Icon-Small@2x.png │ │ ├── Icon-Small@3x.png │ │ ├── Icon.png │ │ ├── Icon@2x.png │ │ ├── NotificationIcon@2x.png │ │ ├── NotificationIcon@3x.png │ │ ├── NotificationIcon~ipad.png │ │ └── NotificationIcon~ipad@2x.png │ ├── Chat_image.imageset │ │ ├── Contents.json │ │ ├── ios-chatbubble-outline.png │ │ ├── ios-chatbubble-outline@2x.png │ │ └── ios-chatbubble-outline@3x.png │ ├── Contents.json │ ├── Email_image.imageset │ │ ├── Contents.json │ │ ├── ios-email-outline.png │ │ ├── ios-email-outline@2x.png │ │ └── ios-email-outline@3x.png │ ├── EvilInsultLogo.imageset │ │ ├── .DS_Store │ │ ├── Contents.json │ │ ├── EvilInsultLogo.png │ │ ├── EvilInsultLogo@2x.png │ │ └── EvilInsultLogo@3x.png │ ├── Facebook_image.imageset │ │ ├── Contents.json │ │ ├── social-facebook-outline.png │ │ ├── social-facebook-outline@2x.png │ │ └── social-facebook-outline@3x.png │ ├── Gear_image.imageset │ │ ├── .DS_Store │ │ ├── Contents.json │ │ ├── gear-a.png │ │ ├── gear-a@2x.png │ │ └── gear-a@3x.png │ ├── HamburgerIcon.imageset │ │ ├── Contents.json │ │ ├── Slice 1.png │ │ ├── Slice 1@2x.png │ │ └── Slice 1@3x.png │ ├── Home_image.imageset │ │ ├── Contents.json │ │ ├── ios-home-outline.png │ │ ├── ios-home-outline@2x.png │ │ └── ios-home-outline@3x.png │ ├── Idea_image.imageset │ │ ├── Contents.json │ │ ├── ios-lightbulb-outline.png │ │ ├── ios-lightbulb-outline@2x.png │ │ └── ios-lightbulb-outline@3x.png │ ├── LaunchImage.launchimage │ │ └── Contents.json │ ├── Legal_image.imageset │ │ ├── Contents.json │ │ ├── ios-paper-outline.png │ │ ├── ios-paper-outline@2x.png │ │ └── ios-paper-outline@3x.png │ ├── Logo_image.imageset │ │ ├── Contents.json │ │ ├── Logo_image.png │ │ ├── Logo_image@2x.png │ │ └── Logo_image@3x.png │ ├── Twitter_image.imageset │ │ ├── Contents.json │ │ ├── social-twitter-outline@2x.png │ │ └── social-twitter-outline@3x.png │ ├── World_image.imageset │ │ ├── Contents.json │ │ ├── earth.png │ │ ├── earth@2x.png │ │ └── earth@3x.png │ ├── settings.imageset │ │ ├── Contents.json │ │ ├── settings.png │ │ ├── settings@2x.png │ │ └── settings@3x.png │ └── share.imageset │ │ ├── Contents.json │ │ ├── share.png │ │ ├── share@2x.png │ │ └── share@3x.png ├── Info.plist ├── SWRevealViewController.h ├── SWRevealViewController.m ├── ViewController.swift └── ViewController2.swift ├── Evil InsultTests ├── Evil_InsultTests.swift └── Info.plist ├── Evil InsultUITests ├── Evil_InsultUITests.swift └── Info.plist ├── LICENSE ├── Podfile ├── Podfile.lock ├── Pods ├── .DS_Store ├── Evil-Insult Generator-71eba2fa13fe.json ├── Firebase │ ├── Analytics │ │ └── Sources │ │ │ ├── Firebase.h │ │ │ └── module.modulemap │ └── README.md ├── FirebaseAnalytics │ └── Frameworks │ │ └── frameworks │ │ └── FirebaseAnalytics.framework │ │ ├── .DS_Store │ │ ├── FirebaseAnalytics │ │ ├── Headers │ │ ├── FIRAnalytics+AppDelegate.h │ │ ├── FIRAnalytics.h │ │ ├── FIRAnalyticsConfiguration.h │ │ ├── FIRApp.h │ │ ├── FIRConfiguration.h │ │ ├── FIREventNames.h │ │ ├── FIROptions.h │ │ ├── FIRParameterNames.h │ │ ├── FIRUserPropertyNames.h │ │ └── FirebaseAnalytics.h │ │ └── Modules │ │ └── module.modulemap ├── FirebaseCrash │ ├── .DS_Store │ ├── Frameworks │ │ ├── .DS_Store │ │ └── frameworks │ │ │ ├── .DS_Store │ │ │ └── FirebaseCrash.framework │ │ │ ├── FirebaseCrash │ │ │ ├── Headers │ │ │ ├── FIRCrashLog.h │ │ │ └── FirebaseCrash.h │ │ │ └── Modules │ │ │ └── module.modulemap │ ├── README.md │ ├── ServiceAccount.json │ ├── batch-upload │ ├── dump_syms │ ├── extract-keys │ ├── upload-sym │ ├── upload-sym-util.bash │ └── upload-sym.sh ├── FirebaseInstanceID │ ├── Frameworks │ │ └── frameworks │ │ │ └── FirebaseInstanceID.framework │ │ │ ├── .DS_Store │ │ │ ├── FirebaseInstanceID │ │ │ ├── Headers │ │ │ ├── FIRInstanceID.h │ │ │ └── FirebaseInstanceID.h │ │ │ └── Modules │ │ │ └── module.modulemap │ └── Sources │ │ └── FIRInstanceID.h ├── GoogleInterchangeUtilities │ └── Frameworks │ │ └── GoogleInterchangeUtilities.framework │ │ └── GoogleInterchangeUtilities ├── GoogleSymbolUtilities │ └── Frameworks │ │ └── GoogleSymbolUtilities.framework │ │ └── GoogleSymbolUtilities ├── GoogleUtilities │ └── Frameworks │ │ └── GoogleUtilities.framework │ │ └── GoogleUtilities ├── Headers │ ├── Private │ │ ├── Firebase │ │ │ └── Firebase.h │ │ └── FirebaseInstanceID │ │ │ └── FIRInstanceID.h │ └── Public │ │ ├── Firebase │ │ └── Firebase.h │ │ └── FirebaseInstanceID │ │ └── FIRInstanceID.h ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── Dmitri.xcuserdatad │ │ └── xcschemes │ │ ├── Pods-Evil Insult.xcscheme │ │ ├── Pods-Evil InsultTests.xcscheme │ │ ├── Pods-Evil InsultUITests.xcscheme │ │ └── xcschememanagement.plist └── Target Support Files │ ├── Pods-Evil Insult │ ├── Info.plist │ ├── Pods-Evil Insult-acknowledgements.markdown │ ├── Pods-Evil Insult-acknowledgements.plist │ ├── Pods-Evil Insult-dummy.m │ ├── Pods-Evil Insult-frameworks.sh │ ├── Pods-Evil Insult-resources.sh │ ├── Pods-Evil Insult-umbrella.h │ ├── Pods-Evil Insult.debug.xcconfig │ ├── Pods-Evil Insult.modulemap │ └── Pods-Evil Insult.release.xcconfig │ ├── Pods-Evil InsultTests │ ├── Info.plist │ ├── Pods-Evil InsultTests-acknowledgements.markdown │ ├── Pods-Evil InsultTests-acknowledgements.plist │ ├── Pods-Evil InsultTests-dummy.m │ ├── Pods-Evil InsultTests-frameworks.sh │ ├── Pods-Evil InsultTests-resources.sh │ ├── Pods-Evil InsultTests-umbrella.h │ ├── Pods-Evil InsultTests.debug.xcconfig │ ├── Pods-Evil InsultTests.modulemap │ └── Pods-Evil InsultTests.release.xcconfig │ └── Pods-Evil InsultUITests │ ├── Info.plist │ ├── Pods-Evil InsultUITests-acknowledgements.markdown │ ├── Pods-Evil InsultUITests-acknowledgements.plist │ ├── Pods-Evil InsultUITests-dummy.m │ ├── Pods-Evil InsultUITests-frameworks.sh │ ├── Pods-Evil InsultUITests-resources.sh │ ├── Pods-Evil InsultUITests-umbrella.h │ ├── Pods-Evil InsultUITests.debug.xcconfig │ ├── Pods-Evil InsultUITests.modulemap │ └── Pods-Evil InsultUITests.release.xcconfig ├── README.md └── contributing.json /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/.DS_Store -------------------------------------------------------------------------------- /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | engines: 2 | tailor: 3 | enabled: true 4 | 5 | ratings: 6 | paths: 7 | - "**.swift" 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/Preview.html 64 | fastlane/screenshots 65 | fastlane/test_output 66 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | xcode_project: Evil Insult.xcodeproj 3 | xcode_scheme: Evil InsultTests 4 | xcode_sdk: iphoneos 5 | 6 | after_success: 7 | - bash <(curl -s https://codecov.io/bash) 8 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing To Evil Insult Generator 2 | 3 | 👍🎉 First off, thanks for taking the time to contribute! 🎉👍 4 | 5 | The following is a set of guidelines for contributing to [Evil Insult Generator](https://evilinsult.com/), which are hosted on [GitHub](https://github.com/EvilInsultGenerator/). 6 | These are just guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. 7 | 8 | ## What should I know before I get started? 9 | 10 | ### Code of Conduct 11 | 12 | This project adheres to the [Contributor Covenant code of conduct](https://contributor-covenant.org/version/1/4/). 13 | By participating, you are expected to uphold this code. Please report unacceptable behavior to [marvin@evilinsult.com](mailto:marvin@evilinsult.com). 14 | 15 | ### Contact 16 | 17 | If you have any questions or are unsure about something just drop a line to [marvin@evilinsult.com](mailto:marvin@evilinsult.com). 18 | 19 | ### Design Decisions 20 | 21 | If you plan to make a significant decision in how to maintain the project and what it can or cannot support please send an email beforehand. 22 | 23 | ## How Can I Contribute? 24 | 25 | ### Reporting Bugs 26 | 27 | This section guides you through submitting a bug report for [Evil Insult Generator](https://evilinsult.com/) software. Following these guidelines helps maintainers and the community understand your report 📝, reproduce the behavior 📱💻🎮, and find related reports 🔎. 28 | 29 | Before creating bug reports, please check this list as you might find out that you don't need to create one. When you are creating a bug report, please include as many details as possible. 30 | 31 | ### Suggesting Enhancements 32 | 33 | This section guides you through submitting an enhancement suggestion for [Evil Insult Generator](https://evilinsult.com/), including completely new features and minor improvements to existing functionality. Following these guidelines helps maintainers and the community understand your suggestion 📝 and find related suggestions 🔎. 34 | 35 | Before creating enhancement suggestions, please check this list as you might find out that you don't need to create one. When you are creating an enhancement suggestion, please include as many details as possible. 36 | 37 | ### Pull Requests 38 | 39 | + Include screenshots and animated GIFs in your pull request whenever possible. 40 | + Create a [branch](https://guides.github.com/introduction/flow/) for your edit 41 | 42 | ### Git Commit Messages 43 | 44 | + Use the present tense ("Add feature" not "Added feature") 45 | + Use the imperative mood ("Move cursor to..." not "Moves cursor to...") 46 | + Limit the first line to 72 characters or less 47 | + Reference issues and pull requests liberally 48 | + When only changing documentation, include [ci skip] in the commit description 49 | + Consider starting the commit message with an applicable emoji: 50 | 51 | 🎨 :art: when improving the format/structure of the code 52 | 🐎 :racehorse: when improving performance 53 | 🚱 :non-potable_water: when plugging memory leaks 54 | 📝 :memo: when writing docs 55 | 🐧 :penguin: when fixing something on Linux 56 | 🍎 :apple: when fixing something on macOS 57 | 🏁 :checkered_flag: when fixing something on Windows 58 | 🐛 :bug: when fixing a bug 59 | 🔥 :fire: when removing code or files 60 | 💚 :green_heart: when fixing the CI build 61 | ✅ :white_check_mark: when adding tests 62 | 🔒 :lock: when dealing with security 63 | ⬆️ :arrow_up: when upgrading dependencies 64 | ⬇️ :arrow_down: when downgrading dependencies 65 | 👕 :shirt: when removing linter warnings 66 | 67 | 68 | __Thank you so much! 😘__ 69 | -------------------------------------------------------------------------------- /Evil Insult.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Evil Insult.xcodeproj/project.xcworkspace/xcuserdata/Dmitri.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult.xcodeproj/project.xcworkspace/xcuserdata/Dmitri.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Evil Insult.xcodeproj/project.xcworkspace/xcuserdata/Dmitri.xcuserdatad/UserInterfaceState_conflict-20161030-174053.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult.xcodeproj/project.xcworkspace/xcuserdata/Dmitri.xcuserdatad/UserInterfaceState_conflict-20161030-174053.xcuserstate -------------------------------------------------------------------------------- /Evil Insult.xcodeproj/xcuserdata/Dmitri.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Evil Insult.xcodeproj/xcuserdata/Dmitri.xcuserdatad/xcschemes/Evil Insult.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 88 | 89 | 92 | 93 | 94 | 95 | 99 | 100 | 104 | 105 | 106 | 107 | 108 | 109 | 115 | 117 | 123 | 124 | 125 | 126 | 128 | 129 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /Evil Insult.xcodeproj/xcuserdata/Dmitri.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Evil Insult.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 2A40319F1DC0B8ED00145872 16 | 17 | primary 18 | 19 | 20 | 2A4031B31DC0B8ED00145872 21 | 22 | primary 23 | 24 | 25 | 2A4031BE1DC0B8ED00145872 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Evil Insult.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Evil Insult.xcworkspace/xcuserdata/Dmitri.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult.xcworkspace/xcuserdata/Dmitri.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Evil Insult.xcworkspace/xcuserdata/Dmitri.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Evil Insult/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/.DS_Store -------------------------------------------------------------------------------- /Evil Insult/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Evil Insult 4 | // 5 | // Created by Dmitri Kalinaitsev on 26/10/16. 6 | // Copyright © 2016 Dmitri Kalinaitsev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Firebase 11 | import FirebaseCrash 12 | 13 | @UIApplicationMain 14 | class AppDelegate: UIResponder, UIApplicationDelegate { 15 | 16 | var window: UIWindow? 17 | 18 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 19 | 20 | // Initiate Firebase 21 | FIRApp.configure() 22 | 23 | // Show corresponding storyboard based on iOS device screen resolution 24 | let mainStoryboard = grabStoryboard() 25 | window?.rootViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewController") 26 | window?.makeKeyAndVisible() 27 | 28 | return true 29 | } 30 | 31 | // MARK: Functions 32 | func grabStoryboard() -> UIStoryboard { 33 | 34 | let screenHeight: CGFloat = UIScreen.main.bounds.size.height 35 | var storyboard: UIStoryboard 36 | 37 | switch screenHeight { 38 | case 1366: 39 | // 12.9-inch iPad Pro 40 | storyboard = UIStoryboard(name: "1024x1366", bundle: nil) 41 | UserDefaults.standard.set("1024x1366", forKey: Constants.kDeviceScreen) 42 | case 667: 43 | // iPhone 6, iPhone 6s, iPhone 7 44 | storyboard = UIStoryboard(name: "375x667", bundle: nil) 45 | UserDefaults.standard.set("375x667", forKey: Constants.kDeviceScreen) 46 | case 736: 47 | // iPhone 6 Plus, iPhone 6s Plus, iPhone 7 Plus 48 | storyboard = UIStoryboard(name: "414x736", bundle: nil) 49 | UserDefaults.standard.set("414x736", forKey: Constants.kDeviceScreen) 50 | case 1024: 51 | // iPad Mini 2, iPad Mini 3, iPad Mini 4, iPad 3, iPad 4, iPad Air, iPad Air 2, 9.7-inch iPad Pro 52 | storyboard = UIStoryboard(name: "768x1024", bundle: nil) 53 | UserDefaults.standard.set("768x1024", forKey: Constants.kDeviceScreen) 54 | case 568: 55 | // iPhone 5, 5C, 5S, iPod Touch 5g 56 | storyboard = UIStoryboard(name: "320x568", bundle: nil) 57 | UserDefaults.standard.set("320x568", forKey: Constants.kDeviceScreen) 58 | default: 59 | // iPhone 5, 5C, 5S, iPod Touch 5g 60 | storyboard = UIStoryboard(name: "320x568", bundle: nil) 61 | UserDefaults.standard.set("320x568", forKey: Constants.kDeviceScreen) 62 | } 63 | 64 | UserDefaults.standard.synchronize() 65 | 66 | return storyboard 67 | } 68 | 69 | // MARK: Delegates 70 | func applicationWillResignActive(_ application: UIApplication) { 71 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 72 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 73 | } 74 | 75 | func applicationDidEnterBackground(_ application: UIApplication) { 76 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 77 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 78 | } 79 | 80 | func applicationWillEnterForeground(_ application: UIApplication) { 81 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 82 | } 83 | 84 | func applicationDidBecomeActive(_ application: UIApplication) { 85 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 86 | } 87 | 88 | func applicationWillTerminate(_ application: UIApplication) { 89 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 90 | } 91 | 92 | 93 | } 94 | 95 | -------------------------------------------------------------------------------- /Evil Insult/Base.lproj/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Base.lproj/.DS_Store -------------------------------------------------------------------------------- /Evil Insult/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 | 27 | 28 | 29 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /Evil Insult/Base.lproj/Main.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 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Evil Insult/DKLanguagePickerVC.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DKLanguagePickerVC.swift 3 | // Evil Insult 4 | // 5 | // Created by Dmitri Kalinaitsev on 04/11/16. 6 | // Copyright © 2016 Dmitri Kalinaitsev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DKLanguagePickerVC: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | override func didReceiveMemoryWarning() { 20 | super.didReceiveMemoryWarning() 21 | // Dispose of any resources that can be recreated. 22 | } 23 | 24 | 25 | /* 26 | // MARK: - Navigation 27 | 28 | // In a storyboard-based application, you will often want to do a little preparation before navigation 29 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 30 | // Get the new view controller using segue.destinationViewController. 31 | // Pass the selected object to the new view controller. 32 | } 33 | */ 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Evil Insult/DKNavigationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DKNavigationController.swift 3 | // Evil Insult 4 | // 5 | // Created by Dmitri Kalinaitsev on 02/11/16. 6 | // Copyright © 2016 Dmitri Kalinaitsev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import MessageUI 11 | import Firebase 12 | 13 | class DKNavigationController: UITableViewController, MFMailComposeViewControllerDelegate { 14 | 15 | // MARK: - Table view data source 16 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 17 | return 9 18 | } 19 | 20 | override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 21 | 22 | switch indexPath.row { 23 | case 0: 24 | // Home 25 | FIRAnalytics.logEvent(withName: "home_button_clicked", parameters: nil) 26 | 27 | case 1: 28 | // Proposal 29 | FIRAnalytics.logEvent(withName: "send_proposal_email_clicked", parameters: nil) 30 | sendEmail(withContent: "Hej fuckers,

please add this beauty:

insult: ...
language: ...
comment (optional): ...

...", toEmail: "marvin@evilinsult.com", withSubject: "Evil Insult Generator Proposal") 31 | 32 | case 2: 33 | // Facebook 34 | let appUrl = (URL(string: "fb://profile/6348463702260866974")!) 35 | let webUrl = (URL(string: "https://www.facebook.com/EvilInsultGenerator/")!) 36 | if UIApplication.shared.canOpenURL(appUrl) { 37 | FIRAnalytics.logEvent(withName: "facebook_app_launched", parameters: nil) 38 | UIApplication.shared.open(appUrl, options: [:], completionHandler: nil) 39 | } else { 40 | UIApplication.shared.open(webUrl, options: [:], completionHandler: nil) 41 | FIRAnalytics.logEvent(withName: "facebook_website_launched", parameters: nil) 42 | } 43 | 44 | case 3: 45 | // Twitter 46 | let appUrl = (URL(string: "twitter://user?screen_name=__E__I__G__")!) 47 | let webUrl = (URL(string: "https://twitter.com/__E__I__G__")!) 48 | if UIApplication.shared.canOpenURL(appUrl) { 49 | FIRAnalytics.logEvent(withName: "twitter_app_launched", parameters: nil) 50 | UIApplication.shared.open(appUrl, options: [:], completionHandler: nil) 51 | } else { 52 | UIApplication.shared.open(webUrl, options: [:], completionHandler: nil) 53 | FIRAnalytics.logEvent(withName: "twitter_website_launched", parameters: nil) 54 | } 55 | 56 | case 4: 57 | // Newsletter 58 | UIApplication.shared.open(URL(string: "https://evilinsult.com/newsletter/")!, options: [:], completionHandler: nil) 59 | FIRAnalytics.logEvent(withName: "newsletter_website_opened", parameters: nil) 60 | 61 | case 5: 62 | // Contact Us 63 | sendEmail(withContent: "Marvin, fuck you!", toEmail: "marvin@evilinsult.com", withSubject: "Evil Insult Generator Contact") 64 | FIRAnalytics.logEvent(withName: "contact_us_button_clicked", parameters: nil) 65 | 66 | case 6: 67 | // Website 68 | UIApplication.shared.open(URL(string: "https://evilinsult.com/")!, options: [:], completionHandler: nil) 69 | FIRAnalytics.logEvent(withName: "website_opened", parameters: nil) 70 | 71 | case 7: 72 | // Legal 73 | UIApplication.shared.open(URL(string: "https://evilinsult.com/legal.html")!, options: [:], completionHandler: nil) 74 | FIRAnalytics.logEvent(withName: "legal_link_clicked", parameters: nil) 75 | 76 | case 8: 77 | // Settings 78 | FIRAnalytics.logEvent(withName: "settings_button_clicked", parameters: nil) 79 | 80 | default: 81 | self.revealViewController().revealToggle(animated: true) 82 | } 83 | } 84 | 85 | // MARK: Functions 86 | func sendEmail(withContent: String, toEmail: String, withSubject: String) { 87 | 88 | if MFMailComposeViewController.canSendMail() { 89 | let mail = MFMailComposeViewController() 90 | mail.mailComposeDelegate = self 91 | mail.setToRecipients([toEmail]) 92 | mail.setSubject(withSubject) 93 | mail.setMessageBody(withContent, isHTML: true) 94 | present(mail, animated: true, completion: nil) 95 | } else { 96 | let alert = UIAlertController(title: "Error", message: "Cannot send mail at this time", preferredStyle: UIAlertControllerStyle.alert) 97 | alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 98 | self.present(alert, animated: true, completion: nil) 99 | } 100 | } // Sends an e-mail with the specified content 101 | func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 102 | controller.dismiss(animated: true, completion: nil) 103 | } // Dismisses the mail.app when user is done with it 104 | } 105 | -------------------------------------------------------------------------------- /Evil Insult/DKSettingsVC.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DKSettingsVC.swift 3 | // Evil Insult 4 | // 5 | // Created by Dmitri Kalinaitsev on 05/11/2016. 6 | // Copyright © 2016 Dmitri Kalinaitsev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Firebase 11 | 12 | class DKSettingsVC: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 13 | 14 | // UI Elements 15 | @IBOutlet weak var languagePicker: UIPickerView! 16 | 17 | // Variables and Constants 18 | let languageArray = ["Deutsch", "Ελληνικά", "English", "Español", "Français", "Русский", "Kiswahili"] 19 | let languageCodesArray = ["de", "el", "en", "es", "fr", "ru", "sw"] 20 | 21 | // MARK: Overrides 22 | override func viewDidLoad() { 23 | super.viewDidLoad() 24 | 25 | // Add option to swipe open the menu 26 | self.view.addGestureRecognizer(revealViewController().panGestureRecognizer()) 27 | 28 | // Prepare language picker 29 | let index = languageCodesArray.index(of: UserDefaults.standard.string(forKey: Constants.kSelectedLanguage)!) 30 | languagePicker.selectRow(index!, inComponent: 0, animated: true) 31 | } 32 | 33 | override func viewWillDisappear(_ animated: Bool) { 34 | // Save selected language settings 35 | UserDefaults.standard.synchronize() 36 | } 37 | 38 | // MARK: Language Picker 39 | func numberOfComponents(in pickerView: UIPickerView) -> Int { 40 | return 1 41 | } 42 | 43 | func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 44 | return languageArray.count 45 | } 46 | 47 | func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 48 | 49 | UserDefaults.standard.set(languageCodesArray[row], forKey: Constants.kSelectedLanguage) 50 | } 51 | 52 | func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { 53 | let string = languageArray[row] 54 | return NSAttributedString(string: string, attributes: [NSForegroundColorAttributeName:UIColor.white]) 55 | } 56 | 57 | // MARK: Actions 58 | @IBAction func toggleMenu(_ sender: UIButton) { 59 | self.revealViewController().revealToggle(animated: true) 60 | } // Opens or closes the menu 61 | } 62 | -------------------------------------------------------------------------------- /Evil Insult/Evil Insult-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 "SWRevealViewController.h" 6 | -------------------------------------------------------------------------------- /Evil Insult/Evil Insult.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Evil Insult/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AD_UNIT_ID_FOR_BANNER_TEST 6 | EDIT 7 | AD_UNIT_ID_FOR_INTERSTITIAL_TEST 8 | EDIT 9 | CLIENT_ID 10 | EDIT 11 | REVERSED_CLIENT_ID 12 | EDIT 13 | API_KEY 14 | EDIT 15 | GCM_SENDER_ID 16 | EDIT 17 | PLIST_VERSION 18 | 1 19 | BUNDLE_ID 20 | EDIT 21 | PROJECT_ID 22 | EDIT 23 | STORAGE_BUCKET 24 | EDIT 25 | IS_ADS_ENABLED 26 | 27 | IS_ANALYTICS_ENABLED 28 | 29 | IS_APPINVITE_ENABLED 30 | 31 | IS_GCM_ENABLED 32 | 33 | IS_SIGNIN_ENABLED 34 | 35 | GOOGLE_APP_ID 36 | EDIT 37 | DATABASE_URL 38 | EDIT 39 | 40 | 41 | -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/.DS_Store -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "NotificationIcon@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "NotificationIcon@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-Small.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-Small@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-Small@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "57x57", 47 | "idiom" : "iphone", 48 | "filename" : "Icon.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "57x57", 53 | "idiom" : "iphone", 54 | "filename" : "Icon@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "60x60", 59 | "idiom" : "iphone", 60 | "filename" : "Icon-60@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "60x60", 65 | "idiom" : "iphone", 66 | "filename" : "Icon-60@3x.png", 67 | "scale" : "3x" 68 | }, 69 | { 70 | "size" : "20x20", 71 | "idiom" : "ipad", 72 | "filename" : "NotificationIcon~ipad.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "20x20", 77 | "idiom" : "ipad", 78 | "filename" : "NotificationIcon~ipad@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "29x29", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-Small.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "29x29", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-Small@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "40x40", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-40.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "40x40", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-40@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "50x50", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-Small-50.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "50x50", 113 | "idiom" : "ipad", 114 | "filename" : "Icon-Small-50@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "72x72", 119 | "idiom" : "ipad", 120 | "filename" : "Icon-72.png", 121 | "scale" : "1x" 122 | }, 123 | { 124 | "size" : "72x72", 125 | "idiom" : "ipad", 126 | "filename" : "Icon-72@2x.png", 127 | "scale" : "2x" 128 | }, 129 | { 130 | "size" : "76x76", 131 | "idiom" : "ipad", 132 | "filename" : "Icon-76.png", 133 | "scale" : "1x" 134 | }, 135 | { 136 | "size" : "76x76", 137 | "idiom" : "ipad", 138 | "filename" : "Icon-76@2x.png", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "size" : "83.5x83.5", 143 | "idiom" : "ipad", 144 | "filename" : "Icon-83.5@2x.png", 145 | "scale" : "2x" 146 | } 147 | ], 148 | "info" : { 149 | "version" : 1, 150 | "author" : "xcode" 151 | } 152 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-40.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/NotificationIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/NotificationIcon@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/NotificationIcon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/NotificationIcon@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/NotificationIcon~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/NotificationIcon~ipad.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/AppIcon.appiconset/NotificationIcon~ipad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/AppIcon.appiconset/NotificationIcon~ipad@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Chat_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ios-chatbubble-outline.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ios-chatbubble-outline@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ios-chatbubble-outline@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Chat_image.imageset/ios-chatbubble-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Chat_image.imageset/ios-chatbubble-outline.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Chat_image.imageset/ios-chatbubble-outline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Chat_image.imageset/ios-chatbubble-outline@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Chat_image.imageset/ios-chatbubble-outline@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Chat_image.imageset/ios-chatbubble-outline@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Email_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ios-email-outline.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ios-email-outline@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ios-email-outline@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Email_image.imageset/ios-email-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Email_image.imageset/ios-email-outline.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Email_image.imageset/ios-email-outline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Email_image.imageset/ios-email-outline@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Email_image.imageset/ios-email-outline@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Email_image.imageset/ios-email-outline@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/EvilInsultLogo.imageset/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/EvilInsultLogo.imageset/.DS_Store -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/EvilInsultLogo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "EvilInsultLogo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "EvilInsultLogo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "EvilInsultLogo@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/EvilInsultLogo.imageset/EvilInsultLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/EvilInsultLogo.imageset/EvilInsultLogo.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/EvilInsultLogo.imageset/EvilInsultLogo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/EvilInsultLogo.imageset/EvilInsultLogo@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/EvilInsultLogo.imageset/EvilInsultLogo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/EvilInsultLogo.imageset/EvilInsultLogo@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Facebook_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "social-facebook-outline.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "social-facebook-outline@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "social-facebook-outline@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Facebook_image.imageset/social-facebook-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Facebook_image.imageset/social-facebook-outline.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Facebook_image.imageset/social-facebook-outline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Facebook_image.imageset/social-facebook-outline@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Facebook_image.imageset/social-facebook-outline@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Facebook_image.imageset/social-facebook-outline@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Gear_image.imageset/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Gear_image.imageset/.DS_Store -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Gear_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "gear-a.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "gear-a@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "gear-a@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Gear_image.imageset/gear-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Gear_image.imageset/gear-a.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Gear_image.imageset/gear-a@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Gear_image.imageset/gear-a@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Gear_image.imageset/gear-a@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Gear_image.imageset/gear-a@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/HamburgerIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Slice 1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Slice 1@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Slice 1@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/HamburgerIcon.imageset/Slice 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/HamburgerIcon.imageset/Slice 1.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/HamburgerIcon.imageset/Slice 1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/HamburgerIcon.imageset/Slice 1@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/HamburgerIcon.imageset/Slice 1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/HamburgerIcon.imageset/Slice 1@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Home_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ios-home-outline.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ios-home-outline@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ios-home-outline@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Home_image.imageset/ios-home-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Home_image.imageset/ios-home-outline.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Home_image.imageset/ios-home-outline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Home_image.imageset/ios-home-outline@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Home_image.imageset/ios-home-outline@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Home_image.imageset/ios-home-outline@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Idea_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ios-lightbulb-outline.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ios-lightbulb-outline@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ios-lightbulb-outline@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Idea_image.imageset/ios-lightbulb-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Idea_image.imageset/ios-lightbulb-outline.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Idea_image.imageset/ios-lightbulb-outline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Idea_image.imageset/ios-lightbulb-outline@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Idea_image.imageset/ios-lightbulb-outline@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Idea_image.imageset/ios-lightbulb-outline@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "ipad", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "1x" 9 | }, 10 | { 11 | "orientation" : "landscape", 12 | "idiom" : "ipad", 13 | "extent" : "full-screen", 14 | "minimum-system-version" : "7.0", 15 | "scale" : "1x" 16 | }, 17 | { 18 | "orientation" : "portrait", 19 | "idiom" : "ipad", 20 | "extent" : "full-screen", 21 | "minimum-system-version" : "7.0", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "orientation" : "landscape", 26 | "idiom" : "ipad", 27 | "extent" : "full-screen", 28 | "minimum-system-version" : "7.0", 29 | "scale" : "2x" 30 | } 31 | ], 32 | "info" : { 33 | "version" : 1, 34 | "author" : "xcode" 35 | } 36 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Legal_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ios-paper-outline.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ios-paper-outline@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ios-paper-outline@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Legal_image.imageset/ios-paper-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Legal_image.imageset/ios-paper-outline.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Legal_image.imageset/ios-paper-outline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Legal_image.imageset/ios-paper-outline@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Legal_image.imageset/ios-paper-outline@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Legal_image.imageset/ios-paper-outline@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Logo_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Logo_image.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Logo_image@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Logo_image@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Logo_image.imageset/Logo_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Logo_image.imageset/Logo_image.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Logo_image.imageset/Logo_image@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Logo_image.imageset/Logo_image@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Logo_image.imageset/Logo_image@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Logo_image.imageset/Logo_image@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Twitter_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "social-twitter-outline@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "social-twitter-outline@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Twitter_image.imageset/social-twitter-outline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Twitter_image.imageset/social-twitter-outline@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/Twitter_image.imageset/social-twitter-outline@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/Twitter_image.imageset/social-twitter-outline@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/World_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "earth.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "earth@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "earth@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/World_image.imageset/earth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/World_image.imageset/earth.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/World_image.imageset/earth@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/World_image.imageset/earth@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/World_image.imageset/earth@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/World_image.imageset/earth@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/settings.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "settings.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "settings@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "settings@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/settings.imageset/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/settings.imageset/settings.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/settings.imageset/settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/settings.imageset/settings@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/settings.imageset/settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/settings.imageset/settings@3x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/share.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "share.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "share@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "share@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/share.imageset/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/share.imageset/share.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/share.imageset/share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/share.imageset/share@2x.png -------------------------------------------------------------------------------- /Evil Insult/Images.xcassets/share.imageset/share@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Evil Insult/Images.xcassets/share.imageset/share@3x.png -------------------------------------------------------------------------------- /Evil Insult/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSAppTransportSecurity 6 | 7 | NSAllowsArbitraryLoads 8 | 9 | 10 | CFBundleDevelopmentRegion 11 | en 12 | CFBundleDisplayName 13 | 14 | CFBundleExecutable 15 | $(EXECUTABLE_NAME) 16 | CFBundleIdentifier 17 | $(PRODUCT_BUNDLE_IDENTIFIER) 18 | CFBundleInfoDictionaryVersion 19 | 6.0 20 | CFBundleName 21 | $(PRODUCT_NAME) 22 | CFBundlePackageType 23 | APPL 24 | CFBundleShortVersionString 25 | 1.0 26 | CFBundleVersion 27 | 1 28 | LSApplicationCategoryType 29 | 30 | LSRequiresIPhoneOS 31 | 32 | UILaunchStoryboardName 33 | 375x667 34 | UIMainStoryboardFile 35 | Main 36 | UIRequiredDeviceCapabilities 37 | 38 | armv7 39 | 40 | UIStatusBarStyle 41 | UIStatusBarStyleLightContent 42 | UISupportedInterfaceOrientations 43 | 44 | UIInterfaceOrientationPortrait 45 | 46 | UISupportedInterfaceOrientations~ipad 47 | 48 | UIInterfaceOrientationPortrait 49 | UIInterfaceOrientationPortraitUpsideDown 50 | 51 | UIViewControllerBasedStatusBarAppearance 52 | 53 | LSApplicationQueriesSchemes 54 | 55 | fb 56 | twitter 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /Evil Insult/ViewController2.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Evil Insult 4 | // 5 | // Created by Dmitri Kalinaitsev on 26/10/16. 6 | // Copyright © 2016 Dmitri Kalinaitsev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import QuartzCore 11 | import Firebase 12 | 13 | 14 | // MARK: Constants 15 | struct Constants2 { 16 | static let kAppInstalledFirstTime = "kAppInstalledFirstTime" 17 | static let kSelectedLanguage = "kSelectedLanguage" 18 | static let kDeviceScreen = "kDeviceScreen" 19 | } 20 | 21 | class ViewController2: UIViewController { 22 | 23 | // MARK: UI Elements 24 | @IBOutlet weak var insultTextView: UITextView! 25 | @IBOutlet weak var generateInsultButton: UIButton! 26 | @IBOutlet weak var loadingIndicator: UIActivityIndicatorView! 27 | @IBOutlet weak var menuButton: UIButton! 28 | 29 | 30 | // MARK: Variables 31 | var currentInsult = "" 32 | var fetchedInsult = "" 33 | let fetchInsultThread = DispatchQueue.init(label: "insultFetcher") 34 | 35 | 36 | // MARK: Overrides 37 | override func viewDidLoad() { 38 | super.viewDidLoad() 39 | 40 | // // 1. Check if this app has previously been installed on the device 41 | // if UserDefaults.standard.bool(forKey: Constants.kAppInstalledFirstTime) != true { 42 | // // Send statistics 43 | // UserDefaults.standard.set(true, forKey: Constants.kAppInstalledFirstTime) 44 | // FIRAnalytics.logEvent(withName: "unique_devices", parameters: nil) 45 | // 46 | // // Prepare default insults label 47 | // UserDefaults.standard.set("en", forKey: Constants.kSelectedLanguage) 48 | // 49 | // // Force settings to synchronise 50 | // UserDefaults.standard.synchronize() 51 | // } 52 | // 53 | // // 2. Fetch & Display an initial Insult 54 | // currentInsult = getInsult() 55 | // if currentInsult == "Error!\nNo active internet connection" { 56 | // insultTextView.textColor = UIColor.yellow 57 | // } 58 | // insultTextView.text = currentInsult 59 | // self.setupInsult(textView: insultTextView!) 60 | // 61 | // // 3. Stop and hide the loading indicator if it is animating 62 | // if loadingIndicator.isAnimating == true { 63 | // loadingIndicator.stopAnimating() 64 | // } 65 | // 66 | // // 4. Make the generate button have rounded corners 67 | // self.generateInsultButton.layer.cornerRadius = 4.0 68 | // 69 | // // 5. Add gesture for swiping from left to open the menu 70 | // self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 71 | } 72 | 73 | 74 | // MARK: Actions 75 | @IBAction func toggleMenu(_ sender: UIButton) { 76 | self.revealViewController().revealToggle(animated: true) 77 | } // Opens or closes the menu 78 | 79 | @IBAction func generateInsult(_ sender: UIButton) { 80 | 81 | FIRAnalytics.logEvent(withName: "generate_insult_button_clicked", parameters: nil) 82 | 83 | self.fetchInsultThread.async { 84 | 85 | self.fetchedInsult = self.getInsult() 86 | 87 | if self.fetchedInsult != "Error!\nNo active internet connection" { 88 | 89 | if self.currentInsult == self.fetchedInsult { 90 | 91 | self.toggleIndicator() 92 | 93 | OperationQueue.main.addOperation { 94 | self.generateInsultButton.isEnabled = false 95 | } 96 | 97 | repeat { 98 | self.fetchedInsult = self.getInsult() 99 | } while self.fetchedInsult == self.currentInsult 100 | 101 | OperationQueue.main.addOperation { 102 | self.insultTextView.textColor = UIColor.white 103 | self.insultTextView!.text = self.fetchedInsult 104 | self.currentInsult = self.fetchedInsult 105 | self.setupInsult(textView: self.insultTextView) 106 | self.generateInsultButton.isEnabled = true 107 | } 108 | 109 | self.toggleIndicator() 110 | 111 | } else { 112 | 113 | OperationQueue.main.addOperation { 114 | self.insultTextView.textColor = UIColor.white 115 | self.insultTextView!.text = self.fetchedInsult 116 | self.currentInsult = self.fetchedInsult 117 | self.setupInsult(textView: self.insultTextView) 118 | self.generateInsultButton.isEnabled = true 119 | } 120 | } 121 | } else { 122 | OperationQueue.main.addOperation { 123 | self.insultTextView.textColor = UIColor.yellow 124 | self.insultTextView!.text = self.fetchedInsult 125 | self.currentInsult = self.fetchedInsult 126 | self.setupInsult(textView: self.insultTextView) 127 | self.generateInsultButton.isEnabled = true 128 | } 129 | } 130 | } 131 | } // Generates an insult an updates the view on button click 132 | 133 | @IBAction func shareButtonClicked(sender: AnyObject) 134 | { 135 | if currentInsult != "" && currentInsult != "Error!\nNo active internet connection" { 136 | 137 | FIRAnalytics.logEvent(withName: "share_button_clicked", parameters: nil) 138 | 139 | let activityVC = UIActivityViewController(activityItems: [currentInsult], applicationActivities: nil) 140 | activityVC.excludedActivityTypes = [UIActivityType.airDrop, UIActivityType.assignToContact, UIActivityType.openInIBooks, UIActivityType.postToVimeo, UIActivityType.addToReadingList, UIActivityType.postToFlickr, UIActivityType.saveToCameraRoll] 141 | self.present(activityVC, animated: true, completion: nil) 142 | } else { 143 | return 144 | } 145 | } // Action to allow user to share an insult 146 | 147 | // MARK: Functions 148 | func setupInsult(textView: UITextView!) { 149 | // Setup textView contents and adjust it's size accordingly 150 | let fixedWidth = textView.frame.size.width 151 | textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude)) 152 | let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude)) 153 | var newFrame = textView.frame 154 | newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 155 | textView.frame = newFrame 156 | 157 | // Draw border 158 | textView.layer.cornerRadius = 5 159 | textView.layer.borderColor = UIColor.white.withAlphaComponent(0.8).cgColor 160 | textView.layer.borderWidth = 2 161 | textView.clipsToBounds = true 162 | } // This function takes care of how the Insult is displayed on user screen 163 | 164 | func toggleIndicator() { 165 | OperationQueue.main.addOperation { 166 | if self.loadingIndicator.isAnimating { 167 | self.loadingIndicator.stopAnimating() 168 | } else { 169 | self.loadingIndicator.startAnimating() 170 | } 171 | } 172 | } // Convinience function to switch the animating indicator on or off 173 | 174 | func getInsult() -> String { 175 | 176 | var newInsult = "" 177 | 178 | do { 179 | let urlString = "http://evilinsult.com/generate_insult.php?lang=" + UserDefaults.standard.string(forKey: Constants.kSelectedLanguage)! 180 | print(urlString) 181 | newInsult = try String(contentsOf: URL.init(string: urlString)!) 182 | } catch { 183 | 184 | let alert = UIAlertController(title: "Error", message: "No active internet connection", preferredStyle: UIAlertControllerStyle.alert) 185 | alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 186 | self.present(alert, animated: true, completion: nil) 187 | return "Error!\nNo active internet connection" 188 | } 189 | 190 | return newInsult 191 | } // Fetch insult from the internet 192 | } 193 | -------------------------------------------------------------------------------- /Evil InsultTests/Evil_InsultTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Evil_InsultTests.swift 3 | // Evil InsultTests 4 | // 5 | // Created by Dmitri Kalinaitsev on 26/10/16. 6 | // Copyright © 2016 Dmitri Kalinaitsev. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import Evil_Insult 11 | 12 | class Evil_InsultTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Evil InsultTests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Evil InsultUITests/Evil_InsultUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Evil_InsultUITests.swift 3 | // Evil InsultUITests 4 | // 5 | // Created by Dmitri Kalinaitsev on 26/10/16. 6 | // Copyright © 2016 Dmitri Kalinaitsev. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class Evil_InsultUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Evil InsultUITests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'Evil Insult' do 5 | # Comment this line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for Evil Insult 9 | pod 'Firebase/Core' 10 | pod 'Firebase/Crash' 11 | 12 | target 'Evil InsultTests' do 13 | inherit! :search_paths 14 | # Pods for testing 15 | end 16 | 17 | target 'Evil InsultUITests' do 18 | inherit! :search_paths 19 | # Pods for testing 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Firebase/Analytics (3.6.0): 3 | - FirebaseAnalytics (= 3.4.2) 4 | - Firebase/Core (3.6.0): 5 | - Firebase/Analytics 6 | - Firebase/Crash (3.6.0): 7 | - Firebase/Analytics 8 | - FirebaseCrash (= 1.0.7) 9 | - FirebaseAnalytics (3.4.2): 10 | - FirebaseInstanceID (~> 1.0) 11 | - GoogleInterchangeUtilities (~> 1.2) 12 | - GoogleSymbolUtilities (~> 1.1) 13 | - GoogleUtilities (~> 1.2) 14 | - FirebaseCrash (1.0.7): 15 | - FirebaseAnalytics (~> 3.2) 16 | - FirebaseInstanceID (~> 1.0) 17 | - GoogleInterchangeUtilities (~> 1.2) 18 | - GoogleSymbolUtilities (~> 1.1) 19 | - GoogleUtilities (~> 1.2) 20 | - FirebaseInstanceID (1.0.8) 21 | - GoogleInterchangeUtilities (1.2.1): 22 | - GoogleSymbolUtilities (~> 1.0) 23 | - GoogleSymbolUtilities (1.1.1) 24 | - GoogleUtilities (1.3.1): 25 | - GoogleSymbolUtilities (~> 1.0) 26 | 27 | DEPENDENCIES: 28 | - Firebase/Core 29 | - Firebase/Crash 30 | 31 | SPEC CHECKSUMS: 32 | Firebase: 34187200ef4979dbd485c7aa685ef078bf587c86 33 | FirebaseAnalytics: 3f5358d9104adf159cc8d99b7b501e50099a39ad 34 | FirebaseCrash: 2efeb3715b76ac843b841529ce413efb67e5fd4d 35 | FirebaseInstanceID: ba1e640935235e5fac39dfa816fe7660e72e1a8a 36 | GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de 37 | GoogleSymbolUtilities: 33117db1b5f290c6fbf259585e4885b4c84b98d7 38 | GoogleUtilities: 56c5ac05b7aa5dc417a1bb85221a9516e04d7032 39 | 40 | PODFILE CHECKSUM: afaac5ca42f47ac60b45bc83f615ba46f774ce28 41 | 42 | COCOAPODS: 1.0.0 43 | -------------------------------------------------------------------------------- /Pods/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/.DS_Store -------------------------------------------------------------------------------- /Pods/Evil-Insult Generator-71eba2fa13fe.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "service_account", 3 | "project_id": "evil-insult-generator", 4 | "private_key_id": "71eba2fa13fe48b3cb4280859389af554f08dce9", 5 | "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7tScI39HXi5qo\nrGBrsEzb3wg8B4IF4P4QLmBWEUMU9oUGdseFt3CJgXS3RlBU6+BHVe4/OMJazQbt\n88clr/AJ2ffRKMQkHefR/Xzg/xtsPIkAKShtQcbupgjGX71Hz+CVClwLGGRfmnls\nK5A7pr034MnsEazP9UkEZXIrMshsRIQYwaZzlXzmlmr/jPz1bVaUOOsRmjus+2sm\nnnICWJbYxPgE3gZ0YiWqKSrl9sskHD1JuUEaAQ0NA5Slegd4IIJT243N/ewq/vKe\nhI0JYNlm+F5W6YjqF17tIl8QGr9YD1pLhC4Bd0w8sGo/mWFjYpVTAG8QzlJLNvrZ\n4upz6s9bAgMBAAECggEBAKQLRkj4KlDgvdIpi76xfgot2el0ekqe/gqwLRsqzOB2\nLX2fsvGGhoB1tcYyWiRNXF2bmLKB7UEjq6mrgeDK6NIDPxP5N6mExUN88HVGHfYy\n1Vxhm+YYNT39tu9/XlFzOAeo3RYJRDdVLka9r7iiGP3Lo0x/ifLYn+6KpgNgx03t\n9/06i9L5HBjNJkea0InG/k4A83C97QEs1aFKK9zTn5jDgehFX1EQ/Gowq4Ws52Zz\nqFIYpfcbzFQouvUaKMzdDzljD4JMz2zds3W0RAuvWDBWvUwb3EdQaDZlUpiF7TMA\nJwbL+mJlbrbl0kpMZaswL+UIF9Q8QTl5jSenKsUa89ECgYEA3n13vydlH+pPQiFH\n1Sf4ba2+uNkPE/r147L+xk/cfh3c8AEJ8U/IOU2kHhoiEumdiV62QnWruEy0BO66\nHo/KOA5cr7qYAI10bK03A/aY5h9/LLEieb7bbPT42XKvjM/LywheHUscG3SVLWKM\nA8i+ab95n9Yz5Ksm/9rMso1fXfMCgYEA1/qUW+LwBINppa9I3DV+oqjYD8Ujwmva\nYmJZbwfMraPDEZOZMTAq2r2/eWhSJseSF92CTKSjaN+zcuvJQZzHLPGqbwsR2OOS\nPISCDPbkoNQm5Ui2yJHb6qT9AQ3niSZ1B5zZsPq5mk8XomVVarFuyMBDdhIxUCYm\nHIXAeZObWvkCgYATjRT7wDt7rXxfhEsqqQOEp9LtrW1MxS3cX3tR8+ydTISAtqao\nBOnEV1VHq+Y4oTzNuHvtpSd834imMlA6pUoQ2Po+GviGe+eyMRp3h7Dx7+yeAcbU\nyffAQFqpyREyH4R6B/c1PcdvhjQhs9o37ukEo+XNLOaMfpnDu/dm7VNnDwKBgBwY\nJ2ZQfeJIady4kWS7vK5SAlEC1uT6fJzhqDqOLCzGKaDGr127o0dy+U5EqLMMsM9T\n7BgmLm988e3YCAT17N7GzOHG8dpht+sRXY1sLE9TaX/X1pb+ijnanmKduWmYzA5i\nc9rWsoAFG9DvF45aaEvK3rukIDAJ1llNeL0X21SZAoGALTdnPyXYeaGn6QcSHhjF\n83jOY7w9Yt/29w0/FxZpGifh2S1cDEKebSTixK5NspJmluUJjUOX1PR1Q5xNmZr2\nWlkDkg0x6qK9kfyOqBz8oa5zz07acZH1G0XMx/w8alC73Yr54judv6YMLMZEw0xq\n9+cDifX7gZoue9eUmj6uIxY=\n-----END PRIVATE KEY-----\n", 6 | "client_email": "symbol-upload-service-account@evil-insult-generator.iam.gserviceaccount.com", 7 | "client_id": "105571935281498379344", 8 | "auth_uri": "https://accounts.google.com/o/oauth2/auth", 9 | "token_uri": "https://accounts.google.com/o/oauth2/token", 10 | "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 11 | "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/symbol-upload-service-account%40evil-insult-generator.iam.gserviceaccount.com" 12 | } 13 | -------------------------------------------------------------------------------- /Pods/Firebase/Analytics/Sources/Firebase.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #if !defined(__has_include) 4 | #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \ 5 | import the headers individually." 6 | #else 7 | #if __has_include() 8 | #import 9 | #endif 10 | 11 | #if __has_include() 12 | #import 13 | #endif 14 | 15 | #if __has_include() 16 | #import 17 | #endif 18 | 19 | #if __has_include() 20 | #import 21 | #endif 22 | 23 | #if __has_include() 24 | #import 25 | #endif 26 | 27 | #if __has_include() 28 | #import 29 | #endif 30 | 31 | #if __has_include() 32 | #import 33 | #endif 34 | 35 | #if __has_include() 36 | #import 37 | #endif 38 | 39 | #if __has_include() 40 | #import 41 | #endif 42 | 43 | #if __has_include() 44 | #import 45 | #endif 46 | 47 | #if __has_include() 48 | #import 49 | #endif 50 | 51 | #endif // defined(__has_include) 52 | -------------------------------------------------------------------------------- /Pods/Firebase/Analytics/Sources/module.modulemap: -------------------------------------------------------------------------------- 1 | module Firebase { 2 | export * 3 | header "Firebase.h" 4 | } -------------------------------------------------------------------------------- /Pods/Firebase/README.md: -------------------------------------------------------------------------------- 1 | # Firebase APIs for iOS 2 | 3 | Simplify your iOS development, grow your user base, and monetize more 4 | effectively with Firebase services. 5 | 6 | Much more information can be found at [https://firebase.google.com](https://firebase.google.com). 7 | 8 | ## Install a Firebase SDK using CocoaPods 9 | 10 | Firebase distributes several iOS specific APIs and SDKs via CocoaPods. 11 | You can install the CocoaPods tool on OS X by running the following command from 12 | the terminal. Detailed information is available in the [Getting Started 13 | guide](https://guides.cocoapods.org/using/getting-started.html#getting-started). 14 | 15 | ``` 16 | $ sudo gem install cocoapods 17 | ``` 18 | 19 | ## Try out an SDK 20 | 21 | You can try any of the SDKs with `pod try`. Run the following command and select 22 | the SDK you are interested in when prompted: 23 | 24 | ``` 25 | $ pod try Firebase 26 | ``` 27 | 28 | Note that some SDKs may require credentials. More information is available in 29 | the SDK-specific documentation at [https://firebase.google.com/docs/](https://firebase.google.com/docs/). 30 | 31 | ## Add a Firebase SDK to your iOS app 32 | 33 | CocoaPods is used to install and manage dependencies in existing Xcode projects. 34 | 35 | 1. Create an Xcode project, and save it to your local machine. 36 | 2. Create a file named `Podfile` in your project directory. This file defines 37 | your project's dependencies, and is commonly referred to as a Podspec. 38 | 3. Open `Podfile`, and add your dependencies. A simple Podspec is shown here: 39 | 40 | ``` 41 | platform :ios, '7.0' 42 | pod 'Firebase' 43 | ``` 44 | 45 | 4. Save the file. 46 | 5. Open a terminal and `cd` to the directory containing the Podfile. 47 | 48 | ``` 49 | $ cd /project/ 50 | ``` 51 | 52 | 6. Run the `pod install` command. This will install the SDKs specified in the 53 | Podspec, along with any dependencies they may have. 54 | 55 | ``` 56 | $ pod install 57 | ``` 58 | 59 | 7. Open your app's `.xcworkspace` file to launch Xcode. 60 | Use this file for all development on your app. 61 | 8. You can also install other Firebase SDKs by adding the subspecs in the 62 | Podfile. 63 | 64 | ``` 65 | pod 'Firebase/AdMob' 66 | pod 'Firebase/Analytics' 67 | pod 'Firebase/AppIndexing' 68 | pod 'Firebase/Auth' 69 | pod 'Firebase/Crash' 70 | pod 'Firebase/Database' 71 | pod 'Firebase/DynamicLinks' 72 | pod 'Firebase/Invites' 73 | pod 'Firebase/Messaging' 74 | pod 'Firebase/RemoteConfig' 75 | pod 'Firebase/Storage' 76 | ``` 77 | -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/.DS_Store -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/FirebaseAnalytics: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/FirebaseAnalytics -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "FIRAnalytics.h" 4 | 5 | /** 6 | * Provides App Delegate handlers to be used in your App Delegate. 7 | * 8 | * To save time integrating Firebase Analytics in an application, Firebase Analytics does not 9 | * require delegation implementation from the AppDelegate. Instead this is automatically done by 10 | * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App 11 | * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your Info.plist and setting it 12 | * to NO, and adding the methods in this category to corresponding delegation handlers. 13 | * 14 | * To handle Universal Links, you must return YES in 15 | * [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. 16 | */ 17 | @interface FIRAnalytics (AppDelegate) 18 | 19 | /** 20 | * Handles events related to a URL session that are waiting to be processed. 21 | * 22 | * For optimal use of Firebase Analytics, call this method from the 23 | * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler] 24 | * method of the app delegate in your app. 25 | * 26 | * @param identifier The identifier of the URL session requiring attention. 27 | * @param completionHandler The completion handler to call when you finish processing the events. 28 | * Calling this completion handler lets the system know that your app's user interface is 29 | * updated and a new snapshot can be taken. 30 | */ 31 | + (void)handleEventsForBackgroundURLSession:(NSString *)identifier 32 | completionHandler:(void (^)(void))completionHandler; 33 | 34 | /** 35 | * Handles the event when the app is launched by a URL. 36 | * 37 | * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and 38 | * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on iOS 8.x 39 | * and below) in your app. 40 | * 41 | * @param url The URL resource to open. This resource can be a network resource or a file. 42 | */ 43 | + (void)handleOpenURL:(NSURL *)url; 44 | 45 | /** 46 | * Handles the event when the app receives data associated with user activity that includes a 47 | * Universal Link (on iOS 9.0 and above). 48 | * 49 | * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app 50 | * delegate (on iOS 9.0 and above). 51 | * 52 | * @param userActivity The activity object containing the data associated with the task the user 53 | * was performing. 54 | */ 55 | + (void)handleUserActivity:(id)userActivity; 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "FIREventNames.h" 4 | #import "FIRParameterNames.h" 5 | #import "FIRUserPropertyNames.h" 6 | 7 | /// The top level Firebase Analytics singleton that provides methods for logging events and setting 8 | /// user properties. See the developer guides for general 9 | /// information on using Firebase Analytics in your apps. 10 | @interface FIRAnalytics : NSObject 11 | 12 | /// Logs an app event. The event can have up to 25 parameters. Events with the same name must have 13 | /// the same parameters. Up to 500 event names are supported. Using predefined events and/or 14 | /// parameters is recommended for optimal reporting. 15 | /// 16 | /// The following event names are reserved and cannot be used: 17 | ///
    18 | ///
  • app_clear_data
  • 19 | ///
  • app_remove
  • 20 | ///
  • app_update
  • 21 | ///
  • error
  • 22 | ///
  • first_open
  • 23 | ///
  • in_app_purchase
  • 24 | ///
  • notification_dismiss
  • 25 | ///
  • notification_foreground
  • 26 | ///
  • notification_open
  • 27 | ///
  • notification_receive
  • 28 | ///
  • os_update
  • 29 | ///
  • session_start
  • 30 | ///
  • user_engagement
  • 31 | ///
32 | /// 33 | /// @param name The name of the event. Should contain 1 to 32 alphanumeric characters or 34 | /// underscores. The name must start with an alphabetic character. Some event names are 35 | /// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_" prefix 36 | /// is reserved and should not be used. Note that event names are case-sensitive and that 37 | /// logging two events whose names differ only in case will result in two distinct events. 38 | /// @param parameters The dictionary of event parameters. Passing nil indicates that the event has 39 | /// no parameters. Parameter names can be up to 24 characters long and must start with an 40 | /// alphabetic character and contain only alphanumeric characters and underscores. Only NSString 41 | /// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are 42 | /// supported. NSString parameter values can be up to 36 characters long. The "firebase_" prefix 43 | /// is reserved and should not be used for parameter names. 44 | + (void)logEventWithName:(nonnull NSString *)name 45 | parameters:(nullable NSDictionary *)parameters; 46 | 47 | /// Sets a user property to a given value. Up to 25 user property names are supported. Once set, 48 | /// user property values persist throughout the app lifecycle and across sessions. 49 | /// 50 | /// The following user property names are reserved and cannot be used: 51 | ///
    52 | ///
  • first_open_time
  • 53 | ///
  • last_deep_link_referrer
  • 54 | ///
  • user_id
  • 55 | ///
56 | /// 57 | /// @param value The value of the user property. Values can be up to 36 characters long. Setting the 58 | /// value to nil removes the user property. 59 | /// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters 60 | /// or underscores and must start with an alphabetic character. The "firebase_" prefix is 61 | /// reserved and should not be used for user property names. 62 | + (void)setUserPropertyString:(nullable NSString *)value forName:(nonnull NSString *)name; 63 | 64 | /// Sets the user ID property. This feature must be used in accordance with 65 | /// Google's Privacy Policy 66 | /// 67 | /// @param userID The user ID to ascribe to the user of this app on this device, which must be 68 | /// non-empty and no more than 36 characters long. Setting userID to nil removes the user ID. 69 | + (void)setUserID:(nullable NSString *)userID; 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | /** 4 | * This class provides configuration fields for Firebase Analytics. 5 | */ 6 | @interface FIRAnalyticsConfiguration : NSObject 7 | 8 | /** 9 | * Returns the shared instance of FIRAnalyticsConfiguration. 10 | */ 11 | + (FIRAnalyticsConfiguration *)sharedInstance; 12 | 13 | /** 14 | * Sets the minimum engagement time in seconds required to start a new session. The default value 15 | * is 10 seconds. 16 | */ 17 | - (void)setMinimumSessionInterval:(NSTimeInterval)minimumSessionInterval; 18 | 19 | /** 20 | * Sets the interval of inactivity in seconds that terminates the current session. The default 21 | * value is 1800 seconds (30 minutes). 22 | */ 23 | - (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; 24 | 25 | /** 26 | * Sets whether analytics collection is enabled for this app on this device. This setting is 27 | * persisted across app sessions. By default it is enabled. 28 | */ 29 | - (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; 30 | 31 | /** 32 | * Deprecated. Sets whether measurement and reporting are enabled for this app on this device. By 33 | * default they are enabled. 34 | */ 35 | - (void)setIsEnabled:(BOOL)isEnabled 36 | DEPRECATED_MSG_ATTRIBUTE("Use setAnalyticsCollectionEnabled: instead."); 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/Headers/FIRApp.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @class FIROptions; 5 | 6 | NS_ASSUME_NONNULL_BEGIN 7 | 8 | typedef void (^FIRAppVoidBoolCallback)(BOOL success); 9 | 10 | /** 11 | * The entry point of Firebase SDKs. 12 | * 13 | * Initialize and configure FIRApp using [FIRApp configure]; 14 | * Or other customized ways as shown below. 15 | */ 16 | @interface FIRApp : NSObject 17 | 18 | /** 19 | * Configures a default Firebase app. Raises an exception if any configuration step fails. The 20 | * default app is named "__FIRAPP_DEFAULT". This method should be called after the app is launched 21 | * and before using Firebase services. This method is thread safe. 22 | */ 23 | + (void)configure; 24 | 25 | /** 26 | * Configures the default Firebase app with the provided options. The default app is named 27 | * "__FIRAPP_DEFAULT". Raises an exception if any configuration step fails. This method is thread 28 | * safe. 29 | * 30 | * @param options The Firebase application options used to configure the service. 31 | */ 32 | + (void)configureWithOptions:(FIROptions *)options; 33 | 34 | /** 35 | * Configures a Firebase app with the given name and options. Raises an exception if any 36 | * configuration step fails. This method is thread safe. 37 | * 38 | * @param name The application's name given by the developer. The name should should only contain 39 | Letters, Numbers and Underscore. 40 | * @param options The Firebase application options used to configure the services. 41 | */ 42 | + (void)configureWithName:(NSString *)name options:(FIROptions *)options; 43 | 44 | /** 45 | * Returns the default app, or nil if the default app does not exist. 46 | */ 47 | + (nullable FIRApp *)defaultApp NS_SWIFT_NAME(defaultApp()); 48 | 49 | /** 50 | * Returns a previously created FIRApp instance with the given name, or nil if no such app exists. 51 | * This method is thread safe. 52 | */ 53 | + (nullable FIRApp *)appNamed:(NSString *)name; 54 | 55 | /** 56 | * Returns the set of all extant FIRApp instances, or nil if there is no FIRApp instance. This 57 | * method is thread safe. 58 | */ 59 | + (nullable NSDictionary *)allApps; 60 | 61 | /** 62 | * Cleans up the current FIRApp, freeing associated data and returning its name to the pool for 63 | * future use. This method is thread safe in class level. 64 | */ 65 | - (void)deleteApp:(FIRAppVoidBoolCallback)completion; 66 | 67 | /** 68 | * FIRFirebaseApp instances should not be initialized directly. Call |FIRApp configure|, or 69 | * |FIRApp configureWithOptions:|, or |FIRApp configureWithNames:options| directly. 70 | */ 71 | - (nullable instancetype)init NS_UNAVAILABLE; 72 | 73 | /** 74 | * Gets the name of this app. 75 | */ 76 | @property(nonatomic, copy, readonly) NSString *name; 77 | 78 | /** 79 | * Gets the options for this app. 80 | */ 81 | @property(nonatomic, readonly) FIROptions *options; 82 | 83 | @end 84 | 85 | NS_ASSUME_NONNULL_END 86 | -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/Headers/FIRConfiguration.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "FIRAnalyticsConfiguration.h" 4 | 5 | /** 6 | * The log levels used by FIRConfiguration. 7 | */ 8 | typedef NS_ENUM(NSInteger, FIRLogLevel) { 9 | kFIRLogLevelError = 0, 10 | kFIRLogLevelWarning, 11 | kFIRLogLevelInfo, 12 | kFIRLogLevelDebug, 13 | kFIRLogLevelAssert, 14 | kFIRLogLevelMax = kFIRLogLevelAssert 15 | }; 16 | 17 | /** 18 | * This interface provides global level properties that the developer can tweak, and the singleton 19 | * of each Google service configuration class. 20 | */ 21 | @interface FIRConfiguration : NSObject 22 | 23 | + (FIRConfiguration *)sharedInstance; 24 | 25 | // The configuration class for Firebase Analytics. 26 | @property(nonatomic, readwrite) FIRAnalyticsConfiguration *analyticsConfiguration; 27 | 28 | // Global log level. Defaults to kFIRLogLevelError. 29 | @property(nonatomic, readwrite, assign) FIRLogLevel logLevel; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/Headers/FIROptions.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | /** 4 | * This class provides constant fields of Google APIs. 5 | */ 6 | @interface FIROptions : NSObject 7 | 8 | /** 9 | * Returns the default options. 10 | */ 11 | + (FIROptions *)defaultOptions; 12 | 13 | /** 14 | * An iOS API key used for authenticating requests from your app, e.g. 15 | * @"AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to Google servers. 16 | */ 17 | @property(nonatomic, readonly, copy) NSString *APIKey; 18 | 19 | /** 20 | * The OAuth2 client ID for iOS application used to authenticate Google users, for example 21 | * @"12345.apps.googleusercontent.com", used for signing in with Google. 22 | */ 23 | @property(nonatomic, readonly, copy) NSString *clientID; 24 | 25 | /** 26 | * The tracking ID for Google Analytics, e.g. @"UA-12345678-1", used to configure Google Analytics. 27 | */ 28 | @property(nonatomic, readonly, copy) NSString *trackingID; 29 | 30 | /** 31 | * The Project Number from the Google Developer's console, for example @"012345678901", used to 32 | * configure Google Cloud Messaging. 33 | */ 34 | @property(nonatomic, readonly, copy) NSString *GCMSenderID; 35 | 36 | /** 37 | * The Android client ID used in Google AppInvite when an iOS app has its Android version, for 38 | * example @"12345.apps.googleusercontent.com". 39 | */ 40 | @property(nonatomic, readonly, copy) NSString *androidClientID; 41 | 42 | /** 43 | * The Google App ID that is used to uniquely identify an instance of an app. 44 | */ 45 | @property(nonatomic, readonly, copy) NSString *googleAppID; 46 | 47 | /** 48 | * The database root URL, e.g. @"http://abc-xyz-123.firebaseio.com". 49 | */ 50 | @property(nonatomic, readonly, copy) NSString *databaseURL; 51 | 52 | /** 53 | * The URL scheme used to set up Durable Deep Link service. 54 | */ 55 | @property(nonatomic, readwrite, copy) NSString *deepLinkURLScheme; 56 | 57 | /** 58 | * The Google Cloud Storage bucket name, e.g. @"abc-xyz-123.storage.firebase.com". 59 | */ 60 | @property(nonatomic, readonly, copy) NSString *storageBucket; 61 | 62 | /** 63 | * Initializes a customized instance of FIROptions with keys. googleAppID, bundleID and GCMSenderID 64 | * are required. Other keys may required for configuring specific services. 65 | */ 66 | - (instancetype)initWithGoogleAppID:(NSString *)googleAppID 67 | bundleID:(NSString *)bundleID 68 | GCMSenderID:(NSString *)GCMSenderID 69 | APIKey:(NSString *)APIKey 70 | clientID:(NSString *)clientID 71 | trackingID:(NSString *)trackingID 72 | androidClientID:(NSString *)androidClientID 73 | databaseURL:(NSString *)databaseURL 74 | storageBucket:(NSString *)storageBucket 75 | deepLinkURLScheme:(NSString *)deepLinkURLScheme; 76 | 77 | /** 78 | * Initializes a customized instance of FIROptions from the file at the given plist file path. 79 | * For example, 80 | * NSString *filePath = 81 | * [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; 82 | * FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; 83 | * Returns nil if the plist file does not exist or is invalid. 84 | */ 85 | - (instancetype)initWithContentsOfFile:(NSString *)plistPath; 86 | 87 | @end 88 | -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h: -------------------------------------------------------------------------------- 1 | /// @file FIRUserPropertyNames.h 2 | /// 3 | /// Predefined user property names. 4 | /// 5 | /// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can 6 | /// later analyze different behaviors of various segments of your userbase. You may supply up to 25 7 | /// unique UserProperties per app, and you can use the name and value of your choosing for each one. 8 | /// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and 9 | /// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to 10 | /// 36 characters long. The "firebase_" prefix is reserved and should not be used. 11 | 12 | /// The method used to sign in. For example, "google", "facebook" or "twitter". 13 | static NSString *const kFIRUserPropertySignUpMethod = @"sign_up_method"; 14 | -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h: -------------------------------------------------------------------------------- 1 | // Generated umbrella header for FirebaseAnalytics. 2 | 3 | #import "FIRAnalytics+AppDelegate.h" 4 | #import "FIRAnalytics.h" 5 | #import "FIRAnalyticsConfiguration.h" 6 | #import "FIRApp.h" 7 | #import "FIRConfiguration.h" 8 | #import "FIREventNames.h" 9 | #import "FIROptions.h" 10 | #import "FIRParameterNames.h" 11 | #import "FIRUserPropertyNames.h" 12 | -------------------------------------------------------------------------------- /Pods/FirebaseAnalytics/Frameworks/frameworks/FirebaseAnalytics.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module FirebaseAnalytics { 2 | 3 | export * 4 | 5 | umbrella header "FirebaseAnalytics.h" 6 | 7 | header "FIRAnalytics+AppDelegate.h" 8 | header "FIRAnalytics.h" 9 | header "FIRAnalyticsConfiguration.h" 10 | header "FIRApp.h" 11 | header "FIRConfiguration.h" 12 | header "FIREventNames.h" 13 | header "FIROptions.h" 14 | header "FIRParameterNames.h" 15 | header "FIRUserPropertyNames.h" 16 | 17 | link framework "AddressBook" 18 | link framework "AdSupport" 19 | link framework "StoreKit" 20 | link framework "SystemConfiguration" 21 | 22 | link "c++" 23 | link "sqlite3" 24 | link "z" 25 | } 26 | -------------------------------------------------------------------------------- /Pods/FirebaseCrash/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/FirebaseCrash/.DS_Store -------------------------------------------------------------------------------- /Pods/FirebaseCrash/Frameworks/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/FirebaseCrash/Frameworks/.DS_Store -------------------------------------------------------------------------------- /Pods/FirebaseCrash/Frameworks/frameworks/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/FirebaseCrash/Frameworks/frameworks/.DS_Store -------------------------------------------------------------------------------- /Pods/FirebaseCrash/Frameworks/frameworks/FirebaseCrash.framework/FirebaseCrash: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/FirebaseCrash/Frameworks/frameworks/FirebaseCrash.framework/FirebaseCrash -------------------------------------------------------------------------------- /Pods/FirebaseCrash/Frameworks/frameworks/FirebaseCrash.framework/Headers/FIRCrashLog.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | NS_ASSUME_NONNULL_BEGIN 4 | 5 | /** 6 | * @abstract Logs a message to the Firebase Crash Reporter system. 7 | * 8 | * @discussion This method adds a message to the crash reporter 9 | * logging system. The recent logs will be sent with the crash 10 | * report when the application exits abnormally. Note that the 11 | * timestamp of this message and the timestamp of the console 12 | * message may differ by a few milliseconds. 13 | * 14 | * Messages should be brief as the total size of the message payloads 15 | * is limited by the uploader and may change between releases of the 16 | * crash reporter. Excessively long messages will be truncated 17 | * safely but that will introduce a delay in submitting the message. 18 | * 19 | * @warning Raises an NSInvalidArgumentException if @p format is nil. 20 | * 21 | * @param format A format string. 22 | * 23 | * @param ap A variable argument list. 24 | */ 25 | FOUNDATION_EXTERN NS_FORMAT_FUNCTION(1, 0) 26 | void FIRCrashLogv(NSString *format, va_list ap); 27 | 28 | /** 29 | * @abstract Logs a message to the Firebase Crash Reporter system. 30 | * 31 | * @discussion This method adds a message to the crash reporter 32 | * logging system. The recent logs will be sent with the crash 33 | * report when the application exits abnormally. Note that the 34 | * timestamp of this message and the timestamp of the console 35 | * message may differ by a few milliseconds. 36 | * 37 | * Messages should be brief as the total size of the message payloads 38 | * is limited by the uploader and may change between releases of the 39 | * crash reporter. Excessively long messages will be truncated 40 | * safely but that will introduce a delay in submitting the message. 41 | * 42 | * @warning Raises an NSInvalidArgumentException if @p format is nil. 43 | * 44 | * @param format A format string. 45 | * 46 | * @param ... A comma-separated list of arguments to substitute into 47 | * format. 48 | * 49 | * @see FIRCrashLogv(format, ap) 50 | */ 51 | FOUNDATION_STATIC_INLINE NS_FORMAT_FUNCTION(1, 2) 52 | void FIRCrashLog(NSString *format, ...) { 53 | va_list ap; 54 | 55 | va_start(ap, format); 56 | FIRCrashLogv(format, ap); 57 | va_end(ap); 58 | } 59 | 60 | /** 61 | * @abstract Logs a message to the Firebase Crash Reporter system as 62 | * well as NSLog(). 63 | * 64 | * @discussion This method adds a message to the crash reporter 65 | * logging system. The recent logs will be sent with the crash 66 | * report when the application exits abnormally. Note that the 67 | * timestamp of this message and the timestamp of the console 68 | * message may differ by a few milliseconds. 69 | * 70 | * Messages should be brief as the total size of the message payloads 71 | * is limited by the uploader and may change between releases of the 72 | * crash reporter. Excessively long messages will be truncated 73 | * safely but that will introduce a delay in submitting the message. 74 | * 75 | * @warning Raises an NSInvalidArgumentException if @p format is nil. 76 | * 77 | * @param format A format string. 78 | * 79 | * @param ap A variable argument list. 80 | */ 81 | FOUNDATION_STATIC_INLINE NS_FORMAT_FUNCTION(1, 0) 82 | void FIRCrashNSLogv(NSString *format, va_list ap) { 83 | va_list ap2; 84 | 85 | va_copy(ap2, ap); 86 | NSLogv(format, ap); 87 | FIRCrashLogv(format, ap2); 88 | va_end(ap2); 89 | } 90 | 91 | /** 92 | * @abstract Logs a message to the Firebase Crash Reporter system as 93 | * well as NSLog(). 94 | * 95 | * @discussion This method adds a message to the crash reporter 96 | * logging system. The recent logs will be sent with the crash 97 | * report when the application exits abnormally. Note that the 98 | * timestamp of this message and the timestamp of the console 99 | * message may differ by a few milliseconds. 100 | * 101 | * Messages should be brief as the total size of the message payloads 102 | * is limited by the uploader and may change between releases of the 103 | * crash reporter. Excessively long messages will be truncated 104 | * safely but that will introduce a delay in submitting the message. 105 | * 106 | * @warning Raises an NSInvalidArgumentException if @p format is nil. 107 | * 108 | * @param format A format string. 109 | * 110 | * @param ... A comma-separated list of arguments to substitute into 111 | * format. 112 | * 113 | * @see FIRCrashLogv(format, ap) 114 | */ 115 | FOUNDATION_STATIC_INLINE NS_FORMAT_FUNCTION(1, 2) 116 | void FIRCrashNSLog(NSString *format, ...) { 117 | va_list ap; 118 | 119 | va_start(ap, format); 120 | FIRCrashNSLogv(format, ap); 121 | va_end(ap); 122 | } 123 | 124 | /** 125 | * @abstract Logs a message to the Firebase Crash Reporter system in 126 | * a way that is easily called from Swift code. 127 | * 128 | * @discussion This method adds a message to the crash reporter 129 | * logging system. Similar to FIRCrashLog, but with a call signature 130 | * that is more Swift friendly. Unlike FIRCrashLog, callers 131 | * use string interpolation instead of formatting arguments. 132 | * 133 | * @code 134 | * public func mySwiftFunction() { 135 | * let unexpected_number = 10; 136 | * FIRCrashMessage("This number doesn't seem right: \(unexpected_number)"); 137 | * } 138 | * @endcode 139 | * 140 | * Messages should be brief as the total size of the message payloads 141 | * is limited by the uploader and may change between releases of the 142 | * crash reporter. Excessively long messages will be truncated 143 | * safely but that will introduce a delay in submitting the message. 144 | * 145 | * @param Message A log message 146 | * 147 | * @see FIRCrashLog(format, ...) 148 | */ 149 | FOUNDATION_STATIC_INLINE 150 | void FIRCrashMessage(NSString *message) { 151 | FIRCrashLog(@"%@", message); 152 | } 153 | 154 | NS_ASSUME_NONNULL_END 155 | 156 | #ifdef FIRCRASH_REPLACE_NSLOG 157 | #if defined(DEBUG) || defined(FIRCRASH_LOG_TO_CONSOLE) 158 | #define NSLog(...) FIRCrashNSLog(__VA_ARGS__) 159 | #define NSLogv(...) FIRCrashNSLogv(__VA_ARGS__) 160 | #else 161 | #define NSLog(...) FIRCrashLog(__VA_ARGS__) 162 | #define NSLogv(...) FIRCrashLogv(__VA_ARGS__) 163 | #endif 164 | #endif 165 | -------------------------------------------------------------------------------- /Pods/FirebaseCrash/Frameworks/frameworks/FirebaseCrash.framework/Headers/FirebaseCrash.h: -------------------------------------------------------------------------------- 1 | #import "FIRCrashLog.h" 2 | -------------------------------------------------------------------------------- /Pods/FirebaseCrash/Frameworks/frameworks/FirebaseCrash.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module FirebaseCrash { 2 | 3 | export * 4 | 5 | umbrella header "FirebaseCrash.h" 6 | 7 | header "FIRCrashLog.h" 8 | 9 | link framework "CoreTelephony" 10 | link framework "SystemConfiguration" 11 | 12 | link "c++" 13 | } 14 | -------------------------------------------------------------------------------- /Pods/FirebaseCrash/README.md: -------------------------------------------------------------------------------- 1 | # Firebase Crash Reporting 2 | 3 | Firebase Crash Reporting is a free mobile crash analytics service. It provides 4 | detailed analytics and diagnostic information about the crashes encountered 5 | by your users. For more information about crash reporting and many other 6 | cool mobile services, check out [Firebase] (https://firebase.google.com). 7 | 8 | ## Getting Started with Cocoapods 9 | 10 | 1. Follow the instructions for 11 | [setting up Firebase](https://developers.google.com/firebase/docs/ios/) 12 | 2. Add the following to your Podfile 13 | 14 | ``` 15 | pod 'Firebase/Crash' 16 | ``` 17 | 18 | 3. Set up automatic symbol file uploads. Symbol files are required to 19 | turn your stack traces into pretty classes and selectors. In 20 | Xcode, click on your project file, choose your application target, 21 | select "Build Phases", hit the little + sign to add a phase, 22 | then select "Run Script". Fill the resulting build step with: 23 | 24 | ``` 25 | "${PODS_ROOT}"/FirebaseCrash/upload-sym.sh 26 | ``` 27 | 28 | ## Testing Integration 29 | 30 | In order to try out integration, you need to force a crash 31 | **while not attached to the debugger**. The debugger will 32 | intercept all crashes, preventing Firebase Crash Reporting from 33 | gathering any useful information. 34 | 35 | 1. Add a crash somewhere in your app. This will do the trick: 36 | 37 | ``` 38 | abort(); 39 | ``` 40 | 41 | 2. Run your app to get the latest code installed on the test 42 | device, then once the app has launched, hit stop. 43 | 44 | 3. Relaunch your app directly from the test device and trigger the crash. 45 | 46 | 4. Restart your app (either in the debugger or not) and the crash will be 47 | uploaded. Wait at least 10 seconds. Firebase Crash Reporting delays 48 | crash uploading at startup to avoid creating contention with your own code. 49 | 50 | 5. Your crash should show up in Firebase within 20 minutes. 51 | 52 | More information can be found in the 53 | [Firebase documentation](https://developers.google.com/firebase/). 54 | Happy bug hunting! 55 | -------------------------------------------------------------------------------- /Pods/FirebaseCrash/ServiceAccount.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "service_account", 3 | "project_id": "evil-insult-generator", 4 | "private_key_id": "71eba2fa13fe48b3cb4280859389af554f08dce9", 5 | "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7tScI39HXi5qo\nrGBrsEzb3wg8B4IF4P4QLmBWEUMU9oUGdseFt3CJgXS3RlBU6+BHVe4/OMJazQbt\n88clr/AJ2ffRKMQkHefR/Xzg/xtsPIkAKShtQcbupgjGX71Hz+CVClwLGGRfmnls\nK5A7pr034MnsEazP9UkEZXIrMshsRIQYwaZzlXzmlmr/jPz1bVaUOOsRmjus+2sm\nnnICWJbYxPgE3gZ0YiWqKSrl9sskHD1JuUEaAQ0NA5Slegd4IIJT243N/ewq/vKe\nhI0JYNlm+F5W6YjqF17tIl8QGr9YD1pLhC4Bd0w8sGo/mWFjYpVTAG8QzlJLNvrZ\n4upz6s9bAgMBAAECggEBAKQLRkj4KlDgvdIpi76xfgot2el0ekqe/gqwLRsqzOB2\nLX2fsvGGhoB1tcYyWiRNXF2bmLKB7UEjq6mrgeDK6NIDPxP5N6mExUN88HVGHfYy\n1Vxhm+YYNT39tu9/XlFzOAeo3RYJRDdVLka9r7iiGP3Lo0x/ifLYn+6KpgNgx03t\n9/06i9L5HBjNJkea0InG/k4A83C97QEs1aFKK9zTn5jDgehFX1EQ/Gowq4Ws52Zz\nqFIYpfcbzFQouvUaKMzdDzljD4JMz2zds3W0RAuvWDBWvUwb3EdQaDZlUpiF7TMA\nJwbL+mJlbrbl0kpMZaswL+UIF9Q8QTl5jSenKsUa89ECgYEA3n13vydlH+pPQiFH\n1Sf4ba2+uNkPE/r147L+xk/cfh3c8AEJ8U/IOU2kHhoiEumdiV62QnWruEy0BO66\nHo/KOA5cr7qYAI10bK03A/aY5h9/LLEieb7bbPT42XKvjM/LywheHUscG3SVLWKM\nA8i+ab95n9Yz5Ksm/9rMso1fXfMCgYEA1/qUW+LwBINppa9I3DV+oqjYD8Ujwmva\nYmJZbwfMraPDEZOZMTAq2r2/eWhSJseSF92CTKSjaN+zcuvJQZzHLPGqbwsR2OOS\nPISCDPbkoNQm5Ui2yJHb6qT9AQ3niSZ1B5zZsPq5mk8XomVVarFuyMBDdhIxUCYm\nHIXAeZObWvkCgYATjRT7wDt7rXxfhEsqqQOEp9LtrW1MxS3cX3tR8+ydTISAtqao\nBOnEV1VHq+Y4oTzNuHvtpSd834imMlA6pUoQ2Po+GviGe+eyMRp3h7Dx7+yeAcbU\nyffAQFqpyREyH4R6B/c1PcdvhjQhs9o37ukEo+XNLOaMfpnDu/dm7VNnDwKBgBwY\nJ2ZQfeJIady4kWS7vK5SAlEC1uT6fJzhqDqOLCzGKaDGr127o0dy+U5EqLMMsM9T\n7BgmLm988e3YCAT17N7GzOHG8dpht+sRXY1sLE9TaX/X1pb+ijnanmKduWmYzA5i\nc9rWsoAFG9DvF45aaEvK3rukIDAJ1llNeL0X21SZAoGALTdnPyXYeaGn6QcSHhjF\n83jOY7w9Yt/29w0/FxZpGifh2S1cDEKebSTixK5NspJmluUJjUOX1PR1Q5xNmZr2\nWlkDkg0x6qK9kfyOqBz8oa5zz07acZH1G0XMx/w8alC73Yr54judv6YMLMZEw0xq\n9+cDifX7gZoue9eUmj6uIxY=\n-----END PRIVATE KEY-----\n", 6 | "client_email": "symbol-upload-service-account@evil-insult-generator.iam.gserviceaccount.com", 7 | "client_id": "105571935281498379344", 8 | "auth_uri": "https://accounts.google.com/o/oauth2/auth", 9 | "token_uri": "https://accounts.google.com/o/oauth2/token", 10 | "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 11 | "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/symbol-upload-service-account%40evil-insult-generator.iam.gserviceaccount.com" 12 | } 13 | -------------------------------------------------------------------------------- /Pods/FirebaseCrash/dump_syms: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/FirebaseCrash/dump_syms -------------------------------------------------------------------------------- /Pods/FirebaseCrash/extract-keys: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | PLIST="${HOME}/Library/Preferences/com.google.SymbolUpload.plist" 4 | 5 | [[ -f $PLIST ]] || exit 6 | 7 | defaults read com.google.SymbolUpload | 8 | perl -nle '/"(app_\d+_\d+_ios_.*)"/ and print $1' | 9 | while read KEY; do 10 | APP_ID="${KEY#app_}"; APP_ID="${APP_ID//_/:}" 11 | plutil -extract "${KEY}" json -o "${APP_ID}.json" "${PLIST}" 12 | done 13 | -------------------------------------------------------------------------------- /Pods/FirebaseCrash/upload-sym: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | usage () { 4 | echo >&2 "usage: $0 [-h] [-v] [-w|-e] service-account-file" 5 | } 6 | 7 | help () { 8 | usage 9 | 10 | cat >&2 <&2 "Either -w or -e may be specified, but not both." 64 | echo >&2 65 | usage 66 | exit 2 67 | fi 68 | 69 | SERVICE_ACCOUNT_FILE="$1"; shift 70 | 71 | if (($#)); then 72 | echo >&2 "Unexpected argument '$1'" 73 | echo >&2 74 | usage 75 | exit 2 76 | fi 77 | 78 | export PATH=/bin:/usr/bin # play it safe 79 | 80 | # Load common utility routines. 81 | 82 | . "$(dirname "$0")/upload-sym-util.bash" 83 | 84 | # Make the error output Xcode-friendly. 85 | 86 | # This is a bit of Bash voodoo that cries for an explanation and is 87 | # horribly underdocumented on-line. The construct '>(...)' starts a 88 | # subprocess with its stdin connected to a pipe. After starting the 89 | # subprocess, the parser replaces the construct with the NAME of the 90 | # writable end of the pipe as a named file descriptor '/dev/fd/XX', 91 | # then reevaluates the line. So, after the subprocess is started 92 | # (which filters stdin and outputs to stderr [not stdout]), the line 93 | # "exec 2> /dev/fd/XX" is evaluated. This redirects the main 94 | # process's stderr to the given file descriptor. 95 | # 96 | # The end result is that anything sent to stderr of the form: 97 | # file.in: line 47: blah blah 98 | # is replaced with 99 | # file.in:47: error: blah blah 100 | # which Xcode will detect and emphasize in the formatted output. 101 | 102 | exec 2> >(sed -e 's/: line \([0-9]*\):/:\1: error:/' >&2) 103 | 104 | # Be long-winded about problems. The user may not understand how this 105 | # script works or what prerequisites it has. If the user sees this, 106 | # it is likely that they are executing the script outside of an Xcode 107 | # build. 108 | 109 | ERRMSG=$'Value missing\n\nThis script must be executed as part of an Xcode build stage to have the\nproper environment variables set.' 110 | 111 | # Locate Xcode-generated files. 112 | 113 | : "${TARGET_BUILD_DIR:?"${ERRMSG}"}" 114 | : "${FULL_PRODUCT_NAME:?"${ERRMSG}"}" 115 | 116 | DSYM_BUNDLE="${DWARF_DSYM_FOLDER_PATH?"${ERRMSG}"}/${DWARF_DSYM_FILE_NAME?"${ERRMSG}"}" 117 | [[ -e "${DSYM_BUNDLE}" ]] || unset DSYM_BUNDLE 118 | 119 | EXECUTABLE="${TARGET_BUILD_DIR?"${ERRMSG}"}/${EXECUTABLE_PATH?"${ERRMSG}"}" 120 | 121 | # Locate dump_syms utility. 122 | 123 | if ! [[ -f "${FCR_DUMP_SYMS:=$(script_dir)/dump_syms}" && -x "${FCR_DUMP_SYMS}" ]]; then 124 | xcerror "Cannot find dump_syms." 125 | xcnote "It should have been installed with the Cocoapod. The location of dump_syms can be explicitly set using the environment variable FCR_DUMP_SYMS if you are using a non-standard install." 126 | 127 | exit 2 128 | fi 129 | 130 | if [[ ! "${FIREBASE_API_KEY}" || ! "${FIREBASE_APP_ID}" ]]; then 131 | : "${SERVICE_PLIST:="$(find "${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}" -name GoogleService-Info.plist | head -n1)"}" 132 | : "${SERVICE_PLIST:?"GoogleService-Info.plist could not be located"}" 133 | : "${FIREBASE_API_KEY:="$(property API_KEY "${SERVICE_PLIST}")"}" 134 | : "${FIREBASE_APP_ID:="$(property GOOGLE_APP_ID "${SERVICE_PLIST}")"}" 135 | fi 136 | 137 | if ! [[ "${FIREBASE_API_KEY}" ]]; then 138 | xcerror "Unable to get API_KEY from ${SERVICE_PLIST}." 139 | xcnote "Specify FIREBASE_API_KEY in environment." 140 | exit 2 141 | fi 142 | 143 | if ! [[ "${FIREBASE_APP_ID}" ]]; then 144 | xcerror "Unable to get GOOGLE_APP_ID from ${SERVICE_PLIST}." 145 | xcnote "Specify FIREBASE_APP_ID in environment." 146 | exit 2 147 | fi 148 | 149 | # Load Info.plist values (Bundle ID & version) 150 | 151 | INFOPLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" 152 | 153 | if [[ -f "${INFOPLIST}" ]]; then 154 | : "${FCR_PROD_VERS:="$(property CFBundleShortVersionString "${INFOPLIST}")"}" 155 | : "${FCR_BUNDLE_ID:="$(property CFBundleIdentifier "${INFOPLIST}")"}" 156 | fi 157 | 158 | if ! [[ "${FCR_PROD_VERS}" ]]; then 159 | xcerror "Unable to get CFBundleShortVersionString from Info.plist." 160 | xcnote "Specify FCR_PROD_VERS in environment." 161 | exit 2 162 | fi 163 | 164 | if ! [[ "${FCR_BUNDLE_ID}" ]]; then 165 | xcerror "Unable to get CFBundleIdentifier from Info.plist." 166 | xcnote "Specify FCR_BUNDLE_ID in environment." 167 | exit 2 168 | fi 169 | 170 | # Support legacy account file cache before giving up 171 | 172 | if [[ ! -f "${SERVICE_ACCOUNT_FILE}" ]]; then 173 | xcwarning "No service account JSON file specified on command line." 174 | 175 | xcdebug "Trying to extract JSON file from cache." 176 | 177 | CACHE_PLIST="${HOME}/Library/Preferences/com.google.SymbolUpload.plist" 178 | 179 | if [[ -f "${CACHE_PLIST}" ]]; then 180 | fcr_mktemp SERVICE_ACCOUNT_FILE 181 | /usr/bin/plutil -extract "app_${FIREBASE_APP_ID//:/_}" \ 182 | json -o "${SERVICE_ACCOUNT_FILE}" "${CACHE_PLIST}" >/dev/null 2>&1 183 | if [[ ! -s "${SERVICE_ACCOUNT_FILE}" ]]; then 184 | xcwarning "${FIREBASE_APP_ID} not found in cache." 185 | /bin/rm -f "${SERVICE_ACCOUNT_FILE}" 186 | else 187 | xcnote "${FIREBASE_APP_ID} found in cache. Consider using extract-keys.pl to reduce reliance on cache." 188 | fi 189 | else 190 | xcnote "No cache file found." 191 | fi 192 | fi 193 | 194 | if [[ ! -f "${SERVICE_ACCOUNT_FILE}" ]]; then 195 | xcerror "All attempts to find the service account JSON file have failed." 196 | xcnote "You must supply it on the command line." 197 | echo >&2 -n "$0:1: note: "; usage 198 | exit 2 199 | fi 200 | 201 | # Dump collected information if requested 202 | 203 | if ((VERBOSE >= 2)); then 204 | xcnote "FIREBASE_API_KEY = ${FIREBASE_API_KEY}" 205 | xcnote "FIREBASE_APP_ID = ${FIREBASE_APP_ID}" 206 | xcnote "DSYM_BUNDLE = ${DSYM_BUNDLE:-(unset, will use symbols in executable)}" 207 | xcnote "EXECUTABLE = ${EXECUTABLE}" 208 | xcnote "INFOPLIST = ${INFOPLIST}" 209 | xcnote "FCR_PROD_VERS = ${FCR_PROD_VERS}" 210 | xcnote "FCR_BUNDLE_ID = ${FCR_BUNDLE_ID}" 211 | fi 212 | 213 | # Create and upload symbol files for each architecture 214 | 215 | if [[ ! -x "${SWIFT_DEMANGLE:="$(xcrun --find swift-demangle 2>/dev/null)"}" ]]; then 216 | SWIFT_DEMANGLE=/bin/cat 217 | fi 218 | 219 | for ARCH in ${ARCHS?:}; do 220 | SYMBOL_FILE="SYMBOL_FILE_${ARCH}" 221 | fcr_mktemp "${SYMBOL_FILE}" SCRATCH 222 | 223 | # Just because there is a dSYM bundle at that path does not mean 224 | # it is the RIGHT dSYM bundle... 225 | 226 | if [[ -d "${DSYM_BUNDLE}" ]]; then 227 | DSYM_UUID="$(dwarfdump --arch "${ARCH}" --uuid "${DSYM_BUNDLE}" | awk '{print $2}')" 228 | EXE_UUID="$(dwarfdump --arch "${ARCH}" --uuid "${EXECUTABLE}" | awk '{print $2}')" 229 | if ((VERBOSE > 1)); then 230 | xcnote "dSYM bundle UUID: ${DSYM_UUID}" 231 | xcnote "Executable UUID: ${EXE_UUID}" 232 | fi 233 | if [[ "${DSYM_UUID}" != "${EXE_UUID}" ]]; then 234 | xcdebug "Current dSYM bundle is not valid." 235 | unset DSYM_BUNDLE 236 | fi 237 | fi 238 | 239 | if [[ ! -d "${DSYM_BUNDLE}" ]]; then 240 | xcdebug "Extracting dSYM from executable." 241 | fcr_mktempdir TMP_DSYM 242 | DSYM_BUNDLE="${TMP_DSYM}/${EXECUTABLE##*/}.dSYM" 243 | xcrun dsymutil -o "${DSYM_BUNDLE}" "${EXECUTABLE}" 244 | STATUS=$? 245 | if ((STATUS)); then 246 | xcerror "Command dsymutil failed with exit code ${STATUS}." 247 | exit ${STATUS} 248 | fi 249 | fi 250 | 251 | "${FCR_DUMP_SYMS}" -a "${ARCH}" -g "${DSYM_BUNDLE}" "${EXECUTABLE}" >"${SCRATCH}" 2> >(sed -e 's/^/warning: dump_syms: /' | grep -v 'failed to demangle' >&2) 252 | 253 | STATUS=$? 254 | if ((STATUS)); then 255 | xcerror "Command dump_syms failed with exit code ${STATUS}." 256 | exit ${STATUS} 257 | fi 258 | 259 | "${SWIFT_DEMANGLE}" <"${SCRATCH}" >|"${!SYMBOL_FILE}" || exit 1 260 | 261 | if ((VERBOSE >= 2)); then 262 | xcnote "${EXECUTABLE##*/} (architecture ${ARCH}) symbol dump follows (first 20 lines):" 263 | head >&2 -n20 "${!SYMBOL_FILE}" 264 | elif ((VERBOSE >= 1)); then 265 | xcnote "${EXECUTABLE##*/} (architecture ${ARCH}) symbol dump follows (first line only):" 266 | head >&2 -n1 "${!SYMBOL_FILE}" 267 | fi 268 | 269 | fcr_upload_files "${!SYMBOL_FILE}" || exit 1 270 | done 271 | -------------------------------------------------------------------------------- /Pods/FirebaseCrash/upload-sym.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "$0:0: error: $0 has been removed. Please use upload-sym instead." 4 | exit 1 5 | -------------------------------------------------------------------------------- /Pods/FirebaseInstanceID/Frameworks/frameworks/FirebaseInstanceID.framework/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/FirebaseInstanceID/Frameworks/frameworks/FirebaseInstanceID.framework/.DS_Store -------------------------------------------------------------------------------- /Pods/FirebaseInstanceID/Frameworks/frameworks/FirebaseInstanceID.framework/FirebaseInstanceID: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/FirebaseInstanceID/Frameworks/frameworks/FirebaseInstanceID.framework/FirebaseInstanceID -------------------------------------------------------------------------------- /Pods/FirebaseInstanceID/Frameworks/frameworks/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h: -------------------------------------------------------------------------------- 1 | #import "FIRInstanceID.h" 2 | -------------------------------------------------------------------------------- /Pods/FirebaseInstanceID/Frameworks/frameworks/FirebaseInstanceID.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module FirebaseInstanceID { 2 | 3 | export * 4 | 5 | umbrella header "FirebaseInstanceID.h" 6 | 7 | header "FIRInstanceID.h" 8 | } 9 | -------------------------------------------------------------------------------- /Pods/FirebaseInstanceID/Sources/FIRInstanceID.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | /** 4 | * @memberof FIRInstanceID 5 | * 6 | * The scope to be used when fetching/deleting a token for Firebase Messaging. 7 | */ 8 | FOUNDATION_EXPORT NSString * __nonnull const kFIRInstanceIDScopeFirebaseMessaging; 9 | 10 | /** 11 | * Called when the system determines that tokens need to be refreshed. 12 | * This method is also called if Instance ID has been reset in which 13 | * case, tokens and FCM topic subscriptions also need to be refreshed. 14 | * 15 | * Instance ID service will throttle the refresh event across all devices 16 | * to control the rate of token updates on application servers. 17 | */ 18 | FOUNDATION_EXPORT NSString * __nonnull const kFIRInstanceIDTokenRefreshNotification; 19 | 20 | /** 21 | * @related FIRInstanceID 22 | * 23 | * The completion handler invoked when the InstanceID token returns. If 24 | * the call fails we return the appropriate `error code` as described below. 25 | * 26 | * @param token The valid token as returned by InstanceID backend. 27 | * 28 | * @param error The error describing why generating a new token 29 | * failed. See the error codes below for a more detailed 30 | * description. 31 | */ 32 | typedef void(^FIRInstanceIDTokenHandler)(NSString * __nullable token, NSError * __nullable error); 33 | 34 | 35 | /** 36 | * @related FIRInstanceID 37 | * 38 | * The completion handler invoked when the InstanceID `deleteToken` returns. If 39 | * the call fails we return the appropriate `error code` as described below 40 | * 41 | * @param error The error describing why deleting the token failed. 42 | * See the error codes below for a more detailed description. 43 | */ 44 | typedef void(^FIRInstanceIDDeleteTokenHandler)(NSError * __nullable error); 45 | 46 | /** 47 | * @related FIRInstanceID 48 | * 49 | * The completion handler invoked when the app identity is created. If the 50 | * identity wasn't created for some reason we return the appropriate error code. 51 | * 52 | * @param identity A valid identity for the app instance, nil if there was an error 53 | * while creating an identity. 54 | * @param error The error if fetching the identity fails else nil. 55 | */ 56 | typedef void(^FIRInstanceIDHandler)(NSString * __nullable identity, NSError * __nullable error); 57 | 58 | /** 59 | * @related FIRInstanceID 60 | * 61 | * The completion handler invoked when the app identity and all the tokens associated 62 | * with it are deleted. Returns a valid error object in case of failure else nil. 63 | * 64 | * @param error The error if deleting the identity and all the tokens associated with 65 | * it fails else nil. 66 | */ 67 | typedef void(^FIRInstanceIDDeleteHandler)(NSError * __nullable error); 68 | 69 | /** 70 | * @enum FIRInstanceIDError 71 | */ 72 | typedef NS_ENUM(NSUInteger, FIRInstanceIDError) { 73 | /// Unknown error. 74 | FIRInstanceIDErrorUnknown = 0, 75 | 76 | /// Auth Error -- FCM couldn't validate request from this client. 77 | FIRInstanceIDErrorAuthentication = 1, 78 | 79 | /// NoAccess -- InstanceID service cannot be accessed. 80 | FIRInstanceIDErrorNoAccess = 2, 81 | 82 | /// Timeout -- Request to InstanceID backend timed out. 83 | FIRInstanceIDErrorTimeout = 3, 84 | 85 | /// Network -- No network available to reach the servers. 86 | FIRInstanceIDErrorNetwork = 4, 87 | 88 | /// OperationInProgress -- Another similar operation in progress, 89 | /// bailing this one. 90 | FIRInstanceIDErrorOperationInProgress = 5, 91 | 92 | /// InvalidRequest -- Some parameters of the request were invalid. 93 | FIRInstanceIDErrorInvalidRequest = 7, 94 | }; 95 | 96 | /** 97 | * The APNS token type for the app. If the token type is set to `UNKNOWN` 98 | * InstanceID will implicitly try to figure out what the actual token type 99 | * is from the provisioning profile. 100 | */ 101 | typedef NS_ENUM(NSInteger, FIRInstanceIDAPNSTokenType) { 102 | /// Unknown token type. 103 | FIRInstanceIDAPNSTokenTypeUnknown, 104 | /// Sandbox token type. 105 | FIRInstanceIDAPNSTokenTypeSandbox, 106 | /// Production token type. 107 | FIRInstanceIDAPNSTokenTypeProd, 108 | }; 109 | 110 | /** 111 | * Instance ID provides a unique identifier for each app instance and a mechanism 112 | * to authenticate and authorize actions (for example, sending a GCM message). 113 | * 114 | * Instance ID is long lived but, may be reset if the device is not used for 115 | * a long time or the Instance ID service detects a problem. 116 | * If Instance ID is reset, the app will be notified with a `com.firebase.iid.token-refresh` 117 | * notification. 118 | * 119 | * If the Instance ID has become invalid, the app can request a new one and 120 | * send it to the app server. 121 | * To prove ownership of Instance ID and to allow servers to access data or 122 | * services associated with the app, call 123 | * `[FIRInstanceID tokenWithAuthorizedEntity:scope:options:handler]`. 124 | */ 125 | @interface FIRInstanceID : NSObject 126 | 127 | /** 128 | * FIRInstanceID. 129 | * 130 | * @return A shared instance of FIRInstanceID. 131 | */ 132 | + (nonnull instancetype)instanceID; 133 | 134 | /** 135 | * Set APNS token for the application. This APNS token will be used to register 136 | * with Firebase Messaging using `token` or 137 | * `tokenWithAuthorizedEntity:scope:options:handler`. If the token type is set to 138 | * `FIRInstanceIDAPNSTokenTypeUnknown` InstanceID will read the provisioning profile 139 | * to find out the token type. 140 | * 141 | * @param token The APNS token for the application. 142 | * @param type The APNS token type for the above token. 143 | */ 144 | - (void)setAPNSToken:(nonnull NSData *)token type:(FIRInstanceIDAPNSTokenType)type; 145 | 146 | #pragma mark - Tokens 147 | 148 | /** 149 | * Returns a Firebase Messaging scoped token for the firebase app. 150 | * 151 | * @return Null Returns null if the device has not yet been registerd with 152 | * Firebase Message else returns a valid token. 153 | */ 154 | - (nullable NSString *)token; 155 | 156 | /** 157 | * Returns a token that authorizes an Entity (example: cloud service) to perform 158 | * an action on behalf of the application identified by Instance ID. 159 | * 160 | * This is similar to an OAuth2 token except, it applies to the 161 | * application instance instead of a user. 162 | * 163 | * This is an asynchronous call. If the token fetching fails for some reason 164 | * we invoke the completion callback with nil `token` and the appropriate 165 | * error. 166 | * 167 | * Note, you can only have one `token` or `deleteToken` call for a given 168 | * authorizedEntity and scope at any point of time. Making another such call with the 169 | * same authorizedEntity and scope before the last one finishes will result in an 170 | * error with code `OperationInProgress`. 171 | * 172 | * @see FIRInstanceID deleteTokenWithAuthorizedEntity:scope:handler: 173 | * 174 | * @param authorizedEntity Entity authorized by the token. 175 | * @param scope Action authorized for authorizedEntity. 176 | * @param options The extra options to be sent with your token request. The 177 | * value for the `apns_token` should be the NSData object 178 | * passed to UIApplication's 179 | * `didRegisterForRemoteNotificationsWithDeviceToken` method. 180 | * All other keys and values in the options dict need to be 181 | * instances of NSString or else they will be discarded. Bundle 182 | * keys starting with 'GCM.' and 'GOOGLE.' are reserved. 183 | * @param handler The callback handler which is invoked when the token is 184 | * successfully fetched. In case of success a valid `token` and 185 | * `nil` error are returned. In case of any error the `token` 186 | * is nil and a valid `error` is returned. The valid error 187 | * codes have been documented above. 188 | */ 189 | - (void)tokenWithAuthorizedEntity:(nonnull NSString *)authorizedEntity 190 | scope:(nonnull NSString *)scope 191 | options:(nonnull NSDictionary *)options 192 | handler:(nonnull FIRInstanceIDTokenHandler)handler; 193 | 194 | /** 195 | * Revokes access to a scope (action) for an entity previously 196 | * authorized by `[FIRInstanceID tokenWithAuthorizedEntity:scope:options:handler]`. 197 | * 198 | * This is an asynchronous call. Call this on the main thread since InstanceID lib 199 | * is not thread safe. In case token deletion fails for some reason we invoke the 200 | * `handler` callback passed in with the appropriate error code. 201 | * 202 | * Note, you can only have one `token` or `deleteToken` call for a given 203 | * authorizedEntity and scope at a point of time. Making another such call with the 204 | * same authorizedEntity and scope before the last one finishes will result in an error 205 | * with code `OperationInProgress`. 206 | * 207 | * @param authorizedEntity Entity that must no longer have access. 208 | * @param scope Action that entity is no longer authorized to perform. 209 | * @param handler The handler that is invoked once the unsubscribe call ends. 210 | * In case of error an appropriate error object is returned 211 | * else error is nil. 212 | */ 213 | - (void)deleteTokenWithAuthorizedEntity:(nonnull NSString *)authorizedEntity 214 | scope:(nonnull NSString *)scope 215 | handler:(nonnull FIRInstanceIDDeleteTokenHandler)handler; 216 | 217 | #pragma mark - Identity 218 | 219 | /** 220 | * Asynchronously fetch a stable identifier that uniquely identifies the app 221 | * instance. If the identifier has been revoked or has expired, this method will 222 | * return a new identifier. 223 | * 224 | * 225 | * @param handler The handler to invoke once the identifier has been fetched. 226 | * In case of error an appropriate error object is returned else 227 | * a valid identifier is returned and a valid identifier for the 228 | * application instance. 229 | */ 230 | - (void)getIDWithHandler:(nonnull FIRInstanceIDHandler)handler; 231 | 232 | /** 233 | * Resets Instance ID and revokes all tokens. 234 | */ 235 | - (void)deleteIDWithHandler:(nonnull FIRInstanceIDDeleteHandler)handler; 236 | 237 | @end 238 | -------------------------------------------------------------------------------- /Pods/GoogleInterchangeUtilities/Frameworks/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/GoogleInterchangeUtilities/Frameworks/GoogleInterchangeUtilities.framework/GoogleInterchangeUtilities -------------------------------------------------------------------------------- /Pods/GoogleSymbolUtilities/Frameworks/GoogleSymbolUtilities.framework/GoogleSymbolUtilities: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/GoogleSymbolUtilities/Frameworks/GoogleSymbolUtilities.framework/GoogleSymbolUtilities -------------------------------------------------------------------------------- /Pods/GoogleUtilities/Frameworks/GoogleUtilities.framework/GoogleUtilities: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilInsultGenerator/ios/2322c9502a789d081aee73f0c22a225782e1ba94/Pods/GoogleUtilities/Frameworks/GoogleUtilities.framework/GoogleUtilities -------------------------------------------------------------------------------- /Pods/Headers/Private/Firebase/Firebase.h: -------------------------------------------------------------------------------- 1 | ../../../Firebase/Analytics/Sources/Firebase.h -------------------------------------------------------------------------------- /Pods/Headers/Private/FirebaseInstanceID/FIRInstanceID.h: -------------------------------------------------------------------------------- 1 | ../../../FirebaseInstanceID/Sources/FIRInstanceID.h -------------------------------------------------------------------------------- /Pods/Headers/Public/Firebase/Firebase.h: -------------------------------------------------------------------------------- 1 | ../../../Firebase/Analytics/Sources/Firebase.h -------------------------------------------------------------------------------- /Pods/Headers/Public/FirebaseInstanceID/FIRInstanceID.h: -------------------------------------------------------------------------------- 1 | ../../../FirebaseInstanceID/Sources/FIRInstanceID.h -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Firebase/Analytics (3.6.0): 3 | - FirebaseAnalytics (= 3.4.2) 4 | - Firebase/Core (3.6.0): 5 | - Firebase/Analytics 6 | - Firebase/Crash (3.6.0): 7 | - Firebase/Analytics 8 | - FirebaseCrash (= 1.0.7) 9 | - FirebaseAnalytics (3.4.2): 10 | - FirebaseInstanceID (~> 1.0) 11 | - GoogleInterchangeUtilities (~> 1.2) 12 | - GoogleSymbolUtilities (~> 1.1) 13 | - GoogleUtilities (~> 1.2) 14 | - FirebaseCrash (1.0.7): 15 | - FirebaseAnalytics (~> 3.2) 16 | - FirebaseInstanceID (~> 1.0) 17 | - GoogleInterchangeUtilities (~> 1.2) 18 | - GoogleSymbolUtilities (~> 1.1) 19 | - GoogleUtilities (~> 1.2) 20 | - FirebaseInstanceID (1.0.8) 21 | - GoogleInterchangeUtilities (1.2.1): 22 | - GoogleSymbolUtilities (~> 1.0) 23 | - GoogleSymbolUtilities (1.1.1) 24 | - GoogleUtilities (1.3.1): 25 | - GoogleSymbolUtilities (~> 1.0) 26 | 27 | DEPENDENCIES: 28 | - Firebase/Core 29 | - Firebase/Crash 30 | 31 | SPEC CHECKSUMS: 32 | Firebase: 34187200ef4979dbd485c7aa685ef078bf587c86 33 | FirebaseAnalytics: 3f5358d9104adf159cc8d99b7b501e50099a39ad 34 | FirebaseCrash: 2efeb3715b76ac843b841529ce413efb67e5fd4d 35 | FirebaseInstanceID: ba1e640935235e5fac39dfa816fe7660e72e1a8a 36 | GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de 37 | GoogleSymbolUtilities: 33117db1b5f290c6fbf259585e4885b4c84b98d7 38 | GoogleUtilities: 56c5ac05b7aa5dc417a1bb85221a9516e04d7032 39 | 40 | PODFILE CHECKSUM: afaac5ca42f47ac60b45bc83f615ba46f774ce28 41 | 42 | COCOAPODS: 1.0.0 43 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Dmitri.xcuserdatad/xcschemes/Pods-Evil Insult.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/Dmitri.xcuserdatad/xcschemes/Pods-Evil InsultTests.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/Dmitri.xcuserdatad/xcschemes/Pods-Evil InsultUITests.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/Dmitri.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Pods-Evil Insult.xcscheme 8 | 9 | isShown 10 | 11 | 12 | Pods-Evil InsultTests.xcscheme 13 | 14 | isShown 15 | 16 | 17 | Pods-Evil InsultUITests.xcscheme 18 | 19 | isShown 20 | 21 | 22 | 23 | SuppressBuildableAutocreation 24 | 25 | 0AF366C66CB55C3EC58CA9F4CF6CDF56 26 | 27 | primary 28 | 29 | 30 | 4106A9BE9781A9E4A546728550181014 31 | 32 | primary 33 | 34 | 35 | 73027BFF12DD9F6BE2A4BE287E584638 36 | 37 | primary 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil Insult/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-Evil Insult/Pods-Evil Insult-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## Firebase 5 | 6 | Copyright 2016 Google 7 | 8 | ## FirebaseAnalytics 9 | 10 | Copyright 2016 Google 11 | 12 | ## FirebaseCrash 13 | 14 | Copyright 2016 Google 15 | 16 | ## FirebaseInstanceID 17 | 18 | Copyright 2016 Google 19 | 20 | ## GoogleInterchangeUtilities 21 | 22 | Copyright 2015 Google Inc. 23 | 24 | ## GoogleSymbolUtilities 25 | 26 | Copyright 2015 Google Inc. 27 | 28 | ## GoogleUtilities 29 | 30 | Copyright 2015 Google Inc. 31 | Generated by CocoaPods - https://cocoapods.org 32 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil Insult/Pods-Evil Insult-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright 2016 Google 18 | Title 19 | Firebase 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | FooterText 25 | Copyright 2016 Google 26 | Title 27 | FirebaseAnalytics 28 | Type 29 | PSGroupSpecifier 30 | 31 | 32 | FooterText 33 | Copyright 2016 Google 34 | Title 35 | FirebaseCrash 36 | Type 37 | PSGroupSpecifier 38 | 39 | 40 | FooterText 41 | Copyright 2016 Google 42 | Title 43 | FirebaseInstanceID 44 | Type 45 | PSGroupSpecifier 46 | 47 | 48 | FooterText 49 | Copyright 2015 Google Inc. 50 | Title 51 | GoogleInterchangeUtilities 52 | Type 53 | PSGroupSpecifier 54 | 55 | 56 | FooterText 57 | Copyright 2015 Google Inc. 58 | Title 59 | GoogleSymbolUtilities 60 | Type 61 | PSGroupSpecifier 62 | 63 | 64 | FooterText 65 | Copyright 2015 Google Inc. 66 | Title 67 | GoogleUtilities 68 | Type 69 | PSGroupSpecifier 70 | 71 | 72 | FooterText 73 | Generated by CocoaPods - https://cocoapods.org 74 | Title 75 | 76 | Type 77 | PSGroupSpecifier 78 | 79 | 80 | StringsTable 81 | Acknowledgements 82 | Title 83 | Acknowledgements 84 | 85 | 86 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil Insult/Pods-Evil Insult-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Evil_Insult : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Evil_Insult 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil Insult/Pods-Evil Insult-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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil Insult/Pods-Evil Insult-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil Insult/Pods-Evil Insult-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_Evil_InsultVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_Evil_InsultVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil Insult/Pods-Evil Insult.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseCrash/Frameworks/frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCrash" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCrash" -isystem "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" 6 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "AdSupport" -framework "AddressBook" -framework "CoreGraphics" -framework "CoreTelephony" -framework "FirebaseAnalytics" -framework "FirebaseCrash" -framework "FirebaseInstanceID" -framework "GoogleInterchangeUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "StoreKit" -framework "SystemConfiguration" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil Insult/Pods-Evil Insult.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Evil_Insult { 2 | umbrella header "Pods-Evil Insult-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil Insult/Pods-Evil Insult.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseCrash/Frameworks/frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCrash" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCrash" -isystem "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" 6 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "AdSupport" -framework "AddressBook" -framework "CoreGraphics" -framework "CoreTelephony" -framework "FirebaseAnalytics" -framework "FirebaseCrash" -framework "FirebaseInstanceID" -framework "GoogleInterchangeUtilities" -framework "GoogleSymbolUtilities" -framework "GoogleUtilities" -framework "StoreKit" -framework "SystemConfiguration" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultTests/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-Evil InsultTests/Pods-Evil InsultTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultTests/Pods-Evil InsultTests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultTests/Pods-Evil InsultTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Evil_InsultTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Evil_InsultTests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultTests/Pods-Evil InsultTests-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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultTests/Pods-Evil InsultTests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultTests/Pods-Evil InsultTests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_Evil_InsultTestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_Evil_InsultTestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultTests/Pods-Evil InsultTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCrash" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCrash" -isystem "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultTests/Pods-Evil InsultTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Evil_InsultTests { 2 | umbrella header "Pods-Evil InsultTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultTests/Pods-Evil InsultTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCrash" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCrash" -isystem "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultUITests/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-Evil InsultUITests/Pods-Evil InsultUITests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultUITests/Pods-Evil InsultUITests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultUITests/Pods-Evil InsultUITests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Evil_InsultUITests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Evil_InsultUITests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultUITests/Pods-Evil InsultUITests-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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultUITests/Pods-Evil InsultUITests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultUITests/Pods-Evil InsultUITests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_Evil_InsultUITestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_Evil_InsultUITestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultUITests/Pods-Evil InsultUITests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCrash" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCrash" -isystem "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultUITests/Pods-Evil InsultUITests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Evil_InsultUITests { 2 | umbrella header "Pods-Evil InsultUITests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Evil InsultUITests/Pods-Evil InsultUITests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseCrash" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase" -isystem "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" -isystem "${PODS_ROOT}/Headers/Public/FirebaseCrash" -isystem "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" -isystem "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" -isystem "${PODS_ROOT}/Headers/Public/GoogleUtilities" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Evil Insult Generator iOS App 2 | 3 | Evil Insult Generator's goal is to offer the most evil insults. Please help us to reach this honorable purpose by submitting insults 4 | via mail. 5 | 6 | ![Evil Insult Generator Icon](https://cloud.githubusercontent.com/assets/22981912/19600664/5521d010-97a6-11e6-9f67-fec931b199d7.png) 7 | 8 | ### Installation 9 | 10 | 11 | Get it on iOS 13 | 14 | 15 | Developers use [Xcode](https://developer.apple.com/xcode/) to edit the source. 16 | 17 | ### Contact 18 | 19 | We love to get in touch with you. Feel welcome to email your questions and feedback to [marvin@evilinsult.com](mailto:marvin@evilinsult.com). 20 | 21 | ### Translation 22 | 23 | Translations are hosted on [Transifex](https://www.transifex.com/evil-insult-generator/). 24 | 25 | ### License 26 | > This is free and unencumbered software released into the public domain. 27 | > 28 | > Anyone is free to copy, modify, publish, use, compile, sell, or 29 | > distribute this software, either in source code form or as a compiled 30 | > binary, for any purpose, commercial or non-commercial, and by any 31 | > means. 32 | > 33 | > In jurisdictions that recognize copyright laws, the author or authors 34 | > of this software dedicate any and all copyright interest in the 35 | > software to the public domain. We make this dedication for the benefit 36 | > of the public at large and to the detriment of our heirs and 37 | > successors. We intend this dedication to be an overt act of 38 | > relinquishment in perpetuity of all present and future rights to this 39 | > software under copyright law. 40 | > 41 | > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 42 | > EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 43 | > MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 44 | > IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 45 | > OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 46 | > ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 47 | > OTHER DEALINGS IN THE SOFTWARE. 48 | > 49 | > For more information, please refer to 50 | 51 | ### Screenshots 52 | 53 | ![Start](https://cloud.githubusercontent.com/assets/23451834/20262845/5d9c6ba8-aa64-11e6-870c-25c28835d8ec.PNG) 54 | ![Language Selector](https://cloud.githubusercontent.com/assets/23451834/20262846/5da602b2-aa64-11e6-9b97-35f42e8af32e.PNG) 55 | ![Insult Sharing](https://cloud.githubusercontent.com/assets/23451834/20262846/5da602b2-aa64-11e6-9b97-35f42e8af32e.PNG) 56 | ![Evil Insult Generator iPad](https://cloud.githubusercontent.com/assets/23451834/20263190/d2b13026-aa65-11e6-816c-9056adaa5f56.gif) 57 | -------------------------------------------------------------------------------- /contributing.json: -------------------------------------------------------------------------------- 1 | // https://gitmagic.io/rules 2 | { 3 | "commit": { 4 | "subject_cannot_be_empty": true, 5 | "subject_must_be_longer_than": 4, 6 | "subject_must_be_shorter_than": 101, 7 | "subject_lines_must_be_shorter_than": 51, 8 | "subject_must_be_single_line": true, 9 | "subject_must_be_in_tense": "imperative", 10 | "subject_must_start_with_case": "lower", 11 | "subject_must_not_end_with_dot": true, 12 | 13 | "body_lines_must_be_shorter_than": 73 14 | }, 15 | "pull_request": { 16 | "subject_cannot_be_empty": true, 17 | "subject_must_be_longer_than": 4, 18 | "subject_must_be_shorter_than": 101, 19 | "subject_must_be_in_tense": "imperative", 20 | "subject_must_start_with_case": "upper", 21 | "subject_must_not_end_with_dot": true, 22 | 23 | "body_cannot_be_empty": true, 24 | "body_must_include_verification_steps": true, 25 | "body_must_include_screenshot": ["html", "css"] 26 | }, 27 | "issue": { 28 | "subject_cannot_be_empty": true, 29 | "subject_must_be_longer_than": 4, 30 | "subject_must_be_shorter_than": 101, 31 | "subject_must_be_in_tense": "imperative", 32 | "subject_must_start_with_case": "upper", 33 | "subject_must_not_end_with_dot": true, 34 | 35 | "body_cannot_be_empty": true, 36 | "body_must_include_reproduction_steps": ["bug"], 37 | 38 | "label_must_be_set": true 39 | } 40 | } 41 | --------------------------------------------------------------------------------