Here we go! This is the home of the efforts at taking on Hacking Swift's 100 Days of Swift challenge
Everything that is marked in comment (
.md
format> text
or/```swift/
blocks) is Paul Hudsons work I am taking notes on, and not my original thought unless otherwise indicated
Days organized by folders containing
- ressources consulted
- notes sheet in markdown
playground
and other Xcode run code files used for practice
- Markdown and custom snippets
- Swift
- Xcode (playgrounds)
- Asses from Hacking Swift Github project repo
The first 12 days provide a gentle warm up for your Swift learning. You’ll watch about a selection of one-minute videos every day, and complete short quizzes about each of those videos.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 01 | March 30 - 31 | ➡️ | Review of pre-challenge practice |
Day 02 | March 31 – April 1 | ➡️ | Recall tuples and dictionaries, how to create empty collections |
Day 03 | April 3 | ✅ | Allowed to write with _ as a seperator |
Day 04 | April 6, 9 | ➡️ | Looping ranges |
Day 05 | April 9 | ✅ | Parameter labels, default params, throwing functions, inout params |
Day 06 | April 11 | ✅ | Closures 💣 |
Day 07 | April 14, 19, 21 | ➡️ | Shorthand params, closures as params when they return values, returning closures |
Day 08 | April 21, 22, 23 | ➡️ | Property observers |
Day 09 | April 23, 29, 30 | ➡️ | lazy properties, static properties |
Day 10 | April 30, May 14 | ➡️ | to be reviewed... |
Day 11 | May 14, 25 | ➡️ | to be reviewed... |
Day 12 | May 26, 27, 28 | ➡️ | to be reviewed... |
You just learned a lot about Swift in only 12 days, so before we continue it's important you reflect on what you've learned: look for weak spots, re-watch videos, re-take tests, and so on, until you feel comfortable that you have mastered all the Swift language fundamentals covered in days 1-12.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 13 | June 4 | ✅ | to be reviewed... |
Day 14 | June 4, 5 | ➡️ | to be reviewed... |
Day 15 | June 5 | ✅ | to be reviewed... |
Now that you’ve mastered the basics of Swift, in these days you’ll start building real iOS apps using what you learned.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 16 | June 8 | ✅ | to be reviewed... |
Day 17 | June 11, 12, 15 | ➡️ | to be reviewed... |
Day 18 | June 17 | ✅ | Unwrapped with guard if faster than I expected! yay! |
Day 19 | June 18 | ✅ | Shortcuts to Auto Layout constraints cgColor |
Day 20 | June 25 | ✅ | Shuffle flags, correct score, quiz insights |
Day 21 | July 8 | ✅ | Project 2 challenges complete; Connecting all the right information at the right moment in the control of flow based on previous challenges. |
Day 22 | July 8, 17, August 6, 13 | ➡️ | Project 3 and chapter wrap up challenges; UIActivityControllers from start to finish |
In the last few days we covered some of the fundamentals of iOS development, and before we move on to the next set of projects it’s important to take a step back and review what you’ve learned.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 23 | August 13, 20, September 17 | ➡️ | Consolidation II : Starting iOS Milestones • 💥 tricky figuring out how to programatically fill in the table view with file manager in a clean way |
The next three projects we’re looking at will push your iOS skills further as you create some user interface in code, manage table views more carefully, and get some experience with closures.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 24 | September 24 | ✅ | Web Views, Project 4, part i • Very familiar because of FTV work |
Day 25 | October 1, 8, 14 | ➡️ | Web Views, Project 4, part ii • 🌐 WKNavigationActionPolicy and handling networking traffic in the view |
Day 26 | October 15 | ✅ | Web Views, Project 4, part iii • Wrap up quiz |
Day 27 | October 15, 17 | ➡️ | User Input, Project 5, part i Much needed closure review |
Day 28 | October 20 | ✅ | User Input, Project 5, part ii • UITextChcker & rangeOfMisspelledWord(in:) ✨ is a whole toolbox |
Day 29 | October 22 | ✅ | User Input, Project 5, part iii • attention to case sensitivity |
Day 30 | October 29 | ✅ | Auto Layout, Project 6, part i • Drag and drop on Interface Builder, Auto Layout Visual Format Language (VFL) |
Day 31 | October 29, November 5 | ➡️ | Auto Layout, Project 6, part ii • VFL pushed further |
You’ve learned about WebKit, UIAlertController, Auto Layout, and more – some more fundamentals of iOS development. Before we continue on to more projects, let’s take a moment to review what you’ve learned.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 32 | November 5, 12 | ➡️ | Review fundamentals and ShoppingList app challenge |
The next three projects we’ll be building projects where you meet some of the most important topics in iOS development: working with data from the internet, and taking advantage of the raw power of iOS devices. Of course, you’ll also be making useful products along the way!
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 33 | November 19 | ✅ | Project 7, part i • Review of codable, and parsing which was what I first learned. Embedding tabs was new! :) |
Day 34 | November 25, 29, December 10 | ✋ | Project 7, part ii • had major issue 💣 with SceneDelegate since examples were in Swift 4.2 rather than 5 – got help from FTV Guild |
Day 35 | December 10, 12, 13 | 👍 | Project 7, part iii • challenges were easy to go over. |
Day 36 | January 1, 7, 2021 | ➡️ | Project 8, part i • first playable project without storyboard, NSLayoutConstraints activation on views added programatically, different anchors |
Day 37 | January 8 | 👍 | Project 8, part ii • added button targets and game mechanics |
Day 38 | January 9, 10 | ➡️ | Project 8, part iii • challenge to add outline to view, negative score and errors messaging |
Day 39 | January 10 | ✅ | Project 9, part i • learned about the different types of threads and performSelector as alternative to DispatchQues |
Day 40 | January 12 | 👍 | Project 9, part ii • review what's dispatchable in previous projects (1, 7, 8) |
You’ve tackled some really big projects these last few days, not least learning about building a user interface in code and running code in background threads. It’s time to take a moment to review what you’ve learned.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 41 | January 13, 14, 17, 28 | <3 | Milestone, project 7-9 • Hangman review game challenge, inspired a personal challenge to make side project with custom assets now that I have the mechanics. |
The next three projects we’ll be making are markedly different from the previous 9 – you’ll learn about making grids rather than tables, learn how to make high-performance 2D games using SpriteKit, and, at last, learn how to save user data.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 42 | January 29 | ✅ | Project 10, part i • very straightforward setup of a Collection View which I've seen at work before |
Day 43 | January 30 | ✅ | Project 10, part ii • ImagePicker is super easy to take on though I expected to edit the plist , on IB need to be careful of auto-resizing settings |
Day 44 | February 4 | ✅ | Project 10, part iii • learned how to have the picker use the Camera instead and refactor a table view with a collection view – what the differences are. |
Day 45 | February 7, 10 | ➡️ | Project 11, part i • first introduction into SpriteKit ! 👾 So much fun! |
Day 46 | February 10, 11 | ✅ | Project 11, part ii • added collision handling and block adding mode |
Day 47 | February 11, 12 | 🚀 | Project 11, part iii • introduce to editing particles directly in Xcode, added collision cases, labels and chance counter – loved it, so intuitive! |
Day 48 | February 18, 23 | ➡️ | Project 12, part i • Save contact cards with UserDefaults |
Day 49 | February 25, March 4 | ➡️ | Project 12, part ii • Refactoring previous projects to add saving features relevant to their features |
Now that you have conquered
UICollectionViewController
andCodable
, it’s time to pause for a day and review what you learned – while also tackling a fresh challenge.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 50 | March 9 | 📝 | Milestone: Projects 10-12 • learned a lot planning out each and every commit, as well as being inspired by user clarknt 's example, also – a lot to study in terms of DispatchQue and UserDefault function externalisation, kicked back and watched some talks 📺 😎 |
Day 51 | April 1 | ✅ | Expanding your horizons, talks |
The next three projects we’ll be making move into the realm of richer user interfaces – you’ll learn about manipulating images using Core Image, animation views, and more.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 52 | April 5 | ✅ | Project 13, part i • set up project by practicing auto-layout, ImpagePicker import |
Day 53 | April 5 | ✅ | Project 13, part ii • working with CoreImages I added and switched filters, changed intesity and saved back to photos. |
Day 54 | April 6,8 | ✅ | Project 13, part iii • completed review challenges : error message display, filter change feature, and adding a radius slider – including re-adding constraints by hand to the storyboard so it was responsive. Some tricks I was able to recall from work, but others did not work as precisely as I'd like – but doesn't take away from how great it feels to be not so afraid of storyboards! 😂 |
Day 55 | April 11, 21, 24, 25 | ➡️ | Project 14, part i • A lot of interruptions over the past few weeks but introduced to asyncAfter for dispatching appearance/disappearance of penguins and change up the texture of SKSprites. |
Day 56 | May 3, 7, 10 | ❓ | Project 14, part ii • Ran into a lot of technical difficulties with wav and caf audio formats (that I'll return to later), but still came a way with a complete project |
Day 57 | May 11, 14, 16 | 😍 | Project 15, part i • Super fun first exploration of Core Animation which makes me think of how much easier animating may be in swift than with Adobe After Effects if I really tune into the documentation and practice different projects 😂 |
Day 58 | May 16 | ✅ | Project 15, part ii • Suprisingly inutive, the challenges just flew by. 🚀 |
We’ve covered some hugely important iOS technologies that you’ll be relying on time and time again, so let’s take a brief pause to recap what you’ve learned.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 59 | May 17, 20, 24 | 📝 | Milestone: Projects 13-15 • Created a MVP Countries of the World app that I plan on returning to and presenting in mobile guild at work in our code dojo 🚀 |
In the next three projects we’ll be edging a little further away from UIKit as we explore MapKit, Apple’s powerful and flexible mapping framework, then we’ll tackle a skill you’re more than ready for: debugging.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 60 | May 24, 25, 26 | ➡️ | Projects 16, part i • Began reorganizing git branches by chapter, Nice start to MapKit |
Day 61 | May 26 | ✅ | Projects 16, part ii • Linking together WKWebKit, alert controler knowledge to make a broader map navigation experience. |
Day 62 | May 27, June 10 | ➡️ | Projects 17, part i • It was tricky handling the sizing of iPad Pro screen and certain asset limits, but nodes were old hat. |
Day 63 | June 10, 17 | ➡️ | Projects 17, part ii • Pretty approachable and easy to place logic :) |
Day 64 | June 21, 23 | ➡️ | Projects 18, part i • I'd never seen assert() , breakpoint keyboard shortcuts before but peaks my interest in trying to really push for a TDD style of coding on a practice app. |
Day 65 | June 25, 26 | ➡️ | Projects 18, part ii • Putting into practice different types of breakpoints is so much more interested and easy that I realized! Gonna move away plain breakpoints here on out. |
Although these last few projects should have been nice and easy for you, it’s still worth pausing for a day to review what was learned and try out a fresh challenge.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 66 | October 10 | ↪️ | Milestone: Projects 16-18 • This milestone challenge came right before the major Olympics project at work and also served as a very useful Proof of Concept at work for a completely different company wide subject – something to return to |
We’re going to tackle two tough projects back to back, but in doing so you’ll start to really be amazed at the things you can build on iOS – brace yourself!
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 67 | November 3 | ➡️ | Projects 19, part i • |
Day 68 | November 7 | ✅ | Projects 19, part ii • |
Day 69 | November 14 | ⚪ | Projects 19, part iii • Already work with UserDefaults so extra time spend handling and managing a custom object isn't a new lesson, but worth circling back to practice after with a new timebox. |
Day 70 | November 18 | ✅ | Projects 20, part i • Set up project basics, good recall on Sprite kit nodes, and child/parent link and touch coordination |
Day 71 | November 18 | ✅ | Projects 20, part ii • Added explosion mechanics and did challenges which were great recall of previous points in earlier SpriteKit projects |
Day 72 | December 9 | ✅ | Projects 21, part i • Scheduling notifications locally with actions |
Day 73 | December 10 | ➡️ | Projects 21, part ii • Adding actions and feedback for action via alerts. Challenge 3 extra to come back to some other time. |
After two tough projects and yet another important technique, it’s time to hit the brakes for a day and double check everything is sinking in.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 74 | December 24, 26 | ⭐ | Milestone: Projects 19-21 • This was super satisfying to complete rather painlessly and feel how easily I can make design choices given how much better I understand UIKit and Swift today, relaxing on vacation. Definitely a project to return to later and make it shine – already have a running list of features and ideas. |
These next three projects will start to show you just how much you’re now able to build with iOS – your skills are really starting to flourish!
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 75 | December ~ | ~ | Projects 22, part i • |
Day 76 | December ~ | ~ | Projects 22, part ii • |
Day 77 | December ~ | ~ | Projects 23, part i • |
Day 78 | December ~ | ~ | Projects 23, part ii • |
Day 79 | December ~ | ~ | Projects 23, part iii • |
Day 80 | December ~ | ~ | Projects 24, part i • |
Day 81 | December ~ | ~ | Projects 24, part ii • |
Your head is probably spinning with Bezier paths and iBeacons, so before we continue on with more learning it’s important to take a day to pause and reflect on what has been covered.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 82 | December ~ | ~ | Milestone: Projects 22-24 • |
These next three projects give you chance to go over some earlier topics again, while also introducing some new frameworks such as MultipeerConnectivity and Core Motion.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 83 | December ~ | ~ | Projects 25, part i • |
Day 84 | December ~ | ~ | Projects 25, part ii • |
Day 85 | December ~ | ~ | Projects 26, part i • |
Day 86 | December ~ | ~ | Projects 26, part ii • |
Day 87 | December ~ | ~ | Projects 27, part i • |
Day 88 | December ~ | ~ | Projects 27, part ii • |
Day 89 | December ~ | ~ | Projects 27, part iii • |
As we enter the last few days of this challenge, it’s as important as ever to pause for a moment and review what you’ve learned these last few days.
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 90 | December ~ | ~ | Milestone: Projects 25-27 • |
Day 91 | December ~ | ~ | Core Graphics redux • |
These next three projects will start to show you just how much you’re now able to build with iOS – your skills are really starting to flourish!
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 92 | December ~ | ~ | Projects 28, part i • |
Day 93 | December ~ | ~ | Projects 28, part ii • |
Day 94 | December ~ | ~ | Projects 29, part i • |
Day 95 | December ~ | ~ | Projects 29, part ii • |
Day 96 | December ~ | ~ | Projects 29, part iii • |
Day 97 | December ~ | ~ | Projects 30, part i • |
Day 98 | December ~ | ~ | Projects 30, part ii • |
It’s time to recap all the things you’ve learned in the last few days, and start work on a big challenge to go out with. You’ve got this!
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 99 | December ~ | ~ | Milestone: Projects 28-30 • |
It’s time to see how much you remember from across the entire curriculum. Are you ready for this?
Challenge day | Calendar day | Within goaltime? | What was new? |
---|---|---|---|
Day 100 | December ~ | ~ | Final Exam • |
Epilogue | December ~ | ~ | What now? • |
- Big thanks to France Télévisions Mobile development guild for the inspiration to take up the challenge, and carving out the time to encourage me.
- 📌 Clarknt : 100 Days of Swift was a huge help and great example to follow when I was lost 👏 Thank you so much for sharing!