Skip to content

Latest commit

 

History

History
269 lines (210 loc) · 20.5 KB

README.md

File metadata and controls

269 lines (210 loc) · 20.5 KB

100 Days of Swift Challenge 🚀

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

Study Structure

Days organized by folders containing

  • ressources consulted
  • notes sheet in markdown
  • playground and other Xcode run code files used for practice

🔨 Built With

📆 Schedule log

1️⃣ Introduction to Swift

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...

2️⃣ Consolidation I

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...

3️⃣ Starting iOS

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

4️⃣ Consolidation II

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

5️⃣ Web views, user input, and Auto Layout

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 iiUITextChcker & 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

6️⃣ Consolidation III

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

7️⃣ Codable, buttons and GCD

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)

8️⃣ Consolidation IV

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.

9️⃣ A whole new world

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

1️⃣ 0️⃣ Consolidation V

Now that you have conquered UICollectionViewController and Codable, 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

1️⃣ 1️⃣ Images and animation

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. 🚀

1️⃣ 2️⃣ Consolidation VI

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 🚀

1️⃣ 3️⃣ Maps and bugs

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.

1️⃣ 4️⃣ Consolidation VII

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

1️⃣ 5️⃣ Leveling up

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.

1️⃣ 6️⃣ Consolidation VIII

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.

1️⃣ 7️⃣ Beacons and bombs

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

1️⃣ 8️⃣ Consolidation IX

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

1️⃣ 9️⃣ Multipeer and motion

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

2️⃣ 0️⃣ Consolidation X

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

2️⃣ 1️⃣ The Final Countdown

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

2️⃣ 2️⃣ Consolidation XI

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

2️⃣ 3️⃣ Wrap up

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?

Acknowledgments

  • 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!