This is my repository for the 100DaysOfSwift challenge created by Paul Hudson.
All projects were either inspired by him or at least heavily influenced and instructed.
If you want to learn more about Swift I highly recommend his wonderful site Hacking with Swift with tons of well-written and educative articles and learning materials.
Also if you enjoy his work he has written a lot of books on Swift which you can find here (this is not sponsored in any way, I just think it's highly recommendable).
Below you can find the list of projects:
1. ๐ช Storm Viewer (Days 16 - 18)
Creating a simple image viewer with a detail page.
- Working with
FileManager
- Loading resources from Storage (
Bundle
) - Creating
TableView
s andTableViewCell
s in Storyboards - Simple Navigation
2. ๐ฉ๐ช Guess the Flag (Days 19 - 22)
Developing a flag guessing game which asks the user to guess contries of different flags.
- Auto Layout in Interface Builder
UIButton
s andLayer
s- Handling user input for
UIButton
s UIAlertController
3. ๐ Fun with Flags (Milestone - Day 23)
Allowing user to browse flags and show details for the country in a detail page.
- Custom
UITableView
andUITableViewCell
s UIActivityViewController
and sharing data- dequeuing
TableViewCell
s - repetition of navigation
4. ๐ฅ Easy Browser (Days 24 - 26)
Creating a basic browser rendering custom websites that the user can select.
- Intro to
WebKit
andWKWebView
- Using
.actionSheet
presentation style ofUIAlertController
- showing progress using
UIToolbar
andUIProgressView
5. ๐ค Word Scramble (Days 27 - 29)
Word game implemented in UIKit
making the user create own words from given strings.
- Capture lists:
weak
vs.unowned
vs.strong
- Reading
contentsOf
from disk - Receiving text input in
UIAlertController
- Checking text with
UITextChecker
andString
manipulations
6. ๐ Auto Layout (Days 30 - 31)
Playing around with Auto Layout in code with anchors and visual format language.
- Advanced Auto Layout (e.g.
aspectRatio
,anchors
) Visual Format Language
(VFL)
๐ Shopping List (Milestone - Day 32)
Building up a shopping list app with option to share the list.
- more
String
manipulations and slicing - inserting and deleting rows in
UITableView
s - sharing lists with
UIActivityViewController
7. ๐บ๐ธ Whitehouse Petitions (Days 33 - 35)
Loading data for current petitions at the White House and displaying statistics about it.
UITabBarController
- parsing JSON with
Codable
- rendering HTML with
loadHTMLString
- using
didFinishLaunchingWithOptions
inAppDelegate
8. ๐ค Swifty Words (Days 36 - 38)
Little game creating different words and allowing the user to combine different words together.
- creating UI in programmatically with Auto Layout
- Array and
String
manipulations likecomponents(separatedBy:)
andjoined(separator:)
- using property observers like
didSet
9. ๐ค Grand Central Dispatch (Days 39 - 40)
Introduction to background processing and taking computation away from the main thread.
GCD
basics and relieving the main thread- asynchronous code execution
- updating UI from other thread using
performSelector(onMainThread:)
๐ฎ Hangman (Milestone - Day 41)
Hangman clone created with UIKit
.
Character
as elements ofString
- loading data in backgorund using
GCD
- creating a game in
UIKit
10. ๐ Names to Faces (Days 42 - 44)
Load people's images and assign names to them that get saved.
- using
UICollectionView
withUICollectionViewCell
s - importing photos with
UIImagePickerController
- sublassing
NSObject
11. ๐ Pachinko (Days 45 - 47)
SpriteKit game challenging users to collect points and destroy objects.
- intro to
SpriteKit
- learning about elements like
SKSpriteNode
,SKLabelNode
,SKPhysicsBody
andSKEmitterNode
- creating
SKAction
s and chaining them - catching collisions with
SKPhysicsContactDelegate
How to save and load data from UserDefaults
.
- saving data in
UserDefaults
- using
NSCoding
in combination withNSKeyedArchiver
andNSKeyedUnarchiver
- using
JSONEncoder
andJSONDecoder
withCodable
๐ธ Capture Images (Milestone - Day 50)
Capturing images and storing them using Codable
.
- capturing images from the camera
- storing user data in
UserDefaults
- repetition of
Codable
,UITableView
and navigation
13. ๐ฎ Instafilter (Days 52 - 54)
Image manipulation app that makes use of iOS built-in filters with CoreImage
.
- using
UISlider
in the UI - applying filters using
CoreImage
andCIFilter
/CIContext
- writing images to the library using
UIImageWriteToSavedPhotosAlbum()
14. ๐ง Whack-a-Penguin (Days 55 - 56)
SpriteKit game were users need to be fast to hit disappearing penguins.
- more
SpriteKit
withSKCropNode
and customSKNode
s withmaskNode
s - action sequences with
SKAction
- using
zPosition
for stackingSKNode
s
15. ๐ซ Animation (Days 57 - 58)
Introduction to different animation types in UIKit
.
- using simple animations with
UIView.animate(withDuration:)
- applying
CGAffineTransform
with scaling, rotating and translating views - using spring, velocity and damping for more lively animations
๐ฒ๐ป Country Info (Milestone - Day 59)
Showing infos of different countries and allowing users to share facts about them.
- showing JSON encoded information with
Codable
- providing cool UI with navigation
- sharing country facts with
UIActivityViewController
16. ๐ Capital Cities (Days 60 - 61)
Creating a map with interesting events pinned that show more information on click.
- intro to
MapKit
withMKMapView
,MKAnnotation
andCLLocationCoordinate2D
- using
MKPinAnnotationView
s - changing map types with e.g.
.satellite
17. ๐ฐ Space Race (Days 62 - 63)
SpriteKit game that shows spaceship and needs to avoid hitting space objects.
- using more of
SKPhysicsBody
andSKPhysicsContactDelegate
to detect and show collisions between nodes - combine
Timer
,linearDamping
andangularDamping
to animate nodes
Introduction to debugging iOS apps with Xcode.
- debugging with
print()
vs.assert()
vs. breakpoints - view debugging of the UI with Capture View Hierarchy
18. ๐ช Shooting Gallery (Milestone - Day 66)
Creating a SpriteKit game similar to a shooting gallery.
- auto-creating differently colored and typed
SKNode
s - moving nodes and handling click targets
19. ๐ JavaScript Injection (Days 67 - 69)
Creating a Safari Extension with the option to run custom JavaScript.
- how to make a shell app and using
NSExtensionItem
- registering as a Safari extension
- editing multi-line text with
UITextView
20. ๐ Fireworks Night (Days 70 - 71)
SpriteKit game showing fireworks that the user needs to destroy.
- using
colorBlendFactor
onSKNode
s - creating paths using
UIBezierPath
s andorientToPath
- detecting swipe gestures to destroy multiple
SKNode
s at once
21. ๐ Local Notifications (Days 72 - 73)
Using local notifications in an app.
- getting started with
UNUserNotificationCenter
andUNNotificationRequest
- requesting authorization from the user for notifications
- acting on responses in notifications with
UNNotificationCategory
andUNNotificationAction
s
โ๏ธ Notes clone (Milestone Day 74)
Cloning the iOS Notes app as closely as possible.
- use
Codable
to save notes to a file - allow sharing with
UIActivityViewController
- keep editing history
22. ๐ Detect-a-Beacon (Days 75 - 76)
Use iBeacons to detect how far away objects are from the user.
- using
CoreLocation
andCLLocationManager
to ask for and detect the user location - detecting iBeacons using
CLBeaconRegion
- measuring proximity with
CLProximity
23. ๐ผ Swifty Ninja (Days 77 - 79)
Fruit Ninja clone with SpriteKit.
- using
SKShapeNode
andSKTexture
- creating action with
CGPath
andUIBezierPath
s - playing sound with
SKAction
andAVAudioPlayer
24. โจ Swift Strings (Days 80 - 81)
How to use NSAttributedString
with labels and text views.
- how to work with
String
s in Swift as they are not arrays - formatting
String
s withNSAttributedString
๐คฉ Swift language extensions (Milestone - Day 82)
Creating different language extensions that make it easier to use the features they implement.
- extension of
UIView
to have abounceOut(duration:)
method - adding a
times()
method toInt
that runs a closure as many times - provide a
remove(item:)
method forArray
s with theComparable
constraint
25. ๐คณ Selfie Share (Days 83 - 84)
Sharing selfies with multipeer connectivity.
- getting started with
MultipeerConnectivity
andMCSession
- identifying users with
MCPeerID
and looking for others withMCAdvertiserAssistant
andMCBrowserViewController
- sending data over the peer network and showing it in a
UICollectionView
26. ๐คท Marble Maze (Days 85 - 87)
Creating a rolling ball game for iPad with use of accelerometer.
- working with
categoryBitMask
,collisionBitMask
andcontactTestBitMask
- using
CMMotionManager
to access the accelerometer data from the device - runnign code only in simulator with
#if targetEnvironment(simulator)
- detecting contacting with collisions
27. ๐ Core Graphics (Days 88 - 89)
Using CoreGraphics
to draw directly to the screen.
- drawing in
CoreGraphics
withUIGraphicsImageRenderer
- using
setFillColor()
,setStrokeColor()
andsetLineWidth()
for custom drawing - drawing rectangles, ellipses, checkerboards, transforms and lines
- drawing images and text directly on the screen
๐คฌ Meme Generator (Milestone - Day 90)
Creating a meme generating app that draws user created text on user selected images.
- importing images
- drawing text in different places of the image using
CoreGraphics
- saving the manipulated image to user's photos library
Working through a custom CoreGraphics playground from Paul to practice drawing.
- getting more practice in drawing different shapes
- creating flags and checkerboards and icons from scratch with
CoreGraphics
28. ๐คซ Secret Swift (Days 92 - 93)
Save data using the keychain and limiting access with biometric authentication.
- writing and reading from the iOS Keychain with
KeychainWrapper
- using
NotificationCenter
to get notified when app enters the background - using biometric authentication using Touch ID or Face ID with the
LocalAuthentication
framework
29. ๐ Exploding Monkeys (Days 94 - 96)
SpriteKit game using CoreGraphics
and dynamic level creation and physics effects.
- filling paths with
SKTexture
s and using texture atlasses inSpriteKit
- drawing randomized nodes in certain bounds as building objects
- adding
UIKit
elements in theSpriteKit
game - using
presentScene()
to switch between scenes
Using Instruments in Xcode to detect slow running code, incorrect usage of main thread and memory allocations.
- using Time Profiler to detect length of execution of different code portions
- how to effectively draw shadows by adding a
shadowPath
withUIBezierPath
- analyzing and fixing object allocations (by dequeuing
UITableViewCell
s with Allocations tool
๐ Pairs (Milestone - Day 99)
Creating a memory game in UIKit with fancy animations and different topics and content.
- creating matching pairs and loading them
- using a
UICollectionView
to show different cards (with delayed reveal animation) - animating flipping of cards and drawing patterns on back of the cards (using
CoreGraphics
)
Completed the final test with Certificate of distinction (> 95% correct answers).