├── .gitignore
├── 01View
├── 01View.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── 01View
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ └── no_avatar.imageset
│ │ ├── Blank-avatar.png
│ │ └── Contents.json
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ └── ViewController.swift
├── 02CustomView
├── 02CustomView.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── 02CustomView
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Base.lproj
│ │ └── Main.storyboard
│ └── ViewController.swift
│ ├── Info.plist
│ ├── Resources
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── hamster.imageset
│ │ │ ├── Contents.json
│ │ │ └── hamter.jpeg
│ │ ├── husky.imageset
│ │ │ ├── Contents.json
│ │ │ └── husky.png
│ │ └── no_avatar.imageset
│ │ │ ├── Blank-avatar.png
│ │ │ └── Contents.json
│ └── Base.lproj
│ │ └── LaunchScreen.storyboard
│ └── Views
│ ├── MyView.swift
│ ├── UserView.swift
│ └── UserView.xib
├── 03TouchEvent
├── 02TouchEvent.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── 02TouchEvent
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ └── ball.imageset
│ │ ├── Contents.json
│ │ └── ball.png
│ ├── BalllViewController.swift
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── LineViewController.swift
│ ├── SceneDelegate.swift
│ └── ViewController.swift
├── 04Drawing
├── 04Drawing.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── 04Drawing
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Base.lproj
│ │ └── Main.storyboard
│ └── ViewController.swift
│ ├── Info.plist
│ ├── Resources
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ └── Base.lproj
│ │ └── LaunchScreen.storyboard
│ └── Views
│ ├── FxLineView.swift
│ └── FxRectangularView.swift
├── 05AutoLayout
├── 05AutoLayout.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── 05AutoLayout
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ └── fx-studio-logo.imageset
│ │ ├── Contents.json
│ │ └── fx-studio-logo.png
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ └── ViewController.swift
├── 06StackView
├── 06StackView.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── 06StackView
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ ├── fx-studio-logo.imageset
│ │ ├── Contents.json
│ │ └── fx-studio-logo.png
│ ├── swift-logo.imageset
│ │ ├── Contents.json
│ │ └── swift-icon-1.png
│ └── swiftui-logo.imageset
│ │ ├── Contents.json
│ │ └── swiftui-icon-1.png
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ └── ViewController.swift
├── 07Protocol
└── 07Protocol.playground
│ ├── Contents.swift
│ └── contents.xcplayground
├── 08Delegation
├── DelegateDemo
│ ├── DelegateDemo.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcuserdata
│ │ │ │ └── lephuongtien.xcuserdatad
│ │ │ │ └── UserInterfaceState.xcuserstate
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── xcschemes
│ │ │ └── xcschememanagement.plist
│ └── DelegateDemo
│ │ ├── AppDelegate
│ │ ├── AppDelegate.swift
│ │ └── SceneDelegate.swift
│ │ ├── Controllers
│ │ ├── Base.lproj
│ │ │ └── Main.storyboard
│ │ ├── DetailViewController
│ │ │ └── DetailViewController.swift
│ │ └── HomeViewController
│ │ │ └── HomeViewController.swift
│ │ ├── Info.plist
│ │ ├── Resources
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── no_avatar.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── no-avatar-png.png
│ │ └── Base.lproj
│ │ │ └── LaunchScreen.storyboard
│ │ └── Views
│ │ └── UserView
│ │ ├── UserView.swift
│ │ └── UserView.xib
└── DelegationSample.playground
│ ├── Contents.swift
│ └── contents.xcplayground
├── 09ViewController
├── 09ViewController.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── 09ViewController
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Home
│ │ └── HomeViewController.swift
│ ├── Storyboard
│ │ └── Base.lproj
│ │ │ └── Main.storyboard
│ └── ViewController.swift
│ ├── Info.plist
│ └── Resources
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ └── Base.lproj
│ └── LaunchScreen.storyboard
├── 10GCD
└── DemoGCD.playground
│ ├── Contents.swift
│ ├── contents.xcplayground
│ └── playground.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcshareddata
│ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ └── lephuongtien.xcuserdatad
│ └── UserInterfaceState.xcuserstate
├── 11Navigation
└── DemoNavigation
│ ├── DemoNavigation.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
│ └── DemoNavigation
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── FirstVC
│ │ ├── FirstViewController.swift
│ │ └── FirstViewController.xib
│ ├── SecondVC
│ │ ├── SecondViewController.swift
│ │ └── SecondViewController.xib
│ └── ThirdVC
│ │ ├── ThirdViewController.swift
│ │ └── ThirdViewController.xib
│ ├── Info.plist
│ └── Resources
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ └── setting-icon.imageset
│ │ ├── Contents.json
│ │ └── icons8-settings-48.png
│ └── Base.lproj
│ └── LaunchScreen.storyboard
├── 12Singleton
└── SingletonDemo.playground
│ ├── Contents.swift
│ └── contents.xcplayground
├── 13MVC
├── MVC.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── MVC
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── HomeViewController.swift
│ └── HomeViewController.xib
│ ├── Info.plist
│ ├── Models
│ └── Calculator.swift
│ └── Resources
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ └── Base.lproj
│ └── LaunchScreen.storyboard
├── 14TableView
├── DemoTableView
│ ├── DemoTableView.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcuserdata
│ │ │ │ └── lephuongtien.xcuserdatad
│ │ │ │ └── UserInterfaceState.xcuserstate
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── xcschemes
│ │ │ └── xcschememanagement.plist
│ └── DemoTableView
│ │ ├── AppDelegate
│ │ ├── AppDelegate.swift
│ │ └── SceneDelegate.swift
│ │ ├── Controllers
│ │ ├── Detail
│ │ │ ├── DetailViewController.swift
│ │ │ └── DetailViewController.xib
│ │ └── Home
│ │ │ ├── Cell
│ │ │ ├── HomeCell.swift
│ │ │ └── HomeCell.xib
│ │ │ ├── HomeViewController.swift
│ │ │ └── HomeViewController.xib
│ │ ├── Info.plist
│ │ ├── Models
│ │ └── User.swift
│ │ └── Resources
│ │ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ └── no-avatar.imageset
│ │ │ ├── Contents.json
│ │ │ └── no-avatar.png
│ │ └── Base.lproj
│ │ └── LaunchScreen.storyboard
├── ListContentView
│ ├── ListContentView.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── ListContentView
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Book.swift
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ └── ViewController.swift
├── RowActions
│ ├── RowActions.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── RowActions
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ └── ViewController.swift
└── TableViewInTableView
│ ├── TableViewInTableView.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── TableViewInTableView
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Controllers
│ ├── Cells
│ │ ├── HomeCell.swift
│ │ ├── HomeCell.xib
│ │ ├── HomeSubCell.swift
│ │ └── HomeSubCell.xib
│ └── ViewController.swift
│ ├── Info.plist
│ └── Models
│ └── Homeitem.swift
├── 15CollectionView
├── DemoCollectionView
│ ├── DemoCollectionView.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcuserdata
│ │ │ │ └── lephuongtien.xcuserdatad
│ │ │ │ └── UserInterfaceState.xcuserstate
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── xcschemes
│ │ │ └── xcschememanagement.plist
│ └── DemoCollectionView
│ │ ├── AppDelegate
│ │ ├── AppDelegate.swift
│ │ └── SceneDelegate.swift
│ │ ├── Controllers
│ │ └── Home
│ │ │ ├── Cell
│ │ │ ├── HomeCell.swift
│ │ │ └── HomeCell.xib
│ │ │ ├── Header
│ │ │ ├── HomeHeaderView.swift
│ │ │ └── HomeHeaderView.xib
│ │ │ ├── HomeViewController.swift
│ │ │ └── HomeViewController.xib
│ │ ├── Info.plist
│ │ ├── Models
│ │ └── User.swift
│ │ └── Resources
│ │ ├── Assets.xcassets
│ │ ├── 0.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-female-user-100-2.png
│ │ ├── 1.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-female-user-101.png
│ │ ├── 2.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-female-user-100.png
│ │ ├── 3.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-male-user-101.png
│ │ ├── 4.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-male-user-100.png
│ │ ├── 5.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-100 (1).png
│ │ ├── 6.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-100.png
│ │ ├── 7.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-male-100.png
│ │ ├── 8.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-male-101.png
│ │ ├── 9.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-male-user-100.png
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ └── Base.lproj
│ │ └── LaunchScreen.storyboard
└── DiffableDataSource
│ ├── DiffableDataSource.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── DiffableDataSource
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Base.lproj
│ └── LaunchScreen.storyboard
│ ├── Controllers
│ └── Home
│ │ ├── Cell
│ │ ├── HomeCell.swift
│ │ └── HomeCell.xib
│ │ ├── Header
│ │ ├── HomeHeaderView.swift
│ │ └── HomeHeaderView.xib
│ │ ├── HomeViewController.swift
│ │ └── HomeViewController.xib
│ ├── Info.plist
│ ├── Models
│ ├── Flower.swift
│ └── User.swift
│ └── Resources
│ └── Assets.xcassets
│ ├── AppIcon.appiconset
│ └── Contents.json
│ ├── Contents.json
│ └── Flowers
│ ├── Contents.json
│ ├── flower1.imageset
│ ├── Contents.json
│ └── flower1.jpg
│ ├── flower10.imageset
│ ├── Contents.json
│ └── flower10.jpeg
│ ├── flower2.imageset
│ ├── Contents.json
│ └── flower2.jpeg
│ ├── flower3.imageset
│ ├── Contents.json
│ └── flower3.jpg
│ ├── flower4.imageset
│ ├── Contents.json
│ └── flower4.jpeg
│ ├── flower5.imageset
│ ├── Contents.json
│ └── flower5.jpg
│ ├── flower6.imageset
│ ├── Contents.json
│ └── flower6.jpg
│ ├── flower7.imageset
│ ├── Contents.json
│ └── flower7.jpg
│ ├── flower8.imageset
│ ├── Contents.json
│ └── flower8.jpeg
│ └── flower9.imageset
│ ├── Contents.json
│ └── flower9.jpeg
├── 16TabbarController
└── DemoTabbarController
│ ├── DemoTabbarController.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
│ └── DemoTabbarController
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── FriendsVC
│ │ ├── FriendsViewController.swift
│ │ └── FriendsViewController.xib
│ ├── HomeVC
│ │ ├── HomeViewController.swift
│ │ └── HomeViewController.xib
│ ├── MessagesVC
│ │ ├── MessagesViewController.swift
│ │ └── MessagesViewController.xib
│ └── ProfileVC
│ │ ├── ProfileViewController.swift
│ │ └── ProfileViewController.xib
│ ├── Info.plist
│ └── Resources
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ ├── ic-tabbar-friends.imageset
│ │ ├── Contents.json
│ │ └── icons8-user-groups-60.png
│ ├── ic-tabbar-messages-selected.imageset
│ │ ├── Contents.json
│ │ └── icons8-chat-96.png
│ ├── ic-tabbar-messages.imageset
│ │ ├── Contents.json
│ │ └── icons8-chat-96 (1).png
│ ├── ic-tabbar-profile.imageset
│ │ ├── Contents.json
│ │ └── icons8-user-60.png
│ └── tabbar-bg.imageset
│ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
│ │ └── Contents.json
│ └── Base.lproj
│ └── LaunchScreen.storyboard
├── 17MVVM
├── DemoMVVM.zip
└── DemoMVVM
│ ├── DemoTabbarController.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
│ └── DemoTabbarController
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Base
│ │ ├── BaseNavigationController.swift
│ │ ├── BaseTabBarController.swift
│ │ └── BaseViewController.swift
│ ├── ForgotPasswordVC
│ │ ├── ForgotPasswordViewController.swift
│ │ └── ForgotPasswordViewController.xib
│ ├── FriendsVC
│ │ ├── FriendsViewController.swift
│ │ └── FriendsViewController.xib
│ ├── HomeVC
│ │ ├── Cells
│ │ │ ├── HomeCell.swift
│ │ │ └── HomeCell.xib
│ │ ├── HomeViewController.swift
│ │ ├── HomeViewController.xib
│ │ └── HomeViewModel.swift
│ ├── LoginVC
│ │ ├── LoginViewController.swift
│ │ ├── LoginViewController.xib
│ │ └── LoginViewModel.swift
│ ├── MessagesVC
│ │ ├── MessagesViewController.swift
│ │ └── MessagesViewController.xib
│ ├── ProfileVC
│ │ ├── ProfileViewController.swift
│ │ └── ProfileViewController.xib
│ └── RegisterVC
│ │ ├── RegisterViewController.swift
│ │ ├── RegisterViewController.xib
│ │ └── RegisterViewModel.swift
│ ├── Info.plist
│ ├── Models
│ ├── APIManager
│ │ └── Core
│ │ │ ├── API.Manager.swift
│ │ │ ├── API.Request.swift
│ │ │ └── API.swift
│ ├── DataManager
│ │ └── DataManager.swift
│ ├── Ext
│ │ └── Data.Ext.swift
│ ├── Networking
│ │ └── Networking.swift
│ └── Objects
│ │ └── Music.swift
│ └── Resources
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ ├── ic-tabbar-friends.imageset
│ │ ├── Contents.json
│ │ └── icons8-user-groups-60.png
│ ├── ic-tabbar-messages-selected.imageset
│ │ ├── Contents.json
│ │ └── icons8-chat-96.png
│ ├── ic-tabbar-messages.imageset
│ │ ├── Contents.json
│ │ └── icons8-chat-96 (1).png
│ ├── ic-tabbar-profile.imageset
│ │ ├── Contents.json
│ │ └── icons8-user-60.png
│ └── tabbar-bg.imageset
│ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
│ │ └── Contents.json
│ └── Base.lproj
│ └── LaunchScreen.storyboard
├── 18Networking
├── DemoNetworking
│ ├── DemoNetworking.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ ├── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcuserdata
│ │ │ │ └── lephuongtien.xcuserdatad
│ │ │ │ └── UserInterfaceState.xcuserstate
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ ├── xcdebugger
│ │ │ └── Breakpoints_v2.xcbkptlist
│ │ │ └── xcschemes
│ │ │ └── xcschememanagement.plist
│ └── DemoNetworking
│ │ ├── AppDelegate
│ │ ├── AppDelegate.swift
│ │ └── SceneDelegate.swift
│ │ ├── Controllers
│ │ ├── Base
│ │ │ ├── BaseNavigationController.swift
│ │ │ ├── BaseTabBarController.swift
│ │ │ └── BaseViewController.swift
│ │ ├── ForgotPasswordVC
│ │ │ ├── ForgotPasswordViewController.swift
│ │ │ └── ForgotPasswordViewController.xib
│ │ ├── FriendsVC
│ │ │ ├── FriendsViewController.swift
│ │ │ └── FriendsViewController.xib
│ │ ├── HomeVC
│ │ │ ├── Cells
│ │ │ │ ├── HomeCell.swift
│ │ │ │ └── HomeCell.xib
│ │ │ ├── HomeViewController.swift
│ │ │ ├── HomeViewController.xib
│ │ │ └── HomeViewModel.swift
│ │ ├── LoginVC
│ │ │ ├── LoginViewController.swift
│ │ │ ├── LoginViewController.xib
│ │ │ └── LoginViewModel.swift
│ │ ├── MessagesVC
│ │ │ ├── MessagesViewController.swift
│ │ │ └── MessagesViewController.xib
│ │ ├── ProfileVC
│ │ │ ├── ProfileViewController.swift
│ │ │ └── ProfileViewController.xib
│ │ └── RegisterVC
│ │ │ ├── RegisterViewController.swift
│ │ │ ├── RegisterViewController.xib
│ │ │ └── RegisterViewModel.swift
│ │ ├── Info.plist
│ │ ├── Models
│ │ ├── APIManager
│ │ │ ├── API.Music.swift
│ │ │ └── Core
│ │ │ │ ├── API.Manager.swift
│ │ │ │ ├── API.Request.swift
│ │ │ │ └── API.swift
│ │ ├── DataManager
│ │ │ └── DataManager.swift
│ │ ├── Ext
│ │ │ └── Data.Ext.swift
│ │ ├── Networking
│ │ │ └── Networking.swift
│ │ └── Objects
│ │ │ └── Music.swift
│ │ └── Resources
│ │ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── ic-navi-refresh.imageset
│ │ │ ├── Contents.json
│ │ │ ├── icons8-refresh-32.png
│ │ │ └── icons8-refresh-64.png
│ │ ├── ic-tabbar-friends.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-groups-60.png
│ │ ├── ic-tabbar-messages-selected.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-chat-96.png
│ │ ├── ic-tabbar-messages.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-chat-96 (1).png
│ │ ├── ic-tabbar-profile.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-60.png
│ │ └── tabbar-bg.imageset
│ │ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
│ │ │ └── Contents.json
│ │ └── Base.lproj
│ │ └── LaunchScreen.storyboard
└── LoadingImage
│ ├── LoadingImage.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── LoadingImage
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Base.lproj
│ │ └── Main.storyboard
│ └── ViewController.swift
│ ├── Extensions
│ └── UIImageView+LoadImage.swift
│ ├── Info.plist
│ └── Resources
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ └── Base.lproj
│ └── LaunchScreen.storyboard
├── 19ProjectTemplate
└── ProjectTemplate
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ ├── Alamofire
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── Source
│ │ │ ├── AFError.swift
│ │ │ ├── Alamofire.swift
│ │ │ ├── AlamofireExtended.swift
│ │ │ ├── CachedResponseHandler.swift
│ │ │ ├── DispatchQueue+Alamofire.swift
│ │ │ ├── EventMonitor.swift
│ │ │ ├── HTTPHeaders.swift
│ │ │ ├── HTTPMethod.swift
│ │ │ ├── MultipartFormData.swift
│ │ │ ├── MultipartUpload.swift
│ │ │ ├── NetworkReachabilityManager.swift
│ │ │ ├── Notifications.swift
│ │ │ ├── OperationQueue+Alamofire.swift
│ │ │ ├── ParameterEncoder.swift
│ │ │ ├── ParameterEncoding.swift
│ │ │ ├── Protector.swift
│ │ │ ├── RedirectHandler.swift
│ │ │ ├── Request.swift
│ │ │ ├── RequestInterceptor.swift
│ │ │ ├── RequestTaskMap.swift
│ │ │ ├── Response.swift
│ │ │ ├── ResponseSerialization.swift
│ │ │ ├── Result+Alamofire.swift
│ │ │ ├── RetryPolicy.swift
│ │ │ ├── ServerTrustEvaluation.swift
│ │ │ ├── Session.swift
│ │ │ ├── SessionDelegate.swift
│ │ │ ├── URLConvertible+URLRequestConvertible.swift
│ │ │ ├── URLEncodedFormEncoder.swift
│ │ │ ├── URLRequest+Alamofire.swift
│ │ │ ├── URLSessionConfiguration+Alamofire.swift
│ │ │ └── Validation.swift
│ ├── Manifest.lock
│ ├── Pods.xcodeproj
│ │ ├── project.pbxproj
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── xcschemes
│ │ │ ├── Alamofire.xcscheme
│ │ │ ├── Pods-ProjectTemplate.xcscheme
│ │ │ └── xcschememanagement.plist
│ └── Target Support Files
│ │ ├── Alamofire
│ │ ├── Alamofire-Info.plist
│ │ ├── Alamofire-dummy.m
│ │ ├── Alamofire-prefix.pch
│ │ ├── Alamofire-umbrella.h
│ │ ├── Alamofire.modulemap
│ │ └── Alamofire.xcconfig
│ │ └── Pods-ProjectTemplate
│ │ ├── Pods-ProjectTemplate-Info.plist
│ │ ├── Pods-ProjectTemplate-acknowledgements.markdown
│ │ ├── Pods-ProjectTemplate-acknowledgements.plist
│ │ ├── Pods-ProjectTemplate-dummy.m
│ │ ├── Pods-ProjectTemplate-frameworks-Debug-input-files.xcfilelist
│ │ ├── Pods-ProjectTemplate-frameworks-Debug-output-files.xcfilelist
│ │ ├── Pods-ProjectTemplate-frameworks-Release-input-files.xcfilelist
│ │ ├── Pods-ProjectTemplate-frameworks-Release-output-files.xcfilelist
│ │ ├── Pods-ProjectTemplate-frameworks.sh
│ │ ├── Pods-ProjectTemplate-umbrella.h
│ │ ├── Pods-ProjectTemplate.debug.xcconfig
│ │ ├── Pods-ProjectTemplate.modulemap
│ │ └── Pods-ProjectTemplate.release.xcconfig
│ ├── ProjectTemplate.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
│ ├── ProjectTemplate.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
│ └── ProjectTemplate
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Base
│ │ ├── BaseNavigationController.swift
│ │ ├── BaseTabBarController.swift
│ │ └── BaseViewController.swift
│ ├── FriendsVC
│ │ ├── FriendsViewController.swift
│ │ └── FriendsViewController.xib
│ ├── Home
│ │ ├── Cells
│ │ │ ├── HomeCell.swift
│ │ │ ├── HomeCell.xib
│ │ │ └── HomeCellViewModel.swift
│ │ ├── HomeViewController.swift
│ │ ├── HomeViewController.xib
│ │ └── HomeViewModel.swift
│ ├── MessagesVC
│ │ ├── MessagesViewController.swift
│ │ └── MessagesViewController.xib
│ └── ProfileVC
│ │ ├── ProfileViewController.swift
│ │ └── ProfileViewController.xib
│ ├── Define
│ ├── App.Color.swift
│ ├── App.Key.swift
│ ├── App.Text.swift
│ └── App.swift
│ ├── Exts
│ ├── Color.Ext.swift
│ ├── Data.Ext.swift
│ └── String.Ext.swift
│ ├── Info.plist
│ ├── Models
│ ├── API
│ │ ├── API.Music.swift
│ │ └── Core
│ │ │ ├── API.Manager.swift
│ │ │ ├── API.Request.swift
│ │ │ └── API.swift
│ ├── Managers
│ │ ├── AudioManager.swift
│ │ ├── DataManager.swift
│ │ ├── FileManager.swift
│ │ └── LocationManager.swift
│ └── Objects
│ │ ├── Music.swift
│ │ └── User.swift
│ ├── Resources
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ └── tabbar
│ │ │ ├── Contents.json
│ │ │ ├── ic-navi-refresh.imageset
│ │ │ ├── Contents.json
│ │ │ ├── icons8-refresh-32.png
│ │ │ └── icons8-refresh-64.png
│ │ │ ├── ic-tabbar-friends.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-groups-60.png
│ │ │ ├── ic-tabbar-messages-selected.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-chat-96.png
│ │ │ ├── ic-tabbar-messages.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-chat-96 (1).png
│ │ │ ├── ic-tabbar-profile.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-60.png
│ │ │ └── tabbar-bg.imageset
│ │ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
│ │ │ └── Contents.json
│ └── Base.lproj
│ │ └── LaunchScreen.storyboard
│ └── Views
│ ├── Common
│ ├── Button.swift
│ └── Label.swift
│ └── Custom
│ ├── FXSliderView.swift
│ ├── FXSliderView.xib
│ ├── MyDatePickerView.swift
│ └── MyDatePickerView.xib
├── 20CoreData
└── DemoCoreData
│ ├── DemoCoreData.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ ├── xcshareddata
│ │ └── xcschemes
│ │ │ └── DemoCoreData.xcscheme
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
│ └── DemoCoreData
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Edit
│ │ ├── EditViewController.swift
│ │ └── EditViewController.xib
│ ├── Home
│ │ ├── Cells
│ │ │ ├── HomeCell.swift
│ │ │ └── HomeCell.xib
│ │ ├── HomeViewController.swift
│ │ └── HomeViewController.xib
│ └── New
│ │ ├── NewViewController.swift
│ │ └── NewViewController.xib
│ ├── Info.plist
│ ├── Models
│ └── CoreData
│ │ ├── DemoCoreData.xcdatamodeld
│ │ ├── .xccurrentversion
│ │ └── DemoCoreData.xcdatamodel
│ │ │ └── contents
│ │ ├── User+CoreDataClass.swift
│ │ └── User+CoreDataProperties.swift
│ └── Resources
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ └── Base.lproj
│ └── LaunchScreen.storyboard
├── 21CoreLocation
└── DemoCoreLocation
│ ├── DemoCoreLocation.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
│ └── DemoCoreLocation
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Base.lproj
│ │ └── Main.storyboard
│ └── ViewController.swift
│ ├── Info.plist
│ ├── LocationManager
│ └── LocationManager.swift
│ └── Resources
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ └── Base.lproj
│ └── LaunchScreen.storyboard
├── 22MapView
└── DemoMap
│ ├── DemoMap.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ └── lephuongtien.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ │ └── lephuongtien.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
│ └── DemoMap
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Base.lproj
│ │ └── Main.storyboard
│ └── ViewController.swift
│ ├── Info.plist
│ ├── Models
│ ├── LocationManager.swift
│ └── MyPin.swift
│ ├── Resources
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── no_image.imageset
│ │ │ ├── Contents.json
│ │ │ └── Screen Shot 2019-12-26 at 4.15.19 PM.png
│ │ └── pin.imageset
│ │ │ ├── Contents.json
│ │ │ └── pin.png
│ └── Base.lproj
│ │ └── LaunchScreen.storyboard
│ └── Views
│ └── MyPinView.swift
├── 23Realm
└── DemoRealm
│ ├── Podfile
│ ├── Podfile.lock
│ ├── ProjectTemplate.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── ProjectTemplate.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── ProjectTemplate
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Controllers
│ ├── Base
│ │ ├── BaseNavigationController.swift
│ │ ├── BaseTabBarController.swift
│ │ └── BaseViewController.swift
│ ├── DetailVC
│ │ ├── DetailViewController.swift
│ │ └── DetailViewController.xib
│ ├── FriendsVC
│ │ ├── FriendsViewController.swift
│ │ └── FriendsViewController.xib
│ ├── Home
│ │ ├── Cells
│ │ │ ├── HomeCell.swift
│ │ │ ├── HomeCell.xib
│ │ │ └── HomeCellViewModel.swift
│ │ ├── HomeViewController.swift
│ │ ├── HomeViewController.xib
│ │ └── HomeViewModel.swift
│ ├── MessagesVC
│ │ ├── MessagesViewController.swift
│ │ └── MessagesViewController.xib
│ └── ProfileVC
│ │ ├── ProfileViewController.swift
│ │ └── ProfileViewController.xib
│ ├── Define
│ ├── App.Color.swift
│ ├── App.Key.swift
│ ├── App.Text.swift
│ └── App.swift
│ ├── Exts
│ ├── Color.Ext.swift
│ ├── Data.Ext.swift
│ └── String.Ext.swift
│ ├── Info.plist
│ ├── Models
│ ├── API
│ │ ├── API.Music.swift
│ │ └── Core
│ │ │ ├── API.Manager.swift
│ │ │ ├── API.Request.swift
│ │ │ └── API.swift
│ ├── Managers
│ │ ├── AudioManager.swift
│ │ ├── DataManager.swift
│ │ ├── FileManager.swift
│ │ └── LocationManager.swift
│ └── Objects
│ │ ├── Book.swift
│ │ ├── Music.swift
│ │ └── User.swift
│ ├── Resources
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ └── tabbar
│ │ │ ├── Contents.json
│ │ │ ├── ic-navi-refresh.imageset
│ │ │ ├── Contents.json
│ │ │ ├── icons8-refresh-32.png
│ │ │ └── icons8-refresh-64.png
│ │ │ ├── ic-tabbar-friends.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-groups-60.png
│ │ │ ├── ic-tabbar-messages-selected.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-chat-96.png
│ │ │ ├── ic-tabbar-messages.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-chat-96 (1).png
│ │ │ ├── ic-tabbar-profile.imageset
│ │ │ ├── Contents.json
│ │ │ └── icons8-user-60.png
│ │ │ └── tabbar-bg.imageset
│ │ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
│ │ │ └── Contents.json
│ └── Base.lproj
│ │ └── LaunchScreen.storyboard
│ └── Views
│ ├── Common
│ ├── Button.swift
│ └── Label.swift
│ └── Custom
│ ├── FXSliderView.swift
│ ├── FXSliderView.xib
│ ├── MyDatePickerView.swift
│ └── MyDatePickerView.xib
├── 24Demo
└── DemoSignInWithApple
│ ├── DemoSignInWithApple.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── DemoSignInWithApple
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── DemoSignInWithApple.entitlements
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ └── ViewController.swift
├── 25UnitTest
└── DemoUnitTest
│ ├── DemoUnitTest.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── DemoUnitTest.xcscheme
│ ├── DemoUnitTest
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Info.plist
│ ├── Models
│ │ └── Operator.swift
│ ├── SceneDelegate.swift
│ └── ViewController.swift
│ └── DemoUnitTestTests
│ ├── DemoUnitTestTests.swift
│ ├── Info.plist
│ └── OperatorTest.swift
├── 26ProtocolvsClosure
└── ProtocolVSClosure
│ ├── ProtocolVSClosure.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── ProtocolVSClosure.xcscheme
│ └── ProtocolVSClosure
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Info.plist
│ ├── Models
│ └── Music.swift
│ ├── Resources
│ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ └── Base.lproj
│ │ └── LaunchScreen.storyboard
│ └── ViewController
│ ├── HomeVC
│ ├── HomeViewController.swift
│ ├── HomeViewController.xib
│ └── HomeViewModel.swift
│ ├── MenuVC
│ ├── MenuViewController.swift
│ └── MenuViewController.xib
│ └── MusicsVC
│ ├── MusicsViewController.swift
│ ├── MusicsViewController.xib
│ └── MusicsViewModel.swift
├── 27AsyncAwait
├── 01_async_await.playground
│ ├── Pages
│ │ ├── demo.xcplaygroundpage
│ │ │ └── Contents.swift
│ │ └── lythuyet.xcplaygroundpage
│ │ │ └── Contents.swift
│ ├── contents.xcplayground
│ └── playground.xcworkspace
│ │ └── contents.xcworkspacedata
├── AsyncSequenceDemo
│ ├── AsyncSequenceDemo.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── AsyncSequenceDemo
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ ├── Typing.swift
│ │ ├── ViewController.swift
│ │ └── data.txt
│ └── BasicAsyncSequence.playground
│ │ ├── Contents.swift
│ │ ├── contents.xcplayground
│ │ └── playground.xcworkspace
│ │ └── contents.xcworkspacedata
├── AsyncStreamDemo
│ ├── AsyncStreamBasic.playground
│ │ ├── Contents.swift
│ │ ├── contents.xcplayground
│ │ └── playground.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ ├── AsyncStreamDemo.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── AsyncStreamDemo
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ └── ViewController.swift
├── DemoAPI
│ ├── DemoAPI.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── DemoAPI
│ │ ├── API
│ │ ├── API.swift
│ │ └── APIError.swift
│ │ ├── AppDelegate
│ │ ├── AppDelegate.swift
│ │ └── SceneDelegate.swift
│ │ ├── Entities
│ │ ├── Category.swift
│ │ └── Drink.swift
│ │ ├── Info.plist
│ │ ├── Resources
│ │ ├── Assets.xcassets
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── no-image.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── no-image.png
│ │ └── Base.lproj
│ │ │ └── LaunchScreen.storyboard
│ │ └── ViewControllers
│ │ ├── Base.lproj
│ │ └── Main.storyboard
│ │ ├── HomeVC
│ │ ├── HomeViewController.swift
│ │ └── HomeViewModel.swift
│ │ ├── ViewController.swift
│ │ └── Welcome
│ │ ├── WelcomeViewController.swift
│ │ ├── WelcomeViewModel.swift
│ │ └── WelcomeViewModel2.swift
├── DemoProjectAsync
│ ├── DemoProjectAsync.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── DemoProjectAsync
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ └── ViewController.swift
├── DetachedTaskDemo2
│ ├── DetachedTaskDemo2.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── DetachedTaskDemo2
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── ContentView.swift
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ ├── User.swift
│ │ └── ViewController.swift
├── NewConcurrency.playground
│ ├── Contents.swift
│ ├── contents.xcplayground
│ └── playground.xcworkspace
│ │ └── contents.xcworkspacedata
├── README.md
├── TaskLocalDemo
│ ├── TaskLocalDemo.playground
│ │ ├── Contents.swift
│ │ ├── contents.xcplayground
│ │ └── playground.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ ├── TaskLocalDemo.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── TaskLocalDemo
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ └── ViewController.swift
├── Task_TaskGroup.playground
│ ├── Contents.swift
│ ├── contents.xcplayground
│ └── playground.xcworkspace
│ │ └── contents.xcworkspacedata
└── UnstructuredConcurrency
│ ├── Task.playground
│ ├── Contents.swift
│ ├── contents.xcplayground
│ └── playground.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── UnstructuredConcurrency.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── UnstructuredConcurrency
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ └── ViewController.swift
├── 29Storyboard
├── DemoStoryboard
│ ├── DemoStoryboard.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── DemoStoryboard
│ │ ├── AppDelegate
│ │ ├── AppDelegate.swift
│ │ └── SceneDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── ViewControllers
│ │ ├── AViewController.swift
│ │ ├── BViewController.swift
│ │ ├── CViewController.swift
│ │ ├── HomeViewController.swift
│ │ └── ViewController.swift
└── MultipleStoryboard
│ └── MultipleStoryboard
│ ├── MultipleStoryboard.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── MultipleStoryboard
│ ├── AppDelegate
│ ├── AppDelegate.swift
│ └── SceneDelegate.swift
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ ├── Info.plist
│ ├── Storyboards
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── LoginFlow.storyboard
│ ├── TabbarFlow.storyboard
│ └── TutorialFlow.storyboard
│ └── ViewControllers
│ ├── Login
│ ├── ForgotPasswordVC.swift
│ ├── LoginVC.swift
│ └── RegisterVC.swift
│ ├── Tabbar
│ ├── HomeVC.swift
│ ├── MapVC.swift
│ ├── ProfileVC.swift
│ └── VideosVC.swift
│ ├── Tutorial
│ └── TutorialVC.swift
│ └── ViewController.swift
├── 30Keychain
├── KeychainDemo
│ ├── KeychainDemo.xcodeproj
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── KeychainDemo
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── SceneDelegate.swift
│ │ └── ViewController.swift
├── README.md
├── keychain_001.png
└── keychain_002.png
├── 31UserDefaults
└── DemoUserDefaults
│ ├── DemoUserDefaults.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── DemoUserDefaults
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ └── ViewController.swift
├── 32FileManager
├── README.md
└── WorkingWithFiles
│ ├── WorkingWithFiles.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── WorkingWithFiles
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── FileManger
│ │ ├── FileHelper.swift
│ │ └── FileIOController.swift
│ ├── Info.plist
│ ├── Resources
│ │ └── hello_file.txt
│ ├── SceneDelegate.swift
│ └── ViewController.swift
│ ├── WorkingWithFilesTests
│ └── WorkingWithFilesTests.swift
│ └── WorkingWithFilesUITests
│ ├── WorkingWithFilesUITests.swift
│ └── WorkingWithFilesUITestsLaunchTests.swift
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Build generated
2 | build/
3 | DerivedData
4 | build.xcarchive
5 |
6 | ## Various settings
7 | *.pbxuser
8 | !default.pbxuser
9 | *.mode1v3
10 | !default.mode1v3
11 | *.mode2v3
12 | !default.mode2v3
13 | *.perspectivev3
14 | !default.perspectivev3
15 | xcuserdata
16 |
17 | ## Other
18 | *.xccheckout
19 | *.moved-aside
20 | *.xcuserstate
21 | *.xcscmblueprint
22 |
23 | ## Obj-C/Swift specific
24 | *.hmap
25 | *.ipa
26 |
27 | # CocoaPods
28 | Pods/
29 |
30 | # Carthage
31 | Carthage/Checkouts
32 | Carthage/Build
33 |
--------------------------------------------------------------------------------
/01View/01View.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/01View/01View.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/01View/01View.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/01View/01View.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/01View/01View.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | 01View.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/01View/01View/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/01View/01View/Assets.xcassets/no_avatar.imageset/Blank-avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/01View/01View/Assets.xcassets/no_avatar.imageset/Blank-avatar.png
--------------------------------------------------------------------------------
/01View/01View/Assets.xcassets/no_avatar.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Blank-avatar.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/02CustomView/02CustomView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/02CustomView/02CustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/02CustomView/02CustomView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/02CustomView/02CustomView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/02CustomView/02CustomView.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | 02CustomView.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/02CustomView/02CustomView/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/02CustomView/02CustomView/Resources/Assets.xcassets/hamster.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "hamter.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/02CustomView/02CustomView/Resources/Assets.xcassets/hamster.imageset/hamter.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/02CustomView/02CustomView/Resources/Assets.xcassets/hamster.imageset/hamter.jpeg
--------------------------------------------------------------------------------
/02CustomView/02CustomView/Resources/Assets.xcassets/husky.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "husky.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/02CustomView/02CustomView/Resources/Assets.xcassets/husky.imageset/husky.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/02CustomView/02CustomView/Resources/Assets.xcassets/husky.imageset/husky.png
--------------------------------------------------------------------------------
/02CustomView/02CustomView/Resources/Assets.xcassets/no_avatar.imageset/Blank-avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/02CustomView/02CustomView/Resources/Assets.xcassets/no_avatar.imageset/Blank-avatar.png
--------------------------------------------------------------------------------
/02CustomView/02CustomView/Resources/Assets.xcassets/no_avatar.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Blank-avatar.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/03TouchEvent/02TouchEvent.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/03TouchEvent/02TouchEvent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/03TouchEvent/02TouchEvent.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/03TouchEvent/02TouchEvent.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/03TouchEvent/02TouchEvent.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | 02TouchEvent.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/03TouchEvent/02TouchEvent/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/03TouchEvent/02TouchEvent/Assets.xcassets/ball.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "ball.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/03TouchEvent/02TouchEvent/Assets.xcassets/ball.imageset/ball.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/03TouchEvent/02TouchEvent/Assets.xcassets/ball.imageset/ball.png
--------------------------------------------------------------------------------
/04Drawing/04Drawing.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/04Drawing/04Drawing.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/04Drawing/04Drawing.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/04Drawing/04Drawing.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/04Drawing/04Drawing.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | 04Drawing.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/04Drawing/04Drawing/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/04Drawing/04Drawing/Views/FxRectangularView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FxRectangularView.swift
3 | // 04Drawing
4 | //
5 | // Created by Le Phuong Tien on 10/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class FxRectangularView: UIView {
12 |
13 | override func draw(_ rect: CGRect) {
14 | // create path
15 | let path = createPath()
16 |
17 | // fill
18 | let fillColor = UIColor.orange
19 | fillColor.setFill()
20 | path.fill()
21 | }
22 |
23 | func createPath() -> UIBezierPath {
24 | let path = UIBezierPath(rect: self.bounds)
25 | return path
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/05AutoLayout/05AutoLayout.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/05AutoLayout/05AutoLayout.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/05AutoLayout/05AutoLayout.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/05AutoLayout/05AutoLayout.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/05AutoLayout/05AutoLayout.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | 05AutoLayout.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/05AutoLayout/05AutoLayout/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/05AutoLayout/05AutoLayout/Assets.xcassets/fx-studio-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "fx-studio-logo.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/05AutoLayout/05AutoLayout/Assets.xcassets/fx-studio-logo.imageset/fx-studio-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/05AutoLayout/05AutoLayout/Assets.xcassets/fx-studio-logo.imageset/fx-studio-logo.png
--------------------------------------------------------------------------------
/05AutoLayout/05AutoLayout/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // 05AutoLayout
4 | //
5 | // Created by Le Phuong Tien on 10/22/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | // Do any additional setup after loading the view.
16 | }
17 |
18 |
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/06StackView/06StackView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/06StackView/06StackView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/06StackView/06StackView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/06StackView/06StackView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/06StackView/06StackView.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | 06StackView.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/06StackView/06StackView/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/06StackView/06StackView/Assets.xcassets/fx-studio-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "fx-studio-logo.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/06StackView/06StackView/Assets.xcassets/fx-studio-logo.imageset/fx-studio-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/06StackView/06StackView/Assets.xcassets/fx-studio-logo.imageset/fx-studio-logo.png
--------------------------------------------------------------------------------
/06StackView/06StackView/Assets.xcassets/swift-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "swift-icon-1.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/06StackView/06StackView/Assets.xcassets/swift-logo.imageset/swift-icon-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/06StackView/06StackView/Assets.xcassets/swift-logo.imageset/swift-icon-1.png
--------------------------------------------------------------------------------
/06StackView/06StackView/Assets.xcassets/swiftui-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "swiftui-icon-1.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/06StackView/06StackView/Assets.xcassets/swiftui-logo.imageset/swiftui-icon-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/06StackView/06StackView/Assets.xcassets/swiftui-logo.imageset/swiftui-icon-1.png
--------------------------------------------------------------------------------
/06StackView/06StackView/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // 06StackView
4 | //
5 | // Created by Le Phuong Tien on 10/23/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | // Do any additional setup after loading the view.
16 | }
17 |
18 |
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/07Protocol/07Protocol.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/08Delegation/DelegateDemo/DelegateDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/08Delegation/DelegateDemo/DelegateDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/08Delegation/DelegateDemo/DelegateDemo.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/08Delegation/DelegateDemo/DelegateDemo.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/08Delegation/DelegateDemo/DelegateDemo.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DelegateDemo.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/08Delegation/DelegateDemo/DelegateDemo/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/08Delegation/DelegateDemo/DelegateDemo/Resources/Assets.xcassets/no_avatar.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "no-avatar-png.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/08Delegation/DelegateDemo/DelegateDemo/Resources/Assets.xcassets/no_avatar.imageset/no-avatar-png.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/08Delegation/DelegateDemo/DelegateDemo/Resources/Assets.xcassets/no_avatar.imageset/no-avatar-png.png
--------------------------------------------------------------------------------
/08Delegation/DelegationSample.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/09ViewController/09ViewController.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/09ViewController/09ViewController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/09ViewController/09ViewController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/09ViewController/09ViewController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/09ViewController/09ViewController.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | 09ViewController.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/09ViewController/09ViewController/Controllers/Home/HomeViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeViewController.swift
3 | // 09ViewController
4 | //
5 | // Created by Le Phuong Tien on 11/5/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class HomeViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | }
16 |
17 | override func loadView() {
18 | let view = UIView(frame: UIScreen.main.bounds)
19 | view.backgroundColor = .white
20 |
21 | self.view = view
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/09ViewController/09ViewController/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/10GCD/DemoGCD.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/10GCD/DemoGCD.playground/playground.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/10GCD/DemoGCD.playground/playground.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/10GCD/DemoGCD.playground/playground.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/10GCD/DemoGCD.playground/playground.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/11Navigation/DemoNavigation/DemoNavigation.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/11Navigation/DemoNavigation/DemoNavigation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/11Navigation/DemoNavigation/DemoNavigation.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/11Navigation/DemoNavigation/DemoNavigation.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/11Navigation/DemoNavigation/DemoNavigation.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DemoNavigation.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/11Navigation/DemoNavigation/DemoNavigation/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/11Navigation/DemoNavigation/DemoNavigation/Resources/Assets.xcassets/setting-icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-settings-48.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/11Navigation/DemoNavigation/DemoNavigation/Resources/Assets.xcassets/setting-icon.imageset/icons8-settings-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/11Navigation/DemoNavigation/DemoNavigation/Resources/Assets.xcassets/setting-icon.imageset/icons8-settings-48.png
--------------------------------------------------------------------------------
/12Singleton/SingletonDemo.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/13MVC/MVC.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/13MVC/MVC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/13MVC/MVC.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/13MVC/MVC.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/13MVC/MVC.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | MVC.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/13MVC/MVC/Models/Calculator.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Calculator.swift
3 | // MVC
4 | //
5 | // Created by Le Phuong Tien on 11/13/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class Calculator {
12 | func add(a: Float, b: Float) -> Float {
13 | return a + b
14 | }
15 |
16 | func sub(a: Float, b: Float) -> Float {
17 | return a - b
18 | }
19 |
20 | func mul(a: Float, b: Float) -> Float {
21 | return a * b
22 | }
23 |
24 | func div(a: Float, b: Float) -> Float {
25 | if b == 0 {
26 | return 0
27 | } else {
28 | return a / b
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/13MVC/MVC/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/14TableView/DemoTableView/DemoTableView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/14TableView/DemoTableView/DemoTableView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/14TableView/DemoTableView/DemoTableView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/14TableView/DemoTableView/DemoTableView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/14TableView/DemoTableView/DemoTableView.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DemoTableView.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/14TableView/DemoTableView/DemoTableView/Controllers/Detail/DetailViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DetailViewController.swift
3 | // DemoTableView
4 | //
5 | // Created by Le Phuong Tien on 11/18/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class DetailViewController: UIViewController {
12 |
13 | @IBOutlet weak var nameLabel: UILabel!
14 | var name: String = ""
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 | title = "Detail"
19 |
20 | nameLabel.text = name
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/14TableView/DemoTableView/DemoTableView/Models/User.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User.swift
3 | // DemoTableView
4 | //
5 | // Created by Le Phuong Tien on 11/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class User {
12 | var name: String
13 | var age: Int
14 | var gender: Bool
15 |
16 | init(name: String, age: Int, gender: Bool) {
17 | self.name = name
18 | self.age = age
19 | self.gender = gender
20 | }
21 |
22 | func getSubTitle() -> String {
23 | return "\(gender ? "Male" : "Female") - \(age) year olds"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/14TableView/DemoTableView/DemoTableView/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/14TableView/DemoTableView/DemoTableView/Resources/Assets.xcassets/no-avatar.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "no-avatar.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/14TableView/DemoTableView/DemoTableView/Resources/Assets.xcassets/no-avatar.imageset/no-avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/14TableView/DemoTableView/DemoTableView/Resources/Assets.xcassets/no-avatar.imageset/no-avatar.png
--------------------------------------------------------------------------------
/14TableView/ListContentView/ListContentView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/14TableView/ListContentView/ListContentView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/14TableView/ListContentView/ListContentView/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/14TableView/ListContentView/ListContentView/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/14TableView/RowActions/RowActions.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/14TableView/RowActions/RowActions.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/14TableView/RowActions/RowActions/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/14TableView/TableViewInTableView/TableViewInTableView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/14TableView/TableViewInTableView/TableViewInTableView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/14TableView/TableViewInTableView/TableViewInTableView/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/14TableView/TableViewInTableView/TableViewInTableView/Models/Homeitem.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Homeitem.swift
3 | // TableViewInTableView
4 | //
5 | // Created by Le Phuong Tien on 4/16/20.
6 | // Copyright © 2020 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class HomeItem {
12 | var title = ""
13 | var index = 0
14 | var parentIndex = 0
15 | var isShowSubItem = false
16 | }
17 |
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DemoCollectionView.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Controllers/Home/Cell/HomeCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeCell.swift
3 | // DemoCollectionView
4 | //
5 | // Created by Le Phuong Tien on 12/4/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class HomeCell: UICollectionViewCell {
12 |
13 | @IBOutlet weak var avatarImageView: UIImageView!
14 | @IBOutlet weak var nameLabel: UILabel!
15 |
16 | override func awakeFromNib() {
17 | super.awakeFromNib()
18 | // Initialization code
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Controllers/Home/Header/HomeHeaderView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeHeaderView.swift
3 | // DemoCollectionView
4 | //
5 | // Created by Le Phuong Tien on 12/5/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class HomeHeaderView: UICollectionReusableView {
12 |
13 | @IBOutlet weak var titleLabel: UILabel!
14 | @IBOutlet weak var totalLabel: UILabel!
15 |
16 | override func awakeFromNib() {
17 | super.awakeFromNib()
18 | // Initialization code
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/0.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-female-user-100-2.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/0.imageset/icons8-female-user-100-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/0.imageset/icons8-female-user-100-2.png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-female-user-101.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/1.imageset/icons8-female-user-101.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/1.imageset/icons8-female-user-101.png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-female-user-100.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/2.imageset/icons8-female-user-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/2.imageset/icons8-female-user-100.png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-male-user-101.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/3.imageset/icons8-male-user-101.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/3.imageset/icons8-male-user-101.png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-male-user-100.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/4.imageset/icons8-male-user-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/4.imageset/icons8-male-user-100.png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-100 (1).png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/5.imageset/icons8-user-100 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/5.imageset/icons8-user-100 (1).png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-100.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/6.imageset/icons8-user-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/6.imageset/icons8-user-100.png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/7.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-male-100.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/7.imageset/icons8-user-male-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/7.imageset/icons8-user-male-100.png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/8.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-male-101.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/8.imageset/icons8-user-male-101.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/8.imageset/icons8-user-male-101.png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/9.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-male-user-100.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/9.imageset/icons8-male-user-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/9.imageset/icons8-male-user-100.png
--------------------------------------------------------------------------------
/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Controllers/Home/Cell/HomeCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeCell.swift
3 | // DemoCollectionView
4 | //
5 | // Created by Le Phuong Tien on 12/4/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class HomeCell: UICollectionViewCell {
12 |
13 | @IBOutlet weak var thumbImageView: UIImageView!
14 | @IBOutlet weak var nameLabel: UILabel!
15 |
16 | override func awakeFromNib() {
17 | super.awakeFromNib()
18 | // Initialization code
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Controllers/Home/Header/HomeHeaderView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeHeaderView.swift
3 | // DemoCollectionView
4 | //
5 | // Created by Le Phuong Tien on 12/5/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class HomeHeaderView: UICollectionReusableView {
12 |
13 | @IBOutlet weak var titleLabel: UILabel!
14 | @IBOutlet weak var totalLabel: UILabel!
15 |
16 | override func awakeFromNib() {
17 | super.awakeFromNib()
18 | // Initialization code
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower1.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower1.imageset/flower1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower1.imageset/flower1.jpg
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower10.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower10.jpeg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower10.imageset/flower10.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower10.imageset/flower10.jpeg
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower2.jpeg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower2.imageset/flower2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower2.imageset/flower2.jpeg
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower3.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower3.imageset/flower3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower3.imageset/flower3.jpg
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower4.jpeg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower4.imageset/flower4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower4.imageset/flower4.jpeg
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower5.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower5.imageset/flower5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower5.imageset/flower5.jpg
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower6.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower6.imageset/flower6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower6.imageset/flower6.jpg
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower7.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower7.jpg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower7.imageset/flower7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower7.imageset/flower7.jpg
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower8.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower8.jpeg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower8.imageset/flower8.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower8.imageset/flower8.jpeg
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower9.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "filename" : "flower9.jpeg",
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower9.imageset/flower9.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower9.imageset/flower9.jpeg
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DemoTabbarController.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Controllers/FriendsVC/FriendsViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FriendsViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class FriendsViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Controllers/HomeVC/HomeViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class HomeViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Home"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Controllers/MessagesVC/MessagesViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessagesViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MessagesViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Messages"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Controllers/ProfileVC/ProfileViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ProfileViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ProfileViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Profile"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-groups-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96 (1).png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
--------------------------------------------------------------------------------
/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM.zip
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DemoTabbarController.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Controllers/Base/BaseTabBarController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseTabBarController.swift
3 | // DemoMVVM
4 | //
5 | // Created by Tien Le P. on 7/12/18.
6 | // Copyright © 2018 Tien Le P. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseTabBarController: UITabBarController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | self.tabBar.tintColor = UIColor(red: 95.0/255.0, green: 75.0/255.0, blue: 139.0/255.0, alpha: 1.0)
16 | }
17 |
18 | override func didReceiveMemoryWarning() {
19 | super.didReceiveMemoryWarning()
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Controllers/FriendsVC/FriendsViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FriendsViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class FriendsViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Controllers/MessagesVC/MessagesViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessagesViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MessagesViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Messages"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Controllers/ProfileVC/ProfileViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ProfileViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ProfileViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Profile"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Models/APIManager/Core/API.Manager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // API.Manager.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct APIManager {
12 | //MARK: Config
13 | struct Path {
14 |
15 | }
16 |
17 | //MARK: - Domain
18 | struct Music {}
19 |
20 | struct Downloader {}
21 | }
22 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Models/APIManager/Core/API.Request.swift:
--------------------------------------------------------------------------------
1 | //
2 | // API.Request.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension API {
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Models/Ext/Data.Ext.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Data.Ext.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | typealias JSON = [String: Any]
12 |
13 | extension Data {
14 | func toJSON() -> JSON {
15 | var json: [String: Any] = [:]
16 | do {
17 | if let jsonObj = try JSONSerialization.jsonObject(with: self, options: .mutableContainers) as? JSON {
18 | json = jsonObj
19 | }
20 | } catch {
21 | print("JSON casting error")
22 | }
23 | return json
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Models/Networking/Networking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Networking.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class Networking {
12 | //MARK: - singleton
13 | private static var sharedNetworking: Networking = {
14 | let networking = Networking()
15 | return networking
16 | }()
17 |
18 | class func shared() -> Networking {
19 | return sharedNetworking
20 | }
21 |
22 | //MARK: - init
23 | private init() {}
24 | }
25 |
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-groups-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96 (1).png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
--------------------------------------------------------------------------------
/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DemoNetworking.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Controllers/Base/BaseTabBarController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseTabBarController.swift
3 | // DemoMVVM
4 | //
5 | // Created by Tien Le P. on 7/12/18.
6 | // Copyright © 2018 Tien Le P. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseTabBarController: UITabBarController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | self.tabBar.tintColor = UIColor(red: 95.0/255.0, green: 75.0/255.0, blue: 139.0/255.0, alpha: 1.0)
16 | }
17 |
18 | override func didReceiveMemoryWarning() {
19 | super.didReceiveMemoryWarning()
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Controllers/FriendsVC/FriendsViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FriendsViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class FriendsViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Controllers/MessagesVC/MessagesViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessagesViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MessagesViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Messages"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Controllers/ProfileVC/ProfileViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ProfileViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ProfileViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Profile"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Models/APIManager/Core/API.Manager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // API.Manager.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct APIManager {
12 | //MARK: Config
13 | struct Path {
14 | static let base_domain = "https://rss.itunes.apple.com"
15 | static let base_path = "/api/v1/us"
16 |
17 | static let music_path = "/itunes-music"
18 | static let music_hot = "/hot-tracks"
19 | }
20 |
21 | //MARK: - Domain
22 | struct Music {}
23 |
24 | struct Downloader {}
25 | }
26 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Models/Ext/Data.Ext.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Data.Ext.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | typealias JSON = [String: Any]
12 |
13 | extension Data {
14 | func toJSON() -> JSON {
15 | var json: [String: Any] = [:]
16 | do {
17 | if let jsonObj = try JSONSerialization.jsonObject(with: self, options: .mutableContainers) as? JSON {
18 | json = jsonObj
19 | }
20 | } catch {
21 | print("JSON casting error")
22 | }
23 | return json
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "icons8-refresh-32.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "icons8-refresh-64.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/icons8-refresh-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/icons8-refresh-32.png
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/icons8-refresh-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/icons8-refresh-64.png
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-friends.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-groups-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96 (1).png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-profile.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
--------------------------------------------------------------------------------
/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/tabbar-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/18Networking/LoadingImage/LoadingImage.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/18Networking/LoadingImage/LoadingImage.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/18Networking/LoadingImage/LoadingImage/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | # platform :ios, '9.0'
3 |
4 | target 'ProjectTemplate' do
5 | # Comment the next line if you don't want to use dynamic frameworks
6 | use_frameworks!
7 |
8 | # Pods for ProjectTemplate
9 | pod 'Alamofire', '~> 5.0.0-rc.3'
10 |
11 | end
12 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Alamofire (5.0.0-rc.3)
3 |
4 | DEPENDENCIES:
5 | - Alamofire (~> 5.0.0-rc.3)
6 |
7 | SPEC REPOS:
8 | https://github.com/cocoapods/specs.git:
9 | - Alamofire
10 |
11 | SPEC CHECKSUMS:
12 | Alamofire: ca8c0de6906873be89d6deec5c8de279e00bf872
13 |
14 | PODFILE CHECKSUM: d84ebebb047d141dd408e274999087348bed4ba3
15 |
16 | COCOAPODS: 1.7.2
17 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Alamofire (5.0.0-rc.3)
3 |
4 | DEPENDENCIES:
5 | - Alamofire (~> 5.0.0-rc.3)
6 |
7 | SPEC REPOS:
8 | https://github.com/cocoapods/specs.git:
9 | - Alamofire
10 |
11 | SPEC CHECKSUMS:
12 | Alamofire: ca8c0de6906873be89d6deec5c8de279e00bf872
13 |
14 | PODFILE CHECKSUM: d84ebebb047d141dd408e274999087348bed4ba3
15 |
16 | COCOAPODS: 1.7.2
17 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Alamofire : NSObject
3 | @end
4 | @implementation PodsDummy_Alamofire
5 | @end
6 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double AlamofireVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire.modulemap:
--------------------------------------------------------------------------------
1 | framework module Alamofire {
2 | umbrella header "Alamofire-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_LDFLAGS = $(inherited) -framework "CFNetwork"
4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_ROOT = ${SRCROOT}
8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire
9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
10 | SKIP_INSTALL = YES
11 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_ProjectTemplate : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_ProjectTemplate
5 | @end
6 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks-Debug-input-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${PODS_ROOT}/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks.sh
2 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks-Debug-output-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks-Release-input-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${PODS_ROOT}/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks.sh
2 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks-Release-output-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_ProjectTemplateVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_ProjectTemplateVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_ProjectTemplate {
2 | umbrella header "Pods-ProjectTemplate-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | ProjectTemplate.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 2
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Base/BaseNavigationController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseNavigationController.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseNavigationController: UINavigationController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | // Do any additional setup after loading the view.
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Base/BaseTabBarController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseTabBarController.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseTabBarController: UITabBarController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | // Do any additional setup after loading the view.
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Base/BaseViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseViewController.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | setupData()
16 | setupUI()
17 | }
18 |
19 | func setupData() {}
20 |
21 | func setupUI() {}
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/FriendsVC/FriendsViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FriendsViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class FriendsViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Home/Cells/HomeCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeCell.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class HomeCell: UITableViewCell {
12 |
13 | override func awakeFromNib() {
14 | super.awakeFromNib()
15 | // Initialization code
16 | }
17 |
18 | override func setSelected(_ selected: Bool, animated: Bool) {
19 | super.setSelected(selected, animated: animated)
20 |
21 | // Configure the view for the selected state
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Home/Cells/HomeCellViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeCellViewModel.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/20/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Home/HomeViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeViewController.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class HomeViewController: BaseViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | }
16 |
17 | override func setupUI() {
18 | title = App.Text.titleHome
19 | }
20 |
21 | override func setupData() {
22 |
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Home/HomeViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeViewModel.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/20/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/MessagesVC/MessagesViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessagesViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MessagesViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Messages"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/ProfileVC/ProfileViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ProfileViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ProfileViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Profile"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Define/App.Color.swift:
--------------------------------------------------------------------------------
1 | //
2 | // App.Color.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | extension App.Color {
13 | static var mainColor = UIColor.lightGray
14 | static var textColor = UIColor.black
15 | static var titleColor = UIColor.blue
16 |
17 | //....
18 | }
19 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Define/App.Key.swift:
--------------------------------------------------------------------------------
1 | //
2 | // App.Key.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension App.Key {
12 | static var authenToken = "....."
13 |
14 | static var admobID = "....."
15 | static var bannerID = "....."
16 | }
17 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Define/App.Text.swift:
--------------------------------------------------------------------------------
1 | //
2 | // App.Text.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension App.Text {
12 | //Information app
13 | static var appName = "Project Template"
14 |
15 | //Title
16 | static var titleHome = "Home"
17 | }
18 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Define/App.swift:
--------------------------------------------------------------------------------
1 | //
2 | // App.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct App {
12 | struct Key {}
13 |
14 | struct Text {}
15 |
16 | struct Color {}
17 | }
18 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Exts/Data.Ext.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Data.Ext.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | typealias JSON = [String: Any]
12 |
13 | extension Data {
14 | func toJSON() -> JSON {
15 | var json: [String: Any] = [:]
16 | do {
17 | if let jsonObj = try JSONSerialization.jsonObject(with: self, options: .mutableContainers) as? JSON {
18 | json = jsonObj
19 | }
20 | } catch {
21 | print("JSON casting error")
22 | }
23 | return json
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/API/Core/API.Manager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // API.Manager.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct APIManager {
12 | //MARK: Config
13 | struct Path {
14 | static let base_domain = "https://rss.itunes.apple.com"
15 | static let base_path = "/api/v1/us"
16 |
17 | static let music_path = "/itunes-music"
18 | static let music_hot = "/hot-tracks"
19 | }
20 |
21 | //MARK: - Domain
22 | struct Music {}
23 |
24 | struct Downloader {}
25 | }
26 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/Managers/AudioManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AudioManager.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/Managers/FileManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FileManager.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/Managers/LocationManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LocationManager.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/Objects/User.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class User {
12 | var name: String
13 | var age: Int
14 | var gender: Bool
15 |
16 | init(name: String, age: Int, gender: Bool) {
17 | self.name = name
18 | self.age = age
19 | self.gender = gender
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "icons8-refresh-32.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "icons8-refresh-64.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-32.png
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-64.png
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-groups-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/icons8-user-groups-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/icons8-user-groups-60.png
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/icons8-chat-96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/icons8-chat-96.png
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96 (1).png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/icons8-chat-96 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/icons8-chat-96 (1).png
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/icons8-user-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/icons8-user-60.png
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Views/Common/Button.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Button.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class Button: UIButton {
12 |
13 | /*
14 | // Only override draw() if you perform custom drawing.
15 | // An empty implementation adversely affects performance during animation.
16 | override func draw(_ rect: CGRect) {
17 | // Drawing code
18 | }
19 | */
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Views/Common/Label.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Label.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class Label: UILabel {
12 |
13 | /*
14 | // Only override draw() if you perform custom drawing.
15 | // An empty implementation adversely affects performance during animation.
16 | override func draw(_ rect: CGRect) {
17 | // Drawing code
18 | }
19 | */
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Views/Custom/FXSliderView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FXSliderView.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class FXSliderView: UIView {
12 |
13 | /*
14 | // Only override draw() if you perform custom drawing.
15 | // An empty implementation adversely affects performance during animation.
16 | override func draw(_ rect: CGRect) {
17 | // Drawing code
18 | }
19 | */
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Views/Custom/MyDatePickerView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MyDatePickerView.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MyDatePickerView: UIView {
12 |
13 | /*
14 | // Only override draw() if you perform custom drawing.
15 | // An empty implementation adversely affects performance during animation.
16 | override func draw(_ rect: CGRect) {
17 | // Drawing code
18 | }
19 | */
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/20CoreData/DemoCoreData/DemoCoreData.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/20CoreData/DemoCoreData/DemoCoreData.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/20CoreData/DemoCoreData/DemoCoreData.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/20CoreData/DemoCoreData/DemoCoreData.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/20CoreData/DemoCoreData/DemoCoreData.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/20CoreData/DemoCoreData/DemoCoreData.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DemoCoreData.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | 9E033D0F23AE19F800693E91
16 |
17 | primary
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/20CoreData/DemoCoreData/DemoCoreData/Models/CoreData/DemoCoreData.xcdatamodeld/.xccurrentversion:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | _XCCurrentVersionName
6 | DemoCoreData.xcdatamodel
7 |
8 |
9 |
--------------------------------------------------------------------------------
/20CoreData/DemoCoreData/DemoCoreData/Models/CoreData/User+CoreDataClass.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User+CoreDataClass.swift
3 | // DemoCoreData
4 | //
5 | // Created by Le Phuong Tien on 12/21/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 | //
9 |
10 | import Foundation
11 | import CoreData
12 |
13 | @objc(User)
14 | public class User: NSManagedObject {
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/20CoreData/DemoCoreData/DemoCoreData/Models/CoreData/User+CoreDataProperties.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User+CoreDataProperties.swift
3 | // DemoCoreData
4 | //
5 | // Created by Le Phuong Tien on 12/21/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 | //
9 |
10 | import Foundation
11 | import CoreData
12 |
13 |
14 | extension User {
15 |
16 | @nonobjc public class func fetchRequest() -> NSFetchRequest {
17 | return NSFetchRequest(entityName: "User")
18 | }
19 |
20 | @NSManaged public var age: Int16
21 | @NSManaged public var gender: Bool
22 | @NSManaged public var name: String?
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/20CoreData/DemoCoreData/DemoCoreData/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DemoCoreLocation.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/21CoreLocation/DemoCoreLocation/DemoCoreLocation/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/22MapView/DemoMap/DemoMap.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | DemoMap.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/no_image.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Screen Shot 2019-12-26 at 4.15.19 PM.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/no_image.imageset/Screen Shot 2019-12-26 at 4.15.19 PM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/no_image.imageset/Screen Shot 2019-12-26 at 4.15.19 PM.png
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/pin.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "pin.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/pin.imageset/pin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/pin.imageset/pin.png
--------------------------------------------------------------------------------
/23Realm/DemoRealm/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | # platform :ios, '9.0'
3 |
4 | target 'ProjectTemplate' do
5 | # Comment the next line if you don't want to use dynamic frameworks
6 | use_frameworks!
7 |
8 | # Pods for ProjectTemplate
9 | pod 'RealmSwift'
10 |
11 | end
12 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Realm (4.1.0):
3 | - Realm/Headers (= 4.1.0)
4 | - Realm/Headers (4.1.0)
5 | - RealmSwift (4.1.0):
6 | - Realm (= 4.1.0)
7 |
8 | DEPENDENCIES:
9 | - RealmSwift
10 |
11 | SPEC REPOS:
12 | https://github.com/cocoapods/specs.git:
13 | - Realm
14 | - RealmSwift
15 |
16 | SPEC CHECKSUMS:
17 | Realm: 5d1453468eca02c901c50b8a356f4a98a15b57aa
18 | RealmSwift: 1d238caa5c64a590c669beef1a7e858a6cf55a1c
19 |
20 | PODFILE CHECKSUM: dbfa2f5c3637ae2fc5f0a109a9b36a8c324c0cb4
21 |
22 | COCOAPODS: 1.7.2
23 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Controllers/Base/BaseNavigationController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseNavigationController.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseNavigationController: UINavigationController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | // Do any additional setup after loading the view.
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Controllers/Base/BaseTabBarController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseTabBarController.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseTabBarController: UITabBarController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | // Do any additional setup after loading the view.
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Controllers/Base/BaseViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseViewController.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | setupData()
16 | setupUI()
17 | }
18 |
19 | func setupData() {}
20 |
21 | func setupUI() {}
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Controllers/FriendsVC/FriendsViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FriendsViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class FriendsViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Controllers/Home/Cells/HomeCellViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HomeCellViewModel.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/20/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Controllers/MessagesVC/MessagesViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MessagesViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MessagesViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Messages"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Controllers/ProfileVC/ProfileViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ProfileViewController.swift
3 | // DemoTabbarController
4 | //
5 | // Created by Le Phuong Tien on 12/6/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ProfileViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | title = "Profile"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Define/App.Color.swift:
--------------------------------------------------------------------------------
1 | //
2 | // App.Color.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | extension App.Color {
13 | static var mainColor = UIColor.lightGray
14 | static var textColor = UIColor.black
15 | static var titleColor = UIColor.blue
16 |
17 | //....
18 | }
19 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Define/App.Key.swift:
--------------------------------------------------------------------------------
1 | //
2 | // App.Key.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension App.Key {
12 | static var authenToken = "....."
13 |
14 | static var admobID = "....."
15 | static var bannerID = "....."
16 | }
17 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Define/App.Text.swift:
--------------------------------------------------------------------------------
1 | //
2 | // App.Text.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension App.Text {
12 | //Information app
13 | static var appName = "Project Template"
14 |
15 | //Title
16 | static var titleHome = "Home"
17 | }
18 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Define/App.swift:
--------------------------------------------------------------------------------
1 | //
2 | // App.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct App {
12 | struct Key {}
13 |
14 | struct Text {}
15 |
16 | struct Color {}
17 | }
18 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Exts/Data.Ext.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Data.Ext.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | typealias JSON = [String: Any]
12 |
13 | extension Data {
14 | func toJSON() -> JSON {
15 | var json: [String: Any] = [:]
16 | do {
17 | if let jsonObj = try JSONSerialization.jsonObject(with: self, options: .mutableContainers) as? JSON {
18 | json = jsonObj
19 | }
20 | } catch {
21 | print("JSON casting error")
22 | }
23 | return json
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Models/API/Core/API.Manager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // API.Manager.swift
3 | // DemoNetworking
4 | //
5 | // Created by Le Phuong Tien on 12/17/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct APIManager {
12 | //MARK: Config
13 | struct Path {
14 | static let base_domain = "https://rss.itunes.apple.com"
15 | static let base_path = "/api/v1/us"
16 |
17 | static let music_path = "/itunes-music"
18 | static let music_hot = "/hot-tracks"
19 | }
20 |
21 | //MARK: - Domain
22 | struct Music {}
23 |
24 | struct Downloader {}
25 | }
26 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Models/Managers/AudioManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AudioManager.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Models/Managers/FileManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FileManager.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Models/Managers/LocationManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LocationManager.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Models/Objects/Book.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Book.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 1/2/20.
6 | // Copyright © 2020 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import RealmSwift
11 |
12 | final class Book: Object {
13 | @objc dynamic var title = ""
14 | @objc dynamic var subTitle = ""
15 | @objc dynamic var price = 0
16 |
17 | override static func primaryKey() -> String? {
18 | return "title"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Models/Objects/User.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | final class User {
12 | var name: String
13 | var age: Int
14 | var gender: Bool
15 |
16 | init(name: String, age: Int, gender: Bool) {
17 | self.name = name
18 | self.age = age
19 | self.gender = gender
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "icons8-refresh-32.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "icons8-refresh-64.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-32.png
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-64.png
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-groups-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/icons8-user-groups-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/icons8-user-groups-60.png
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/icons8-chat-96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/icons8-chat-96.png
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-chat-96 (1).png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/icons8-chat-96 (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/icons8-chat-96 (1).png
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "icons8-user-60.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/icons8-user-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/icons8-user-60.png
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Views/Common/Button.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Button.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class Button: UIButton {
12 |
13 | /*
14 | // Only override draw() if you perform custom drawing.
15 | // An empty implementation adversely affects performance during animation.
16 | override func draw(_ rect: CGRect) {
17 | // Drawing code
18 | }
19 | */
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Views/Common/Label.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Label.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class Label: UILabel {
12 |
13 | /*
14 | // Only override draw() if you perform custom drawing.
15 | // An empty implementation adversely affects performance during animation.
16 | override func draw(_ rect: CGRect) {
17 | // Drawing code
18 | }
19 | */
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Views/Custom/FXSliderView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FXSliderView.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class FXSliderView: UIView {
12 |
13 | /*
14 | // Only override draw() if you perform custom drawing.
15 | // An empty implementation adversely affects performance during animation.
16 | override func draw(_ rect: CGRect) {
17 | // Drawing code
18 | }
19 | */
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/23Realm/DemoRealm/ProjectTemplate/Views/Custom/MyDatePickerView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MyDatePickerView.swift
3 | // ProjectTemplate
4 | //
5 | // Created by Le Phuong Tien on 12/19/19.
6 | // Copyright © 2019 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class MyDatePickerView: UIView {
12 |
13 | /*
14 | // Only override draw() if you perform custom drawing.
15 | // An empty implementation adversely affects performance during animation.
16 | override func draw(_ rect: CGRect) {
17 | // Drawing code
18 | }
19 | */
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/24Demo/DemoSignInWithApple/DemoSignInWithApple.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/24Demo/DemoSignInWithApple/DemoSignInWithApple.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/24Demo/DemoSignInWithApple/DemoSignInWithApple/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/24Demo/DemoSignInWithApple/DemoSignInWithApple/DemoSignInWithApple.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.developer.applesignin
6 |
7 | Default
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/25UnitTest/DemoUnitTest/DemoUnitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/25UnitTest/DemoUnitTest/DemoUnitTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/25UnitTest/DemoUnitTest/DemoUnitTest/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/25UnitTest/DemoUnitTest/DemoUnitTest/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // DemoUnitTest
4 | //
5 | // Created by Le Phuong Tien on 8/12/20.
6 | // Copyright © 2020 Fx Studio. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | // Do any additional setup after loading the view.
16 | }
17 |
18 |
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure/Models/Music.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Music.swift
3 | // ProtocolVSClosure
4 | //
5 | // Created by Le Phuong Tien on 12/28/20.
6 | //
7 |
8 | import Foundation
9 |
10 | struct Music: Codable {
11 | var artistName: String
12 | var id: String
13 | var releaseDate: String
14 | var name: String
15 | var kind: String
16 | var copyright: String
17 | var artistId: String
18 | var artworkUrl100: String
19 | }
20 |
21 | struct MusicFeed : Codable {
22 | var results: [Music]
23 | }
24 |
25 | struct MusicResult: Codable {
26 | var feed: MusicFeed
27 | }
28 |
--------------------------------------------------------------------------------
/26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure/Resources/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/27AsyncAwait/01_async_await.playground/Pages/demo.xcplaygroundpage/Contents.swift:
--------------------------------------------------------------------------------
1 | //: [Previous](@previous)
2 |
3 | import UIKit
4 | import PlaygroundSupport
5 | PlaygroundPage.current.needsIndefiniteExecution = true
6 |
7 | func hamA() async -> String {
8 | await withCheckedContinuation({ c in
9 | Thread.sleep(forTimeInterval: 2.0)
10 | c.resume(returning: "AAAA")
11 | })
12 | }
13 |
14 | func hamB() async -> String {
15 | "BBBB"
16 | }
17 |
18 | async {
19 | print("#1")
20 | let a = await hamA()
21 | print("#2")
22 | let b = await hamB()
23 | print("\(a) & \(b)")
24 | }
25 | //
26 | //async {
27 | // print("#2")
28 | // await hamB()
29 | //}
30 |
31 |
32 | //: [Next](@next)
33 |
--------------------------------------------------------------------------------
/27AsyncAwait/01_async_await.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/27AsyncAwait/01_async_await.playground/playground.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo/data.txt:
--------------------------------------------------------------------------------
1 | 20
2 | 19
3 | 998
4 | 654
5 | 1
6 | 29
7 | 54
8 | 72
9 | 29
10 | 1000
11 | 876
12 | 578
13 | 34
14 | 561
15 | 82
16 | 234
17 | 546
18 | 932
19 | 999
20 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncSequenceDemo/BasicAsyncSequence.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncSequenceDemo/BasicAsyncSequence.playground/playground.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncStreamDemo/AsyncStreamBasic.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncStreamDemo/AsyncStreamBasic.playground/playground.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AsyncStreamDemo
4 | //
5 | // Created by Tien Le P. VN.Danang on 12/6/21.
6 | //
7 |
8 | import UIKit
9 |
10 | class ViewController: UIViewController {
11 |
12 | override func viewDidLoad() {
13 | super.viewDidLoad()
14 | // Do any additional setup after loading the view.
15 | }
16 |
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoAPI/DemoAPI.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoAPI/DemoAPI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoAPI/DemoAPI/API/APIError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // APIError.swift
3 | // DemoAPI
4 | //
5 | // Created by Tien Le P. VN.Danang on 6/25/21.
6 | //
7 |
8 | import Foundation
9 |
10 | enum APIError: Error {
11 | case error(String)
12 |
13 | var localizedDescription: String {
14 | switch self {
15 | case .error(let string):
16 | return string
17 |
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoAPI/DemoAPI/Entities/Category.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Category.swift
3 | // DemoAPI
4 | //
5 | // Created by Tien Le P. VN.Danang on 6/25/21.
6 | //
7 |
8 | import Foundation
9 |
10 | struct Category: Codable, Hashable {
11 | var strCategory: String
12 | }
13 |
14 | struct CategoryResult: Codable {
15 | var drinks: [Category]
16 | }
17 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoAPI/DemoAPI/Entities/Drink.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Drink.swift
3 | // DemoAPI
4 | //
5 | // Created by Tien Le P. VN.Danang on 6/25/21.
6 | //
7 |
8 | import Foundation
9 |
10 | struct Drink: Codable {
11 | var strDrink: String
12 | var strDrinkThumb: String
13 | var idDrink: String
14 | }
15 |
16 | struct DrinkResult: Codable {
17 | var drinks: [Drink]
18 | }
19 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/no-image.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "no-image.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/no-image.imageset/no-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/no-image.imageset/no-image.png
--------------------------------------------------------------------------------
/27AsyncAwait/DemoProjectAsync/DemoProjectAsync.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoProjectAsync/DemoProjectAsync.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoProjectAsync/DemoProjectAsync/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/27AsyncAwait/DemoProjectAsync/DemoProjectAsync/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/27AsyncAwait/DetachedTaskDemo2/DetachedTaskDemo2.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/DetachedTaskDemo2/DetachedTaskDemo2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/27AsyncAwait/DetachedTaskDemo2/DetachedTaskDemo2/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/27AsyncAwait/DetachedTaskDemo2/DetachedTaskDemo2/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/27AsyncAwait/NewConcurrency.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/27AsyncAwait/NewConcurrency.playground/playground.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/README.md:
--------------------------------------------------------------------------------
1 | # Async / Await
2 |
3 | Đây là phần mới được cập nhật trong `Swift 5.5`. Do đó, nếu bạn vô tình tới được đây thì bạn cần phải cài đặt:
4 |
5 | * Xcode 13 (beta)
6 | * Swift 5.5
7 |
8 | Bên cạnh đó bạn cần có một lượng kiến thức nhất định về Concurrency nữa.
9 |
10 | Và đây là thư mục chưa mã nguồn demo cho phần `async/await` cho các bài viết đến từ **Fx Studio**. Bạn có thể truy cập website [Fx Studio](https://fxstudio.dev/) để được cập nhật nhiều hơn.
11 |
12 | ---
13 |
14 | Cảm ơn bạn đã đọc bài viết này!
15 |
16 |
--------------------------------------------------------------------------------
/27AsyncAwait/TaskLocalDemo/TaskLocalDemo.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/27AsyncAwait/TaskLocalDemo/TaskLocalDemo.playground/playground.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/TaskLocalDemo/TaskLocalDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/TaskLocalDemo/TaskLocalDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/27AsyncAwait/TaskLocalDemo/TaskLocalDemo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/27AsyncAwait/TaskLocalDemo/TaskLocalDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/27AsyncAwait/Task_TaskGroup.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/27AsyncAwait/Task_TaskGroup.playground/playground.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/UnstructuredConcurrency/Task.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/27AsyncAwait/UnstructuredConcurrency/Task.playground/playground.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/UnstructuredConcurrency/UnstructuredConcurrency.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/27AsyncAwait/UnstructuredConcurrency/UnstructuredConcurrency.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/27AsyncAwait/UnstructuredConcurrency/UnstructuredConcurrency/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/27AsyncAwait/UnstructuredConcurrency/UnstructuredConcurrency/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/29Storyboard/DemoStoryboard/DemoStoryboard.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/29Storyboard/DemoStoryboard/DemoStoryboard.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/29Storyboard/DemoStoryboard/DemoStoryboard/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/29Storyboard/DemoStoryboard/DemoStoryboard/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/29Storyboard/DemoStoryboard/DemoStoryboard/ViewControllers/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // DemoStoryboard
4 | //
5 | // Created by Tien Le P. VN.Danang on 1/10/22.
6 | //
7 |
8 | import UIKit
9 |
10 | class ViewController: UIViewController {
11 |
12 | override func viewDidLoad() {
13 | super.viewDidLoad()
14 | // Do any additional setup after loading the view.
15 | }
16 |
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/29Storyboard/MultipleStoryboard/MultipleStoryboard/MultipleStoryboard.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/29Storyboard/MultipleStoryboard/MultipleStoryboard/MultipleStoryboard.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/29Storyboard/MultipleStoryboard/MultipleStoryboard/MultipleStoryboard/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/29Storyboard/MultipleStoryboard/MultipleStoryboard/MultipleStoryboard/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/30Keychain/KeychainDemo/KeychainDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/30Keychain/KeychainDemo/KeychainDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/30Keychain/KeychainDemo/KeychainDemo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/30Keychain/KeychainDemo/KeychainDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/30Keychain/keychain_001.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/30Keychain/keychain_001.png
--------------------------------------------------------------------------------
/30Keychain/keychain_002.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/30Keychain/keychain_002.png
--------------------------------------------------------------------------------
/31UserDefaults/DemoUserDefaults/DemoUserDefaults.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/31UserDefaults/DemoUserDefaults/DemoUserDefaults.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/31UserDefaults/DemoUserDefaults/DemoUserDefaults/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/31UserDefaults/DemoUserDefaults/DemoUserDefaults/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/32FileManager/WorkingWithFiles/WorkingWithFiles.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/32FileManager/WorkingWithFiles/WorkingWithFiles.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/32FileManager/WorkingWithFiles/WorkingWithFiles/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/32FileManager/WorkingWithFiles/WorkingWithFiles/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/32FileManager/WorkingWithFiles/WorkingWithFiles/Resources/hello_file.txt:
--------------------------------------------------------------------------------
1 | Hello, Fx Studio!
2 |
--------------------------------------------------------------------------------