Skip to content

Project portfolio from following along with Paul Hudson's `Hacking with Swift` book/course

Notifications You must be signed in to change notification settings

CypherPoet/book--hacking-with-swift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project Portfolio

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, Adaptive UI (Size Classes and Dynamic Type), using StackView.removeArrangedSubview alongside WKWebView.removeFromSuperview
32 📱
Swift Searcher
Dynamic Type, NSAttributedString, SFSafariViewController, SFSafariViewControllerDelegate, Core Spotlight, UIContentSizeCategoryDidChange, responding to the CSSearchableItemActionType activity during app startup to handle CoreSpotlight search hits
33 📱
Name That Tune
All about CloudKit ☁️: loading and saving text data, loading and saving binary data, subscribing to CKRecord updates, delivering push notifications, CloudKit Dashboard and more; AVAudioRecorder; AVAudioSession; requestRecordPermission(); CKRecord; CKAsset; 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:), the importance of being able to seed the source of randomness 🌱
36 🎮
Crashy Plane
scale modes, parallax scrolling, SpriteKit Physics, SKPhysicsContactDelegate, SKPhysicsBody, SKAudioNode, managing game state with enums, restarting entire game scenes
37 🎮
WatchKit ESP Tester
View Controller containment, WatchKit Extensions, 3D Touch, CAEmitterLayer, CAGradientLayer, @IBDesignable, @IBInspectable, transition(with:), WCSession, WKInterfaceLabel, WKInterfaceButton, WCSessionDelegate overrides, passing messages between a phone and a paired watch
38 🛠
Github Commits (Core Data)
All about Core Data 💪, NSFetchRequest, NSManagedObject, NSManagedObjectContext, NSPredicate, NSSortDescriptor, NSFetchedResultsController, ISO8601DateFormatter, Core Data relationships and attribute constraints
39 🛠
Unit testing with XCTest
XCTest, Test-Driven Development in iOS, XCTestCase, setting a baseline, measure() NSCountedSet, XCUIApplication(), XCUIElementQuery, UI test recording, Continuous Integration with Xcode Server

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

About

Project portfolio from following along with Paul Hudson's `Hacking with Swift` book/course

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published