Dominik Hofer
Dominik Hofer

Day 76 #100DaysOfSwiftUI

✅ Did some a11y reviews on my own

Pretty much consisted of spotting the issue (the hardest part) and then hiding elements and/or providing declarative labels.

Also scored 12/12 on the review test, which made me quite proud 😇

Dominik Hofer
Dominik Hofer

One of my favorite things to do after an #AppleEvent is browsing the new product websites.

Always so many delightful details to discover ✨

Dominik Hofer
Dominik Hofer

Day 74 #100DaysOfSwiftUI

✅ Intro to a11y

🔑 takeaways:
👉 Use labels to describe content
👉 Decorative images
👉 Hide unimportant elements to VoiceOver users
👉 .accessibilityElement()
👉 use .accessibilityAdjustableAction to give VoiceOver users custom actions

Show thread (2 posts)
Dominik Hofer
Dominik Hofer

Day 73 #100DaysOfSwiftUI

✅ Added some additional features on my own

Another project done 🥳

The main task here was to refactor the EditView to conform to MVVM. I found the initialization in the view itself quite interesting:

Dominik Hofer
Dominik Hofer

Is there a similar course to #100DaysOfSwiftUI but for #React or #Typescript?

Really like this format and I learn quite well with it 👨‍💻

Dominik Hofer
Dominik Hofer

Day 72 #100DaysOfSwiftUI

✅ Built the BucketList project (part III)

🔑 takeaways:
👉 ViewModel is a software architecture pattern (create view extension)
👉 View should only be responsible for displaying data
👉 Use private(set) in ViewModel
👉 You can encrypt data on save

Dominik Hofer
Dominik Hofer

Uno #009

The one app you probably use the most every day is your browser. Why not give it an upgrade?

The best new browser on the market is, without a doubt, Arc by @browsercompany.

Clean design and many great features you won't find elsewhere 🤩

Show thread (2 posts)
Dominik Hofer
Dominik Hofer

Day 71 #100DaysOfSwiftUI

✅ Built the BucketList project (part II)

🔑 takeaways:
👉 + Text() to combine texts
👉 Outsource as much cleanup work as possible to the data struct
👉 Reminder that nil coalescing is so useful

Dominik Hofer
Dominik Hofer

Day 70 #100DaysOfSwiftUI

✅ Built the BucketList project (part I)

🔑 takeaways:
👉 Add example data to types
👉 You can use optional variables to toggle sheets
👉 Set default state values with initializer and _variableName

Really like working with maps so far!

Show thread (2 posts)
Dominik Hofer
Dominik Hofer

Day 69 #100DaysOfSwiftUI

✅ Further intro to the BucketList project

🔑 takeaways:
👉 MapKit integrates natively into SwiftUI (and is quite pleasant to use)
👉 You can add FaceID pretty easily as well (needs permission)

Was surprised that this didn't need some UIKit-hacks 😮‍💨

Dominik Hofer
Dominik Hofer

Day 68 #100DaysOfSwiftUI

✅ Overview of the BucketList project

🔑 takeaways:
👉 If structs confirm to comparable protocol, they are sorteable
👉 You can save data directly to the documents directory
👉 Use enums to show different states of UI

Dominik Hofer
Dominik Hofer

Day 67 #100DaysOfSwiftUI

✅ Added some additional features on my own

Explored some more CIFilter options, there are surprisingly many!

Also learned that you can just disable views by checking if an optional is empty.

Dominik Hofer
Dominik Hofer

Yesterday, instead of completing the next day of #100DaysOfSwiftUI, I did something even more exciting.

I created my own lil app, a minimal Tichu counter 🃏

Pretty simple right now but if anyone wants to try it out, let me know :)

Dominik Hofer
Dominik Hofer

Uno #008

School has started and you're looking for a suitable notetaking app for students?

@rem_note is all you'll ever wish for: Easy to use interface based on nested bullet points and even better: The ability to easily create flashcards right from your notes to practice.

Show thread (2 posts)
Dominik Hofer
Dominik Hofer

Day 66 #100DaysOfSwiftUI

✅ Built the Instafilter project (part II)

Two things that bug me right now is that the gray background can be bigger than the image itself and that there is no success message (maybe these are going to be tomorrow's challenges 🤔).

Dominik Hofer
Dominik Hofer

Day 65 #100DaysOfSwiftUI

✅ Built the Instafilter project (part I)

🔑 takeaways:
👉 You can place optional views in UI

This day was a real blessing compared to yesterday 😂

But it's great to see how fast I can already build UIs by now!

Dominik Hofer
Dominik Hofer

Day 64 #100DaysOfSwiftUI

✅ Final introduction to the Instafilter project

🔑 takeaways:
👉 Use coordinator to create delegates (bridge to SwiftUI), which is pretty complicated
👉 Edit info of target for certain operations
👉 Saving an image also requires UIKit

Show thread (2 posts)
Dominik Hofer
Dominik Hofer

Day 63 #100DaysOfSwiftUI

✅ Further introduction to the Instafilter project

🔑 takeaways:
👉 CoreImage is the image manipulation framework (quite hard to get it to work though)
👉 You have to use UIKit sometimes inside of SwiftUI, which is possible (e.g. the photo picker)

Dominik Hofer
Dominik Hofer

Day 62 #100DaysOfSwiftUI

✅ Overview of the Instafilter project

🔑 takeaways:
👉 .onChange() is the best way to react to state changes
👉 .confirmationDialog() is an alert with multiple buttons

Funny that I've only learned about .onChange() yesterday 🤓

Dominik Hofer
Dominik Hofer

Didn't finish today's challenge for #100DaysOfSwiftUI, was way harder than I thought so far.

Will continue tomorrow ✌️

Dominik Hofer
Dominik Hofer

Day 60 #100DaysOfSwiftUI

✅ Created a personal CRM app

This app was not that hard UI-wise, but quite a challenge to get all the data stuff correctly.

Definitely not perfect, but solid I think :)

Read on for a few behind the scenes 👇

Show thread (6 posts)
Dominik Hofer
Dominik Hofer

Day 59 #100DaysOfSwiftUI

✅ Deep dive into CoreData (part III)

Extended the FilteredListView a bit and made it more versatile.

I especially liked the use of enums to ensure that only valid predicates are entered.

Below is my code, if anyone is interested 🤓

Dominik Hofer
Dominik Hofer

Day 58 #100DaysOfSwiftUI

✅ Deep dive into CoreData (part II)

🔑 takeaways:
👉 Use NSPredicate to filter query
👉 Make FetchRequests in subview (with SQL-like syntax)
👉 CoreData relationships

These were some fun but also complex topics today, was great :)

Dominik Hofer
Dominik Hofer

Day 57 #100DaysOfSwiftUI

✅ Deep dive into CoreData (part I)

🔑 takeaways:
👉 .self refers to the whole object → computes hash value
👉 Create a NSManagedObject subclass to handle optionality in one central place
👉 Check if changes were made to the moc
👉 NSMergePolicy

Show thread (2 posts)
Dominik Hofer
Dominik Hofer

Day 56 #100DaysOfSwiftUI

✅ Added some additional features on my own

This challenge wasn't that hard, but I got to reuse some concepts from previous lessons. Especially working with dates and unwrapping optionals with if let.

Dominik Hofer
Dominik Hofer

Day 55 #100DaysOfSwiftUI

✅ Built the Bookworm project (part II)

🔑 takeaways:
👉 Sort data in FetchRequest with a SortDescriptor
👉 Place ToolbarItems in different locations
👉 You can also use dismiss to go back to the last screen

Dominik Hofer
Dominik Hofer

Uno #007

Are you a student or someone who struggles to focus for a long time? Then you should definitely try a pomodoro timer!

The best app I found for this is @stayinsession by @philipyoungg.

Great design, great UX – really love all the thoughtful details.

Show thread (2 posts)
Dominik Hofer
Dominik Hofer

Day 54 #100DaysOfSwiftUI

✅ Built the Bookworm project (part I)

🔑 takeaways:
👉 Use constant bindings in previews
👉 Must use nil coalescing when displaying data from CoreData

Really like the rating view with the stars, my first proper reusable component!

Dominik Hofer
Dominik Hofer

Day 53 #100DaysOfSwiftUI

✅ Overview of the Bookworm project

🔑 takeaways:
👉 @ Binding for changing values in other views
👉 TextEditor for multiline text fields
👉 Intro to CoreData

I feel like with some CoreData skills, I'll finally be able to create my own real apps 🥳

Show thread (2 posts)
Dominik Hofer
Dominik Hofer

Day 52 #100DaysOfSwiftUI

✅ Added some additional features on my own

Like in the Moonshot project, I mainly got to refactor some of the code.

And I learned how valuable it is to create a “wrapper class”, which is much easier to make conform to the Codable protocol:

Dominik Hofer
Dominik Hofer

Things I ❤️ about building apps for : The lil details that work automagically.

E.g. the stepper component allows you to long-press a button to change the variable faster. After five iterations, the counter increases in speed.

Awesome!

Dominik Hofer
Dominik Hofer

Day 51 #100DaysOfSwiftUI

✅ Built the Cupcake Corner project (part II)

🔑 takeaways:
👉 You can create multiple class initialisers
👉 Codable, URLRequest and URLSession are a powerful combo
👉 Place async function call in button inside Task
👉 ! for force unwrapping

Dominik Hofer
Dominik Hofer

Great quote from todays lesson in #100DaysOfSwiftUI from @twostraws.

This is exactly the kind of design I'll try to implement in my apps.

Dominik Hofer
Dominik Hofer

Day 50 #100DaysOfSwiftUI

✅ Built the Cupcake Corner project (part I)

🔑 takeaways:
👉 Save data like types as static arrays in class
👉 Use indices property to get the indices of array
👉 Toggle view
👉 Put validations in data not view (computed property)

Show thread (2 posts)
Dominik Hofer
Dominik Hofer

Day 49 #100DaysOfSwiftUI

✅ Overview of the CupcakeCorner project

🔑 takeaways:
👉 Codable doesn’t work with @ Published, create custom initializer & encoder
👉 async/await and .task for loading data
👉 AsyncImage for loading images
👉 Validate & disable forms with .disabled()

Follow

RSS Feeds