Awesome
Project Portfolio
Beginner 🐣
# | Project | Topics Covered | Progress |
---|---|---|---|
0 | 🛠<br>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 | 📱<br>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 | 🎮<br>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 | 📱<br>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 | 🎮<br>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 | 🛠<br>Auto Layout | Ctrl-drag, Auto Layout Visual Format Language (including anchors, metrics, priority, and vertical/horizontal specifications) | ✅ |
6b | 🛠<br>Guess The Flag V2 | Ctrl-drag, Auto Layout Visual Format Language (including anchors, metrics, priority, and vertical/horizontal specifications) | ✅ |
7 | 📱<br>Near Earth Objects | UITabBarController, UITabBarItem, parsing JSON for structs that implement the Codable protocol, didFinishLaunchingWithOptions | ✅ |
8 | 🎮<br>Seven Swifty Words | addTarget(), enumerated(), index(of:), joined(), replacingOccurrences(), property observers, range operators, programmatic button event handling | ✅ |
9 | 🛠<br>Grand Central Dispatch | Grand Central Dispatch, async(), DispatchQueue.main, Quality of Service, global(), performSelector(inBackground:), never do UI work on a background thread | ✅ |
10 | 📱<br>Names to Faces | UICollectionView, UICollectionViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UIImagePickerController, UUID, Custom NSObject Classes, URLs for app directories, writing JPEG data to disk | ✅ |
11 | 🎮<br>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 | 🛠<br>Saving User Defaults & Data: NSCoding | UserDefaults + NSCoding/NSKeyedArchiver | ✅ |
12b | 🛠<br>Saving User Defaults & Data: Codeable | UserDefaults + Codeable/JSONEncoder/JSONDecoder | ✅ |
13 | 📱<br>Instafilter | UISlider, CIImage, CGImage, CIContext, CIFilter, UIImageWriteToSavedPhotosAlbum, Using full function signatures with #selector | ✅ |
14 | 🎮<br>Whack-a-Penguin | SKCropNode, SKTexture, SKActions, GCD's asyncAfter(), SKAction.playSoundFileNamed, SKAction.wait, run(block:) | ✅ |
15 | 🛠<br>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 | 📱<br>Safari Extension & JavaScript Injection | NSExtensionItem, plists (property lists), NSDictionary, NSExtensionJavaScriptPreprocessingResultsKey, UITextView, NSItemProvider, kUTTypePropertyList, keyboard notifications, NSValue, CGRect, CGPoint, CGSize, view.convert, UIEdgeInsets | ✅ |
17 | 🎮<br>Swifty Ninja | SKShapeNode, CGPath, UIBezierPath, AVAudioPlayer, CaseIterable & custom enums, SKAction sequences and groups, default method parameters | ✅ |
18 | 🛠<br>Debugging | print , assert , breakpoints, visual debugging, conditional breakpoints, lldb printing and expressions | ✅ |
19 | 📱<br>Capital Cities | MKMapView, MKAnnotation, MKPinAnnotationView, CLLocationCoordinate2D, dequeueReusableAnnotationView(), switching between different map styles | ✅ |
20 | 🎮<br>Fireworks Night | Timer, SKNode, SKAction.follow() and its awesome orientToPath option, motionBegan(), prefersStatusBarHidden, Timer.invalidate(), colorBlendFactor for SKSpriteNodes | ✅ |
21 | 🛠<br>Local Notifications | UNUserNotificationCenter, UNNotificationRequest, UNNotificationAction, UNNotificationCategory, UNUserNotificationCenterDelegate, UNNotificationDefaultActionIdentifier | ✅ |
22 | 📱<br>Detect-A-Beacon | iBeacons, Core Location, CLBeaconRegion, CLLocationManager, startMonitoring(for:), startRangingBeacons(in:), uuidgen , CLBeaconRegion, CLProximity | ✅ |
23 | 🎮<br>Space Race | per-pixel collision detection, advancing particle systems, adjust linear & angular damping, touchesEnded(), touchesMoved(), touchesBegan() | ✅ |
24 | 🛠<br>Swift Extensions | mutating methods, Protocol-Oriented programming, Self vs self , conventions regarding methods (generally, verbs) vs computed properties (generally, nouns/state), ExSwift | ✅ |
25 | 📱<br>Photo Share | MultipeerConnectivity, MCSession, MCBrowswerViewController, showConnectionPrompt(), MCPeerID, MCAdvertiserAssistant, MCSessionDelegate, MCBrowserViewControllerDelegate, MCSession.send | ✅ |
26 | 🎮<br>Marble Maze | categoryBitMask, collisionBitMask, contactTestBitMask, CMMotionManager, startAccelerometerUpdates, reading accelerometer data, compiler directives | ✅ |
27 | 🛠<br>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 | 📱<br>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 | 🎮<br>Exploding Monkeys | UIKit + SpriteKit, texture atlases, scene transitions, destructable terrain, using stride to create a sequence of evenly-spaced numbers 💥, HSB FTW 🎨 | ✅ |
30 | 🛠<br>Instruments | Profiling applications with the Instruments app, view debugging, draw debugging, memory pressure debugging, Time Profile debugging | ✅ |
Advanced 🦅
# | Project Name | Topics Learned | Progress |
---|---|---|---|
31 | 📱<br>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 | 📱<br>Swift Searcher | Dynamic Type, NSAttributedString, SFSafariViewController, SFSafariViewControllerDelegate, Core Spotlight, UIContentSizeCategoryDidChange, responding to the CSSearchableItemActionType activity during app startup to handle CoreSpotlight search hits | ✅ |
33 | 📱<br>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 | 🎮<br>Four in a Row | GameplayKit AI, GKGameModel, GKGameModelPlayer, GKGameModelUpdate, AI Heuristics, NSCopying, GKMinmaxStrategist | ✅ |
35 | 🛠<br>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 | 🎮<br>Crashy Plane | scale modes, parallax scrolling, SpriteKit Physics, SKPhysicsContactDelegate, SKPhysicsBody, SKAudioNode, managing game state with enums, restarting entire game scenes | ✅ |
37 | 🎮<br>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 | 🛠<br>Github Commits (Core Data) | All about Core Data 💪, NSFetchRequest, NSManagedObject, NSManagedObjectContext, NSPredicate, NSSortDescriptor, NSFetchedResultsController, ISO8601DateFormatter, Core Data relationships and attribute constraints | ✅ |
39 | 🛠<br>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 | 🛠<br>Fizz Buzz | ✅ |
1 | 📱<br>World Flags | ✅ |
2 | 🎮<br>Hangman | ✅ |
3 | 📱<br>Storm Viewer 2 (Collection View) | ✅ |
4 | 📱<br>Country Facts | ✅ |
5 | 📱<br>Imitation Apple Notes App | 🚧 |
6 | 🛠<br>Expanding on Extensions | ✅ |
7 | 🛠<br>Core Graphics Rainbow 🌈 | ✅ |
8 | 📱<br>Private Photos App | ✅ |
KEY |
---|
📱 = App |
🎮 = Game |
🛠 = Technique |
✅ = Complete |
🚧 = In Progress |
🛑 = Not Started |