book--hacking-with-swift/README.md

12 KiB

My project portfolio from following along with the book Hacking With Swift.

Shield.io MIT License Shield

Beginner 📕

# Project Topics Covered Progress
0 🛠
Introduction to Swift
playgrounds, constants & variables, data types, operators, string interpolation, arrays & dictionaries, conditional statements, control flow, functions & methods, optionals, enumerations, classes & structures, property observers, access control, typecasting, closures
1 📱
Storm Viewer
Xcode, UIKit, UIViewController, super, viewDidLoad(), FileManager, app bundles, try-catch blocks, Storyboards & Interface Builder, UITableView, UITableViewDelegate, UITableViewDataSource, UIImageView, UIImage, UIButton, Auto Layout, Outlets & Actions, UINavigationController, view stacking
2 🎮
Guess the Flag
UIButton, action handling, asset catalogs, retina displays & @2x and @3x images, UIControlState, CALayer, UIView, UIColor, CGColor, random numbers, UIAlertController, UIAlertAction, UILabel, Auto Layout and alignment
3 🛠 Social Media UIActivityViewController, UINavigationBar, UIBarButtonItem, #selector & @objc, Info.plist, privacy & permissions
4 📱
Easy Browser
WKWebView, URL, URLRequest, UIToolbar, UIProgressView, KVO (Key-Value Observing) design pattern (not sure if this is an optimal design for most cases, though), WKNavigationDelegate, classes (instances passed by reference) vs structs (instances passed by copy), class inheritance and protocol conformance
5 🎮
Word Scramble
string methods, NSRange, UITextChecker, lowercased(), IndexPath, anagrams, inserting rows into tables without reloading, UIAlertController text fields, constants can be declared w/o a value, as long as it's set before use
6a 🛠
Auto Layout
Ctrl-drag, Auto Layout Visual Format Language (including anchors, metrics, priority, and vertical/horizontal specifications)
6b 🛠
Guess The Flag V2
Ctrl-drag, Auto Layout Visual Format Language (including anchors, metrics, priority, and vertical/horizontal specifications)
7 📱
Near Earth Objects
UITabBarController, UITabBarItem, parsing JSON for structs that implement the Codable protocol, didFinishLaunchingWithOptions
8 🎮
Seven Swifty Words
addTarget(), enumerated(), index(of:), joined(), replacingOccurrences(), property observers, range operators, programmatic button event handling
9 🛠
Grand Central Dispatch
Grand Central Dispatch, async(), DispatchQueue.main, Quality of Service, global(), performSelector(inBackground:), never do UI work on a background thread
10 📱
Names to Faces
UICollectionView, UICollectionViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UIImagePickerController, UUID, Custom NSObject Classes, URLs for app directories, writing JPEG data to disk
11 🎮
Pachinko
CGFloat, SKSpriteNode, UITouch, SKPhysicsBody, circleOfRadius/rectangleOf for shaping physics bodies, SKPhysicsContactDelegate, SKActions — and adding them to nodes, SKLabelNode, SKEmitterNode, sprite drawing blend modes,
12a 🛠
Saving User Defaults & Data: NSCoding
UserDefaults + NSCoding/NSKeyedArchiver
12b 🛠
Saving User Defaults & Data: Codeable
UserDefaults + Codeable/JSONEncoder/JSONDecoder
13 📱
Instafilter
UISlider, CIImage, CGImage, CIContext, CIFilter, UIImageWriteToSavedPhotosAlbum, Using full function signatures with #selector
14 🎮
Whack-a-Penguin
SKCropNode, SKTexture, SKActions, GCD's asyncAfter(), SKAction.playSoundFileNamed, SKAction.wait, run(block:)
15 🛠
Core Animation
Swifty switch/case statements, animate(withDuration:), CGAffineTransform, view.transform, changing animatable properties of UIViews within an animation closure

Intermediate 📗

# Project Name Topics Learned Progress
16 📱
Safari Extension & JavaScript Injection
NSExtensionItem, plists (property lists), NSDictionary, NSExtensionJavaScriptPreprocessingResultsKey, UITextView, NSItemProvider, kUTTypePropertyList, keyboard notifications, NSValue, CGRect, CGPoint, CGSize, view.convert, UIEdgeInsets
17 🎮
Swifty Ninja
SKShapeNode, CGPath, UIBezierPath, AVAudioPlayer, CaseIterable & custom enums, SKAction sequences and groups, default method parameters
18 🛠
Debugging
print, assert, breakpoints, visual debugging, conditional breakpoints, lldb printing and expressions
19 📱
Capital Cities
MKMapView, MKAnnotation, MKPinAnnotationView, CLLocationCoordinate2D, dequeueReusableAnnotationView(), switching between different map styles
20 🎮
Fireworks Night
Timer, SKNode, SKAction.follow() and its awesome orientToPath option, motionBegan(), prefersStatusBarHidden, Timer.invalidate(), colorBlendFactor for SKSpriteNodes
21 🛠
Local Notifications
UNUserNotificationCenter, UNNotificationRequest, UNNotificationAction, UNNotificationCategory, UNUserNotificationCenterDelegate, UNNotificationDefaultActionIdentifier
22 📱
Detect-A-Beacon
iBeacons, Core Location, CLBeaconRegion, CLLocationManager, startMonitoring(for:), startRangingBeacons(in:), uuidgen, CLBeaconRegion, CLProximity
23 🎮
Space Race
per-pixel collision detection, advancing particle systems, adjust linear & angular damping, touchesEnded(), touchesMoved(), touchesBegan()
24 🛠
Swift Extensions
mutating methods, Protocol-Oriented programming, Self vs self, conventions regarding methods (generally, verbs) vs computed properties (generally, nouns/state), ExSwift
25 📱
Photo Share
MultipeerConnectivity, MCSession, MCBrowswerViewController, showConnectionPrompt(), MCPeerID, MCAdvertiserAssistant, MCSessionDelegate, MCBrowserViewControllerDelegate, MCSession.send
26 🎮
Marble Maze
categoryBitMask, collisionBitMask, contactTestBitMask, CMMotionManager, startAccelerometerUpdates, reading accelerometer data, compiler directives
27 🛠
Core Graphics
Core 👏 Graphics 👏, UIGraphicsImageRenderer, exporting images with UIGraphicsImageRenderer.image(), UIGraphicsImageRendererContext, CGContext, CGContext.addRect(), CGContext.addEllipse(), NSString.draw(with:), UIFont, NSMutableParagraphStyle(), drawing UIImages straight into a rendering context
28 📱
Secret Swift
Using the KeychainAccess library, resignFirstResponder(), NotificationCenter, UIApplication.willResignActiveNotification, LocalAuthentication, LAContext, canEvaluatePolicy(), .deviceOwnerAuthenticationWithBiometrics, evaluatePolicy(), privacy for Touch ID & Face ID, simulating Face ID with the Simulator
29 🎮
Exploding Monkeys
UIKit + SpriteKit, texture atlases, scene transitions, destructable terrain, using stride to create a sequence of evenly-spaced numbers 💥, HSB FTW 🎨
30 🛠
Instruments
Profiling applications with the Instruments app, view debugging, draw debugging, memory pressure debugging, Time Profile debugging

Advanced 📘

# Project Name Topics Learned Progress
31 📱
Multibrowser
UIStackView, iPad multitasking, addArrangedSubview(), WKNavigationDelegate, UITextFieldDelegate, UIGestureRecognizerDelegate, App Transport Security 🚧
32 📱
Swift Searcher
Dynamic Type, NSAttributedString, SFSafariViewController, SFSafariViewControllerDelegate, Core Spotlight, UIContentSizeCategoryDidChange 🔴
33 📱
Name That Tune
AVAudioRecorder, AVAudioSession, requestRecordPermission(), CloudKit, CKRecord, CKAsset, CloudKit Dashboard, CKQueryOperation, NSPredicate, CKRecord.Reference, fetch(withRecordID:), save(), CKQuerySubscription, NSSortDescriptor 🔴
34 🎮
Four in a Row
GameplayKit AI, GKGameModel, GKGameModelPlayer, GKGameModelUpdate, AI Heuristics, NSCopying, GKMinmaxStrategist 🔴
35 🛠
Random Numbers
Int.random(in:), Float.random(in:), Double.random(in:), CGFloat.random(in:), Bool.random(), arc4random(), GKRandomSource.sharedRandom(), GKLinearCongruentialRandomSource, GKMersenneTwisterRandomSource, GKARC4RandomSource, GKRandomDistribution, GKShuffledDistribution, GKGaussianDistribution, Fisher-Yates Algorithm, arrayByShufflingObjects(in:) 🔴
36 🎮
Crashy Plane
Composed Methods, Scale Modes, Parallax Scrolling, SpriteKit Physics, SKPhysicsContactDelegate, SKPhysicsBody, SKAudioNode, Managing Game State 🔴
37 🎮
Psychic Tester
WatchKit Extensions, 3D Touch, CAEmitterLayer, CAGradientLayer, @IBDesignable, @IBInspectable, transition(with:), WCSession, WKInterfaceLabel, WKInterfaceButton 🔴
38 🛠
Github Commits (Core Data)
NSFetchRequest, NSManagedObject, NSPredicate, NSSortDescriptor, NSFetchedResultsController, ISO8601DateFormatter 🔴
39 🛠
Unit testing with XCTest
XCTest, filter(), Test-Driven Development, Functional Programming, XCTestCase, Setting a Baseline, NSCountedSet, XCUIApplication(), XCUIElementQuery, UI Test Recording 🔴

Challenges 🥅

# Project Name Progress
0 🛠
Fizz Buzz
1 📱
World Flags
2 🎮
Hangman
3 📱
Storm Viewer 2 (Collection View)
4 📱
Country Facts
5 📱
Imitation Apple Notes App
🚧
6 🛠
Expanding on Extensions
7 🛠
Core Graphics Rainbow 🌈
8 📱
Private Photos App
KEY
📱 = App
🎮 = Game
🛠 = Technique
= Complete
🚧 = In Progress
🛑 = Not Started