Last week i posted a video on my YouTube channel talking about my theme for 2020: Keeping it simple.
In terms of CodeWithChris, it’s really become a bit of a machine and there are so many moving parts that I really lost touch with how it all began… which is me coding and sharing.
So in 2020, my focus is to go back to doing that. Coding and sharing.
One of the ways that I intend to do that is by keeping a devblog about what I’m working on, what I’m learning, what’s been challenging me and how I’m growing as a person (developer, founder, father, husband, brother, son…)
I’ll talk mostly about coding but for the longest time, I’ve wanted some other outlet for personal thoughts. I thought about starting another YouTube channel but that never seemed like the right move either.
Now that I have this new direction with CodeWithChris to bring it back to its roots, i think this is the perfect place for me to share everything.
Thanks for reading/listening and I hope you stick around
Yesterday I sat down to continue my SwiftUI journey. There’s a lot of good stuff from the WWDC session videos and I find that they do a really good job of explaining things. Make sure you check those out if you haven’t already!
One of the things that just “clicked” for me is what an amazing job SwiftUI does at eliminating the need for a View Controller. I mean, it’s hard to wrap my head around NOT having a view controller because I’m so used to using it.
SwiftUI has several different ways to allow your views to bind directly to your data so that any updates to the data results in your views updating automatically. This used to be the job of the view controller and furthermore, you had to manually manage all of the view updating by yourself.
So I definitely think it’s a better way to build apps but I’m just waiting for it to mature a little bit before committing to using it completely. For now, I think I’ll continue to update my content with UIKit.
The photo is of a demo that I’m working on as part of my YouTube SwiftUI series. First I plan to demonstrate building this app the “dumb” way. Then I’ll illustrate the key SwiftUI concepts for data flow and view building and finally, we’ll refactor the app using the best practices.
To cap it off, we’ll have a challenge to take the app further. Fun times!
Yesterday, I finally got around to releasing the sixth lesson of my beginner SwiftUI series which culminates in building a simple slots app. (https://www.youtube.com/watch?v=51Z9Kun7tFo)
I took so long to release this lesson because I wanted to add some jazzy animations to it but I never got around to diving into SwiftUI animations and this series is way past due already.
Quick shoutout to Mark Moeykens (bigmountainstudio.com) because that’s where I’m going to get my SwiftUI animation education!
My next SwiftUI app is going to teach some more complex stuff and hopefully include some animations But first… i have to build it
Speaking of finishing off apps, there are a few that i started on YouTube that are still outstanding… (i’m terrible!)
I was in the process of building a Pomodoro Timer which I was going to integrate social features into and I was also going to do a Gratitude Journal app.
Lots to do… feeling a bit overwhelmed but excited to dig in!
PS. Do you guys have trouble focusing too? What’s your favorite way to unload and capture your thoughts so you can focus on the task at hand?
This code is some experimenting I’m doing with a image text recognition API… more on that in a sec.
I’ve been heads down working on upcoming videos for the channel… can’t wait to share them with you!
If you missed my February update video, I mentioned that I’m trying to lay down some ground work right now before going nuts with app series.
So stuff like tutorials for working with source control, some design basics, working with APIs etc.
Speaking of APIs, I rounded up your comments on which API I should show how to use and here are the results:
Spotify API
A Geolocation API
Tensorflow API
An OAuth example
Brokerage APIs
Machine Learning API
Weather API
Google Maps API
Facebook API
RapidAPI
Dropbox API (This one is my entry heh)
There’s some really interesting stuff! I think over time, I’ll show all of them but right now I want to use an example where we don’t have an SDK to use because I want to show how to put the parameters in the request header and body like in the screenshot.
That’s going to get us ready to do some interesting stuff together! So stay tuned for more videos and subscribe to my YouTube channel if you haven’t already! (youtube.com/codewithchris)
Do you get into these mental states where you feel scattered because you have too many things you want to accomplish simultaneously?
That’s been me recently…
There’s the stuff I want to do with you guys, here at CWC. Doing app series and progressing in the difficulty level as we’ve been talking about over the past weeks.
I also want to try making money with apps which would go hand in hand with the content for CodeWithChris. I imagine that there’s also a portion of you guys who want to do the same so this would be an interesting journey to go on together.
I also want to share my entrepreneurial lessons from building CodeWithChris into a full time business because it’s such a waste not to share and try to help others who aspire to build an online content business.
My wife and I want to start a family website/channel (mostly spearheaded by her) to share our recipes and stuff.
Finally, I also have an idea in the back my head for another non-tech YouTube channel which I may just never get around to doing.
You know what happens to me when I get scattered like this?
Ashamedly, i hit the escape button and drown myself in video games… totally achieving nothing. (except high scores i guess)
So today, i’ve finally had enough of this and I feel re-invigorated to tackle everything.
It’s good… i feel like a million bucks and I’m getting things done
(One of the downsides of working for yourself is that you have to be self-driven for long periods of time… for me, I go through good and bad periods.)
On a side note… Wow it seems like you guys really liked my last video on working with any API!
I was a bit surprised because I thought there was only a small segment of intermediate-advanced devs in my audience. I guess this tells me that there’s more of you out there than I think!
Last weekend, we had some friends over and one of them showed me a home security app idea that he was working on.
The interesting thing was that he was building it with Flutter!
He told me about how easy it was to get up and running, although he had some trouble compiling for iOS due to the libraries he was using. He had it working fine on Android.
Even more interesting, he had tried to use React Native first but he (and 2 other friends) found it really hard to get started with.
It got me interested and I’m thinking about checking out Flutter and React Native in the near future.
Do you have any habits you’ve been wanting to change but it just hasn’t been happening?
Well for me, it’s been those few hours after 10 pm when my kids have gone to bed. They’re still on the younger side so it’s physically and mentally draining. Often times, when my free time starts at 10 pm, every ounce of patience and willpower I had is gone.
I love them to death but after they’ve gone to bed, the last thing on my mind is doing something productive!
I’ve noticed that the trigger is the couch. If i go sit on the couch, i’ll turn on the tv and bring out the snacks. Not only am I wasting time but I’m also eating crap.
So recently, i’ve decided not to sit on the couch. Instead, i get ready for bed and get into bed. From there, I can read a book, go on my laptop, phone… whatever. (If i fall asleep, at least I’ll get enough sleep)
That actually stopped me from munching on snacks and I ended up redesigning badges for this forum! Heavily inspired by Apple Watch badges hehe
So if you’ve been trying to make a positive change, consider changing the environment rather than trying to fight it head on!
I have to confess that I’ve been so busy recording lessons and running the business that I haven’t made the time to learn, study and code for myself.
Seeing as how it’s WWDC week, it’s the perfect time to start documenting my learning journey again
In addition to updating this journal thread with my new discoveries and personal growth, I’ll also be live streaming my study/code sessions on YouTube (and maybe Twitch later).
There are so many good reasons to do this (and I wish I started doing this sooner):
It keeps myself accountable since I have to show up live
It may provide motivation for other people to join me and spend time learning or coding
It gives me an opportunity to interact with all of you in a live setting
I’m new to the whole process of streaming and it’s all a bit nerve wracking. For these study streams, I’m turning off the mic and I’ll be playing some lo-fi coding music (you can mute if it’s not your thing).
My stream schedule this week is here:
Links to the streams will appear on the schedule as they’re set up.
For today’s study stream, it’s going to be pretty easy. I’ll be watching WWDC and taking notes. If you want to interact with me via chat as you watch it too, just hop in the stream and say Hi!
If you missed WWDC or want a refresher, here are my notes for all the new features announced at Apple’s WWDC! I’m especially excited for building apps on iPad!
Great to see you in Journal land! It was good to see you on live YouTube as well! It makes way more sense now that I realize you were watching WWDC lol I was wondering what kind of a code session that was! Thanks for the notes!
Hey CodeCrew, while I watched Apple’s Platforms State of the Union broadcast where they talk about the new features in WWDC from a developer perspective, took the notes below to share with everyone.
In yesterday’s livestream, I was only able to go through the first half of this list so today, I’ll be continuing and reviewing the second half. (Url for all streams at CWC Stream Schedule)
Xcode Cloud
Continuous integration and delivery
Code, Test, Integrate, Deliver, Refine
Deeply integrated to Xcode
All apple platforms
Built on the cloud
Build, Test, Code signing
Integrates with Testflight, App Store Connect
Integrates to major Git based source control providers
Private and secure
Build
4 Steps to use Xcode Cloud
Select the product, confirm workflow, grant access to source code and link to app store connect
Auto detect product
review suggest workflow - Build every change made
Securely connect to hosted repo
Xcode will register app in app store connect
When build is finished, they’ll see the result within xcode
Tests
Can run multple test plans on multiple device simulators, platforms, OSes,
Can run on betas OSes too, without downloading the betas on your own system
Integrate
Can review pull requests, view comments and write comments from within Xcode
Deliver
Code signing in the cloud
No need to keep certificates and profiles up to date on your mac
Refine
Crash reports from testflight users from within Xcode
use the await keyword before calling the async function to indicate that other work can be done
Structured Concurrency
Structure your concurrent tasks in a more logical way
Actors
Safe concurrency
object that protects its own state
mutually exclusive access
can use “actor” keyword instead of “class” to create an actor type
Use the @MainActor keyword on a function to indicate that it is always run on the main thread.
You don’t have to use DispatchQueue.main.async
SwiftUI
modifiers for SwiftUI List
swipeAction modifier for a list
refreshable modifier - Pull to refresh
Limit a modifier to a single platform
searchable modifier - Add search field at the top of a list
can do search suggestions too
AccessibilityRotor modifier
helps with voice over
accessibilityRepresentation modifier to inherit the full accessibility implementation of another control
SwiftUI Table component
can do multi-columns
Material support
Lots of other new things like
Async images
location button
custom drag previews
async task management
Swift Playgrounds 4
learn how to code
create apps on ipad
can bring your work to Xcode
create a new project
has canvas preview on the right, code editor on the right
has code completion
has component library, where you can search for and add components, sf symbols and modifiers
Can take app full screen
Can send app to testflight from playgrounds
Need a developer account
Builds, packages and uploads to app store connect
Then you can go on app store connect to make it available to testflight
Augmented Reality
traditionally, you need knowledge on how to create 3D models
RealityKit 2
Simplifies rendering, audio, animation and physics
In this release, they made it easier to make 3D models
Object Capture
Simplifies creating 3D models (in minutes)
Use your phone to capture 2D images (all angles), bring it into your Mac to use the Object Capture API to turn it into a 3D model, optimized for AR
In Swift, use PhotogrammetrySession class in RealityKit to point to the folder of images
Then generate
Generates usdz files, which are optimized for AR quick look so you can use the 3D model in Messages, Mail, Safari and other apps
Can also generate Obj or Usd asset bundles to be used for ray tracing or other post production workflows
The clone app for iOS can help you capture all the necessary angles for an object
Unified Metal Graphics Platform
Combination of Apple M1 chip, Apple GPU and unified memory
Enables graphics intensive tasks and workflows across all Apple platforms
More console, triple A games on Apple platforms
More graphics intensive renders
Advanced Graphics and Gaming Features
Graphics and Compute Integration
Metal can now call dynamic libraries and ray query primitives directly from shaders
Stochastic motion blur function
Variable Refresh Rate Displays
More control over the display
Use metal presentation time API and ProMotion Display adapt latency and tune presentation times
macOS Monterey adds support for adaptive sync displays
Support for more game controllers
including latest PS and Xbox controls complete with dual sense and haptics
New API to enable on-screen, virtual controller with a few lines of code
New Graphics Tools in Xcode
Selective Shader Debugging
Choose which functions to debug within a large shader which cuts down debug time
Texture Converter tool
More control over the texture converter pipeline
More support for texture compression formats
Metal Debugger Timeline View
new view to visually debug the timeline of events
visualize bottle necks
Focus
Notifications
Currently all the same
This new API will allow apps to assign a level of urgency to the notification so they can be classified
Passive - don’t wake the device. Not time sensitive
Active - play a sound / haptic. Normal notification
Time Sensitive - visually stands out, and stays on the screen longer, announced by Siri if wearing AirPods
Critical - plays a sound even if the device is muted. Reserved for serious health and safety concern. Requires a separate entitlement which you need to get approval for.
Communication from people. If your app is related to communication between people, you can specify your notifications as such. Apple treats these differently. Feature user avatars
Notification Summary
Delivers as a bundle at a specified time so the user can go through them at a time of their chosing
To deliver real time notifications to the user, mark your app’s notifications as Time Sensitive. However, they should actually be time sensitive.
A notification summary features two notifications and the rest is bundled as a list.
Notifications with thumbnails are considered for featuring
If your app has multiple notifications in the summary, they’ll be ordered by the relevancy score that you specified for each notification when you sent it.
Do not disturb
Silences all notifications
With focus, user can choose which apps or people can get through the do not disturb
Your app can get the users current focus
Screentime and Parental Controls
Screentime API for building parental control apps
Managed Settings
Gives a way to restrict what a child can do across all devices
Set a number of restrictions
Family Controls
Authorizes your app to be able to set these controls and restrictions
Allows parents to select activities (apps, websites etc) that they want to prevent
The selected activities to block will be tokenized so your app can’t see this sensitive information
Device Activity
Can register time windows for when particular tokenized activities are allowed
Widgets
New extra large size for widgets
New default home screen layouts that feature widgets
The on device intelligence may suggest your widget for the user to add
Intents API allows your app to suggest information and the OS will determine if they want to take that information to suggest your widget
SharePlay
Group Activities Framework
Can sync media playback so everyone’s watching/listening in lock step
Reliable Data Channel
You can use Apple’s servers as a host to sync state across all users in a group activity
So you can do group activities not just for media playback
Doing a group study/code stream in 10 min. Come join the chat while you do your own coding and studying! https://youtu.be/e_erRV9zNB0
As for me, I’ll be trying to figure out how to save HLS streams for offline viewing during this session. We need this functionality for the upcoming CWC app