Brian Ganninger

The modern CLLocationManager (CLLocationMonitor, WWDC 2023)

While not originally on my want list they went the extra mile with slick #Swift concurrency support in a novel pattern. It’s the first time I’ve seen an async init used as a facade over a pool of named singletons. It’s also the first time I’ve seen AsyncSequence as a core portion of an OS API, …

There’s a simple way to clean out your LinkedIn feed if you’re not into everybody’s updates. Here you go: www.linkedin.com/feed/foll… Enjoy!

A quick primer on recursion

I thought it beneficial to capture this super simple example of recursion I tweeted because it’s usually scary, obtuse, or part of a larger topic. countdown(int i) { print(i); if (i > 0) countdown(i - 1) } This means countdown(5) would print the following: “5”, “4”, …

I just encountered a 400 line method. How it grew to this size and what it does make sense but that’s not tenable. Time to break it apart into readable, logical chunks for future maintainers. And then add the new feature 😉 #ProgrammingTips

When debugging or extending a particular area of code (like a file/object) I strive for a negative line change by removing unused methods and updating to modern styles and practices. Better for readability and binary both when done properly🤞#ProgrammingTips

Day 15: #ProjectUmma - explored watchOS APIs and restrictions. Started on app + extension, got assets together and the UI skeleton in place to mock up and test experience. Will build out fully and start wiring up next. 📱⌚️ #100DaysOfCode

Day 14: #ProjectUmma - built out a Today widget for complete session management from there as well (meets and exceeds 3D Touch actions & intents.) Only extension/destination left for MVP is watchOS. 📱 #100DaysOfCode

Day 13: #ProjectUmma - Basic (v1) intents are properly donated and working as expected 🙌🎉 Works with the Shortcuts app, Siri, and Siri Suggestions, tested on device and data confirmed in HealthKit. 🗣📱 #100DaysOfCode

I think my #100DaysOfCode strategy for #ProjectUmma will be 25 days for prototyping and MVP, 50 days for UI/UX explorations, and then 25 days to prep & ship 1.0 🤞📱

Day 12: #ProjectUmma - Siri intents are built out; wiring them up tomorrow when time allows. Same with donating them which will really unlock some use cases like detected recurring visits. 🗣📱⌚️ #100DaysOfCode

Looking for Xcode’s Siri intents that are based on your definition file while working with Swift? 😕 Use “Generated Interfaces” in the Related Items menu from the jump bar’s left side and you’ll find them in AppName-Swift.h 📖 #ProgrammingTips

Day 11: #ProjectUmma - built persistence for the data model, including coordinated access (hat tip to @atomicbird’s article) 📦🤝 Tested with app lifecycle and 3D touch actions on device. Siri intents are up next. 🗣📱 #100DaysOfCode

Day 10: #ProjectUmma - wired up 3D touch actions, started planning out shared data for app + extensions and also the Siri actions structure. Looking forward to bringing it all together over the next few days. 🗣📱📦 #100DaysOfCode

Day 9: #ProjectUmma - added 3D touch shortcuts for iOS home screen to start/stop session, view history; tested all aspects on 📱 🎉 Next up is wiring them up with storyboard navigation and state responses 🤞 #100DaysOfCode

TIL defining 3D touch application shortcuts doesn’t allow you to control which side the icon appears on… and it’s a bit random between first and third party apps alike (typically on the left but not guaranteed) #iOS #ProgrammingTips

Day 8: #ProjectUmma - 🎄- Integrated HealthKit, added the access prompt, wired up data entry to health store entries 🙌 Technically this means the MVP is ✅ Now I can start to branch out into 3D Touch, Siri, and then watchOS! #100DaysOfCode

Day 7 (finally): #ProjectUmma - built a functional UI to enter new data, wired up data model, confirmed calculations for a session 👍 Next up is persistence and presentation for any entered sessions. Ideas list continues to grow, heh. 🗣📱⌚️ #100DaysOfCode

Needed a temp icon for #ProjectUmma so in true DIY (develop it yourself) fashion I made this lovely little number. Not only am I on trend but clearly design is my future calling 🤪 #BetterThanBlank

Day 6: #ProjectUmma - implemented basic logic in a shared framework 📦 (data types, models, management) and started on a super simple UI to test it all out. Once that’s all verified in-memory I’ll move on to storage and retrieval. 🗣📱⌚️ #100DaysOfCode

Day 5: #ProjectUmma - Temporary branding/iconography in place along with basic app navigation structure. Planning out framework-apps-extensions balance currently before diving in on logic side. 🗣📱⌚️ #100DaysOfCode

Day 4: #ProjectUmma - pivoting to a new one for the time being, putting AR explorations (Appa) on backburner for the moment after exploring use cases IRL. Going for a well rounded app focused on streamlining some health data entry. Bootstrapping currently. 🗣📱⌚️ #100DaysOfCode

Day 3: #ProjectAppa - migrated over the sample #ARKit plane detection logic while formatting and reviewing it to ensure I understand concepts. Will add in ability to prefer horizontal visualization only. So far, so good but the #SceneKit ramp awaits… 🤞🤳 #100DaysOfCode

Day 2: #ProjectAppa - learned about and added a simple Siri intent for donating direct launch at common test locations. 🗣 Fixed iPhone X series inset issue. Planning out how I’d like to do the plane detection/origin prototype UI during my evenings. 🤳 #100DaysOfCode

Day 1: #ProjectAppa - #ARKit research started with sample code and project template installed on device. Settings bundle w/ debug controls added. Copious warnings enabled. Plane detection reimplementation in-progress to ensure I understand all the moving parts. 🤳 #100DaysOfCode

I’ve said it before and I’ll say it again: guard let varName = value else { return } is my jam. #ProgrammingTips