├── LICENSE ├── Media ├── 00.png ├── 01.png ├── 02.png ├── 03.png ├── 04.png ├── 05.png ├── 06.png └── screenshots │ ├── 0Login.png │ ├── 0Login_framed.png │ ├── 1MainScreen.png │ ├── 1MainScreen_framed.png │ ├── 2Gameplay.png │ ├── 2Gameplay_framed.png │ ├── 3Gameplay.png │ ├── 3Gameplay_framed.png │ ├── 4Gameplay.png │ ├── 4Gameplay_framed.png │ ├── 5Leaderboards.png │ ├── 5Leaderboards_framed.png │ ├── 6RulesGame.png │ ├── 6RulesGame_framed.png │ ├── 7AboutGame.png │ └── 7AboutGame_framed.png ├── README.md └── Source ├── .gitignore ├── .swift-version ├── .swiftlint.yml ├── Gemfile ├── Gemfile.lock ├── HardcoreTap.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── swiftpm │ │ └── Package.resolved └── xcshareddata │ └── xcschemes │ ├── HardcoreTap for Watch.xcscheme │ └── HardcoreTap.xcscheme ├── HardcoreTap ├── AppDelegate.swift ├── Classes │ └── PresentationLayer │ │ ├── Base │ │ └── BaseTabView.swift │ │ ├── Common │ │ ├── Styles │ │ │ └── Colors.swift │ │ └── UIElements │ │ │ ├── ButtonLinkView.swift │ │ │ └── Message.swift │ │ └── Stories │ │ ├── AboutGame │ │ └── AboutGameView.swift │ │ ├── Game │ │ └── GameView.swift │ │ ├── Leaderboard │ │ └── LeaderboardView.swift │ │ ├── Login │ │ └── LoginView.swift │ │ ├── Rules │ │ ├── RuleView.swift │ │ └── RulesView.swift │ │ └── Settings │ │ └── SettingsView.swift ├── DEPRECATED │ ├── AboutGameViewController.swift │ ├── Base.lproj │ │ └── Main.storyboard │ ├── BaseTabBarController.swift │ ├── GameViewController.swift │ ├── LeadearBoardViewController.swift │ ├── LoginViewController.swift │ ├── RulesViewController.swift │ ├── SettingsCell.swift │ ├── SettingsViewController.swift │ ├── UIButtonExtension.swift │ └── ru.lproj │ │ └── Main.strings ├── HardcoreTap.entitlements ├── Launch │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ └── ru.lproj │ │ └── LaunchScreen.strings ├── Resources │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-60@2x.png │ │ │ ├── Icon-60@3x.png │ │ │ ├── Icon-76.png │ │ │ ├── Icon-76@2x.png │ │ │ ├── Icon-Small.png │ │ │ ├── Icon-Small@2x-1.png │ │ │ ├── Icon-Small@2x.png │ │ │ ├── Icon-Small@3x.png │ │ │ ├── Icon-Spotlight-40.png │ │ │ ├── Icon-Spotlight-40@2x-1.png │ │ │ ├── Icon-Spotlight-40@2x.png │ │ │ └── Icon-Spotlight-40@3x.png │ │ ├── Colors │ │ │ ├── Contents.json │ │ │ ├── blueBlue.colorset │ │ │ │ └── Contents.json │ │ │ ├── blueberry.colorset │ │ │ │ └── Contents.json │ │ │ ├── darkSkyBlue.colorset │ │ │ │ └── Contents.json │ │ │ ├── lipstick.colorset │ │ │ │ └── Contents.json │ │ │ ├── robinSEgg.colorset │ │ │ │ └── Contents.json │ │ │ └── yellowishGreen.colorset │ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── icon.imageset │ │ │ ├── Contents.json │ │ │ ├── icon.png │ │ │ ├── icon@2x.png │ │ │ └── icon@3x.png │ │ ├── iconRules.imageset │ │ │ ├── Contents.json │ │ │ ├── iconRules.png │ │ │ ├── iconRules@2x.png │ │ │ └── iconRules@3x.png │ │ ├── rule1.imageset │ │ │ ├── Contents.json │ │ │ ├── rules_1.png │ │ │ ├── rules_1@2x.png │ │ │ └── rules_1@3x.png │ │ ├── rule2.imageset │ │ │ ├── Contents.json │ │ │ ├── rules_2.png │ │ │ ├── rules_2@2x.png │ │ │ └── rules_2@3x.png │ │ └── rule3.imageset │ │ │ ├── Contents.json │ │ │ ├── rules_3.png │ │ │ ├── rules_3@2x.png │ │ │ └── rules_3@3x.png │ ├── Audio │ │ └── bmp60.mp3 │ └── Translations │ │ ├── en.lproj │ │ └── Localizable.strings │ │ └── ru.lproj │ │ └── Localizable.strings ├── SceneDelegate.swift └── Supporting files │ ├── GoogleService-Info.plist │ └── Info.plist └── fastlane ├── Appfile ├── Fastfile ├── Matchfile └── Snapfile /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Bogdan Bystritskiy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Media/00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/00.png -------------------------------------------------------------------------------- /Media/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/01.png -------------------------------------------------------------------------------- /Media/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/02.png -------------------------------------------------------------------------------- /Media/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/03.png -------------------------------------------------------------------------------- /Media/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/04.png -------------------------------------------------------------------------------- /Media/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/05.png -------------------------------------------------------------------------------- /Media/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/06.png -------------------------------------------------------------------------------- /Media/screenshots/0Login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/0Login.png -------------------------------------------------------------------------------- /Media/screenshots/0Login_framed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/0Login_framed.png -------------------------------------------------------------------------------- /Media/screenshots/1MainScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/1MainScreen.png -------------------------------------------------------------------------------- /Media/screenshots/1MainScreen_framed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/1MainScreen_framed.png -------------------------------------------------------------------------------- /Media/screenshots/2Gameplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/2Gameplay.png -------------------------------------------------------------------------------- /Media/screenshots/2Gameplay_framed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/2Gameplay_framed.png -------------------------------------------------------------------------------- /Media/screenshots/3Gameplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/3Gameplay.png -------------------------------------------------------------------------------- /Media/screenshots/3Gameplay_framed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/3Gameplay_framed.png -------------------------------------------------------------------------------- /Media/screenshots/4Gameplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/4Gameplay.png -------------------------------------------------------------------------------- /Media/screenshots/4Gameplay_framed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/4Gameplay_framed.png -------------------------------------------------------------------------------- /Media/screenshots/5Leaderboards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/5Leaderboards.png -------------------------------------------------------------------------------- /Media/screenshots/5Leaderboards_framed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/5Leaderboards_framed.png -------------------------------------------------------------------------------- /Media/screenshots/6RulesGame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/6RulesGame.png -------------------------------------------------------------------------------- /Media/screenshots/6RulesGame_framed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/6RulesGame_framed.png -------------------------------------------------------------------------------- /Media/screenshots/7AboutGame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/7AboutGame.png -------------------------------------------------------------------------------- /Media/screenshots/7AboutGame_framed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Media/screenshots/7AboutGame_framed.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HardcoreTap 2 | ![Swift Support](https://img.shields.io/badge/Swift-5.6-orange.svg) 3 | ![iOS Support](https://img.shields.io/badge/iOS-15.0%2B-yellow.svg) 4 | 5 | _The game is implemented on the hackathon from Swiftbook.ru (2nd place)_ 6 | 7 | ### Road map 8 | - [ ] Convert project to SwiftUI and Combine 9 | - [ ] New design 10 | - [ ] Add support iPadOS 11 | - [ ] Add support macOS 12 | - [ ] Add support watchOS 13 | 14 | 15 | ### About game 16 | You must be able to kill time. “HardcoreTap” helps to kill time, not in vain, but with benefit. The player receives benefit in the form of training of attentiveness, rhythm and perseverance. Without this, it would not be possible to top the players rating. The main task of the player is to tap on the screen exactly 1 time per second with an accuracy of hundredths. (01:00, 02:00, 03:00, etc.). At first, the game is not so cruel to the player and makes mistakes of several hundredths. But gradually the error decreases and the player must be extremely accurate. Otherwise, he will lose and will have to start the game again. 17 | 18 | ### Screenshots 19 | 20 | 21 | -------------------------------------------------------------------------------- /Source/.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 | vendor/ 9 | 10 | ## Various settings 11 | *.pbxuser 12 | !default.pbxuser 13 | *.mode1v3 14 | !default.mode1v3 15 | *.mode2v3 16 | !default.mode2v3 17 | *.perspectivev3 18 | !default.perspectivev3 19 | xcuserdata/ 20 | IDEWorkspaceChecks.plist 21 | 22 | ## Other 23 | *.moved-aside 24 | *.xccheckout 25 | *.xcscmblueprint 26 | *.xcbkptlist 27 | 28 | ## Obj-C/Swift specific 29 | *.hmap 30 | *.ipa 31 | *.dSYM.zip 32 | *.dSYM 33 | 34 | ## Playgrounds 35 | timeline.xctimeline 36 | playground.xcworkspace 37 | 38 | # Swift Package Manager 39 | # 40 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 41 | # Packages/ 42 | # Package.pins 43 | # Package.resolved 44 | .build/ 45 | 46 | # CocoaPods 47 | # 48 | # We recommend against adding the Pods directory to your .gitignore. However 49 | # you should judge for yourself, the pros and cons are mentioned at: 50 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 51 | # 52 | Pods/ 53 | 54 | # 55 | # Add this line if you want to avoid checking in source code from the Xcode workspace 56 | # *.xcworkspace 57 | 58 | # Carthage 59 | # 60 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 61 | # Carthage/Checkouts 62 | 63 | Carthage/Build 64 | 65 | # fastlane 66 | # 67 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 68 | # screenshots whenever they are needed. 69 | # For more information about the recommended setup visit: 70 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 71 | 72 | fastlane/report.xml 73 | fastlane/Preview.html 74 | fastlane/screenshots/**/*.png 75 | fastlane/test_output 76 | 77 | # Code Injection 78 | # 79 | # After new code Injection tools there's a generated folder /iOSInjectionProject 80 | # https://github.com/johnno1962/injectionforxcode 81 | 82 | iOSInjectionProject/ 83 | 84 | # R.swift 85 | **/R.generated.swift 86 | -------------------------------------------------------------------------------- /Source/.swift-version: -------------------------------------------------------------------------------- 1 | 5.0 -------------------------------------------------------------------------------- /Source/.swiftlint.yml: -------------------------------------------------------------------------------- 1 | whitelist_rules: 2 | - closure_end_indentation 3 | - closure_spacing 4 | - colon 5 | - control_statement 6 | - empty_enum_arguments 7 | - empty_parentheses_with_trailing_closure 8 | - fatal_error_message 9 | - force_try 10 | - force_unwrapping 11 | - implicitly_unwrapped_optional 12 | - legacy_cggeometry_functions 13 | - legacy_constant 14 | - legacy_constructor 15 | - legacy_nsgeometry_functions 16 | - operator_usage_whitespace 17 | - redundant_string_enum_value 18 | - redundant_void_return 19 | - return_arrow_whitespace 20 | - trailing_newline 21 | - type_name 22 | - unneeded_parentheses_in_closure_argument 23 | - unused_closure_parameter 24 | - vertical_whitespace 25 | - void_return 26 | 27 | excluded: 28 | - Carthage 29 | - Pods 30 | - HardcoreTap/Resources/Generated/R.generated.swift 31 | 32 | identifier_name: 33 | excluded: 34 | - id 35 | - to 36 | - in 37 | - at 38 | - of 39 | - up 40 | 41 | colon: 42 | apply_to_dictionaries: false 43 | 44 | indentation: 2 45 | 46 | custom_rules: 47 | no_objcMembers: 48 | name: "@objcMembers" 49 | regex: "@objcMembers" 50 | message: "Explicitly use @objc on each member you want to expose to Objective-C" 51 | severity: error 52 | -------------------------------------------------------------------------------- /Source/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'fastlane' -------------------------------------------------------------------------------- /Source/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | CFPropertyList (3.0.1) 5 | activesupport (4.2.11.1) 6 | i18n (~> 0.7) 7 | minitest (~> 5.1) 8 | thread_safe (~> 0.3, >= 0.3.4) 9 | tzinfo (~> 1.1) 10 | addressable (2.8.0) 11 | public_suffix (>= 2.0.2, < 5.0) 12 | algoliasearch (1.27.1) 13 | httpclient (~> 2.8, >= 2.8.3) 14 | json (>= 1.5.1) 15 | atomos (0.1.3) 16 | babosa (1.0.3) 17 | claide (1.0.3) 18 | cocoapods (1.8.3) 19 | activesupport (>= 4.0.2, < 5) 20 | claide (>= 1.0.2, < 2.0) 21 | cocoapods-core (= 1.8.3) 22 | cocoapods-deintegrate (>= 1.0.3, < 2.0) 23 | cocoapods-downloader (>= 1.2.2, < 2.0) 24 | cocoapods-plugins (>= 1.0.0, < 2.0) 25 | cocoapods-search (>= 1.0.0, < 2.0) 26 | cocoapods-stats (>= 1.0.0, < 2.0) 27 | cocoapods-trunk (>= 1.4.0, < 2.0) 28 | cocoapods-try (>= 1.1.0, < 2.0) 29 | colored2 (~> 3.1) 30 | escape (~> 0.0.4) 31 | fourflusher (>= 2.3.0, < 3.0) 32 | gh_inspector (~> 1.0) 33 | molinillo (~> 0.6.6) 34 | nap (~> 1.0) 35 | ruby-macho (~> 1.4) 36 | xcodeproj (>= 1.11.1, < 2.0) 37 | cocoapods-core (1.8.3) 38 | activesupport (>= 4.0.2, < 6) 39 | algoliasearch (~> 1.0) 40 | concurrent-ruby (~> 1.1) 41 | fuzzy_match (~> 2.0.4) 42 | nap (~> 1.0) 43 | cocoapods-deintegrate (1.0.4) 44 | cocoapods-downloader (1.6.3) 45 | cocoapods-plugins (1.0.0) 46 | nap 47 | cocoapods-search (1.0.0) 48 | cocoapods-stats (1.1.0) 49 | cocoapods-trunk (1.4.1) 50 | nap (>= 0.8, < 2.0) 51 | netrc (~> 0.11) 52 | cocoapods-try (1.1.0) 53 | colored (1.2) 54 | colored2 (3.1.2) 55 | commander-fastlane (4.4.6) 56 | highline (~> 1.7.2) 57 | concurrent-ruby (1.1.5) 58 | declarative (0.0.10) 59 | declarative-option (0.1.0) 60 | digest-crc (0.4.1) 61 | domain_name (0.5.20190701) 62 | unf (>= 0.0.5, < 1.0.0) 63 | dotenv (2.7.5) 64 | emoji_regex (1.0.1) 65 | escape (0.0.4) 66 | excon (0.71.0) 67 | faraday (0.15.4) 68 | multipart-post (>= 1.2, < 3) 69 | faraday-cookie_jar (0.0.6) 70 | faraday (>= 0.7.4) 71 | http-cookie (~> 1.0.0) 72 | faraday_middleware (0.13.1) 73 | faraday (>= 0.7.4, < 1.0) 74 | fastimage (2.1.7) 75 | fastlane (2.133.0) 76 | CFPropertyList (>= 2.3, < 4.0.0) 77 | addressable (>= 2.3, < 3.0.0) 78 | babosa (>= 1.0.2, < 2.0.0) 79 | bundler (>= 1.12.0, < 3.0.0) 80 | colored 81 | commander-fastlane (>= 4.4.6, < 5.0.0) 82 | dotenv (>= 2.1.1, < 3.0.0) 83 | emoji_regex (>= 0.1, < 2.0) 84 | excon (>= 0.45.0, < 1.0.0) 85 | faraday (< 0.16.0) 86 | faraday-cookie_jar (~> 0.0.6) 87 | faraday_middleware (< 0.16.0) 88 | fastimage (>= 2.1.0, < 3.0.0) 89 | gh_inspector (>= 1.1.2, < 2.0.0) 90 | google-api-client (>= 0.21.2, < 0.24.0) 91 | google-cloud-storage (>= 1.15.0, < 2.0.0) 92 | highline (>= 1.7.2, < 2.0.0) 93 | json (< 3.0.0) 94 | jwt (~> 2.1.0) 95 | mini_magick (>= 4.9.4, < 5.0.0) 96 | multi_xml (~> 0.5) 97 | multipart-post (~> 2.0.0) 98 | plist (>= 3.1.0, < 4.0.0) 99 | public_suffix (~> 2.0.0) 100 | rubyzip (>= 1.3.0, < 2.0.0) 101 | security (= 0.1.3) 102 | simctl (~> 1.6.3) 103 | slack-notifier (>= 2.0.0, < 3.0.0) 104 | terminal-notifier (>= 2.0.0, < 3.0.0) 105 | terminal-table (>= 1.4.5, < 2.0.0) 106 | tty-screen (>= 0.6.3, < 1.0.0) 107 | tty-spinner (>= 0.8.0, < 1.0.0) 108 | word_wrap (~> 1.0.0) 109 | xcodeproj (>= 1.8.1, < 2.0.0) 110 | xcpretty (~> 0.3.0) 111 | xcpretty-travis-formatter (>= 0.0.3) 112 | fourflusher (2.3.1) 113 | fuzzy_match (2.0.4) 114 | gh_inspector (1.1.3) 115 | google-api-client (0.23.9) 116 | addressable (~> 2.5, >= 2.5.1) 117 | googleauth (>= 0.5, < 0.7.0) 118 | httpclient (>= 2.8.1, < 3.0) 119 | mime-types (~> 3.0) 120 | representable (~> 3.0) 121 | retriable (>= 2.0, < 4.0) 122 | signet (~> 0.9) 123 | google-cloud-core (1.3.1) 124 | google-cloud-env (~> 1.0) 125 | google-cloud-env (1.2.1) 126 | faraday (~> 0.11) 127 | google-cloud-storage (1.16.0) 128 | digest-crc (~> 0.4) 129 | google-api-client (~> 0.23) 130 | google-cloud-core (~> 1.2) 131 | googleauth (>= 0.6.2, < 0.10.0) 132 | googleauth (0.6.7) 133 | faraday (~> 0.12) 134 | jwt (>= 1.4, < 3.0) 135 | memoist (~> 0.16) 136 | multi_json (~> 1.11) 137 | os (>= 0.9, < 2.0) 138 | signet (~> 0.7) 139 | highline (1.7.10) 140 | http-cookie (1.0.3) 141 | domain_name (~> 0.5) 142 | httpclient (2.8.3) 143 | i18n (0.9.5) 144 | concurrent-ruby (~> 1.0) 145 | json (2.3.1) 146 | jwt (2.1.0) 147 | memoist (0.16.0) 148 | mime-types (3.3) 149 | mime-types-data (~> 3.2015) 150 | mime-types-data (3.2019.0904) 151 | mini_magick (4.9.5) 152 | minitest (5.12.2) 153 | molinillo (0.6.6) 154 | multi_json (1.13.1) 155 | multi_xml (0.6.0) 156 | multipart-post (2.0.0) 157 | nanaimo (0.2.6) 158 | nap (1.1.0) 159 | naturally (2.2.0) 160 | netrc (0.11.0) 161 | os (1.0.1) 162 | plist (3.5.0) 163 | public_suffix (2.0.5) 164 | representable (3.0.4) 165 | declarative (< 0.1.0) 166 | declarative-option (< 0.2.0) 167 | uber (< 0.2.0) 168 | retriable (3.1.2) 169 | rouge (2.0.7) 170 | ruby-macho (1.4.0) 171 | rubyzip (1.3.0) 172 | security (0.1.3) 173 | signet (0.11.0) 174 | addressable (~> 2.3) 175 | faraday (~> 0.9) 176 | jwt (>= 1.5, < 3.0) 177 | multi_json (~> 1.10) 178 | simctl (1.6.6) 179 | CFPropertyList 180 | naturally 181 | slack-notifier (2.3.2) 182 | terminal-notifier (2.0.0) 183 | terminal-table (1.8.0) 184 | unicode-display_width (~> 1.1, >= 1.1.1) 185 | thread_safe (0.3.6) 186 | tty-cursor (0.7.0) 187 | tty-screen (0.7.0) 188 | tty-spinner (0.9.1) 189 | tty-cursor (~> 0.7) 190 | tzinfo (1.2.10) 191 | thread_safe (~> 0.1) 192 | uber (0.1.0) 193 | unf (0.1.4) 194 | unf_ext 195 | unf_ext (0.0.7.6) 196 | unicode-display_width (1.6.0) 197 | word_wrap (1.0.0) 198 | xcodeproj (1.12.0) 199 | CFPropertyList (>= 2.3.3, < 4.0) 200 | atomos (~> 0.1.3) 201 | claide (>= 1.0.2, < 2.0) 202 | colored2 (~> 3.1) 203 | nanaimo (~> 0.2.6) 204 | xcpretty (0.3.0) 205 | rouge (~> 2.0.7) 206 | xcpretty-travis-formatter (1.0.0) 207 | xcpretty (~> 0.2, >= 0.0.7) 208 | 209 | PLATFORMS 210 | ruby 211 | 212 | DEPENDENCIES 213 | cocoapods 214 | fastlane 215 | 216 | BUNDLED WITH 217 | 2.0.2 218 | -------------------------------------------------------------------------------- /Source/HardcoreTap.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 52; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 3634F807235894840053699F /* AboutGameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3634F806235894840053699F /* AboutGameView.swift */; }; 11 | 3644DC2323A3D1A500D4CAB7 /* ButtonLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3644DC2223A3D1A500D4CAB7 /* ButtonLinkView.swift */; }; 12 | 3644DC2523A3D1C400D4CAB7 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3644DC2423A3D1C400D4CAB7 /* SettingsView.swift */; }; 13 | 36668D0A235734D800EEC8BC /* LeaderboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36668D09235734D800EEC8BC /* LeaderboardView.swift */; }; 14 | 36668D0C235739FF00EEC8BC /* RulesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36668D0B235739FF00EEC8BC /* RulesView.swift */; }; 15 | 369243452350D4D800EA40C9 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 369243442350D4D800EA40C9 /* SceneDelegate.swift */; }; 16 | 369243472350D98B00EA40C9 /* BaseTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 369243462350D98B00EA40C9 /* BaseTabView.swift */; }; 17 | 36B7A872235F27ED00CBCE24 /* RuleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36B7A871235F27ED00CBCE24 /* RuleView.swift */; }; 18 | 36CEAB2B234DFD6800812E09 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36CEAB2A234DFD6800812E09 /* LoginView.swift */; }; 19 | 36D756BD2374646F00F6791D /* GameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36D756BC2374646F00F6791D /* GameView.swift */; }; 20 | 36D756C02374654800F6791D /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 36D756C22374654800F6791D /* Localizable.strings */; }; 21 | 3C092B061FB771EF0019687C /* RulesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C092B051FB771EF0019687C /* RulesViewController.swift */; }; 22 | 3C092B0A1FB774010019687C /* BaseTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C092B091FB774010019687C /* BaseTabBarController.swift */; }; 23 | 3CA83B8B1FBA5D7B0046ED8D /* bmp60.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 3CA83B8A1FBA5D7B0046ED8D /* bmp60.mp3 */; }; 24 | 3CE12BFD1FB62FED00945352 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE12BFC1FB62FED00945352 /* AppDelegate.swift */; }; 25 | 3CE12BFF1FB62FEE00945352 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE12BFE1FB62FEE00945352 /* GameViewController.swift */; }; 26 | 3CE12C021FB62FEE00945352 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3CE12C001FB62FEE00945352 /* Main.storyboard */; }; 27 | 3CE12C041FB62FEE00945352 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3CE12C031FB62FEE00945352 /* Assets.xcassets */; }; 28 | 3CE12C071FB62FEE00945352 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3CE12C051FB62FEE00945352 /* LaunchScreen.storyboard */; }; 29 | 3CE12C111FB643CB00945352 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE12C101FB643CB00945352 /* LoginViewController.swift */; }; 30 | 3CE12C151FB663A000945352 /* LeadearBoardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE12C141FB663A000945352 /* LeadearBoardViewController.swift */; }; 31 | 739F733F200B98FE0073C198 /* SettingsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739F733E200B98FE0073C198 /* SettingsCell.swift */; }; 32 | 73BC136B1FB876A200BDB8B0 /* UIButtonExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73BC136A1FB876A200BDB8B0 /* UIButtonExtension.swift */; }; 33 | 8D0B2BED1FC89B3700CE102C /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D0B2BEC1FC89B3600CE102C /* SettingsViewController.swift */; }; 34 | 8D0B2BF11FC89BA400CE102C /* AboutGameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D0B2BF01FC89BA400CE102C /* AboutGameViewController.swift */; }; 35 | 8D4E36BD2008CC8200508D6B /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D4E36BC2008CC8200508D6B /* GoogleService-Info.plist */; }; 36 | 8D90EB9820B96F44002A3711 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D90EB9720B96F44002A3711 /* StoreKit.framework */; }; 37 | 8D90EB9A20B981B1002A3711 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D90EB9920B981B1002A3711 /* GameKit.framework */; }; 38 | FDFF966428B3F05200A68F95 /* SwiftEntryKit in Frameworks */ = {isa = PBXBuildFile; productRef = FDFF966328B3F05200A68F95 /* SwiftEntryKit */; }; 39 | FDFFEFE2227831AD00AB8ACA /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDFFEFE1227831AD00AB8ACA /* Message.swift */; }; 40 | FDFFEFE4227832DD00AB8ACA /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDFFEFE3227832DD00AB8ACA /* Colors.swift */; }; 41 | /* End PBXBuildFile section */ 42 | 43 | /* Begin PBXCopyFilesBuildPhase section */ 44 | 36409E522359D842002AB92F /* Embed Watch Content */ = { 45 | isa = PBXCopyFilesBuildPhase; 46 | buildActionMask = 2147483647; 47 | dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; 48 | dstSubfolderSpec = 16; 49 | files = ( 50 | ); 51 | name = "Embed Watch Content"; 52 | runOnlyForDeploymentPostprocessing = 0; 53 | }; 54 | /* End PBXCopyFilesBuildPhase section */ 55 | 56 | /* Begin PBXFileReference section */ 57 | 3634F806235894840053699F /* AboutGameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutGameView.swift; sourceTree = ""; }; 58 | 3644DC2223A3D1A500D4CAB7 /* ButtonLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonLinkView.swift; sourceTree = ""; }; 59 | 3644DC2423A3D1C400D4CAB7 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 60 | 36668D09235734D800EEC8BC /* LeaderboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeaderboardView.swift; sourceTree = ""; }; 61 | 36668D0B235739FF00EEC8BC /* RulesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulesView.swift; sourceTree = ""; }; 62 | 369243442350D4D800EA40C9 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 63 | 369243462350D98B00EA40C9 /* BaseTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTabView.swift; sourceTree = ""; }; 64 | 369F7410234DD3010062A29E /* HardcoreTap.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HardcoreTap.entitlements; sourceTree = ""; }; 65 | 36B7A871235F27ED00CBCE24 /* RuleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuleView.swift; sourceTree = ""; }; 66 | 36CEAB2A234DFD6800812E09 /* LoginView.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; tabWidth = 4; }; 67 | 36D756BC2374646F00F6791D /* GameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = ""; }; 68 | 36D756C12374654800F6791D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 69 | 36E9C9A12384466100D88217 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Main.strings; sourceTree = ""; }; 70 | 36E9C9A22384466100D88217 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/LaunchScreen.strings; sourceTree = ""; }; 71 | 36E9C9A52384466100D88217 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 72 | 3C092B051FB771EF0019687C /* RulesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulesViewController.swift; sourceTree = ""; }; 73 | 3C092B091FB774010019687C /* BaseTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTabBarController.swift; sourceTree = ""; }; 74 | 3CA83B8A1FBA5D7B0046ED8D /* bmp60.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = bmp60.mp3; sourceTree = ""; }; 75 | 3CE12BF91FB62FED00945352 /* HardcoreTap.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HardcoreTap.app; sourceTree = BUILT_PRODUCTS_DIR; }; 76 | 3CE12BFC1FB62FED00945352 /* AppDelegate.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; tabWidth = 4; }; 77 | 3CE12BFE1FB62FEE00945352 /* GameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = ""; }; 78 | 3CE12C011FB62FEE00945352 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 79 | 3CE12C031FB62FEE00945352 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 80 | 3CE12C061FB62FEE00945352 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 81 | 3CE12C081FB62FEE00945352 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 82 | 3CE12C101FB643CB00945352 /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = ""; }; 83 | 3CE12C141FB663A000945352 /* LeadearBoardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeadearBoardViewController.swift; sourceTree = ""; }; 84 | 739F733E200B98FE0073C198 /* SettingsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsCell.swift; sourceTree = ""; }; 85 | 73BC136A1FB876A200BDB8B0 /* UIButtonExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIButtonExtension.swift; sourceTree = ""; }; 86 | 8D0B2BEC1FC89B3600CE102C /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; }; 87 | 8D0B2BF01FC89BA400CE102C /* AboutGameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutGameViewController.swift; sourceTree = ""; }; 88 | 8D4E36BC2008CC8200508D6B /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 89 | 8D90EB9720B96F44002A3711 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; 90 | 8D90EB9920B981B1002A3711 /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System/Library/Frameworks/GameKit.framework; sourceTree = SDKROOT; }; 91 | FDFFEFE1227831AD00AB8ACA /* Message.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = ""; }; 92 | FDFFEFE3227832DD00AB8ACA /* Colors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Colors.swift; sourceTree = ""; }; 93 | /* End PBXFileReference section */ 94 | 95 | /* Begin PBXFrameworksBuildPhase section */ 96 | 3CE12BF61FB62FED00945352 /* Frameworks */ = { 97 | isa = PBXFrameworksBuildPhase; 98 | buildActionMask = 2147483647; 99 | files = ( 100 | 8D90EB9A20B981B1002A3711 /* GameKit.framework in Frameworks */, 101 | 8D90EB9820B96F44002A3711 /* StoreKit.framework in Frameworks */, 102 | FDFF966428B3F05200A68F95 /* SwiftEntryKit in Frameworks */, 103 | ); 104 | runOnlyForDeploymentPostprocessing = 0; 105 | }; 106 | /* End PBXFrameworksBuildPhase section */ 107 | 108 | /* Begin PBXGroup section */ 109 | 36409E122359C9BD002AB92F /* DEPRECATED */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 3CE12BFE1FB62FEE00945352 /* GameViewController.swift */, 113 | 3CE12C141FB663A000945352 /* LeadearBoardViewController.swift */, 114 | 8D0B2BEC1FC89B3600CE102C /* SettingsViewController.swift */, 115 | 8D0B2BF01FC89BA400CE102C /* AboutGameViewController.swift */, 116 | 3CE12C101FB643CB00945352 /* LoginViewController.swift */, 117 | 3C092B091FB774010019687C /* BaseTabBarController.swift */, 118 | 3C092B051FB771EF0019687C /* RulesViewController.swift */, 119 | 739F733E200B98FE0073C198 /* SettingsCell.swift */, 120 | 73BC136A1FB876A200BDB8B0 /* UIButtonExtension.swift */, 121 | 3CE12C001FB62FEE00945352 /* Main.storyboard */, 122 | ); 123 | path = DEPRECATED; 124 | sourceTree = ""; 125 | }; 126 | 36D756C32374655100F6791D /* Translations */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 36D756C22374654800F6791D /* Localizable.strings */, 130 | ); 131 | path = Translations; 132 | sourceTree = ""; 133 | }; 134 | 3C52CAE71FBBC873004E31B8 /* Audio */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | 3CA83B8A1FBA5D7B0046ED8D /* bmp60.mp3 */, 138 | ); 139 | path = Audio; 140 | sourceTree = ""; 141 | }; 142 | 3CE12BF01FB62FED00945352 = { 143 | isa = PBXGroup; 144 | children = ( 145 | 3CE12BFB1FB62FED00945352 /* HardcoreTap */, 146 | 3CE12BFA1FB62FED00945352 /* Products */, 147 | A1D86CDE2B60F3C896ECD78A /* Frameworks */, 148 | ); 149 | indentWidth = 4; 150 | sourceTree = ""; 151 | tabWidth = 4; 152 | }; 153 | 3CE12BFA1FB62FED00945352 /* Products */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 3CE12BF91FB62FED00945352 /* HardcoreTap.app */, 157 | ); 158 | name = Products; 159 | sourceTree = ""; 160 | }; 161 | 3CE12BFB1FB62FED00945352 /* HardcoreTap */ = { 162 | isa = PBXGroup; 163 | children = ( 164 | 36409E122359C9BD002AB92F /* DEPRECATED */, 165 | 369F7410234DD3010062A29E /* HardcoreTap.entitlements */, 166 | 3CE12BFC1FB62FED00945352 /* AppDelegate.swift */, 167 | 369243442350D4D800EA40C9 /* SceneDelegate.swift */, 168 | FD1631532272F1E30040FC3F /* Classes */, 169 | FD1631552272F1F40040FC3F /* Launch */, 170 | FD1631562272F1FD0040FC3F /* Resources */, 171 | 8D4D773C20F10AF4001F3E91 /* Supporting files */, 172 | ); 173 | path = HardcoreTap; 174 | sourceTree = ""; 175 | }; 176 | 8D4D773C20F10AF4001F3E91 /* Supporting files */ = { 177 | isa = PBXGroup; 178 | children = ( 179 | 3CE12C081FB62FEE00945352 /* Info.plist */, 180 | 8D4E36BC2008CC8200508D6B /* GoogleService-Info.plist */, 181 | ); 182 | path = "Supporting files"; 183 | sourceTree = ""; 184 | }; 185 | 8D4D773E20F10B9E001F3E91 /* Stories */ = { 186 | isa = PBXGroup; 187 | children = ( 188 | 8D4D774820F10D6B001F3E91 /* Login */, 189 | 8D4D774220F10D08001F3E91 /* Game */, 190 | 8D4D774420F10D20001F3E91 /* Leaderboard */, 191 | 8D4D774720F10D52001F3E91 /* AboutGame */, 192 | 8D4D774620F10D4E001F3E91 /* Settings */, 193 | 8D4D774520F10D29001F3E91 /* Rules */, 194 | ); 195 | path = Stories; 196 | sourceTree = ""; 197 | }; 198 | 8D4D774220F10D08001F3E91 /* Game */ = { 199 | isa = PBXGroup; 200 | children = ( 201 | 36D756BC2374646F00F6791D /* GameView.swift */, 202 | ); 203 | path = Game; 204 | sourceTree = ""; 205 | }; 206 | 8D4D774420F10D20001F3E91 /* Leaderboard */ = { 207 | isa = PBXGroup; 208 | children = ( 209 | 36668D09235734D800EEC8BC /* LeaderboardView.swift */, 210 | ); 211 | path = Leaderboard; 212 | sourceTree = ""; 213 | }; 214 | 8D4D774520F10D29001F3E91 /* Rules */ = { 215 | isa = PBXGroup; 216 | children = ( 217 | 36B7A871235F27ED00CBCE24 /* RuleView.swift */, 218 | 36668D0B235739FF00EEC8BC /* RulesView.swift */, 219 | ); 220 | path = Rules; 221 | sourceTree = ""; 222 | }; 223 | 8D4D774620F10D4E001F3E91 /* Settings */ = { 224 | isa = PBXGroup; 225 | children = ( 226 | 3644DC2423A3D1C400D4CAB7 /* SettingsView.swift */, 227 | ); 228 | path = Settings; 229 | sourceTree = ""; 230 | }; 231 | 8D4D774720F10D52001F3E91 /* AboutGame */ = { 232 | isa = PBXGroup; 233 | children = ( 234 | 3634F806235894840053699F /* AboutGameView.swift */, 235 | ); 236 | path = AboutGame; 237 | sourceTree = ""; 238 | }; 239 | 8D4D774820F10D6B001F3E91 /* Login */ = { 240 | isa = PBXGroup; 241 | children = ( 242 | 36CEAB2A234DFD6800812E09 /* LoginView.swift */, 243 | ); 244 | path = Login; 245 | sourceTree = ""; 246 | }; 247 | A1D86CDE2B60F3C896ECD78A /* Frameworks */ = { 248 | isa = PBXGroup; 249 | children = ( 250 | 8D90EB9920B981B1002A3711 /* GameKit.framework */, 251 | 8D90EB9720B96F44002A3711 /* StoreKit.framework */, 252 | ); 253 | name = Frameworks; 254 | sourceTree = ""; 255 | }; 256 | FD1631532272F1E30040FC3F /* Classes */ = { 257 | isa = PBXGroup; 258 | children = ( 259 | FD1631582272F2350040FC3F /* PresentationLayer */, 260 | ); 261 | path = Classes; 262 | sourceTree = ""; 263 | }; 264 | FD1631552272F1F40040FC3F /* Launch */ = { 265 | isa = PBXGroup; 266 | children = ( 267 | 3CE12C051FB62FEE00945352 /* LaunchScreen.storyboard */, 268 | ); 269 | path = Launch; 270 | sourceTree = ""; 271 | }; 272 | FD1631562272F1FD0040FC3F /* Resources */ = { 273 | isa = PBXGroup; 274 | children = ( 275 | 36D756C32374655100F6791D /* Translations */, 276 | 3C52CAE71FBBC873004E31B8 /* Audio */, 277 | 3CE12C031FB62FEE00945352 /* Assets.xcassets */, 278 | ); 279 | path = Resources; 280 | sourceTree = ""; 281 | }; 282 | FD1631582272F2350040FC3F /* PresentationLayer */ = { 283 | isa = PBXGroup; 284 | children = ( 285 | FD1631592272F2400040FC3F /* Common */, 286 | FD16315C2272F29A0040FC3F /* Base */, 287 | 8D4D773E20F10B9E001F3E91 /* Stories */, 288 | ); 289 | path = PresentationLayer; 290 | sourceTree = ""; 291 | }; 292 | FD1631592272F2400040FC3F /* Common */ = { 293 | isa = PBXGroup; 294 | children = ( 295 | FD16315B2272F24E0040FC3F /* UIElements */, 296 | FD16315A2272F2470040FC3F /* Styles */, 297 | ); 298 | path = Common; 299 | sourceTree = ""; 300 | }; 301 | FD16315A2272F2470040FC3F /* Styles */ = { 302 | isa = PBXGroup; 303 | children = ( 304 | FDFFEFE3227832DD00AB8ACA /* Colors.swift */, 305 | ); 306 | path = Styles; 307 | sourceTree = ""; 308 | }; 309 | FD16315B2272F24E0040FC3F /* UIElements */ = { 310 | isa = PBXGroup; 311 | children = ( 312 | FDFFEFE1227831AD00AB8ACA /* Message.swift */, 313 | 3644DC2223A3D1A500D4CAB7 /* ButtonLinkView.swift */, 314 | ); 315 | path = UIElements; 316 | sourceTree = ""; 317 | }; 318 | FD16315C2272F29A0040FC3F /* Base */ = { 319 | isa = PBXGroup; 320 | children = ( 321 | 369243462350D98B00EA40C9 /* BaseTabView.swift */, 322 | ); 323 | path = Base; 324 | sourceTree = ""; 325 | }; 326 | /* End PBXGroup section */ 327 | 328 | /* Begin PBXNativeTarget section */ 329 | 3CE12BF81FB62FED00945352 /* HardcoreTap */ = { 330 | isa = PBXNativeTarget; 331 | buildConfigurationList = 3CE12C0B1FB62FEE00945352 /* Build configuration list for PBXNativeTarget "HardcoreTap" */; 332 | buildPhases = ( 333 | 3CE12BF51FB62FED00945352 /* Sources */, 334 | 3CE12BF61FB62FED00945352 /* Frameworks */, 335 | 3CE12BF71FB62FED00945352 /* Resources */, 336 | 36409E522359D842002AB92F /* Embed Watch Content */, 337 | ); 338 | buildRules = ( 339 | ); 340 | dependencies = ( 341 | ); 342 | name = HardcoreTap; 343 | packageProductDependencies = ( 344 | FDFF966328B3F05200A68F95 /* SwiftEntryKit */, 345 | ); 346 | productName = TimeKillerApp; 347 | productReference = 3CE12BF91FB62FED00945352 /* HardcoreTap.app */; 348 | productType = "com.apple.product-type.application"; 349 | }; 350 | /* End PBXNativeTarget section */ 351 | 352 | /* Begin PBXProject section */ 353 | 3CE12BF11FB62FED00945352 /* Project object */ = { 354 | isa = PBXProject; 355 | attributes = { 356 | LastSwiftUpdateCheck = 1110; 357 | LastUpgradeCheck = 1340; 358 | ORGANIZATIONNAME = "Bogdan Bystritskiy"; 359 | TargetAttributes = { 360 | 3CE12BF81FB62FED00945352 = { 361 | CreatedOnToolsVersion = 9.1; 362 | ProvisioningStyle = Automatic; 363 | SystemCapabilities = { 364 | com.apple.GameCenter.iOS = { 365 | enabled = 1; 366 | }; 367 | com.apple.InAppPurchase = { 368 | enabled = 1; 369 | }; 370 | }; 371 | }; 372 | }; 373 | }; 374 | buildConfigurationList = 3CE12BF41FB62FED00945352 /* Build configuration list for PBXProject "HardcoreTap" */; 375 | compatibilityVersion = "Xcode 8.0"; 376 | developmentRegion = en; 377 | hasScannedForEncodings = 0; 378 | knownRegions = ( 379 | en, 380 | Base, 381 | ru, 382 | ); 383 | mainGroup = 3CE12BF01FB62FED00945352; 384 | packageReferences = ( 385 | FDFF966228B3F05200A68F95 /* XCRemoteSwiftPackageReference "SwiftEntryKit" */, 386 | ); 387 | productRefGroup = 3CE12BFA1FB62FED00945352 /* Products */; 388 | projectDirPath = ""; 389 | projectRoot = ""; 390 | targets = ( 391 | 3CE12BF81FB62FED00945352 /* HardcoreTap */, 392 | ); 393 | }; 394 | /* End PBXProject section */ 395 | 396 | /* Begin PBXResourcesBuildPhase section */ 397 | 3CE12BF71FB62FED00945352 /* Resources */ = { 398 | isa = PBXResourcesBuildPhase; 399 | buildActionMask = 2147483647; 400 | files = ( 401 | 8D4E36BD2008CC8200508D6B /* GoogleService-Info.plist in Resources */, 402 | 36D756C02374654800F6791D /* Localizable.strings in Resources */, 403 | 3CE12C071FB62FEE00945352 /* LaunchScreen.storyboard in Resources */, 404 | 3CE12C041FB62FEE00945352 /* Assets.xcassets in Resources */, 405 | 3CE12C021FB62FEE00945352 /* Main.storyboard in Resources */, 406 | 3CA83B8B1FBA5D7B0046ED8D /* bmp60.mp3 in Resources */, 407 | ); 408 | runOnlyForDeploymentPostprocessing = 0; 409 | }; 410 | /* End PBXResourcesBuildPhase section */ 411 | 412 | /* Begin PBXSourcesBuildPhase section */ 413 | 3CE12BF51FB62FED00945352 /* Sources */ = { 414 | isa = PBXSourcesBuildPhase; 415 | buildActionMask = 2147483647; 416 | files = ( 417 | 369243472350D98B00EA40C9 /* BaseTabView.swift in Sources */, 418 | 3CE12C151FB663A000945352 /* LeadearBoardViewController.swift in Sources */, 419 | 3644DC2323A3D1A500D4CAB7 /* ButtonLinkView.swift in Sources */, 420 | 73BC136B1FB876A200BDB8B0 /* UIButtonExtension.swift in Sources */, 421 | FDFFEFE4227832DD00AB8ACA /* Colors.swift in Sources */, 422 | 3CE12BFF1FB62FEE00945352 /* GameViewController.swift in Sources */, 423 | 3634F807235894840053699F /* AboutGameView.swift in Sources */, 424 | 369243452350D4D800EA40C9 /* SceneDelegate.swift in Sources */, 425 | 3C092B0A1FB774010019687C /* BaseTabBarController.swift in Sources */, 426 | 3C092B061FB771EF0019687C /* RulesViewController.swift in Sources */, 427 | 36D756BD2374646F00F6791D /* GameView.swift in Sources */, 428 | 3CE12BFD1FB62FED00945352 /* AppDelegate.swift in Sources */, 429 | 3644DC2523A3D1C400D4CAB7 /* SettingsView.swift in Sources */, 430 | 36668D0A235734D800EEC8BC /* LeaderboardView.swift in Sources */, 431 | 36668D0C235739FF00EEC8BC /* RulesView.swift in Sources */, 432 | 3CE12C111FB643CB00945352 /* LoginViewController.swift in Sources */, 433 | 36B7A872235F27ED00CBCE24 /* RuleView.swift in Sources */, 434 | 8D0B2BF11FC89BA400CE102C /* AboutGameViewController.swift in Sources */, 435 | FDFFEFE2227831AD00AB8ACA /* Message.swift in Sources */, 436 | 8D0B2BED1FC89B3700CE102C /* SettingsViewController.swift in Sources */, 437 | 36CEAB2B234DFD6800812E09 /* LoginView.swift in Sources */, 438 | 739F733F200B98FE0073C198 /* SettingsCell.swift in Sources */, 439 | ); 440 | runOnlyForDeploymentPostprocessing = 0; 441 | }; 442 | /* End PBXSourcesBuildPhase section */ 443 | 444 | /* Begin PBXVariantGroup section */ 445 | 36D756C22374654800F6791D /* Localizable.strings */ = { 446 | isa = PBXVariantGroup; 447 | children = ( 448 | 36D756C12374654800F6791D /* en */, 449 | 36E9C9A52384466100D88217 /* ru */, 450 | ); 451 | name = Localizable.strings; 452 | sourceTree = ""; 453 | }; 454 | 3CE12C001FB62FEE00945352 /* Main.storyboard */ = { 455 | isa = PBXVariantGroup; 456 | children = ( 457 | 3CE12C011FB62FEE00945352 /* Base */, 458 | 36E9C9A12384466100D88217 /* ru */, 459 | ); 460 | name = Main.storyboard; 461 | sourceTree = ""; 462 | }; 463 | 3CE12C051FB62FEE00945352 /* LaunchScreen.storyboard */ = { 464 | isa = PBXVariantGroup; 465 | children = ( 466 | 3CE12C061FB62FEE00945352 /* Base */, 467 | 36E9C9A22384466100D88217 /* ru */, 468 | ); 469 | name = LaunchScreen.storyboard; 470 | sourceTree = ""; 471 | }; 472 | /* End PBXVariantGroup section */ 473 | 474 | /* Begin XCBuildConfiguration section */ 475 | 3CE12C091FB62FEE00945352 /* Debug */ = { 476 | isa = XCBuildConfiguration; 477 | buildSettings = { 478 | ALWAYS_SEARCH_USER_PATHS = NO; 479 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 480 | CLANG_ANALYZER_NONNULL = YES; 481 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 482 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 483 | CLANG_CXX_LIBRARY = "libc++"; 484 | CLANG_ENABLE_MODULES = YES; 485 | CLANG_ENABLE_OBJC_ARC = YES; 486 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 487 | CLANG_WARN_BOOL_CONVERSION = YES; 488 | CLANG_WARN_COMMA = YES; 489 | CLANG_WARN_CONSTANT_CONVERSION = YES; 490 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 491 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 492 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 493 | CLANG_WARN_EMPTY_BODY = YES; 494 | CLANG_WARN_ENUM_CONVERSION = YES; 495 | CLANG_WARN_INFINITE_RECURSION = YES; 496 | CLANG_WARN_INT_CONVERSION = YES; 497 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 498 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 499 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 500 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 501 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 502 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 503 | CLANG_WARN_STRICT_PROTOTYPES = YES; 504 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 505 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 506 | CLANG_WARN_UNREACHABLE_CODE = YES; 507 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 508 | CODE_SIGN_IDENTITY = "iPhone Developer"; 509 | COPY_PHASE_STRIP = NO; 510 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 511 | ENABLE_NS_ASSERTIONS = NO; 512 | ENABLE_STRICT_OBJC_MSGSEND = YES; 513 | ENABLE_TESTABILITY = YES; 514 | GCC_C_LANGUAGE_STANDARD = gnu11; 515 | GCC_DYNAMIC_NO_PIC = NO; 516 | GCC_NO_COMMON_BLOCKS = YES; 517 | GCC_OPTIMIZATION_LEVEL = 0; 518 | GCC_PREPROCESSOR_DEFINITIONS = ( 519 | "DEBUG=1", 520 | "$(inherited)", 521 | ); 522 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 523 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 524 | GCC_WARN_UNDECLARED_SELECTOR = YES; 525 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 526 | GCC_WARN_UNUSED_FUNCTION = YES; 527 | GCC_WARN_UNUSED_VARIABLE = YES; 528 | IPHONEOS_DEPLOYMENT_TARGET = 15.0; 529 | MTL_ENABLE_DEBUG_INFO = NO; 530 | ONLY_ACTIVE_ARCH = YES; 531 | SDKROOT = iphoneos; 532 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 533 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 534 | SWIFT_VERSION = 5.0; 535 | TARGETED_DEVICE_FAMILY = "1,2"; 536 | }; 537 | name = Debug; 538 | }; 539 | 3CE12C0A1FB62FEE00945352 /* Release */ = { 540 | isa = XCBuildConfiguration; 541 | buildSettings = { 542 | ALWAYS_SEARCH_USER_PATHS = NO; 543 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 544 | CLANG_ANALYZER_NONNULL = YES; 545 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 546 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 547 | CLANG_CXX_LIBRARY = "libc++"; 548 | CLANG_ENABLE_MODULES = YES; 549 | CLANG_ENABLE_OBJC_ARC = YES; 550 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 551 | CLANG_WARN_BOOL_CONVERSION = YES; 552 | CLANG_WARN_COMMA = YES; 553 | CLANG_WARN_CONSTANT_CONVERSION = YES; 554 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 555 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 556 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 557 | CLANG_WARN_EMPTY_BODY = YES; 558 | CLANG_WARN_ENUM_CONVERSION = YES; 559 | CLANG_WARN_INFINITE_RECURSION = YES; 560 | CLANG_WARN_INT_CONVERSION = YES; 561 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 562 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 563 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 564 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 565 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 566 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 567 | CLANG_WARN_STRICT_PROTOTYPES = YES; 568 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 569 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 570 | CLANG_WARN_UNREACHABLE_CODE = YES; 571 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 572 | CODE_SIGN_IDENTITY = "iPhone Developer"; 573 | COPY_PHASE_STRIP = NO; 574 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 575 | ENABLE_NS_ASSERTIONS = YES; 576 | ENABLE_STRICT_OBJC_MSGSEND = YES; 577 | ENABLE_TESTABILITY = YES; 578 | GCC_C_LANGUAGE_STANDARD = gnu11; 579 | GCC_NO_COMMON_BLOCKS = YES; 580 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 581 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 582 | GCC_WARN_UNDECLARED_SELECTOR = YES; 583 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 584 | GCC_WARN_UNUSED_FUNCTION = YES; 585 | GCC_WARN_UNUSED_VARIABLE = YES; 586 | IPHONEOS_DEPLOYMENT_TARGET = 15.0; 587 | MTL_ENABLE_DEBUG_INFO = YES; 588 | ONLY_ACTIVE_ARCH = YES; 589 | SDKROOT = iphoneos; 590 | SWIFT_COMPILATION_MODE = wholemodule; 591 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 592 | SWIFT_VERSION = 5.0; 593 | TARGETED_DEVICE_FAMILY = "1,2"; 594 | VALIDATE_PRODUCT = YES; 595 | }; 596 | name = Release; 597 | }; 598 | 3CE12C0C1FB62FEE00945352 /* Debug */ = { 599 | isa = XCBuildConfiguration; 600 | buildSettings = { 601 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 602 | CODE_SIGN_ENTITLEMENTS = HardcoreTap/HardcoreTap.entitlements; 603 | CODE_SIGN_IDENTITY = "iPhone Developer"; 604 | "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Developer"; 605 | CODE_SIGN_STYLE = Automatic; 606 | CURRENT_PROJECT_VERSION = 6; 607 | DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES; 608 | DEVELOPMENT_TEAM = F7AZ625QQ5; 609 | "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; 610 | INFOPLIST_FILE = "$(SRCROOT)/HardcoreTap/Supporting files/Info.plist"; 611 | IPHONEOS_DEPLOYMENT_TARGET = 15.0; 612 | LD_RUNPATH_SEARCH_PATHS = ( 613 | "$(inherited)", 614 | "@executable_path/Frameworks", 615 | ); 616 | MARKETING_VERSION = 2.0; 617 | PRODUCT_BUNDLE_IDENTIFIER = com.bystritskiy.HardcoreTap; 618 | PRODUCT_NAME = "$(TARGET_NAME)"; 619 | PROVISIONING_PROFILE = ""; 620 | PROVISIONING_PROFILE_SPECIFIER = ""; 621 | SUPPORTS_MACCATALYST = YES; 622 | SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; 623 | SWIFT_VERSION = 5.0; 624 | TARGETED_DEVICE_FAMILY = 1; 625 | }; 626 | name = Debug; 627 | }; 628 | 3CE12C0D1FB62FEE00945352 /* Release */ = { 629 | isa = XCBuildConfiguration; 630 | buildSettings = { 631 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 632 | CODE_SIGN_ENTITLEMENTS = HardcoreTap/HardcoreTap.entitlements; 633 | CODE_SIGN_IDENTITY = "iPhone Developer"; 634 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; 635 | CODE_SIGN_STYLE = Automatic; 636 | CURRENT_PROJECT_VERSION = 6; 637 | DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES; 638 | DEVELOPMENT_TEAM = F7AZ625QQ5; 639 | "ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = NO; 640 | INFOPLIST_FILE = "$(SRCROOT)/HardcoreTap/Supporting files/Info.plist"; 641 | IPHONEOS_DEPLOYMENT_TARGET = 15.0; 642 | LD_RUNPATH_SEARCH_PATHS = ( 643 | "$(inherited)", 644 | "@executable_path/Frameworks", 645 | ); 646 | MARKETING_VERSION = 2.0; 647 | PRODUCT_BUNDLE_IDENTIFIER = com.bystritskiy.HardcoreTap; 648 | PRODUCT_NAME = "$(TARGET_NAME)"; 649 | PROVISIONING_PROFILE = ""; 650 | PROVISIONING_PROFILE_SPECIFIER = ""; 651 | SUPPORTS_MACCATALYST = YES; 652 | SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; 653 | SWIFT_VERSION = 5.0; 654 | TARGETED_DEVICE_FAMILY = 1; 655 | }; 656 | name = Release; 657 | }; 658 | /* End XCBuildConfiguration section */ 659 | 660 | /* Begin XCConfigurationList section */ 661 | 3CE12BF41FB62FED00945352 /* Build configuration list for PBXProject "HardcoreTap" */ = { 662 | isa = XCConfigurationList; 663 | buildConfigurations = ( 664 | 3CE12C091FB62FEE00945352 /* Debug */, 665 | 3CE12C0A1FB62FEE00945352 /* Release */, 666 | ); 667 | defaultConfigurationIsVisible = 0; 668 | defaultConfigurationName = Release; 669 | }; 670 | 3CE12C0B1FB62FEE00945352 /* Build configuration list for PBXNativeTarget "HardcoreTap" */ = { 671 | isa = XCConfigurationList; 672 | buildConfigurations = ( 673 | 3CE12C0C1FB62FEE00945352 /* Debug */, 674 | 3CE12C0D1FB62FEE00945352 /* Release */, 675 | ); 676 | defaultConfigurationIsVisible = 0; 677 | defaultConfigurationName = Release; 678 | }; 679 | /* End XCConfigurationList section */ 680 | 681 | /* Begin XCRemoteSwiftPackageReference section */ 682 | FDFF966228B3F05200A68F95 /* XCRemoteSwiftPackageReference "SwiftEntryKit" */ = { 683 | isa = XCRemoteSwiftPackageReference; 684 | repositoryURL = "https://github.com/huri000/SwiftEntryKit"; 685 | requirement = { 686 | kind = upToNextMajorVersion; 687 | minimumVersion = 2.0.0; 688 | }; 689 | }; 690 | /* End XCRemoteSwiftPackageReference section */ 691 | 692 | /* Begin XCSwiftPackageProductDependency section */ 693 | FDFF966328B3F05200A68F95 /* SwiftEntryKit */ = { 694 | isa = XCSwiftPackageProductDependency; 695 | package = FDFF966228B3F05200A68F95 /* XCRemoteSwiftPackageReference "SwiftEntryKit" */; 696 | productName = SwiftEntryKit; 697 | }; 698 | /* End XCSwiftPackageProductDependency section */ 699 | }; 700 | rootObject = 3CE12BF11FB62FED00945352 /* Project object */; 701 | } 702 | -------------------------------------------------------------------------------- /Source/HardcoreTap.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Source/HardcoreTap.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swiftentrykit", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/huri000/SwiftEntryKit", 7 | "state" : { 8 | "revision" : "5ad36cccf0c4b9fea32f4e9b17a8e38f07563ef0", 9 | "version" : "2.0.0" 10 | } 11 | } 12 | ], 13 | "version" : 2 14 | } 15 | -------------------------------------------------------------------------------- /Source/HardcoreTap.xcodeproj/xcshareddata/xcschemes/HardcoreTap for Watch.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 46 | 47 | 57 | 61 | 67 | 68 | 69 | 70 | 76 | 80 | 86 | 87 | 88 | 89 | 95 | 96 | 97 | 98 | 100 | 101 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /Source/HardcoreTap.xcodeproj/xcshareddata/xcschemes/HardcoreTap.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /Source/HardcoreTap/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // TimeKillerApp 4 | // 5 | // Created by Bogdan Bystritskiy on 10/11/2017. 6 | // Copyright © 2017 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 15 | return true 16 | } 17 | 18 | // MARK: UISceneSession Lifecycle 19 | 20 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 21 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Base/BaseTabView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TabView.swift 3 | // HardcoreTap 4 | // 5 | // Created by Быстрицкий Богдан on 11.10.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct BaseTabView: View { 12 | 13 | @State private var selection = 1 14 | 15 | var body: some View { 16 | TabView (selection: $selection) { 17 | GameView() 18 | .tabItem { 19 | Image(systemName: "1.square.fill") 20 | Text("Game") 21 | } 22 | .tag(1) 23 | LeaderboardView() 24 | .tabItem { 25 | Image(systemName: "2.square.fill") 26 | Text("Leaderboard") 27 | }.tag(2) 28 | RulesView() 29 | .tabItem { 30 | Image(systemName: "4.square.fill") 31 | Text("Rules") 32 | }.tag(3) 33 | AboutGameView() 34 | .tabItem { 35 | Image(systemName: "4.square.fill") 36 | Text("About game") 37 | }.tag(4) 38 | } 39 | .font(.headline) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Common/Styles/Colors.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Colors.swift 3 | // HardcoreTap 4 | // 5 | // Created by Богдан Быстрицкий on 30/04/2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIColor { 12 | 13 | static let htAlert = UIColor.blue 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Common/UIElements/ButtonLinkView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftUIView.swift 3 | // HardcoreTap 4 | // 5 | // Created by Быстрицкий Богдан on 13.12.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct ButtonLinkView: View { 12 | var body: some View { 13 | Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) 14 | } 15 | } 16 | 17 | struct SwiftUIView_Previews: PreviewProvider { 18 | static var previews: some View { 19 | ButtonLinkView() 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Common/UIElements/Message.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Message.swift 3 | // HardcoreTap 4 | // 5 | // Created by Богдан Быстрицкий on 30/04/2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftEntryKit 10 | import UIKit 11 | 12 | enum MessageType { 13 | case simple 14 | case success 15 | case error 16 | 17 | var color: UIColor { 18 | switch self { 19 | case .simple: 20 | return UIColor.gray.withAlphaComponent(0.95) 21 | case .success: 22 | return UIColor.htAlert.withAlphaComponent(0.95) 23 | case .error: 24 | return UIColor.red.withAlphaComponent(0.95) 25 | } 26 | } 27 | 28 | var hapticType: EKAttributes.NotificationHapticFeedback { 29 | switch self { 30 | case .simple: 31 | return .none 32 | case .success: 33 | return .success 34 | case .error: 35 | return .error 36 | } 37 | } 38 | 39 | } 40 | 41 | struct Message { 42 | 43 | static let shared = Message() 44 | 45 | func showMessage(with text: String, type: MessageType) { 46 | let titleFont = UIFont.boldSystemFont(ofSize: 15) 47 | var attributes = EKAttributes.topToast 48 | attributes.entryBackground = .color(color: EKColor(type.color)) 49 | attributes.popBehavior = .animated(animation: .init(translate: .init(duration: 0.3), scale: .init(from: 1, to: 0.7, duration: 0.7))) 50 | attributes.scroll = .enabled(swipeable: true, pullbackAnimation: .jolt) 51 | attributes.hapticFeedbackType = type.hapticType 52 | var title = EKProperty.LabelContent(text: text, style: .init(font: titleFont, color: .white)) 53 | title.style.alignment = .center 54 | let contentView = EKNoteMessageView(with: title) 55 | SwiftEntryKit.display(entry: contentView, using: attributes) 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Stories/AboutGame/AboutGameView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AboutGameView.swift 3 | // HardcoreTap 4 | // 5 | // Created by Быстрицкий Богдан on 17.10.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | // TODO: 12 | struct AboutGameView: View { 13 | 14 | var body: some View { 15 | NavigationView { 16 | List { 17 | Section(header: Text("Об игре")) { 18 | Text("Лови ритм! Не убивай время просто так. Убивай время с пользой. HardcoreTap — отличная тренировка внимательности, терпеливости, чувства ритма и упорства. Поднимись на вершину рейтинга таперов. Жми на экран с интервалом в одну секунду. Важна точность до сотых. С повышением уровня игра будет к тебе всё строже. Думаешь, это так просто? Попробуй.") 19 | } 20 | Section(header: Text("Расскажите о нас")) { 21 | ExampleRowView() 22 | ExampleRowView() 23 | } 24 | Section(header: Text("Мы на Github")) { 25 | ExampleRowView() 26 | ExampleRowView() 27 | ExampleRowView() 28 | } 29 | }.listStyle(GroupedListStyle()) 30 | }.navigationBarTitle("About game") 31 | } 32 | 33 | } 34 | 35 | struct AboutGameView_Previews: PreviewProvider { 36 | static var previews: some View { 37 | Group { 38 | AboutGameView() 39 | } 40 | } 41 | } 42 | 43 | struct ExampleRowView: View { 44 | var body: some View { 45 | Text("todo") 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Stories/Game/GameView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GameView.swift 3 | // HardcoreTap 4 | // 5 | // Created by Быстрицкий Богдан on 07.11.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | // TODO: 12 | struct GameView: View { 13 | 14 | var body: some View { 15 | NavigationView { 16 | VStack { 17 | Image("star.fill") 18 | Button(action: { 19 | }) { Text("play") } 20 | .foregroundColor(.red) 21 | .padding() 22 | } 23 | }.navigationBarTitle("Game") 24 | } 25 | 26 | } 27 | 28 | struct GameView_Previews: PreviewProvider { 29 | static var previews: some View { 30 | GameView() 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Stories/Leaderboard/LeaderboardView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LeaderboardView.swift 3 | // HardcoreTap 4 | // 5 | // Created by Быстрицкий Богдан on 16.10.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct LeaderboardView: View { 12 | 13 | var body: some View { 14 | NavigationView { 15 | VStack { 16 | List(0..<10) { item in 17 | HStack { 18 | Image("star.fill") 19 | .padding() 20 | Text("nickname \(item)") 21 | } 22 | } 23 | } 24 | }.navigationBarTitle("Leaderboard") 25 | } 26 | 27 | } 28 | 29 | struct LeaderboardView_Previews: PreviewProvider { 30 | static var previews: some View { 31 | Group { 32 | LeaderboardView() 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Stories/Login/LoginView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoginView.swift 3 | // HardcoreTap 4 | // 5 | // Created by Быстрицкий Богдан on 09.10.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | // TODO: 12 | struct LoginView: View { 13 | @State var nickname: String = "" 14 | @State var didTapStartButton = false 15 | 16 | var body: some View { 17 | NavigationView { 18 | VStack { 19 | Image("icon") 20 | .padding() 21 | Text("welcome") 22 | .font(.title) 23 | .padding() 24 | TextField("create.nickname", text: $nickname) 25 | .padding() 26 | Button(action: { 27 | self.didTapStartButton = true 28 | }) { Text("start.game") } 29 | .foregroundColor(.red) 30 | .padding() 31 | } 32 | .sheet(isPresented: $didTapStartButton) { 33 | BaseTabView() 34 | } 35 | }.navigationBarTitle("HardcoreTap") 36 | } 37 | 38 | } 39 | 40 | struct LoginView_Previews: PreviewProvider { 41 | static var previews: some View { 42 | LoginView() 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Stories/Rules/RuleView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RuleView.swift 3 | // HardcoreTap 4 | // 5 | // Created by Быстрицкий Богдан on 22.10.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | enum RuleType { 12 | case rule1 13 | case rule2 14 | case rule3 15 | 16 | var text: String { 17 | switch self { 18 | case .rule1: return "Тапай по экрану с интервалом ровно в одну секунду. Идеальная точность — 00 миллисекунд." 19 | case .rule2: return "С ростом уровня, тебе нужно быть всё точнее. Допустимая погрешность уменьшается и приближается к нулю. " 20 | case .rule3: return "Цель игры — стать лучшим ловцом ритма и возглавить TOP 10 игроков!" 21 | } 22 | } 23 | 24 | var image: String { 25 | switch self { 26 | case .rule1: return "rule1" 27 | case .rule2: return "rule2" 28 | case .rule3: return "rule3" 29 | } 30 | } 31 | } 32 | 33 | struct RuleView: View { 34 | 35 | @State var type: RuleType 36 | 37 | var body: some View { 38 | HStack { 39 | Image(type.image).padding() 40 | Text(type.text) 41 | } 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Stories/Rules/RulesView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RulesView.swift 3 | // HardcoreTap 4 | // 5 | // Created by Быстрицкий Богдан on 16.10.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | // TODO: 12 | struct RulesView: View { 13 | 14 | var body: some View { 15 | NavigationView { 16 | VStack { 17 | RuleView(type: .rule1) 18 | RuleView(type: .rule2) 19 | RuleView(type: .rule3) 20 | }.padding() 21 | }.navigationBarTitle("Rules") 22 | } 23 | 24 | } 25 | 26 | struct RulesView_Previews: PreviewProvider { 27 | static var previews: some View { 28 | Group { 29 | RulesView() 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Classes/PresentationLayer/Stories/Settings/SettingsView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingsView.swift 3 | // HardcoreTap 4 | // 5 | // Created by Быстрицкий Богдан on 13.12.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | // TODO: 12 | struct SettingsView: View { 13 | var body: some View { 14 | Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) 15 | } 16 | } 17 | 18 | struct SettingsView_Previews: PreviewProvider { 19 | static var previews: some View { 20 | SettingsView() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/AboutGameViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AboutGameVC.swift 3 | // HardcoreTap 4 | // 5 | // Created by Богдан Быстрицкий on 24/11/2017. 6 | // Copyright © 2017 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AboutGameViewController: UIViewController { 12 | 13 | @IBOutlet weak var tableView: UITableView! 14 | @IBOutlet weak var aboutGameLabel: UILabel! 15 | 16 | let appID = "1334647124" 17 | 18 | var sectionTitles = ["Поддержите разработчиков", "Расскажите о нас", "Мы на GitHub"] 19 | var sectionContent = [ 20 | ["Отключить рекламу в приложении"], 21 | ["Оцените приложение на App Store", "Репозиторий на GitHub"], 22 | ["Dunaev Sergey", "Bystritskiy Bogdan", "Anpleenko Pavel"] 23 | ] 24 | 25 | override func viewDidLoad() { 26 | super.viewDidLoad() 27 | 28 | tableView.tableFooterView = UIView(frame: CGRect.zero) 29 | aboutGameLabel.text = "Лови ритм! Не убивай время просто так. Убивай время с пользой. HardcoreTap — отличная тренировка внимательности, терпеливости, чувства ритма и упорства. Поднимись на вершину рейтинга таперов. Жми на экран с интервалом в одну секунду. Важна точность до сотых. С повышением уровня игра будет к тебе всё строже. Думаешь, это так просто? Попробуй." 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | OpenSans 13 | 14 | 15 | OpenSans-Semibold 16 | 17 | 18 | SFUIDisplay-Regular 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 44 | 50 | 65 | 66 | 67 | 68 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 113 | 123 | 136 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 195 | 196 | 197 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 308 | 309 | 310 | 311 | 312 | 325 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 435 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 620 | 630 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/BaseTabBarController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TabBarVC.swift 3 | // TimeKillerApp 4 | // 5 | // Created by Bogdan Bystritskiy on 11/11/2017. 6 | // Copyright © 2017 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BaseTabBarController: UITabBarController { 12 | 13 | @IBOutlet weak var myTabBar: UITabBar! 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | 18 | myTabBar.backgroundColor = UIColor.clear 19 | myTabBar.backgroundImage = UIImage() 20 | myTabBar.shadowImage = UIImage() 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/GameViewController.swift: -------------------------------------------------------------------------------- 1 | //// 2 | //// ViewController.swift 3 | //// 4 | //// Created by Bogdan Bystritskiy on 10/11/17. 5 | //// Copyright © 2017 Bogdan Bystritskiy. All rights reserved. 6 | //// 7 | // 8 | //import UIKit 9 | //import Firebase 10 | //import AudioToolbox 11 | //import AVFoundation 12 | //import GoogleMobileAds 13 | //import GameKit 14 | //import StoreKit 15 | // 16 | //class GameViewController: UIViewController, GADBannerViewDelegate, GKGameCenterControllerDelegate, SKPaymentTransactionObserver, SKProductsRequestDelegate { 17 | // 18 | // var bombSoundEffect: AVAudioPlayer? // Плеер звуков 19 | // 20 | // var count: Int = 0 // Счетчик очков 21 | // 22 | // var seconds: Int = 0 // Счетчик секунд 23 | // var seconds100: Int = 0 // Счетчик десятых секунды 24 | // var fault = 0.10 { // Погрешность 25 | // didSet { 26 | // faultLabel.text = "Погрешность: \(fault)" 27 | // } 28 | // } 29 | // 30 | // var isHarcoreMode: Bool = false 31 | // 32 | // var timer = Timer() 33 | // var flPlaying: Bool = false // Флаг запуска игры 34 | // var bgSound: Bool = true // Флаг проигрывание музыки 35 | // var timeStop = Date() 36 | // 37 | // let layerColors = [UIColor(red: 1.0, green: 0.5, blue: 0.5, alpha: 0.6), 38 | // UIColor(red: 0.5, green: 0.1, blue: 0.5, alpha: 0.6), 39 | // UIColor(red: 0.5, green: 0.5, blue: 0.1, alpha: 0.6), 40 | // UIColor(red: 1.0, green: 1.0, blue: 0.5, alpha: 0.6), 41 | // UIColor(red: 1.0, green: 0.5, blue: 1.0, alpha: 0.6), 42 | // UIColor(red: 0.19, green: 0.91, blue: 0.74, alpha: 1.00), 43 | // UIColor(red: 0.66, green: 0.40, blue: 0.93, alpha: 1.00), 44 | // UIColor(red: 0.40, green: 0.93, blue: 0.47, alpha: 1.00), 45 | // UIColor(red: 0.93, green: 0.56, blue: 0.40, alpha: 1.00), 46 | // UIColor(red: 0.93, green: 0.40, blue: 0.67, alpha: 1.00), 47 | // UIColor(red: 0.68, green: 0.92, blue: 0.00, alpha: 1.00), 48 | // UIColor(red: 0.81, green: 0.85, blue: 0.40, alpha: 1.00), 49 | // UIColor(red: 0.00, green: 0.90, blue: 0.46, alpha: 1.00), 50 | // UIColor(red: 0.98, green: 0.75, blue: 0.18, alpha: 1.00)] 51 | // 52 | // let leftLayer = CAGradientLayer() 53 | // let rightLayer = CAGradientLayer() 54 | // 55 | // var rootRef = Database.database().reference() 56 | // var scoreRef: DatabaseReference! 57 | // let userDefaults = UserDefaults.standard 58 | // 59 | // @IBOutlet weak var switchModeGame: UISwitch! 60 | // 61 | // @IBOutlet weak var timerLabel: UILabel! 62 | // @IBOutlet weak var scoreLabel: UILabel! 63 | // @IBOutlet weak var highScoreLabel: UILabel! 64 | // @IBOutlet weak var faultLabel: UILabel! 65 | // 66 | // @IBOutlet weak var tapToRestartButton: UIButton! 67 | // @IBOutlet weak var startGameButton: UIButton! 68 | // @IBOutlet weak var shareButton: UIButton! 69 | // @IBOutlet weak var helloButtonWithPlayerName: UIButton! 70 | // @IBOutlet weak var hardcoreLabel: UIButton! 71 | // 72 | // var nameFromUserDefaults = " " 73 | // var highscoreFromUserDefaults: Int = 0 74 | // 75 | // @IBOutlet weak var bannerView: GADBannerView! 76 | // @IBOutlet weak var heightBannerView: NSLayoutConstraint! 77 | // 78 | // var productToPurshase = SKProduct() 79 | // 80 | // func buyDisableAd() { 81 | // print("Покупка = \(productToPurshase)") 82 | // let pay = SKPayment(product: productToPurshase) 83 | // SKPaymentQueue.default().add(self) 84 | // SKPaymentQueue.default().add(pay) 85 | // } 86 | // 87 | // override func viewDidLoad() { 88 | // super.viewDidLoad() 89 | // 90 | // if SKPaymentQueue.canMakePayments() { 91 | // print("Покупки доступны") 92 | // let productID: Set = ["1"] 93 | // let request = SKProductsRequest(productIdentifiers: productID) 94 | // request.delegate = self 95 | // request.start() 96 | // } else { 97 | // print("Покупки недоступны") 98 | // } 99 | // 100 | // authPlayerInGameCenter() 101 | // 102 | // bannerView.adUnitID = PrivateInfo.admobBannerID 103 | // bannerView.rootViewController = self 104 | // bannerView.load(GADRequest()) 105 | // bannerView.delegate = self 106 | // 107 | // // проверка проигрывания фоновой музыки 108 | // if userDefaults.bool(forKey: "bgSound") { 109 | // bgSound = true 110 | // userDefaults.set(bgSound, forKey: "bgSound") 111 | // } else { 112 | // bgSound = false 113 | // userDefaults.set(bgSound, forKey: "bgSound") 114 | // } 115 | // 116 | // //имя пользователя в левом вехнем углу 117 | // if let username = UserDefaults.standard.value(forKey: "userNAME") as? String { 118 | // self.nameFromUserDefaults = username 119 | // } else { 120 | // self.nameFromUserDefaults = " " 121 | // } 122 | // scoreRef = rootRef.child("leaderboards_normal").child(nameFromUserDefaults) 123 | // 124 | // //подгрузка рекорда из UserDefaults 125 | // if UserDefaults.standard.value(forKey: "highscore_normal") != nil { 126 | // self.highscoreFromUserDefaults = UserDefaults.standard.value(forKey: "highscore_normal") as! Int 127 | // highScoreLabel.text = "Ваш рекорд: \(self.highscoreFromUserDefaults)" 128 | // } else { 129 | // highScoreLabel.text = "Ваш рекорд: 0" 130 | // } 131 | // 132 | // // Регистрация рекогнайзера жестов 133 | // let tapGR = UITapGestureRecognizer(target: self, action: #selector(didTap)) 134 | // view.addGestureRecognizer(tapGR) 135 | // 136 | // // Тень у кнопки 137 | // startGameButton.addShadow() 138 | // 139 | // self.navigationItem.title = "HardcoreTap" 140 | // self.helloButtonWithPlayerName.setTitle("Привет, \(self.nameFromUserDefaults)", for: .normal) 141 | // self.helloButtonWithPlayerName.isEnabled = false 142 | // 143 | // setupGALayers() 144 | // 145 | // view.layer.insertSublayer(rightLayer, at: 0) 146 | // view.layer.insertSublayer(leftLayer, at: 0) 147 | // } 148 | // 149 | // override func viewWillAppear(_ animated: Bool) { 150 | // //скрываем все лишнее, и ждем нажатия кнопки "Начать игру" 151 | // scoreLabel.isHidden = true 152 | // shareButton.isHidden = true 153 | // tapToRestartButton.isHidden = true 154 | // highScoreLabel.isHidden = true 155 | // 156 | // startGameButton.isHidden = false 157 | // switchModeGame.isHidden = false 158 | // hardcoreLabel.isHidden = false 159 | // } 160 | // 161 | // var gcEnable = Bool() 162 | // var gcDefaultLeaderboard = String() 163 | // 164 | // func authPlayerInGameCenter() { 165 | // let localePlayer: GKLocalPlayer = GKLocalPlayer.local 166 | // localePlayer.authenticateHandler = {viewController, error -> Void in 167 | // if viewController != nil { 168 | // self.present(viewController!, animated: true, completion: nil) 169 | // } else if localePlayer.isAuthenticated { 170 | // print("Local player already auth") 171 | // self.gcEnable = true 172 | // 173 | // // Get the default leaderboard ID 174 | // localePlayer.loadDefaultLeaderboardIdentifier(completionHandler: { leaderboardString, error in 175 | // if error == nil { 176 | // self.gcDefaultLeaderboard = leaderboardString! 177 | // } 178 | // }) 179 | // } else { 180 | // print("Local player not auth. Disable Game center") 181 | // self.gcEnable = false 182 | // } 183 | // } 184 | // } 185 | // 186 | // func submitScoreOnGameCenter() { 187 | // let leaderboardID = "gamecenter-leaderboards" 188 | // let sScore = GKScore(leaderboardIdentifier: leaderboardID) 189 | // sScore.value = Int64(count) 190 | // GKScore.report([sScore]) { error in 191 | // if error != nil { 192 | // print(error!.localizedDescription) 193 | // } else { 194 | // print("Score submitted") 195 | // } 196 | // } 197 | // } 198 | // 199 | // func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) { 200 | // gameCenterViewController.dismiss(animated: true, completion: nil) 201 | // } 202 | // 203 | // func setupGALayers() { 204 | // 205 | // rightLayer.colors = [layerColors[4].cgColor, UIColor(red: 61 / 255, green: 52 / 255, blue: 110 / 255, alpha: 0.0).cgColor] 206 | // rightLayer.startPoint = CGPoint(x: 0, y: 0) 207 | // rightLayer.endPoint = CGPoint(x: 0, y: 1) 208 | // rightLayer.frame = view.bounds 209 | // rightLayer.position.x = view.bounds.width + view.bounds.midX 210 | // 211 | // leftLayer.colors = [layerColors[0].cgColor, UIColor(red: 61 / 255, green: 52 / 255, blue: 110 / 255, alpha: 0.0).cgColor] 212 | // leftLayer.startPoint = CGPoint(x: 0, y: 0) 213 | // leftLayer.endPoint = CGPoint(x: 0, y: 1) 214 | // leftLayer.frame = view.bounds 215 | // leftLayer.position.x = view.bounds.midX 216 | // 217 | // } 218 | // 219 | // func changeLayers() { 220 | // rightLayer.colors![0] = leftLayer.colors![0] 221 | // 222 | // let index = (seconds + 1) % 5 223 | // leftLayer.colors![0] = layerColors[index].cgColor 224 | // 225 | // let animationRight = CABasicAnimation(keyPath: "position.x") 226 | // animationRight.fromValue = view.bounds.midX 227 | // animationRight.toValue = view.bounds.width + view.bounds.midX 228 | // animationRight.duration = 0.99 229 | // 230 | // let animationLeft = CABasicAnimation(keyPath: "position.x") 231 | // animationLeft.fromValue = -view.bounds.midX 232 | // animationLeft.toValue = view.bounds.midX 233 | // animationLeft.duration = 0.99 234 | // 235 | // rightLayer.add(animationRight, forKey: nil) 236 | // leftLayer.add(animationLeft, forKey: nil) 237 | // } 238 | // 239 | // @IBAction func switchModeDidTapped(_ sender: Any) { 240 | // if switchModeGame.isOn == false { 241 | // self.faultLabel.text = "Погрешность: от 0.05 мс" 242 | // isHarcoreMode = false 243 | // scoreRef = rootRef.child("leaderboards_normal").child(nameFromUserDefaults) 244 | // } else { 245 | // self.faultLabel.text = "Погрешность отключена" 246 | // isHarcoreMode = true 247 | // scoreRef = rootRef.child("leaderboards_hardcore").child(nameFromUserDefaults) 248 | // } 249 | // } 250 | // 251 | // @objc func didTap(tapGR: UITapGestureRecognizer) { 252 | // if flPlaying { 253 | // // Проверка точности попадания 254 | // if fabs(Double(seconds - count - 1) + Double(seconds100) / 100) <= fault + 0.0001 { 255 | // // Плюс очко 256 | // count += 1 257 | // scoreLabel.text = "\(count)" 258 | // } else { 259 | // self.gameOver() 260 | // } 261 | // } else { 262 | // // Задержка после проигрыша 263 | // // Если 0.4 секунды прошло, можно запускать 264 | // if timeStop.timeIntervalSinceNow <= -0.5 && startGameButton.isHidden { 265 | // self.setupGame() 266 | // } 267 | // } 268 | // } 269 | // 270 | // @IBAction func startGameButtonDidTapped(_ sender: Any) { 271 | // setupGame() 272 | // } 273 | // 274 | // func setupGame() { 275 | // let path = Bundle.main.path(forResource: "bmp60.mp3", ofType: nil)! 276 | // let url = URL(fileURLWithPath: path) 277 | // 278 | // do { 279 | // bombSoundEffect = try AVAudioPlayer(contentsOf: url) 280 | // if userDefaults.bool(forKey: "bgSound") { 281 | // bombSoundEffect?.play() 282 | // } else { 283 | // bombSoundEffect?.stop() 284 | // } 285 | // } catch { 286 | // // couldn't load file :( 287 | // } 288 | // 289 | // highScoreLabel.isHidden = false 290 | // scoreLabel.isHidden = false 291 | // highScoreLabel.isHidden = false 292 | // 293 | // shareButton.isHidden = true 294 | // startGameButton.isHidden = true 295 | // hardcoreLabel.isHidden = true 296 | // switchModeGame.isHidden = true 297 | // 298 | // count = 0 299 | // seconds = 0 300 | // seconds100 = 0 301 | // fault = switchModeGame.isOn ? 0.0 : 0.10 302 | // 303 | // flPlaying = true 304 | // 305 | // setupGALayers() 306 | // updateTimerLabel() 307 | // 308 | // scoreLabel.text = "\(count)" 309 | // 310 | // timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: timerBlock(timer:)) 311 | // 312 | // changeLayers() 313 | // } 314 | // 315 | // func timerBlock(timer: Timer) { 316 | // seconds100 += 1 317 | // if seconds100 == 100 { 318 | // seconds += 1 319 | // seconds100 = 0 320 | // 321 | // if fault > 0.0501 { 322 | // fault -= 0.01 323 | // } else { 324 | // fault = 0.05 325 | // } 326 | // 327 | // changeLayers() 328 | // } 329 | // 330 | // updateTimerLabel() 331 | // 332 | // if Double(seconds - count - 1) + (Double(seconds100) / 100) > fault { 333 | // // Пропущено нажатие 334 | // gameOver() 335 | // } 336 | // } 337 | // 338 | // //нажали кнопку выйти 339 | // @IBAction func logOutButtonDidTapped(_ sender: Any) { 340 | // let alert: UIAlertController = UIAlertController() 341 | // let exitAction = UIAlertAction(title: "Выйти", style: .destructive, handler: { _ in self.exitClicked() }) 342 | // let cancelAction = UIAlertAction(title: "Отмена", style: .cancel, handler: nil) 343 | // 344 | // alert.addAction(exitAction) 345 | // alert.addAction(cancelAction) 346 | // 347 | // self.present(alert, animated: true, completion: nil) 348 | // 349 | // //фон кнопки выход на алерте 350 | // let subView = alert.view.subviews.first! 351 | // let alertContentView = subView.subviews.first! 352 | // alertContentView.backgroundColor = UIColor.white 353 | // alertContentView.layer.cornerRadius = 15 354 | // } 355 | // 356 | // //нажали выход на алерте 357 | // func exitClicked() { 358 | // //удаление данных из UserDefaults 359 | // let defaults = UserDefaults.standard 360 | // defaults.removePersistentDomain(forName: Bundle.main.bundleIdentifier!) 361 | // defaults.synchronize() 362 | // 363 | // //переход на страницу авторизации 364 | // let loginvc = self.storyboard?.instantiateViewController(withIdentifier: "LoginVC") as! LoginViewController 365 | // self.present(loginvc, animated: true, completion: nil) 366 | // } 367 | // 368 | // //конец игры 369 | // func gameOver() { 370 | // bombSoundEffect?.stop() 371 | // 372 | // timer.invalidate() 373 | // timeStop = Date() 374 | // flPlaying = false 375 | // 376 | // leftLayer.position.x = leftLayer.presentation()!.position.x 377 | // leftLayer.removeAllAnimations() 378 | // 379 | // rightLayer.position.x = rightLayer.presentation()!.position.x 380 | // rightLayer.removeAllAnimations() 381 | // 382 | // tapToRestartButton.isHidden = false 383 | // shareButton.isHidden = false 384 | // 385 | // //добавления нового рекорда 386 | // if count > highscoreFromUserDefaults { 387 | // 388 | // submitScoreOnGameCenter() 389 | // 390 | // highscoreFromUserDefaults = count 391 | // highScoreLabel.text = "Ваш рекорд: \(highscoreFromUserDefaults)" 392 | // UserDefaults.standard.set(highscoreFromUserDefaults, forKey: "highscore_normal") 393 | // 394 | // Message.shared.showMessage( 395 | // with: "🎉 Поздравляем!\nВы побили рекорд. Ваш новый результат \(count) очков", 396 | // type: .success 397 | // ) 398 | // } 399 | // 400 | // let scoreItem = [ 401 | // "username": nameFromUserDefaults, 402 | // "highscore": highscoreFromUserDefaults 403 | // ] as [String: Any] 404 | // 405 | // //отправка данных в Firebase 406 | // self.scoreRef.setValue(scoreItem) 407 | // } 408 | // 409 | // func updateTimerLabel() { 410 | // timerLabel.text = String(format: "00:%02d:%02d", seconds, seconds100) 411 | // } 412 | // 413 | // @IBAction func tapToRestartDidTapped(_ sender: Any) { 414 | // tapToRestartButton.isHidden = true 415 | // self.setupGame() 416 | // } 417 | // 418 | // //Кнопка поделиться 419 | // @IBAction func shareButtonDidTapped(_ sender: Any) { 420 | // let activityVC = UIActivityViewController(activityItems: ["Хэй, мой рекорд в HardcoreTap: \(self.highscoreFromUserDefaults). Попробуй набрать больше;) appstore.com/hardcoretap"], applicationActivities: nil) 421 | // activityVC.popoverPresentationController?.sourceView = self.view 422 | // self.present(activityVC, animated: true, completion: nil) 423 | // } 424 | // 425 | // /// Tells the delegate an ad request loaded an ad. 426 | // func adViewDidReceiveAd(_ bannerView: GADBannerView) { 427 | // print("adViewDidReceiveAd") 428 | // } 429 | // 430 | // /// Tells the delegate an ad request failed. 431 | // func adView(_ bannerView: GADBannerView, 432 | // didFailToReceiveAdWithError error: GADRequestError) { 433 | // print("adView:didFailToReceiveAdWithError: \(error.localizedDescription)") 434 | // } 435 | // 436 | // /// Tells the delegate that a full-screen view will be presented in response 437 | // /// to the user clicking on an ad. 438 | // func adViewWillPresentScreen(_ bannerView: GADBannerView) { 439 | // print("adViewWillPresentScreen") 440 | // } 441 | // 442 | // /// Tells the delegate that the full-screen view will be dismissed. 443 | // func adViewWillDismissScreen(_ bannerView: GADBannerView) { 444 | // print("adViewWillDismissScreen") 445 | // } 446 | // 447 | // /// Tells the delegate that the full-screen view has been dismissed. 448 | // func adViewDidDismissScreen(_ bannerView: GADBannerView) { 449 | // print("adViewDidDismissScreen") 450 | // } 451 | // 452 | // /// Tells the delegate that a user click will open another app (such as 453 | // /// the App Store), backgrounding the current app. 454 | // func adViewWillLeaveApplication(_ bannerView: GADBannerView) { 455 | // print("adViewWillLeaveApplication") 456 | // } 457 | // 458 | // func sucessDisableAd() { 459 | // 460 | // } 461 | // 462 | // func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { 463 | // print("productsRequest") 464 | // let myProduct = response.products 465 | // for product in myProduct { 466 | // print("Товар добавлен") 467 | // print("Товар id = \(product.productIdentifier)") 468 | // print(product.localizedTitle) 469 | // print(product.localizedDescription) 470 | // } 471 | // } 472 | // 473 | // func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { 474 | // 475 | // } 476 | // 477 | //} 478 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/LeadearBoardViewController.swift: -------------------------------------------------------------------------------- 1 | //// 2 | //// LeadearBoardVC.swift 3 | //// TimeKillerApp 4 | //// 5 | //// Created by Bogdan Bystritskiy on 11/11/2017. 6 | //// Copyright © 2017 Bogdan Bystritskiy. All rights reserved. 7 | //// 8 | // 9 | //import UIKit 10 | ////import Firebase 11 | ////import FirebaseDatabase 12 | //import NVActivityIndicatorView 13 | //import GameKit 14 | // 15 | //class LeadearBoardViewController: UIViewController, GKGameCenterControllerDelegate { 16 | // 17 | // @IBOutlet weak var tableView: UITableView! 18 | // @IBOutlet weak var segmentedControlLeaderBoard: UISegmentedControl! 19 | // @IBOutlet weak var loadIndicator: NVActivityIndicatorView! 20 | // 21 | // var rootRef = Database.database().reference() 22 | // 23 | // var content = [Content]() 24 | // 25 | // var contentLeaderboardsNormal = [Content]() 26 | // var contentLeaderboardsHardcore = [Content]() 27 | // 28 | // var nameUser: String? 29 | // 30 | // func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) { 31 | // gameCenterViewController.dismiss(animated: true, completion: nil) 32 | // } 33 | // 34 | // override func viewDidLoad() { 35 | // super.viewDidLoad() 36 | // 37 | // if let nameUser = UserDefaults.standard.value(forKey: "userNAME") as? String { 38 | // self.nameUser = nameUser 39 | // } 40 | // // nameUser = (UserDefaults.standard.value(forKey: "userNAME") as! String) 41 | // 42 | // loadIndicator.type = .lineScale 43 | // loadIndicator.color = UIColor(named: "yellowishGreen")! 44 | // loadIndicator.startAnimating() 45 | // 46 | // //получение рекордов из обычного режима 47 | // getNormalRecords() 48 | // //получение рекордов из харкдор режима 49 | // getHardcoreRecords() 50 | // 51 | // tableView.delegate = self 52 | // tableView.dataSource = self 53 | // 54 | // // //показывам при загрузке экрана ту таблицу, какой режим игры был выбран 55 | // // if isHarcoreMode { 56 | // // segmentedControlLeaderBoard.selectedSegmentIndex = 1 57 | // // } else { 58 | // // segmentedControlLeaderBoard.selectedSegmentIndex = 0 59 | // // } 60 | // } 61 | // 62 | // @IBAction func gameCenterDidTapped(_ sender: Any) { 63 | // showLeaderboard() 64 | // } 65 | // 66 | // func showLeaderboard() { 67 | // let gcVC: GKGameCenterViewController = GKGameCenterViewController() 68 | // gcVC.gameCenterDelegate = self 69 | // gcVC.viewState = GKGameCenterViewControllerState.leaderboards 70 | // gcVC.leaderboardIdentifier = "gamecenter-leaderboards" 71 | // self.present(gcVC, animated: true, completion: nil) 72 | // } 73 | // 74 | // @IBAction func switchSegmentedDidTapped(_ sender: Any) { 75 | // switch segmentedControlLeaderBoard.selectedSegmentIndex { 76 | // case 0: 77 | // self.content = self.contentLeaderboardsNormal 78 | // self.tableView.reloadData() 79 | // case 1: 80 | // self.content = self.contentLeaderboardsHardcore 81 | // self.tableView.reloadData() 82 | // default: break 83 | // } 84 | // } 85 | // 86 | // func getNormalRecords() { 87 | // rootRef.child("leaderboards_normal").queryOrdered(byChild: "highscore").observe(.value, with: {snapshot in 88 | // 89 | // self.contentLeaderboardsNormal = [] 90 | // 91 | // for snap in snapshot.children.allObjects as! [DataSnapshot] { 92 | // let name = snap.key 93 | // 94 | // if let rankedBy = snap.value as? [String: Any] { 95 | // self.contentLeaderboardsNormal.append(Content(sName: "\(name)", sPoints: rankedBy["highscore"] as! Int)) 96 | // } 97 | // } 98 | // self.loadIndicator.stopAnimating() 99 | // self.contentLeaderboardsNormal.reverse() 100 | // self.content = self.contentLeaderboardsNormal 101 | // self.tableView.reloadData() 102 | // }) 103 | // } 104 | // 105 | // func getHardcoreRecords() { 106 | // rootRef.child("leaderboards_hardcore").queryOrdered(byChild: "highscore").observe(.value, with: {snapshot in 107 | // 108 | // self.contentLeaderboardsHardcore = [] 109 | // 110 | // for snap in snapshot.children.allObjects as! [DataSnapshot] { 111 | // let name = snap.key 112 | // 113 | // if let rankedBy = snap.value as? [String: Any] { 114 | // self.contentLeaderboardsHardcore.append(Content(sName: "\(name)", sPoints: rankedBy["highscore"] as! Int)) 115 | // } 116 | // } 117 | // self.contentLeaderboardsHardcore.reverse() 118 | // }) 119 | // } 120 | // 121 | //} 122 | // 123 | //extension LeadearBoardViewController: UITableViewDelegate, UITableViewDataSource { 124 | // 125 | // func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 126 | // return self.content.count - 1 127 | // } 128 | // 129 | // func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 130 | // 131 | // let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! LeadearBoardCell 132 | // 133 | // //обнуляем сначала (защита от бага с переопределением) 134 | // cell.placeCellLabel.text = nil 135 | // cell.nameCellLabel.text = nil 136 | // cell.pointsCellLabel.text = nil 137 | // 138 | // cell.nameCellLabel.text = self.content[indexPath.row].sName 139 | // cell.pointsCellLabel.text = "\(self.content[indexPath.row].sPoints!)" 140 | // 141 | // if self.content[indexPath.row].sName! == nameUser { 142 | // cell.backgroundColor = nil 143 | // cell.backgroundColor = UIColor(red: 232 / 255, green: 45 / 255, blue: 111 / 255, alpha: 100) 144 | // } else { 145 | // cell.backgroundColor = nil 146 | // } 147 | // 148 | // //для первых трек добавляем иконку короны 149 | // if indexPath.row < 3 { 150 | // cell.placeCellLabel.text = nil 151 | // cell.placeCellLabel.text = "" 152 | // cell.placeCellLabel.backgroundColor = UIColor(patternImage: UIImage(named: "iconLeader")!) 153 | // } else { 154 | // cell.placeCellLabel.backgroundColor = nil 155 | // cell.placeCellLabel.text = nil 156 | // cell.placeCellLabel.text = "\(indexPath.row + 1)" 157 | // } 158 | // return cell 159 | // } 160 | // 161 | //} 162 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/LoginViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoginViewController.swift 3 | // 4 | 5 | import UIKit 6 | 7 | class LoginViewController: UIViewController, UITextFieldDelegate, UIGestureRecognizerDelegate { 8 | 9 | var userID: String = "" 10 | var username: String = "" 11 | 12 | @IBOutlet weak var textBox: UITextField! 13 | @IBOutlet weak var startPlayButton: UIButton! 14 | 15 | override func viewWillAppear(_ animated: Bool) { 16 | super.viewWillAppear(animated) 17 | setupAddTargetIsNotEmptyTextFields() 18 | } 19 | 20 | override func viewDidLoad() { 21 | super.viewDidLoad() 22 | } 23 | 24 | @IBAction func loginDidTouch(_ sender: Any) { 25 | //Если не заполнили поля 26 | if textBox.text!.isEmpty { 27 | //Меняем цвет плейсхолдеров 28 | textBox.attributedPlaceholder = NSAttributedString(string: "Придумайте никнейм", attributes: [NSAttributedString.Key.foregroundColor: UIColor(red: 232 / 255, green: 45 / 255, blue: 111 / 255, alpha: 100)]) 29 | } else { 30 | //скрываем клавиатуру 31 | self.view.endEditing(false) 32 | self.username = self.textBox.text! 33 | UserDefaults.standard.set(self.username, forKey: "userNAME") 34 | UserDefaults.standard.synchronize() 35 | self.performSegue(withIdentifier: "LoginToPlay", sender: nil) 36 | } 37 | } 38 | 39 | //Установка целей на проверку заполнения полей 40 | func setupAddTargetIsNotEmptyTextFields() { 41 | //Cтили неактивной кнопки 42 | self.startPlayButton.layer.backgroundColor = UIColor.gray.cgColor 43 | textBox.addTarget(self, action: #selector(textFieldsIsNotEmpty), for: .editingChanged) 44 | } 45 | 46 | //Проверка заполнения полей 47 | @objc func textFieldsIsNotEmpty(sender: UITextField) { 48 | sender.text = sender.text?.trimmingCharacters(in: .whitespaces) 49 | guard let text = textBox.text, !text.isEmpty else { 50 | startPlayButton.layer.backgroundColor = UIColor.gray.cgColor 51 | startPlayButton.clearShadow(nameButton: startPlayButton) 52 | return 53 | } 54 | startPlayButton.layer.backgroundColor = UIColor(red: 232 / 255, green: 45 / 255, blue: 111 / 255, alpha: 100).cgColor 55 | startPlayButton.addShadow() 56 | return 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/RulesViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RulesVC.swift 3 | // TimeKillerApp 4 | // 5 | // Created by Bogdan Bystritskiy on 11/11/2017. 6 | // Copyright © 2017 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class RulesViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | } 16 | 17 | @IBAction func showSettingScreenAction(_ sender: Any) { 18 | performSegue(withIdentifier: "showSettingScreen", sender: self) 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/SettingsCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingsCell.swift 3 | // HardcoreTap 4 | // 5 | // Created by Павел Анплеенко on 14/01/2018. 6 | // Copyright © 2018 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SettingsCell: UITableViewCell { 12 | 13 | @IBOutlet weak var titleLabel: UILabel! 14 | @IBOutlet weak var switchController: UISwitch! 15 | 16 | override func awakeFromNib() { 17 | super.awakeFromNib() 18 | } 19 | 20 | override func setSelected(_ selected: Bool, animated: Bool) { 21 | super.setSelected(selected, animated: animated) 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/SettingsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingsVC.swift 3 | // HardcoreTap 4 | // 5 | // Created by Богдан Быстрицкий on 24/11/2017. 6 | // Copyright © 2017 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import StoreKit 11 | 12 | class SettingsViewController: UIViewController { 13 | 14 | @IBOutlet weak var heighOfDisableAdStackView: NSLayoutConstraint! 15 | @IBOutlet weak var disableAdButton: UIButton! 16 | @IBOutlet weak var tableView: UITableView! 17 | var titleSetting = ["Фоновый звук"] 18 | var bgSound = true 19 | 20 | let userDefaults = UserDefaults.standard 21 | 22 | override func viewDidLoad() { 23 | super.viewDidLoad() 24 | disableAdButton.addShadow() 25 | tableView.tableFooterView = UIView(frame: CGRect.zero) 26 | } 27 | 28 | @IBAction func disableAdButtonDidTapped(_ sender: Any) { 29 | 30 | } 31 | } 32 | 33 | extension SettingsViewController: UITableViewDataSource, UITableViewDelegate { 34 | 35 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 36 | return titleSetting.count 37 | } 38 | 39 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 40 | let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! SettingsCell 41 | cell.titleLabel.text = titleSetting[indexPath.row] 42 | let switchView = UISwitch(frame: .zero) 43 | switchView.setOn(userDefaults.bool(forKey: "bgSound"), animated: true) 44 | switchView.onTintColor = UIColor(red: 223 / 255, green: 15 / 255, blue: 92 / 255, alpha: 1) 45 | switchView.tag = indexPath.row 46 | switchView.addTarget(self, action: #selector(switchChanged(_:)), for: .valueChanged) 47 | cell.accessoryView = switchView 48 | return cell 49 | } 50 | 51 | @objc func switchChanged(_ sender: UISwitch!) { 52 | if sender.isOn { 53 | bgSound = true 54 | userDefaults.set(bgSound, forKey: "bgSound") 55 | } else { 56 | bgSound = false 57 | userDefaults.set(bgSound, forKey: "bgSound") 58 | } 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/UIButtonExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ButtonSupport.swift 3 | // TimeKillerApp 4 | // 5 | // Created by Павел Анплеенко on 12/11/2017. 6 | // Copyright © 2017 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIButton { 12 | 13 | func addShadow() { 14 | layer.shadowColor = UIColor(red: 232 / 255, green: 45 / 255, blue: 111 / 255, alpha: 0.5).cgColor 15 | layer.shadowOffset = CGSize(width: 2, height: 8) 16 | layer.shadowOpacity = 1.0 17 | layer.shadowRadius = 10.0 18 | layer.masksToBounds = false 19 | } 20 | 21 | func clearShadow(nameButton: UIButton) { 22 | layer.shadowColor = UIColor.clear.cgColor 23 | layer.shadowOffset = CGSize(width: 0, height: 0) 24 | layer.shadowOpacity = 0 25 | layer.shadowRadius = 0 26 | layer.masksToBounds = false 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /Source/HardcoreTap/DEPRECATED/ru.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UITabBarItem"; title = "Игра"; ObjectID = "0rO-s3-SAa"; */ 3 | "0rO-s3-SAa.title" = "Игра"; 4 | 5 | /* Class = "UILabel"; text = "99"; ObjectID = "6nO-Ep-rkR"; */ 6 | "6nO-Ep-rkR.text" = "99"; 7 | 8 | /* Class = "UILabel"; text = "101"; ObjectID = "8WE-Nr-zW6"; */ 9 | "8WE-Nr-zW6.text" = "101"; 10 | 11 | /* Class = "UILabel"; text = "Тапай по экрану с интервалом ровно в одну секунду. Идеальная точность — 00 миллисекунд."; ObjectID = "8dP-S2-pXO"; */ 12 | "8dP-S2-pXO.text" = "Тапай по экрану с интервалом ровно в одну секунду. Идеальная точность — 00 миллисекунд."; 13 | 14 | /* Class = "UITabBarItem"; title = "Правила"; ObjectID = "AsA-DB-DKx"; */ 15 | "AsA-DB-DKx.title" = "Правила"; 16 | 17 | /* Class = "UIButton"; normalTitle = "Режим хардкора"; ObjectID = "CpA-Fj-PDe"; */ 18 | "CpA-Fj-PDe.normalTitle" = "Режим хардкора"; 19 | 20 | /* Class = "UIButton"; normalTitle = "Настройки"; ObjectID = "DdI-VV-Ed1"; */ 21 | "DdI-VV-Ed1.normalTitle" = "Настройки"; 22 | 23 | /* Class = "UIButton"; normalTitle = " Выйти"; ObjectID = "EpQ-u1-P5I"; */ 24 | "EpQ-u1-P5I.normalTitle" = " Выйти"; 25 | 26 | /* Class = "UITabBarItem"; title = "Рекорды"; ObjectID = "H8h-Ls-s24"; */ 27 | "H8h-Ls-s24.title" = "Рекорды"; 28 | 29 | /* Class = "UILabel"; text = "Тем самым вы поддерживаете разработчиков и будущее этой игры."; ObjectID = "HcE-zC-8Mb"; */ 30 | "HcE-zC-8Mb.text" = "Тем самым вы поддерживаете разработчиков и будущее этой игры."; 31 | 32 | /* Class = "UILabel"; text = "About game"; ObjectID = "Jgd-6A-c27"; */ 33 | "Jgd-6A-c27.text" = "About game"; 34 | 35 | /* Class = "UILabel"; text = "С ростом уровня, тебе нужно быть всё точнее. Допустимая погрешность уменьшается и приближается к нулю. "; ObjectID = "Mer-Lc-Srv"; */ 36 | "Mer-Lc-Srv.text" = "С ростом уровня, тебе нужно быть всё точнее. Допустимая погрешность уменьшается и приближается к нулю. "; 37 | 38 | /* Class = "UIBarButtonItem"; title = "GameCenter"; ObjectID = "OOU-hD-KnT"; */ 39 | "OOU-hD-KnT.title" = "GameCenter"; 40 | 41 | /* Class = "UILabel"; text = "Title"; ObjectID = "SfQ-82-44J"; */ 42 | "SfQ-82-44J.text" = "Title"; 43 | 44 | /* Class = "UIButton"; normalTitle = "Настройки"; ObjectID = "UEm-ov-udw"; */ 45 | "UEm-ov-udw.normalTitle" = "Настройки"; 46 | 47 | /* Class = "UILabel"; text = "Имя"; ObjectID = "UdR-5C-oFn"; */ 48 | "UdR-5C-oFn.text" = "Имя"; 49 | 50 | /* Class = "UISegmentedControl"; WFX-ln-b8a.segmentTitles[0] = "Обычный"; ObjectID = "WFX-ln-b8a"; */ 51 | "WFX-ln-b8a.segmentTitles[0]" = "Обычный"; 52 | 53 | /* Class = "UISegmentedControl"; WFX-ln-b8a.segmentTitles[1] = "Хардкор"; ObjectID = "WFX-ln-b8a"; */ 54 | "WFX-ln-b8a.segmentTitles[1]" = "Хардкор"; 55 | 56 | /* Class = "UINavigationItem"; title = "Таблица лидеров"; ObjectID = "WfK-Xn-GZ7"; */ 57 | "WfK-Xn-GZ7.title" = "Таблица лидеров"; 58 | 59 | /* Class = "UIButton"; normalTitle = "Начать игру"; ObjectID = "XG3-Od-H5f"; */ 60 | "XG3-Od-H5f.normalTitle" = "Начать игру"; 61 | 62 | /* Class = "UINavigationItem"; title = "Настройки"; ObjectID = "XLE-0V-4kJ"; */ 63 | "XLE-0V-4kJ.title" = "Настройки"; 64 | 65 | /* Class = "UIButton"; normalTitle = "Привет!"; ObjectID = "Xkd-9d-Me8"; */ 66 | "Xkd-9d-Me8.normalTitle" = "Привет!"; 67 | 68 | /* Class = "UIBarButtonItem"; title = "Выйти"; ObjectID = "aai-I2-OCS"; */ 69 | "aai-I2-OCS.title" = "Выйти"; 70 | 71 | /* Class = "UILabel"; text = "Цель игры — стать лучшим ловцом ритма и возглавить TOP 10 игроков!"; ObjectID = "bff-sU-cWH"; */ 72 | "bff-sU-cWH.text" = "Цель игры — стать лучшим ловцом ритма и возглавить TOP 10 игроков!"; 73 | 74 | /* Class = "UILabel"; text = "100"; ObjectID = "dhr-Rb-TiP"; */ 75 | "dhr-Rb-TiP.text" = "100"; 76 | 77 | /* Class = "UINavigationItem"; title = "Правила игры"; ObjectID = "eVo-gA-CMV"; */ 78 | "eVo-gA-CMV.title" = "Правила игры"; 79 | 80 | /* Class = "UIViewController"; title = "Об игре"; ObjectID = "grm-T7-0u7"; */ 81 | "grm-T7-0u7.title" = "Об игре"; 82 | 83 | /* Class = "UIButton"; normalTitle = "Об игре / Разработчиках"; ObjectID = "hFQ-ym-wgf"; */ 84 | "hFQ-ym-wgf.normalTitle" = "Об игре / Разработчиках"; 85 | 86 | /* Class = "UILabel"; text = "00:00:00"; ObjectID = "hsI-to-WQC"; */ 87 | "hsI-to-WQC.text" = "00:00:00"; 88 | 89 | /* Class = "UILabel"; text = "Ваш рекорд"; ObjectID = "m6W-2S-upj"; */ 90 | "m6W-2S-upj.text" = "Ваш рекорд"; 91 | 92 | /* Class = "UIButton"; normalTitle = "Нажмите, чтобы попытаться снова"; ObjectID = "mtA-4Z-dfW"; */ 93 | "mtA-4Z-dfW.normalTitle" = "Нажмите, чтобы попытаться снова"; 94 | 95 | /* Class = "UILabel"; text = "Title"; ObjectID = "vhZ-yn-GUD"; */ 96 | "vhZ-yn-GUD.text" = "Title"; 97 | 98 | /* Class = "UINavigationItem"; title = "HardcoreTap"; ObjectID = "w3h-z6-VRz"; */ 99 | "w3h-z6-VRz.title" = "HardcoreTap"; 100 | 101 | /* Class = "UIButton"; normalTitle = "Отключение рекламы"; ObjectID = "zr9-nP-sWi"; */ 102 | "zr9-nP-sWi.normalTitle" = "Отключение рекламы"; 103 | -------------------------------------------------------------------------------- /Source/HardcoreTap/HardcoreTap.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Launch/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Launch/ru.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "HardcoreTap"; ObjectID = "ooY-xA-V1b"; */ 3 | "ooY-xA-V1b.text" = "HardcoreTap"; 4 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "size" : "29x29", 15 | "idiom" : "iphone", 16 | "filename" : "Icon-Small@2x-1.png", 17 | "scale" : "2x" 18 | }, 19 | { 20 | "size" : "29x29", 21 | "idiom" : "iphone", 22 | "filename" : "Icon-Small@3x.png", 23 | "scale" : "3x" 24 | }, 25 | { 26 | "size" : "40x40", 27 | "idiom" : "iphone", 28 | "filename" : "Icon-Spotlight-40@2x.png", 29 | "scale" : "2x" 30 | }, 31 | { 32 | "size" : "40x40", 33 | "idiom" : "iphone", 34 | "filename" : "Icon-Spotlight-40@3x.png", 35 | "scale" : "3x" 36 | }, 37 | { 38 | "size" : "60x60", 39 | "idiom" : "iphone", 40 | "filename" : "Icon-60@2x.png", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "size" : "60x60", 45 | "idiom" : "iphone", 46 | "filename" : "Icon-60@3x.png", 47 | "scale" : "3x" 48 | }, 49 | { 50 | "idiom" : "ipad", 51 | "size" : "20x20", 52 | "scale" : "1x" 53 | }, 54 | { 55 | "idiom" : "ipad", 56 | "size" : "20x20", 57 | "scale" : "2x" 58 | }, 59 | { 60 | "size" : "29x29", 61 | "idiom" : "ipad", 62 | "filename" : "Icon-Small.png", 63 | "scale" : "1x" 64 | }, 65 | { 66 | "size" : "29x29", 67 | "idiom" : "ipad", 68 | "filename" : "Icon-Small@2x.png", 69 | "scale" : "2x" 70 | }, 71 | { 72 | "size" : "40x40", 73 | "idiom" : "ipad", 74 | "filename" : "Icon-Spotlight-40.png", 75 | "scale" : "1x" 76 | }, 77 | { 78 | "size" : "40x40", 79 | "idiom" : "ipad", 80 | "filename" : "Icon-Spotlight-40@2x-1.png", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "size" : "76x76", 85 | "idiom" : "ipad", 86 | "filename" : "Icon-76.png", 87 | "scale" : "1x" 88 | }, 89 | { 90 | "size" : "76x76", 91 | "idiom" : "ipad", 92 | "filename" : "Icon-76@2x.png", 93 | "scale" : "2x" 94 | }, 95 | { 96 | "idiom" : "ipad", 97 | "size" : "83.5x83.5", 98 | "scale" : "2x" 99 | }, 100 | { 101 | "idiom" : "ios-marketing", 102 | "size" : "1024x1024", 103 | "scale" : "1x" 104 | } 105 | ], 106 | "info" : { 107 | "version" : 1, 108 | "author" : "xcode" 109 | } 110 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/Colors/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/Colors/blueBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.161", 13 | "alpha" : "1.000", 14 | "blue" : "0.784", 15 | "green" : "0.314" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/Colors/blueberry.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.239", 13 | "alpha" : "1.000", 14 | "blue" : "0.431", 15 | "green" : "0.204" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/Colors/darkSkyBlue.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.275", 13 | "alpha" : "1.000", 14 | "blue" : "0.890", 15 | "green" : "0.608" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/Colors/lipstick.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.910", 13 | "alpha" : "1.000", 14 | "blue" : "0.435", 15 | "green" : "0.176" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/Colors/robinSEgg.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.337", 13 | "alpha" : "1.000", 14 | "blue" : "0.961", 15 | "green" : "0.859" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/Colors/yellowishGreen.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.592", 13 | "alpha" : "1.000", 14 | "blue" : "0.137", 15 | "green" : "0.902" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "zeplin", 4 | "version" : 1 5 | }, 6 | "images" : [ 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon@3x.png", 10 | "scale" : "3x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "icon@2x.png", 15 | "scale" : "2x" 16 | }, 17 | { 18 | "idiom" : "universal", 19 | "filename" : "icon.png", 20 | "scale" : "1x" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/icon.imageset/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/icon.imageset/icon.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/icon.imageset/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/icon.imageset/icon@2x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/icon.imageset/icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/icon.imageset/icon@3x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/iconRules.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "iconRules.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "iconRules@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "iconRules@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/iconRules.imageset/iconRules.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/iconRules.imageset/iconRules.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/iconRules.imageset/iconRules@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/iconRules.imageset/iconRules@2x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/iconRules.imageset/iconRules@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/iconRules.imageset/iconRules@3x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "rules_1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "rules_1@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "rules_1@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule1.imageset/rules_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/rule1.imageset/rules_1.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule1.imageset/rules_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/rule1.imageset/rules_1@2x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule1.imageset/rules_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/rule1.imageset/rules_1@3x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "rules_2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "rules_2@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "rules_2@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule2.imageset/rules_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/rule2.imageset/rules_2.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule2.imageset/rules_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/rule2.imageset/rules_2@2x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule2.imageset/rules_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/rule2.imageset/rules_2@3x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "rules_3.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "rules_3@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "rules_3@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule3.imageset/rules_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/rule3.imageset/rules_3.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule3.imageset/rules_3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/rule3.imageset/rules_3@2x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Assets.xcassets/rule3.imageset/rules_3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Assets.xcassets/rule3.imageset/rules_3@3x.png -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Audio/bmp60.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HardcoreTap/iOS-App/ee366a085be7c68c32766b560bc5f53c94e25011/Source/HardcoreTap/Resources/Audio/bmp60.mp3 -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Translations/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | HardcoreTap 4 | 5 | Created by Быстрицкий Богдан on 07.11.2019. 6 | Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | */ 8 | 9 | "cancel" = "Cancel"; 10 | "exit" = "Exit"; 11 | "enter" = "Enter"; 12 | 13 | // Login 14 | "welcome" = "Welcome!"; 15 | "create.nickname" = "Create your nickname:"; 16 | "start.game" = "Start game"; 17 | 18 | // Game 19 | "play" = "Play game"; 20 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Resources/Translations/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | HardcoreTap 4 | 5 | Created by Быстрицкий Богдан on 07.11.2019. 6 | Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | */ 8 | 9 | // TODO: сделать русский вариант, после завершения работ на англ. языке 10 | 11 | "cancel" = "Отменить"; 12 | "exit" = "Выйти"; 13 | "enter" = "Войти"; 14 | 15 | // Login 16 | "welcome" = "Добро пожаловать!"; 17 | "create.nickname" = "Создайте себе никнейм:"; 18 | "start.game" = "Начать игру"; 19 | 20 | // Game 21 | 22 | -------------------------------------------------------------------------------- /Source/HardcoreTap/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // HardcoreTap 4 | // 5 | // Created by Bogdan Bystritskiy on 11.10.2019. 6 | // Copyright © 2019 Bogdan Bystritskiy. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import SwiftUI 11 | 12 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 17 | if let windowScene = scene as? UIWindowScene { 18 | let window = UIWindow(windowScene: windowScene) 19 | let hostingController = UIHostingController(rootView: NavigationView { LoginView() }) 20 | window.rootViewController = hostingController 21 | self.window = window 22 | window.makeKeyAndVisible() 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Supporting files/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AD_UNIT_ID_FOR_BANNER_TEST 6 | ca-app-pub-3940256099942544/2934735716 7 | AD_UNIT_ID_FOR_INTERSTITIAL_TEST 8 | ca-app-pub-3940256099942544/4411468910 9 | CLIENT_ID 10 | 174737447204-cper139h7vus6rpoqvdal2fn8res3qd9.apps.googleusercontent.com 11 | REVERSED_CLIENT_ID 12 | com.googleusercontent.apps.174737447204-cper139h7vus6rpoqvdal2fn8res3qd9 13 | API_KEY 14 | AIzaSyDJR4T0aroC1-lQZYLoeYHw_fgKDfHN9is 15 | GCM_SENDER_ID 16 | 174737447204 17 | PLIST_VERSION 18 | 1 19 | BUNDLE_ID 20 | com.bystritskiy.HardcoreTap 21 | PROJECT_ID 22 | timekillerapp-124dd 23 | STORAGE_BUCKET 24 | timekillerapp-124dd.appspot.com 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 | 1:174737447204:ios:6429ad7a012f8033 37 | DATABASE_URL 38 | https://timekillerapp-124dd.firebaseio.com 39 | 40 | -------------------------------------------------------------------------------- /Source/HardcoreTap/Supporting files/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | HardcoreTap 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | GADApplicationIdentifier 24 | ca-app-pub-3940256099942544~1458002511 25 | LSRequiresIPhoneOS 26 | 27 | UIAppFonts 28 | 29 | BNBOLD.ttf 30 | BNBOOK.ttf 31 | BNLIGHT.ttf 32 | BNREGULAR.ttf 33 | BNTHUN.ttf 34 | 35 | UIApplicationSceneManifest 36 | 37 | UIApplicationSupportsMultipleScenes 38 | 39 | UISceneConfigurations 40 | 41 | UIWindowSceneSessionRoleApplication 42 | 43 | 44 | UILaunchStoryboardName 45 | LaunchScreen 46 | UISceneConfigurationName 47 | Default Configuration 48 | UISceneDelegateClassName 49 | $(PRODUCT_MODULE_NAME).SceneDelegate 50 | 51 | 52 | 53 | 54 | UILaunchStoryboardName 55 | LaunchScreen 56 | UIMainStoryboardFile 57 | Main 58 | UIRequiredDeviceCapabilities 59 | 60 | armv7 61 | gamekit 62 | 63 | UIStatusBarStyle 64 | UIStatusBarStyleDefault 65 | UISupportedInterfaceOrientations 66 | 67 | UIInterfaceOrientationPortrait 68 | 69 | UISupportedInterfaceOrientations~ipad 70 | 71 | UIInterfaceOrientationPortrait 72 | UIInterfaceOrientationPortraitUpsideDown 73 | UIInterfaceOrientationLandscapeLeft 74 | UIInterfaceOrientationLandscapeRight 75 | 76 | UIViewControllerBasedStatusBarAppearance 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /Source/fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier "com.bystritskiy.HardcoreTap" 2 | apple_id "q80061@gmail.com" 3 | team_id "F7AZ625QQ5" -------------------------------------------------------------------------------- /Source/fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | default_platform :ios 2 | 3 | platform :ios do 4 | before_all do 5 | cocoapods 6 | end 7 | 8 | lane :test do 9 | scan 10 | end 11 | 12 | lane :beta do 13 | gym(scheme: "HardcoreTap") 14 | end 15 | 16 | lane :release do 17 | gym(scheme: "HardcoreTap") 18 | upload_to_app_store 19 | end 20 | 21 | end -------------------------------------------------------------------------------- /Source/fastlane/Matchfile: -------------------------------------------------------------------------------- 1 | git_url "https://github.com/bystritskiy/certificates-hardcoretap" 2 | app_identifier ["com.bystritskiy.HardcoreTap"] 3 | username "q80061@gmail.com" -------------------------------------------------------------------------------- /Source/fastlane/Snapfile: -------------------------------------------------------------------------------- 1 | # A list of devices you want to take the screenshots from 2 | devices([ 3 | "iPhone 5s", 4 | "iPhone 6", 5 | "iPhone 6 Plus", 6 | "iPhone X", 7 | ]) 8 | 9 | # A list of supported languages 10 | languages([ 11 | 'ru' 12 | ]) 13 | 14 | # Where should the resulting screenshots be stored? 15 | output_directory "./fastlane/screenshots" 16 | 17 | # Clears previous screenshots 18 | clear_previous_screenshots true 19 | 20 | # Latest version of iOS 21 | ios_version '15.0' --------------------------------------------------------------------------------