├── nerdeame-ios ├── Assets.xcassets │ ├── Contents.json │ ├── Primary.colorset │ │ └── Contents.json │ ├── Secondary.colorset │ │ └── Contents.json │ └── AppIcon.appiconset │ │ └── Contents.json ├── SupportingFiles │ ├── Localizable.strings │ └── Info.plist ├── Util │ └── Extension │ │ ├── UIViewExtension.swift │ │ ├── UIColorExtension.swift │ │ ├── UITableViewCellExtension.swift │ │ ├── UILabelExtension.swift │ │ ├── UIViewControllerExtension.swift │ │ ├── StringExtension.swift │ │ └── UITableViewExtension.swift ├── SceneDelegate.swift ├── AppDelegate.swift └── UseCases │ ├── Categories │ ├── Cell │ │ ├── CategoryTableViewCell.swift │ │ └── CategoryTableViewCell.xib │ ├── CategoriesViewController.xib │ └── CategoriesViewController.swift │ ├── Detail │ ├── DetailViewController.swift │ └── DetailViewController.xib │ └── Launch │ └── Base.lproj │ └── LaunchScreen.storyboard ├── nerdeame-ios.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcuserdata │ │ └── braismoure.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── xcuserdata │ └── braismoure.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── project.pbxproj ├── README.md └── .gitignore /nerdeame-ios/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /nerdeame-ios/SupportingFiles/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | nerdeame-ios 4 | 5 | Created by Brais Moure on 23/09/2020. 6 | 7 | */ 8 | 9 | // Generic 10 | "app.title" = "Nerdéame"; 11 | -------------------------------------------------------------------------------- /nerdeame-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /nerdeame-ios.xcodeproj/project.xcworkspace/xcuserdata/braismoure.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mouredev/nerdeame-ios/HEAD/nerdeame-ios.xcodeproj/project.xcworkspace/xcuserdata/braismoure.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nerdéame 2 | Este es una proyecto creado en directo desde Twitch, por parte de la comunidad de MoureDev. 3 | 4 | **Puedes seguir los directos desde [aquí](https://twitch.tv/mouredev).** 5 | 6 | Este fichero se irá actualizando con todo el contenido del proyecto. -------------------------------------------------------------------------------- /nerdeame-ios.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /nerdeame-ios/Util/Extension/UIViewExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewExtension.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 08/10/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIView { 11 | 12 | func round() { 13 | layer.cornerRadius = layer.bounds.height / 2 14 | clipsToBounds = true 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /nerdeame-ios/Util/Extension/UIColorExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColorExtension.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 10/09/2020. 6 | // Copyright © 2020 MoureDev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIColor { 12 | 13 | static let primary = UIColor(named: "Primary") 14 | static let secondary = UIColor(named: "Secondary") 15 | 16 | } 17 | -------------------------------------------------------------------------------- /nerdeame-ios/Util/Extension/UITableViewCellExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITableViewCellExtension.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 10/09/2020. 6 | // Copyright © 2020 MoureDev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UITableViewCell { 12 | 13 | // Configuración por defecto de una celda 14 | func configure() { 15 | 16 | selectionStyle = .none 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /nerdeame-ios/Assets.xcassets/Primary.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.000", 9 | "green" : "0.000", 10 | "red" : "0.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /nerdeame-ios/Assets.xcassets/Secondary.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "1.000", 9 | "green" : "1.000", 10 | "red" : "1.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /nerdeame-ios.xcodeproj/xcuserdata/braismoure.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | nerdeame-ios.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /nerdeame-ios/Util/Extension/UILabelExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UILabelExtension.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 10/09/2020. 6 | // Copyright © 2020 MoureDev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UILabel { 12 | 13 | func primary() { 14 | textColor = .secondary 15 | } 16 | 17 | func secondary() { 18 | textColor = .primary 19 | } 20 | 21 | func center() { 22 | textAlignment = .center 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /nerdeame-ios/Util/Extension/UIViewControllerExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewControllerExtension.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 10/09/2020. 6 | // Copyright © 2020 MoureDev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIViewController { 12 | 13 | // Transforma en ViewController en un NavigationViewController 14 | func embeddedInNavigation() -> UINavigationController { 15 | return UINavigationController(rootViewController: self) 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /nerdeame-ios/Util/Extension/StringExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StringExtension.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 23/09/2020. 6 | // 7 | 8 | import Foundation 9 | 10 | extension String { 11 | 12 | func localize() -> String { 13 | return NSLocalizedString(self, comment: "") 14 | } 15 | 16 | func lowercasedLocalize() -> String { 17 | return localize().lowercased() 18 | } 19 | 20 | func uppercasedLocalize() -> String { 21 | return localize().uppercased() 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /nerdeame-ios/Util/Extension/UITableViewExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITableViewExtension.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 10/09/2020. 6 | // Copyright © 2020 MoureDev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UITableView { 12 | 13 | // Configuración por defecto de una tabla 14 | func configure(owner: UIViewController) { 15 | 16 | tableFooterView = UIView() 17 | separatorStyle = .none 18 | dataSource = owner as? UITableViewDataSource 19 | self.delegate = owner as? UITableViewDelegate 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /nerdeame-ios/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 23/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 11 | 12 | var window: UIWindow? 13 | 14 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 15 | 16 | guard let windowScene = (scene as? UIWindowScene) else { return } 17 | 18 | let window = UIWindow(windowScene: windowScene) 19 | window.rootViewController = CategoriesViewController(mode: .category).embeddedInNavigation() 20 | window.makeKeyAndVisible() 21 | self.window = window 22 | } 23 | 24 | } 25 | 26 | -------------------------------------------------------------------------------- /nerdeame-ios/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 23/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | @main 11 | class AppDelegate: UIResponder, UIApplicationDelegate { 12 | 13 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 14 | 15 | return true 16 | } 17 | 18 | // MARK: UISceneSession Lifecycle 19 | 20 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 21 | 22 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 23 | } 24 | 25 | } 26 | 27 | -------------------------------------------------------------------------------- /nerdeame-ios/UseCases/Categories/Cell/CategoryTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CategoryTableViewCell.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 10/09/2020. 6 | // Copyright © 2020 MoureDev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | final class CategoryTableViewCell: UITableViewCell { 12 | 13 | // MARK: - Outlets 14 | 15 | @IBOutlet weak var containerView: UIView! 16 | @IBOutlet weak var categoryLabel: UILabel! 17 | 18 | // MARK: - Properties 19 | 20 | static let kCellId = "CategoryTableViewCell" 21 | 22 | // MARK: - Life cycle 23 | 24 | override func awakeFromNib() { 25 | super.awakeFromNib() 26 | 27 | // Setup 28 | setup() 29 | } 30 | 31 | // MARK: - Public methods 32 | 33 | func fill(category: String) { 34 | 35 | categoryLabel.text = category 36 | } 37 | 38 | // MARK: - Private methods 39 | 40 | private func setup() { 41 | 42 | configure() 43 | setupUI() 44 | } 45 | 46 | private func setupUI() { 47 | 48 | // Container 49 | containerView.backgroundColor = .primary 50 | 51 | // Label 52 | categoryLabel.primary() 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /nerdeame-ios/UseCases/Detail/DetailViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailViewController.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 08/10/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | final class DetailViewController: UIViewController { 11 | 12 | // MARK: - Outlets 13 | 14 | @IBOutlet weak var avatarImageView: UIImageView! 15 | @IBOutlet weak var flagImageView: UIImageView! 16 | @IBOutlet weak var nameLabel: UILabel! 17 | 18 | // MARK: - Properties 19 | 20 | private let creator: String 21 | 22 | // MARK: - Initialization 23 | 24 | init(creator: String) { 25 | self.creator = creator 26 | super.init(nibName: nil, bundle: nil) 27 | } 28 | 29 | required init?(coder: NSCoder) { 30 | fatalError("init(coder:) has not been implemented") 31 | } 32 | 33 | // MARK: - Life cycle 34 | 35 | override func viewDidLoad() { 36 | super.viewDidLoad() 37 | 38 | // Setup 39 | setup() 40 | localize() 41 | } 42 | 43 | // MARK: - Private methods 44 | 45 | private func setup() { 46 | 47 | nameLabel.secondary() 48 | nameLabel.center() 49 | nameLabel.text = creator 50 | 51 | avatarImageView.round() 52 | flagImageView.round() 53 | 54 | avatarImageView.image = UIImage(systemName: "person.circle.fill") 55 | avatarImageView.backgroundColor = .primary 56 | 57 | flagImageView.image = UIImage(systemName: "flag.circle.fill") 58 | flagImageView.backgroundColor = .primary 59 | } 60 | 61 | private func localize() { 62 | 63 | title = "app.title".uppercasedLocalize() 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /nerdeame-ios/UseCases/Launch/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /nerdeame-ios/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /nerdeame-ios/SupportingFiles/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Nerdéame 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UIApplicationSceneManifest 26 | 27 | UIApplicationSupportsMultipleScenes 28 | 29 | UISceneConfigurations 30 | 31 | UIWindowSceneSessionRoleApplication 32 | 33 | 34 | UISceneConfigurationName 35 | Default Configuration 36 | UISceneDelegateClassName 37 | $(PRODUCT_MODULE_NAME).SceneDelegate 38 | 39 | 40 | 41 | 42 | UIApplicationSupportsIndirectInputEvents 43 | 44 | UILaunchStoryboardName 45 | LaunchScreen 46 | UIRequiredDeviceCapabilities 47 | 48 | armv7 49 | 50 | UISupportedInterfaceOrientations 51 | 52 | UIInterfaceOrientationPortrait 53 | 54 | UISupportedInterfaceOrientations~ipad 55 | 56 | UIInterfaceOrientationPortrait 57 | UIInterfaceOrientationPortraitUpsideDown 58 | UIInterfaceOrientationLandscapeLeft 59 | UIInterfaceOrientationLandscapeRight 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /nerdeame-ios/UseCases/Categories/CategoriesViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/xcode,swift,cocoapods,swiftpackagemanager,swiftpm 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=xcode,swift,cocoapods,swiftpackagemanager,swiftpm 4 | 5 | ### CocoaPods ### 6 | ## CocoaPods GitIgnore Template 7 | 8 | # CocoaPods - Only use to conserve bandwidth / Save time on Pushing 9 | # - Also handy if you have a large number of dependant pods 10 | # - AS PER https://guides.cocoapods.org/using/using-cocoapods.html NEVER IGNORE THE LOCK FILE 11 | Pods/ 12 | 13 | ### Swift ### 14 | # Xcode 15 | # 16 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 17 | 18 | ## User settings 19 | xcuserdata/ 20 | 21 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 22 | *.xcscmblueprint 23 | *.xccheckout 24 | 25 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 26 | build/ 27 | DerivedData/ 28 | *.moved-aside 29 | *.pbxuser 30 | !default.pbxuser 31 | *.mode1v3 32 | !default.mode1v3 33 | *.mode2v3 34 | !default.mode2v3 35 | *.perspectivev3 36 | !default.perspectivev3 37 | 38 | ## Obj-C/Swift specific 39 | *.hmap 40 | 41 | ## App packaging 42 | *.ipa 43 | *.dSYM.zip 44 | *.dSYM 45 | 46 | ## Playgrounds 47 | timeline.xctimeline 48 | playground.xcworkspace 49 | 50 | # Swift Package Manager 51 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 52 | # Packages/ 53 | # Package.pins 54 | # Package.resolved 55 | # *.xcodeproj 56 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata 57 | # hence it is not needed unless you have added a package configuration file to your project 58 | # .swiftpm 59 | 60 | .build/ 61 | 62 | # CocoaPods 63 | # We recommend against adding the Pods directory to your .gitignore. However 64 | # you should judge for yourself, the pros and cons are mentioned at: 65 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 66 | # Pods/ 67 | # Add this line if you want to avoid checking in source code from the Xcode workspace 68 | # *.xcworkspace 69 | 70 | # Carthage 71 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 72 | # Carthage/Checkouts 73 | 74 | Carthage/Build/ 75 | 76 | # Accio dependency management 77 | Dependencies/ 78 | .accio/ 79 | 80 | # fastlane 81 | # It is recommended to not store the screenshots in the git repo. 82 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 83 | # For more information about the recommended setup visit: 84 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 85 | 86 | fastlane/report.xml 87 | fastlane/Preview.html 88 | fastlane/screenshots/**/*.png 89 | fastlane/test_output 90 | 91 | # Code Injection 92 | # After new code Injection tools there's a generated folder /iOSInjectionProject 93 | # https://github.com/johnno1962/injectionforxcode 94 | 95 | iOSInjectionProject/ 96 | 97 | ### SwiftPackageManager ### 98 | Packages 99 | xcuserdata 100 | *.xcodeproj 101 | 102 | 103 | ### SwiftPM ### 104 | 105 | 106 | ### Xcode ### 107 | # Xcode 108 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 109 | 110 | 111 | 112 | 113 | ## Gcc Patch 114 | /*.gcno 115 | 116 | ### Xcode Patch ### 117 | *.xcodeproj/* 118 | !*.xcodeproj/project.pbxproj 119 | !*.xcodeproj/xcshareddata/ 120 | !*.xcworkspace/contents.xcworkspacedata 121 | **/xcshareddata/WorkspaceSettings.xcsettings 122 | 123 | # End of https://www.toptal.com/developers/gitignore/api/xcode,swift,cocoapods,swiftpackagemanager,swiftpm -------------------------------------------------------------------------------- /nerdeame-ios/UseCases/Categories/CategoriesViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CategoriesViewController.swift 3 | // nerdeame-ios 4 | // 5 | // Created by Brais Moure on 10/09/2020. 6 | // Copyright © 2020 MoureDev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | enum CategoriesMode { 12 | case category, subcategory, creator 13 | } 14 | 15 | final class CategoriesViewController: UIViewController { 16 | 17 | // MARK: - Outlets 18 | 19 | @IBOutlet weak var tableView: UITableView! 20 | 21 | // MARK: - Properties 22 | 23 | private let mode: CategoriesMode 24 | 25 | // MARK: - Initialization 26 | 27 | init(mode: CategoriesMode) { 28 | self.mode = mode 29 | super.init(nibName: nil, bundle: nil) 30 | } 31 | 32 | required init?(coder: NSCoder) { 33 | fatalError("init(coder:) has not been implemented") 34 | } 35 | 36 | // MARK: - Life cycle 37 | 38 | override func viewDidLoad() { 39 | super.viewDidLoad() 40 | 41 | // Setup 42 | setup() 43 | localize() 44 | } 45 | 46 | // MARK: - Private methods 47 | 48 | private func setup() { 49 | 50 | setupTable() 51 | } 52 | 53 | private func localize() { 54 | 55 | title = "app.title".uppercasedLocalize() 56 | } 57 | 58 | private func setupTable() { 59 | 60 | tableView.configure(owner: self) 61 | 62 | tableView.contentInset = UIEdgeInsets(top: 8, left: 0, bottom: 8, right: 0) 63 | 64 | switch mode { 65 | case .category: 66 | tableView.rowHeight = UIScreen.main.bounds.height / 5 67 | case .subcategory: 68 | tableView.rowHeight = UIScreen.main.bounds.height / 8 69 | case .creator: 70 | tableView.rowHeight = UIScreen.main.bounds.height / 3 71 | } 72 | 73 | tableView.register(UINib(nibName: CategoryTableViewCell.kCellId, bundle: nil), forCellReuseIdentifier: CategoryTableViewCell.kCellId) 74 | } 75 | 76 | } 77 | 78 | // MARK: - UITableViewDataSource, UITableViewDelegate 79 | extension CategoriesViewController: UITableViewDataSource, UITableViewDelegate { 80 | 81 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 82 | 83 | switch mode { 84 | case .category: 85 | return 10 86 | case .subcategory: 87 | return 20 88 | case .creator: 89 | return 5 90 | } 91 | } 92 | 93 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 94 | 95 | if let cell = tableView.dequeueReusableCell(withIdentifier: CategoryTableViewCell.kCellId, for: indexPath) as? CategoryTableViewCell { 96 | 97 | switch mode { 98 | case .category: 99 | cell.fill(category: "My category \(indexPath.row + 1)") 100 | case .subcategory: 101 | cell.fill(category: "My subcategory \(indexPath.row + 1)") 102 | case .creator: 103 | cell.fill(category: "Creator \(indexPath.row + 1)") 104 | } 105 | 106 | return cell 107 | } 108 | 109 | return UITableViewCell() 110 | } 111 | 112 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 113 | 114 | switch mode { 115 | case .category: 116 | navigationController?.pushViewController(CategoriesViewController(mode: .subcategory), animated: true) 117 | case .subcategory: 118 | navigationController?.pushViewController(CategoriesViewController(mode: .creator), animated: true) 119 | case .creator: 120 | navigationController?.pushViewController(DetailViewController(creator: "Creator \(indexPath.row + 1)"), animated: true) 121 | } 122 | 123 | } 124 | 125 | } 126 | -------------------------------------------------------------------------------- /nerdeame-ios/UseCases/Categories/Cell/CategoryTableViewCell.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /nerdeame-ios/UseCases/Detail/DetailViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /nerdeame-ios.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | AC47CB7F252F84B100057B3B /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC47CB7D252F84B100057B3B /* DetailViewController.swift */; }; 11 | AC47CB80252F84B100057B3B /* DetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AC47CB7E252F84B100057B3B /* DetailViewController.xib */; }; 12 | AC47CB85252F8D7A00057B3B /* UIViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC47CB84252F8D7A00057B3B /* UIViewExtension.swift */; }; 13 | AC93B1CD251BC3EA00EA207A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B1CC251BC3EA00EA207A /* AppDelegate.swift */; }; 14 | AC93B1CF251BC3EA00EA207A /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B1CE251BC3EA00EA207A /* SceneDelegate.swift */; }; 15 | AC93B1D6251BC3EB00EA207A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AC93B1D5251BC3EB00EA207A /* Assets.xcassets */; }; 16 | AC93B1D9251BC3EB00EA207A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AC93B1D7251BC3EB00EA207A /* LaunchScreen.storyboard */; }; 17 | AC93B1EF251BC44000EA207A /* CategoriesViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AC93B1E7251BC44000EA207A /* CategoriesViewController.xib */; }; 18 | AC93B1F0251BC44000EA207A /* CategoriesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B1E8251BC44000EA207A /* CategoriesViewController.swift */; }; 19 | AC93B1F1251BC44000EA207A /* CategoryTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B1EA251BC44000EA207A /* CategoryTableViewCell.swift */; }; 20 | AC93B1F2251BC44000EA207A /* CategoryTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = AC93B1EB251BC44000EA207A /* CategoryTableViewCell.xib */; }; 21 | AC93B1FC251BC45700EA207A /* UITableViewCellExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B1F7251BC45700EA207A /* UITableViewCellExtension.swift */; }; 22 | AC93B1FD251BC45700EA207A /* UIColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B1F8251BC45700EA207A /* UIColorExtension.swift */; }; 23 | AC93B1FE251BC45700EA207A /* UILabelExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B1F9251BC45700EA207A /* UILabelExtension.swift */; }; 24 | AC93B1FF251BC45700EA207A /* UIViewControllerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B1FA251BC45700EA207A /* UIViewControllerExtension.swift */; }; 25 | AC93B200251BC45700EA207A /* UITableViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B1FB251BC45700EA207A /* UITableViewExtension.swift */; }; 26 | AC93B209251BCF0000EA207A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AC93B208251BCF0000EA207A /* Localizable.strings */; }; 27 | AC93B20C251BCF8B00EA207A /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC93B20B251BCF8B00EA207A /* StringExtension.swift */; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXFileReference section */ 31 | AC47CB7D252F84B100057B3B /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = ""; }; 32 | AC47CB7E252F84B100057B3B /* DetailViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DetailViewController.xib; sourceTree = ""; }; 33 | AC47CB84252F8D7A00057B3B /* UIViewExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewExtension.swift; sourceTree = ""; }; 34 | AC93B1C9251BC3EA00EA207A /* nerdeame-ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "nerdeame-ios.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | AC93B1CC251BC3EA00EA207A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 36 | AC93B1CE251BC3EA00EA207A /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 37 | AC93B1D5251BC3EB00EA207A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 38 | AC93B1D8251BC3EB00EA207A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 39 | AC93B1DA251BC3EB00EA207A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 40 | AC93B1E7251BC44000EA207A /* CategoriesViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoriesViewController.xib; sourceTree = ""; }; 41 | AC93B1E8251BC44000EA207A /* CategoriesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoriesViewController.swift; sourceTree = ""; }; 42 | AC93B1EA251BC44000EA207A /* CategoryTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CategoryTableViewCell.swift; sourceTree = ""; }; 43 | AC93B1EB251BC44000EA207A /* CategoryTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryTableViewCell.xib; sourceTree = ""; }; 44 | AC93B1F7251BC45700EA207A /* UITableViewCellExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewCellExtension.swift; sourceTree = ""; }; 45 | AC93B1F8251BC45700EA207A /* UIColorExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIColorExtension.swift; sourceTree = ""; }; 46 | AC93B1F9251BC45700EA207A /* UILabelExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UILabelExtension.swift; sourceTree = ""; }; 47 | AC93B1FA251BC45700EA207A /* UIViewControllerExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIViewControllerExtension.swift; sourceTree = ""; }; 48 | AC93B1FB251BC45700EA207A /* UITableViewExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewExtension.swift; sourceTree = ""; }; 49 | AC93B208251BCF0000EA207A /* Localizable.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = ""; }; 50 | AC93B20B251BCF8B00EA207A /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = ""; }; 51 | /* End PBXFileReference section */ 52 | 53 | /* Begin PBXFrameworksBuildPhase section */ 54 | AC93B1C6251BC3EA00EA207A /* Frameworks */ = { 55 | isa = PBXFrameworksBuildPhase; 56 | buildActionMask = 2147483647; 57 | files = ( 58 | ); 59 | runOnlyForDeploymentPostprocessing = 0; 60 | }; 61 | /* End PBXFrameworksBuildPhase section */ 62 | 63 | /* Begin PBXGroup section */ 64 | AC47CB7C252F848500057B3B /* Detail */ = { 65 | isa = PBXGroup; 66 | children = ( 67 | AC47CB7E252F84B100057B3B /* DetailViewController.xib */, 68 | AC47CB7D252F84B100057B3B /* DetailViewController.swift */, 69 | ); 70 | path = Detail; 71 | sourceTree = ""; 72 | }; 73 | AC93B1C0251BC3EA00EA207A = { 74 | isa = PBXGroup; 75 | children = ( 76 | AC93B1CB251BC3EA00EA207A /* nerdeame-ios */, 77 | AC93B1CA251BC3EA00EA207A /* Products */, 78 | ); 79 | sourceTree = ""; 80 | }; 81 | AC93B1CA251BC3EA00EA207A /* Products */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | AC93B1C9251BC3EA00EA207A /* nerdeame-ios.app */, 85 | ); 86 | name = Products; 87 | sourceTree = ""; 88 | }; 89 | AC93B1CB251BC3EA00EA207A /* nerdeame-ios */ = { 90 | isa = PBXGroup; 91 | children = ( 92 | AC93B1CC251BC3EA00EA207A /* AppDelegate.swift */, 93 | AC93B1CE251BC3EA00EA207A /* SceneDelegate.swift */, 94 | AC93B1E4251BC41B00EA207A /* UseCases */, 95 | AC93B202251BC46000EA207A /* Provider */, 96 | AC93B1F5251BC45700EA207A /* Util */, 97 | AC93B203251BC47800EA207A /* SupportingFiles */, 98 | AC93B1D5251BC3EB00EA207A /* Assets.xcassets */, 99 | ); 100 | path = "nerdeame-ios"; 101 | sourceTree = ""; 102 | }; 103 | AC93B1E4251BC41B00EA207A /* UseCases */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | AC93B1EC251BC44000EA207A /* Launch */, 107 | AC93B1E6251BC44000EA207A /* Categories */, 108 | AC47CB7C252F848500057B3B /* Detail */, 109 | AC93B1E5251BC44000EA207A /* Common */, 110 | ); 111 | path = UseCases; 112 | sourceTree = ""; 113 | }; 114 | AC93B1E5251BC44000EA207A /* Common */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | ); 118 | path = Common; 119 | sourceTree = ""; 120 | }; 121 | AC93B1E6251BC44000EA207A /* Categories */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | AC93B1E9251BC44000EA207A /* Cell */, 125 | AC93B1E7251BC44000EA207A /* CategoriesViewController.xib */, 126 | AC93B1E8251BC44000EA207A /* CategoriesViewController.swift */, 127 | ); 128 | path = Categories; 129 | sourceTree = ""; 130 | }; 131 | AC93B1E9251BC44000EA207A /* Cell */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | AC93B1EB251BC44000EA207A /* CategoryTableViewCell.xib */, 135 | AC93B1EA251BC44000EA207A /* CategoryTableViewCell.swift */, 136 | ); 137 | path = Cell; 138 | sourceTree = ""; 139 | }; 140 | AC93B1EC251BC44000EA207A /* Launch */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | AC93B1D7251BC3EB00EA207A /* LaunchScreen.storyboard */, 144 | ); 145 | path = Launch; 146 | sourceTree = ""; 147 | }; 148 | AC93B1F5251BC45700EA207A /* Util */ = { 149 | isa = PBXGroup; 150 | children = ( 151 | AC93B1F6251BC45700EA207A /* Extension */, 152 | ); 153 | path = Util; 154 | sourceTree = ""; 155 | }; 156 | AC93B1F6251BC45700EA207A /* Extension */ = { 157 | isa = PBXGroup; 158 | children = ( 159 | AC93B1F7251BC45700EA207A /* UITableViewCellExtension.swift */, 160 | AC93B1F8251BC45700EA207A /* UIColorExtension.swift */, 161 | AC93B1F9251BC45700EA207A /* UILabelExtension.swift */, 162 | AC93B1FA251BC45700EA207A /* UIViewControllerExtension.swift */, 163 | AC93B1FB251BC45700EA207A /* UITableViewExtension.swift */, 164 | AC93B20B251BCF8B00EA207A /* StringExtension.swift */, 165 | AC47CB84252F8D7A00057B3B /* UIViewExtension.swift */, 166 | ); 167 | path = Extension; 168 | sourceTree = ""; 169 | }; 170 | AC93B202251BC46000EA207A /* Provider */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | ); 174 | path = Provider; 175 | sourceTree = ""; 176 | }; 177 | AC93B203251BC47800EA207A /* SupportingFiles */ = { 178 | isa = PBXGroup; 179 | children = ( 180 | AC93B1DA251BC3EB00EA207A /* Info.plist */, 181 | AC93B208251BCF0000EA207A /* Localizable.strings */, 182 | ); 183 | path = SupportingFiles; 184 | sourceTree = ""; 185 | }; 186 | /* End PBXGroup section */ 187 | 188 | /* Begin PBXNativeTarget section */ 189 | AC93B1C8251BC3EA00EA207A /* nerdeame-ios */ = { 190 | isa = PBXNativeTarget; 191 | buildConfigurationList = AC93B1DD251BC3EB00EA207A /* Build configuration list for PBXNativeTarget "nerdeame-ios" */; 192 | buildPhases = ( 193 | AC93B1C5251BC3EA00EA207A /* Sources */, 194 | AC93B1C6251BC3EA00EA207A /* Frameworks */, 195 | AC93B1C7251BC3EA00EA207A /* Resources */, 196 | ); 197 | buildRules = ( 198 | ); 199 | dependencies = ( 200 | ); 201 | name = "nerdeame-ios"; 202 | productName = "nerdeame-ios"; 203 | productReference = AC93B1C9251BC3EA00EA207A /* nerdeame-ios.app */; 204 | productType = "com.apple.product-type.application"; 205 | }; 206 | /* End PBXNativeTarget section */ 207 | 208 | /* Begin PBXProject section */ 209 | AC93B1C1251BC3EA00EA207A /* Project object */ = { 210 | isa = PBXProject; 211 | attributes = { 212 | LastSwiftUpdateCheck = 1200; 213 | LastUpgradeCheck = 1200; 214 | TargetAttributes = { 215 | AC93B1C8251BC3EA00EA207A = { 216 | CreatedOnToolsVersion = 12.0; 217 | }; 218 | }; 219 | }; 220 | buildConfigurationList = AC93B1C4251BC3EA00EA207A /* Build configuration list for PBXProject "nerdeame-ios" */; 221 | compatibilityVersion = "Xcode 9.3"; 222 | developmentRegion = en; 223 | hasScannedForEncodings = 0; 224 | knownRegions = ( 225 | en, 226 | Base, 227 | ); 228 | mainGroup = AC93B1C0251BC3EA00EA207A; 229 | productRefGroup = AC93B1CA251BC3EA00EA207A /* Products */; 230 | projectDirPath = ""; 231 | projectRoot = ""; 232 | targets = ( 233 | AC93B1C8251BC3EA00EA207A /* nerdeame-ios */, 234 | ); 235 | }; 236 | /* End PBXProject section */ 237 | 238 | /* Begin PBXResourcesBuildPhase section */ 239 | AC93B1C7251BC3EA00EA207A /* Resources */ = { 240 | isa = PBXResourcesBuildPhase; 241 | buildActionMask = 2147483647; 242 | files = ( 243 | AC93B209251BCF0000EA207A /* Localizable.strings in Resources */, 244 | AC47CB80252F84B100057B3B /* DetailViewController.xib in Resources */, 245 | AC93B1D9251BC3EB00EA207A /* LaunchScreen.storyboard in Resources */, 246 | AC93B1D6251BC3EB00EA207A /* Assets.xcassets in Resources */, 247 | AC93B1EF251BC44000EA207A /* CategoriesViewController.xib in Resources */, 248 | AC93B1F2251BC44000EA207A /* CategoryTableViewCell.xib in Resources */, 249 | ); 250 | runOnlyForDeploymentPostprocessing = 0; 251 | }; 252 | /* End PBXResourcesBuildPhase section */ 253 | 254 | /* Begin PBXSourcesBuildPhase section */ 255 | AC93B1C5251BC3EA00EA207A /* Sources */ = { 256 | isa = PBXSourcesBuildPhase; 257 | buildActionMask = 2147483647; 258 | files = ( 259 | AC47CB7F252F84B100057B3B /* DetailViewController.swift in Sources */, 260 | AC93B1CD251BC3EA00EA207A /* AppDelegate.swift in Sources */, 261 | AC93B1CF251BC3EA00EA207A /* SceneDelegate.swift in Sources */, 262 | AC93B20C251BCF8B00EA207A /* StringExtension.swift in Sources */, 263 | AC93B1FC251BC45700EA207A /* UITableViewCellExtension.swift in Sources */, 264 | AC93B1F0251BC44000EA207A /* CategoriesViewController.swift in Sources */, 265 | AC47CB85252F8D7A00057B3B /* UIViewExtension.swift in Sources */, 266 | AC93B1FF251BC45700EA207A /* UIViewControllerExtension.swift in Sources */, 267 | AC93B1FE251BC45700EA207A /* UILabelExtension.swift in Sources */, 268 | AC93B200251BC45700EA207A /* UITableViewExtension.swift in Sources */, 269 | AC93B1F1251BC44000EA207A /* CategoryTableViewCell.swift in Sources */, 270 | AC93B1FD251BC45700EA207A /* UIColorExtension.swift in Sources */, 271 | ); 272 | runOnlyForDeploymentPostprocessing = 0; 273 | }; 274 | /* End PBXSourcesBuildPhase section */ 275 | 276 | /* Begin PBXVariantGroup section */ 277 | AC93B1D7251BC3EB00EA207A /* LaunchScreen.storyboard */ = { 278 | isa = PBXVariantGroup; 279 | children = ( 280 | AC93B1D8251BC3EB00EA207A /* Base */, 281 | ); 282 | name = LaunchScreen.storyboard; 283 | sourceTree = ""; 284 | }; 285 | /* End PBXVariantGroup section */ 286 | 287 | /* Begin XCBuildConfiguration section */ 288 | AC93B1DB251BC3EB00EA207A /* Debug */ = { 289 | isa = XCBuildConfiguration; 290 | buildSettings = { 291 | ALWAYS_SEARCH_USER_PATHS = NO; 292 | CLANG_ANALYZER_NONNULL = YES; 293 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 294 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 295 | CLANG_CXX_LIBRARY = "libc++"; 296 | CLANG_ENABLE_MODULES = YES; 297 | CLANG_ENABLE_OBJC_ARC = YES; 298 | CLANG_ENABLE_OBJC_WEAK = YES; 299 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 300 | CLANG_WARN_BOOL_CONVERSION = YES; 301 | CLANG_WARN_COMMA = YES; 302 | CLANG_WARN_CONSTANT_CONVERSION = YES; 303 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 304 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 305 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 306 | CLANG_WARN_EMPTY_BODY = YES; 307 | CLANG_WARN_ENUM_CONVERSION = YES; 308 | CLANG_WARN_INFINITE_RECURSION = YES; 309 | CLANG_WARN_INT_CONVERSION = YES; 310 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 311 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 312 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 313 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 314 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 315 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 316 | CLANG_WARN_STRICT_PROTOTYPES = YES; 317 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 318 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 319 | CLANG_WARN_UNREACHABLE_CODE = YES; 320 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 321 | COPY_PHASE_STRIP = NO; 322 | DEBUG_INFORMATION_FORMAT = dwarf; 323 | ENABLE_STRICT_OBJC_MSGSEND = YES; 324 | ENABLE_TESTABILITY = YES; 325 | GCC_C_LANGUAGE_STANDARD = gnu11; 326 | GCC_DYNAMIC_NO_PIC = NO; 327 | GCC_NO_COMMON_BLOCKS = YES; 328 | GCC_OPTIMIZATION_LEVEL = 0; 329 | GCC_PREPROCESSOR_DEFINITIONS = ( 330 | "DEBUG=1", 331 | "$(inherited)", 332 | ); 333 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 334 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 335 | GCC_WARN_UNDECLARED_SELECTOR = YES; 336 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 337 | GCC_WARN_UNUSED_FUNCTION = YES; 338 | GCC_WARN_UNUSED_VARIABLE = YES; 339 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 340 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 341 | MTL_FAST_MATH = YES; 342 | ONLY_ACTIVE_ARCH = YES; 343 | SDKROOT = iphoneos; 344 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 345 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 346 | }; 347 | name = Debug; 348 | }; 349 | AC93B1DC251BC3EB00EA207A /* Release */ = { 350 | isa = XCBuildConfiguration; 351 | buildSettings = { 352 | ALWAYS_SEARCH_USER_PATHS = NO; 353 | CLANG_ANALYZER_NONNULL = YES; 354 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 355 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 356 | CLANG_CXX_LIBRARY = "libc++"; 357 | CLANG_ENABLE_MODULES = YES; 358 | CLANG_ENABLE_OBJC_ARC = YES; 359 | CLANG_ENABLE_OBJC_WEAK = YES; 360 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 361 | CLANG_WARN_BOOL_CONVERSION = YES; 362 | CLANG_WARN_COMMA = YES; 363 | CLANG_WARN_CONSTANT_CONVERSION = YES; 364 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 365 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 366 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 367 | CLANG_WARN_EMPTY_BODY = YES; 368 | CLANG_WARN_ENUM_CONVERSION = YES; 369 | CLANG_WARN_INFINITE_RECURSION = YES; 370 | CLANG_WARN_INT_CONVERSION = YES; 371 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 372 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 373 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 374 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 375 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 376 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 377 | CLANG_WARN_STRICT_PROTOTYPES = YES; 378 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 379 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 380 | CLANG_WARN_UNREACHABLE_CODE = YES; 381 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 382 | COPY_PHASE_STRIP = NO; 383 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 384 | ENABLE_NS_ASSERTIONS = NO; 385 | ENABLE_STRICT_OBJC_MSGSEND = YES; 386 | GCC_C_LANGUAGE_STANDARD = gnu11; 387 | GCC_NO_COMMON_BLOCKS = YES; 388 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 389 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 390 | GCC_WARN_UNDECLARED_SELECTOR = YES; 391 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 392 | GCC_WARN_UNUSED_FUNCTION = YES; 393 | GCC_WARN_UNUSED_VARIABLE = YES; 394 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 395 | MTL_ENABLE_DEBUG_INFO = NO; 396 | MTL_FAST_MATH = YES; 397 | SDKROOT = iphoneos; 398 | SWIFT_COMPILATION_MODE = wholemodule; 399 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 400 | VALIDATE_PRODUCT = YES; 401 | }; 402 | name = Release; 403 | }; 404 | AC93B1DE251BC3EB00EA207A /* Debug */ = { 405 | isa = XCBuildConfiguration; 406 | buildSettings = { 407 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 408 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 409 | CODE_SIGN_STYLE = Automatic; 410 | INFOPLIST_FILE = "nerdeame-ios/SupportingFiles/Info.plist"; 411 | LD_RUNPATH_SEARCH_PATHS = ( 412 | "$(inherited)", 413 | "@executable_path/Frameworks", 414 | ); 415 | PRODUCT_BUNDLE_IDENTIFIER = "com.mouredev.nerdeame-ios"; 416 | PRODUCT_NAME = "$(TARGET_NAME)"; 417 | SWIFT_VERSION = 5.0; 418 | TARGETED_DEVICE_FAMILY = "1,2"; 419 | }; 420 | name = Debug; 421 | }; 422 | AC93B1DF251BC3EB00EA207A /* Release */ = { 423 | isa = XCBuildConfiguration; 424 | buildSettings = { 425 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 426 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 427 | CODE_SIGN_STYLE = Automatic; 428 | INFOPLIST_FILE = "nerdeame-ios/SupportingFiles/Info.plist"; 429 | LD_RUNPATH_SEARCH_PATHS = ( 430 | "$(inherited)", 431 | "@executable_path/Frameworks", 432 | ); 433 | PRODUCT_BUNDLE_IDENTIFIER = "com.mouredev.nerdeame-ios"; 434 | PRODUCT_NAME = "$(TARGET_NAME)"; 435 | SWIFT_VERSION = 5.0; 436 | TARGETED_DEVICE_FAMILY = "1,2"; 437 | }; 438 | name = Release; 439 | }; 440 | /* End XCBuildConfiguration section */ 441 | 442 | /* Begin XCConfigurationList section */ 443 | AC93B1C4251BC3EA00EA207A /* Build configuration list for PBXProject "nerdeame-ios" */ = { 444 | isa = XCConfigurationList; 445 | buildConfigurations = ( 446 | AC93B1DB251BC3EB00EA207A /* Debug */, 447 | AC93B1DC251BC3EB00EA207A /* Release */, 448 | ); 449 | defaultConfigurationIsVisible = 0; 450 | defaultConfigurationName = Release; 451 | }; 452 | AC93B1DD251BC3EB00EA207A /* Build configuration list for PBXNativeTarget "nerdeame-ios" */ = { 453 | isa = XCConfigurationList; 454 | buildConfigurations = ( 455 | AC93B1DE251BC3EB00EA207A /* Debug */, 456 | AC93B1DF251BC3EB00EA207A /* Release */, 457 | ); 458 | defaultConfigurationIsVisible = 0; 459 | defaultConfigurationName = Release; 460 | }; 461 | /* End XCConfigurationList section */ 462 | }; 463 | rootObject = AC93B1C1251BC3EA00EA207A /* Project object */; 464 | } 465 | --------------------------------------------------------------------------------