An exploration of Apple business news and technology. We talk about how businesses can use new technology to empower their business and employees, from Leo Dion, founder of BrightDigit.
ChatGPTovski with Kris Slazinski
Indie Developer, Kris Slazinski comes on to talk about App Store localization, UX, and his favorite intern/mentor - ChatGPT.GuestKris SlazinskiApps TwitterLinkedInMastodonThreadsAnnouncementsNeed help with your projects this year? BrightDigit has openings.Bushel on SaleCome to NYSwifty April 23 & 24 - Get 10% Off using Promo Code LeoSubscribe to our newsletterJoin our Brand New Patreon Page!Related EpisodesYak Shaving with Tim MitraPixelBlitz in Public with Martin LasekThe Bushel Holiday SpecialThe Making of Callsheet with Casey LissMy Taylor Deep Dish Swift Heroes World TourApples, Glasses, and HAL, Oh My!Posture Island with Jordi BruinIndie Dev #5 - Knowing Your Market with David BarnardIndie Dev #1 - Dark Noise by Charlie ChapmanPractical Entrepreneur with Donny WalsRelated Links Astro (ASO tool)Apple Localization Terms GlossarySocial MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoPatreon - brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Announcements
(02:01) - (App Store) Localization
(19:21) - ChatGPTovsky
(33:50) - UX vs UI
Thanks to our monthly supporters
Steven Lipton
★ Support this podcast on Patreon ★
1/28/2024 • 49 minutes, 38 seconds
PixelBlitz in Public with Martin Lasek
Martin Lasek comes on to talk about what's it's like building in public WishKit and his multiplayer game PixelBlitz and when feature creep can ruin an MVP.GuestMartin LasekTwitter (@martinlasek)Twitch (@martinlasek)YouTube (@martinlasek)Need help with your projects this year? BrightDigit has openings.Bushel on SaleCome to NYSwifty April 23 & 24 - Get 10% Off using Promo Code LeoSubscribe to our newsletterJoin our Brand New Patreon Page!Related EpisodesThe Bushel Holiday SpecialSwift Server Workgroup with Joannis OrlandosMy Taylor Deep Dish Swift Heroes World TourPizza, Playpen, and Fastlane Funding with Josh HoltzGoing Pro with Sean AllenPosture Island with Jordi BruinBackend Decisions with Mikaela CaronIndie Dev #5 - Knowing Your Market with David BarnardPractical Entrepreneur with Donny WalsRelated Links WishKitHeartwitchSocial MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoPatreon - brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - New Years Announcements
(04:00) - What does building in public mean?
(15:55) - What is PixelBlitz
(30:28) - What's an MVP
Thanks to our monthly supporters
Steven Lipton
★ Support this podcast on Patreon ★
1/15/2024 • 39 minutes, 30 seconds
The Bushel Holiday Special
Join us by the virtual fireplace this Christmas Eve for 'The Bushel Holiday Special' podcast episode! Unwrap the enchanting tale of Bushel's journey, filled with the warmth of festive storytelling and the magic of app development. Gather 'round for a holiday story like no other! 🎄🎁Pre-Order Bushel Today! Release Date December 15!Join our Brand New Patreon Page!Related Episodes
We Have All The Heroes with Stefano Mondino
It Depends with Brandon Williams
Now You Know What I'm Doing This Summer
How to WWDC with Peter Witham
Open and Extensible with Matt Massicotte
macOS by Tutorials with Sarah Reichelt
Microapps Architecture with Majid Jabrayilov
Supercharged with Pedro Piñera
My Taylor Deep Dish Swift Heroes World Tour
Pizza, Playpen, and Fastlane Funding with Josh Holtz
Fastlane with Josh Holtz
Related Links
Bushel of an App - From Seed of an Idea
Bushel of an App - Building the Crust
Bushel of an App - Design, Architecture, and Automation (December 18)
Bushel of an App - Making Cider from Apples (December 19)
What are the benefits of microapps?
A Swift Developer’s Guide To Getting The Most Out Of WWDC
Help Your Swift Team Learn: New APIs
RocketSim - Build Apps Faster
Hypervisor
Virtualization
Running macOS in a virtual machine on Apple silicon
Vapor: Fluent → Overview
saveMachineStateTo(url:completionHandler:)
NSFileVersion
insidegui/VirtualBuddy: Virtualize macOS 12 and later on Apple Silicon, VirtualBuddy is a virtual machine GUI for macOS M1, M2, M3
brightdigit/PackageDSL: Simplify the management of your Package.swift file with PackageDSL
joshdholtz/DeckUI: Swift DSL for writing slide decks in Xcode
brightdigit/FelinePine: Easy to use API for setting up logging and log categories across your architecture
synesthesia-it/Murray: Easily add features to your projects by scaffolding new files with Stencil templates
yonaskolb/XcodeGen: A Swift command line tool for generating your Xcode project
Tuist - Supercharge your Xcode development workflows
Custom Forms with No Server Code | Formspree
Eleventy, a simpler static site generator
Download iOS Firmware for iPhone, iPad, iPod Touch, Apple Watch, Apple TV and HomePod / IPSW Downloads
traderepublic/Cilicon: 🛠️ Self-Hosted ephemeral macOS CI on Apple Silicon
Tart - Tart
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoPatreon - brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Seed of an Idea
(09:12) - Building the Crust
(22:11) - Design, Architecture, and Automation
(35:09) - Making Cider from Apples
★ Support this podcast on Patreon ★
12/15/2023 • 45 minutes, 31 seconds
We Have All The Heroes with Stefano Mondino
Stefano Mondino from Synesthesia comes on to talk doing not product work at Synesthesia as opposed to building a product and working with multiple projects across various teams. We also talk about his favorite dev tools including his own tool Murray.Guest
Stefano Mondino
Twitter @puntoste
Mastodon @stefanomondino@mastodon.social
LinkedIn @stefanomondino
Pre-Order Bushel Today! Release Date December 15!Join our Brand New Patreon Page!Related Episodes
Swiftly Tooling with Pol Piella Abadia
Supercharged with Pedro Piñera
My Taylor Deep Dish Swift Heroes World Tour
Pizza, Playpen, and Fastlane Funding with Josh Holtz
Swift Package Index with Dave Verwer and Sven Schmidt
Developer Productivity with Rudrank Riyam
Swift Package Manager Super Powers with Marco Eidinger
Expert Swift with Shai Mishali
Fastlane with Josh Holtz
Conferences with John Wilker
Automation Fun with Jared Sorge
Related Links Murray Video (Coming Soon...?)Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoPatreon - brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - "Agency Work"
(12:37) - Going Cross-Platform 😱
(16:23) - Dev Tools
(26:33) - Murray
(35:14) - Swift Heroes
(40:13) - Supporting Older OSes
★ Support this podcast on Patreon ★
12/8/2023 • 44 minutes, 55 seconds
Calm Intentions with Alaina Kafkes
Alaina Kafkes from Calm joins us to talk about implementing App Intents and what she learning about her experience. Also special announcement regarding a certain app I've been working on.Guest
Alaina Kafkes (@alainakafkes) / XAlaina Kafkes | LinkedIn
Pre-Order Bushel Today! Release Date December 15!Related Episodes
The Making of Callsheet with Casey Liss
My Taylor Deep Dish Swift Heroes World Tour
App Clips with Jon Bauer
Posture Island with Jordi Bruin
Open and Extensible with Matt Massicotte
Connecting Wirelessly with Gui Rambo
Localization with Zach Brass
Accessibility with Kim Arnett
Related Links Calm's App Intents integration: how (and how not to) work with new Apple developer technologies — Calm BlogSocial MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Pre-Order Bushel
(01:03) - Intro and Public Speaking
(02:45) - What are App Intents?
(06:47) - Why App Intents
(11:16) - Coding Challenges
(17:21) - Components of App Intents
(21:24) - Multiplatform and Last Thoughts
★ Support this podcast on Patreon ★
12/3/2023 • 25 minutes, 40 seconds
Empowering Accessibility with Via Fairchild
Via Fairchild comes on the show to talk about accessibility, UI Kit, Swift UI and how it all brings your app to a wider more diverse audience.Guest
Via Fairchild
Via Fairchild | LinkedIn
Via (@codingmilf) / X
Via (@codingmilf@techhub.social) - Mastodon
Announcing a Brand New Patreon Page!Related Episodes
The Making of Callsheet with Casey Liss
Swiftly Tooling with Pol Piella Abadia
My Taylor Deep Dish Swift Heroes World Tour
Pizza, Playpen, and Fastlane Funding with Josh Holtz
Accessibility with Kim Arnett
Related Links
Perform accessibility audits for your app - WWDC23 - Videos - Apple Developer
Kano | Official Site
Curb cut effect - Wikipedia
Women Who Code - Empowering women to excel in tech careers | Women Who Code
UnderdogDevs - helping aspiring developers who are either formerly incarcerated or from a disadvantaged background.
Women in Tech Resources & Blog | Women in Tech Network
Scratch - Imagine, Program, Share
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Special Announcement
(01:23) - Why Accessibility
(05:27) - What APIs to Use
(14:22) - Making Accessibility a Priority
(18:24) - Diversity and Accessibility
★ Support this podcast on Patreon ★
11/19/2023 • 29 minutes, 44 seconds
Learning Judo with Sean Rucker
Sean Rucker from Judo comes on to talk about their product and what they learned in the process of building Judo in dealing with SwiftUI.Guest
Sean Rucker
Judo
X @seanrucker
Mastodon @seanrucker@mastodon.social
LinkedIn seanrucker
Related Episodes
Behind the Scenes of SwiftUI with Aviel Gross
WWDC 2022 - SwiftUI and UIKit with Evan Stone
What is Firebase with Peter Friese
Multi-Platform SwiftUI with Malin Sundberg
UI Design for Developers with Heidi Helen Pilypas
Related Links
Meet Judo: Blog
Developer Portal | Judo
4 Mistakes to Avoid When Designing Your iOS App UI
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - What is Judo
(02:13) - Designer/Developer Handoff Problem
(04:46) - SwiftUI and Design
(11:45) - SwiftUI vs Web Design
(21:08) - Judo SDK
★ Support this podcast on Patreon ★
11/4/2023 • 24 minutes, 59 seconds
The Making of Callsheet with Casey Liss
Casey Liss comes on to talk about his new app Callsheet, working with Movie and TV APIs, old TV hardware companies, and enjoying App Review on the beach.Guest
Casey Liss
Mastodon @caseyliss@mastodon.social
Analogue
Accidental Tech Podcast
Related Episodes
Pizza, Playpen, and Fastlane Funding with Josh Holtz | BrightDigit
Revisiting Third-Party APIs with Christian Selig | BrightDigit
Related Links
Playpen
The Movie Database (TMDB)
Rotten Tomatoes: Movies | TV Shows | Movie Trailers | Reviews - Rotten Tomatoes
Stream Movies & TV Shows | Plex
Channels — Watch TV Your Way
Movie Reviews, TV Reviews, Game Reviews, and Music Reviews - Metacritic
situational-accessibility-inclusive-design-microsoft.jpeg 880×1,432 pixels
Common Sense Media: Age-Based Media Reviews for Families | Common Sense Media
ViewModifier
redacted(reason:)
StoreKit Overview - Apple Developer
https://www.vulture.com/article/rotten-tomatoes-movie-rating.html
ATP 547: Own Your Pricing
ATP 545: My Butler Can’t Use It
ATP 544: Valid in a Marco Way
ATP 543: 100 Million Tire-Kickers
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - What is Callsheet
(05:52) - Secrets of Success
(10:17) - Delightful App
(14:42) - Design and API Challenges
(35:30) - StoreKit
(41:16) - AppReview Fun!
(51:00) - Favorite Features
(58:09) - Future Plans
(01:03:00) - Privacy and the Apple TV
(01:09:29) - C#
(01:16:55) - When are you going to change the theme song?
★ Support this podcast on Patreon ★
10/16/2023 • 1 hour, 22 minutes, 15 seconds
Swiftly Tooling with Pol Piella Abadia
Pol Piella Abadia comes on to talk about what's new in Xcode 15 as well as the landscape of CI tools out there. We aslo geek out about SwiftUI on the terminal and how Pol has helped production of the show.Guest
Pol Piella Abadia (blog)
Pol Piella (@polpielladev) / X
polpielladev (@polpielladev@iosdev.space) - Mastodon
@polpielladev (Github)
Pol Piella | LinkedIn
iOS CI Newsletter
Pol Piella Abadia - Bento
🔗 pol.link | Links to anywhere you can find me online!
Related Episodes
Supercharged with Pedro Piñera
Now You Know What I'm Doing This Summer
Platforms State of Union 2023 with Peter Witham
Pizza, Playpen, and Fastlane Funding with Josh Holtz
My Taylor Deep Dish Swift Heroes World Tour
Swift Package Index with Dave Verwer and Sven Schmidt
Developer Productivity with Rudrank Riyam
Fastlane with Josh Holtz
Automation Fun with Jared Sorge
Related Links
natemoo-re/clack: Effortlessly build beautiful command-line apps
🔗 pol.link | Links to anywhere you can find me online!
Coming in Swift 5.9: Network requests in Swift package plugins
Understanding mergeable libraries
Xcode 15: Automated accessibility audits
NowPlaying · Music discovery on iPad, iPhone and Apple Watch
QReate · Edit QR codes on macOS
rensbreur/SwiftTUI: SwiftUI for terminal applications
polpielladev/clack-swift
polpielladev 📱 | A blog about iOS mobile app development and Swift
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - What's new in CI?
(14:55) - Xcode 15
(19:44) - Macros
(23:05) - SwiftData
(29:32) - Swift Packages and CI
(31:03) - Accessibility Audits
(33:25) - QReate
(40:38) - Now Playing (the app)
(44:39) - SwiftUI in the Terminal
★ Support this podcast on Patreon ★
10/2/2023 • 51 minutes, 45 seconds
Building a Video SDK with Marc Schwieterman
Marc Schwieterman from daily.co joins us to talk about the in and outs of building a video SDK and what capabilities are for iOS.Guest
Marc Schwieterman marcschwieterman.com
Github @marcisme
Twitter @mschwieterman
Mastodon @marc@xoxo.zone
Daily
Related Episodes
Spatial Experiences of the Wild with Adrian Eves
It Depends with Brandon Williams
Empower Station with Matt Braun
Connecting Wirelessly with Gui Rambo
Related Links
Daily
Daily Client SDK for Python — daily-python documentation
How and why Daily is using Rust for our WebRTC API platform
Introducing Daily Adaptive HEVC for iOS native video
Video SDK Features: Build Video Calls into any UI or App - Daily
The Swift Package for the Daily Client on iOS
daily-ios-starter-kit
WWDC
Create a more responsive camera experience
Discover Continuity Camera for tvOS
Support external cameras in your iPadOS app
What’s new in voice processing
iPhone 15 Pro has an AV1 decoder but no encoder
Add support for visionOS targets · Issue #642 · rust-lang/compiler-team
Support Apple tvOS in libstd by thomcc · Pull Request #103503 · rust-lang/rust
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - What is Daily
(03:16) - Building an iOS SDK for Video
(16:19) - Swift UI
(28:12) - WWDC 2023
(33:06) - AV Foundation and Networking
(41:18) - Future Plans and AI
★ Support this podcast on Patreon ★
9/18/2023 • 43 minutes, 22 seconds
Action Button for Ring Tones with Evan Stone
It's September Time! You know what that means. Evan Stone joins us to talk about the different ways we can spend money as well as his adventures at Apple's Vision Pro Labs.Guest
Evan K Stone @evankstone@iosdev.space
iOS Dev Break
Interactive Logic
Related Episodes
Now You Know What I'm Doing This Summer
Arm Sling for Apple Watch Developers with Hidde van der Ploeg
Spatial Experiences of the Wild with Adrian Eves
Platforms State of Union 2023 with Peter Witham
Posture Island with Jordi Bruin
Dynamic Island with Steve Lipton
Related Links
Swift Remote Studio: It’s official. It's back!
Inside the Apple Vision Pro labs
Assistive Touch on the Apple Watch
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Overall Impressions
(02:41) - Apple Watch
(07:59) - Inspirational Video Ideas for Apple
(13:07) - Octavia Spencer Rocks
(16:07) - iPhone 15
(35:23) - Swift Remote Studio
(39:41) - Evan went to a Vision Pro Lab
★ Support this podcast on Patreon ★
9/13/2023 • 46 minutes, 31 seconds
Revisiting Third-Party APIs with Christian Selig
A lot has changed since the last time Christian Selig was on the show. We talk Apollo post-morten, Third-Party APIs and of course Pixel Pals!Guest
Christian Selig (website)
Twitter @ChristianSelig
Mastodon @christianselig@mastodon.social
YouTube CLeeSelig
Pixel Pals
Related Episodes
Now You Know What I'm Doing This Summer
My Taylor Deep Dish Swift Heroes World Tour
Pizza, Playpen, and Fastlane Funding with Josh Holtz
Apples, Glasses, and HAL, Oh My!
Elephant in the Room
Third-Party APIs with Christian Selig
Related Links
Reddit Post on Apollo Shutting Down
Daring Fireball - An Extra Kick In The Nuts With Christian Selig
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Origin Story
(05:07) - What Happened
(17:03) - Apollo Post-Mortem
(19:41) - Third-Party APIs Revisited
(23:40) - ChatGPT
(27:24) - On Yearly Subscriptions
(31:16) - Lost Features of Apollo
(34:08) - Pixel Pals and SwiftUI
★ Support this podcast on Patreon ★
8/28/2023 • 44 minutes, 20 seconds
It Depends with Brandon Williams
Brandon Williams from Point-Free comes on to talk about what dependencies are and managing then whether in testing or dealing with scaling.Guest
Brandon Williams @mbrandonw
Mastodon @mbrandonw@hachyderm.io
Point-Free
Point-Free @ Github
Related Episodes
Episode 80 - A Tour of Software Testing with Christina Moulton
Episode 144 - Yak Shaving with Tim Mitra
Episode 137 - Humane Development with Jill Scott
Episode 133 - The Composable Architecture with Zev Eisenberg
Episode 123 - Microapps Architecture with Majid Jabrayilov
Episode 93 - Test-Driven Development in Swift with Gio Lodi
Episode 107 - Expert Swift with Shai Mishali
Related Links
Swift AST Explorer
NYSwifty 23 | Take control of your dependencies, don't let them control you
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - EmpowerApps.Show
(00:03) - What's a dependency
(03:28) - Testing and Dependencies
(07:45) - Mocking Dependencies
(12:16) - Testing VS Persistance
(15:31) - Testing and the Community
(18:34) - Simulator and Dependencies
(21:18) - Testing Spectrum
(23:00) - Safety and Ergonomics
(33:11) - WWDC 2023
★ Support this podcast on Patreon ★
8/9/2023 • 41 minutes
Edge of Concurrency with Matt Massicotte
Matt Massicotte from Chime talks about the challenges he faced migrating the Async/Await and some misconceptions folks might have with asynchronous programming.Guest
Matt Massicotte - @mattiem@mastodon.socialChime
Related Links
Episode 132 - Open and Extensible with Matt Massicotte
Episode 98 - Async, Await and Combine with Marin Todorov
Episode 81 - Awaiting for Async with Vincent Pradeilles
Episode 155 - macOS Indie Deep Cuts with Aaron Vegh
Related Links
Preparing My App for Swift 6 by Cihat Gündüz
Semaphore by Gwendal Roué
What's the point of Primary Associated Types?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - What's (Not) New with ExtensionKit
(03:06) - Migrating to Async/Await
(10:59) - Dealing with Older APIs
(12:46) - On Swift 6
(18:59) - Locks and Semaphore
(24:48) - Swift Proposals
(27:31) - WWDC 2023
★ Support this podcast on Patreon ★
8/4/2023 • 31 minutes, 54 seconds
Swift Server Workgroup with Joannis Orlandos
Joannis Orlandos comes on to talk about the exciting work being done by the Swift Server Workground such as the new HTTP Types, Open API Kit, and Distributed Actors as well as the effects Macros will have on server-side development.Guest
Joannis Orlandos
Twitter (@JoannisOrlandos)
Github (@joannis)
Mastodon (@joannis@fosstodon.org)
Unbeatable Software
LinkedIn
Related Episodes
Episode 151 - Platforms State of Union 2023 with Peter Witham
Episode 127 - Backend Decisions with Mikaela Caron
Episode 154 - Supercharged with Pedro Piñera
Episode 90 - AWS and SOTO with Adam Fowler
Episode 75 - Year of the Server with Tim Condon - Part 2
Episode 49 - Vapor 4 with Tibor Bödecs
Episode 48 - Alternative Backends with Kristaps Grinbergs
Related Links
Vapor Discord
Hummingbird Discord
Swift Open Source Slack
Open Source Projects
Open API Generator
HTTP Types
webauthn-swift (Passkey)
OpenAPIKit
VaporOpenAPI
Macros
MongoNIO
We talked about
(00:00) - Swift Server Workgroup with Joannis Orlandos
(00:04) - Origin Stories
(06:39) - What is the Swift Server Workgroup
(10:18) - HTTP Types
(12:59) - WebAssembly
(15:54) - Swift Language Features
(22:36) - Authentication
(27:11) - OpenAPIKit
(33:06) - Macros
(37:24) - What's next for the SSWG
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/30/2023 • 41 minutes, 41 seconds
Now You Know What I'm Doing This Summer
In this episode, Leo goes over what he's working on this Summer of WWDC 2023 such as deep diving into watchOS 10 for Heartwitch, migrating from Combine to Observation in Bushel, and really taking advantage of a microapps architecture.Related Episodes
Episode 155 - macOS Indie Deep Cuts with Aaron Vegh
Episode 154 - Supercharged with Pedro Piñera
Episode 153 - Arm Sling for Apple Watch Developers with Hidde van der Ploeg
Episode 151 - Platforms State of Union 2023 with Peter Witham
Episode 152 - Spatial Experiences of the Wild with Adrian Eves
Episode 130 - macOS by Tutorials with Sarah Reichelt
Related Links
What are the benefits of microapps?
Heartwitch
Bushel
Virtualization Changes
How to run older versions of Xcode
SwiftyPlace (Karin Prater)
Address for Stickers - 5859 W Saginaw #182 Lansing MI 48917
We talked about
(00:00) - WWDC 2023 Stuff
(03:02) - Playing around with watchOS 10
(06:54) - Bushel and WWDC 2023
(08:32) - Swift Observation
(09:56) - Macros Macrons Macaroons Macros
(13:39) - Microapps and Bushel
(15:50) - Final Thoughts
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/25/2023 • 17 minutes, 39 seconds
macOS Indie Deep Cuts with Aaron Vegh
Aaron Vegh, indie macOS developer comes on to talk about building Quantum Author, a long-form writing app. We talk about how he decides what UI SDK to use, how to make money, and what the Vision Pro means for AppKit and the iPad.Guest
Aaron Vegh
Github @aaronvegh
Mastodon @Aaronvegh@mastodon.social
Quantum Author
Related Episodes
Episode 151 - Platforms State of Union 2023 with Peter Witham
Episode 152 - Spatial Experiences of the Wild with Adrian Eves
Episode 130 - macOS by Tutorials with Sarah Reichelt
Episode 106 - Mac Dev in 2021 with Daniel Jalkut
Episode 59 - The Future of Mac Development with Lucas Derraugh - Part 1
Related LinksQuantum AuthorWe talked about
(00:00) - Why Mac?
(05:27) - Where to Start?
(10:26) - On Vision OS
(13:40) - On the iPad
(24:47) - The "other" stuff
(30:34) - Making Money
(34:44) - What is Quantum Author?
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/14/2023 • 40 minutes
Supercharged with Pedro Piñera
Pedro Piñera of Tuist comes on to talk about his work on Tuist, thoughts on Mergable Libraries, Server-Side Swift, SwiftData, and the future of Tuist Cloud.Guest
Pedro Piñera
Github @pepicrft
Twitter @pepicrft
LinkedIn @Pedro Piñera
Mastodon @pepicrft@mastodon.social
Related Episodes
Episode 151 - Platforms State of Union 2023 with Peter Witham
Episode 126 - Developer Productivity with Rudrank Riyam
Episode 120 - Xcode Tips with Dominik Hauser
Episode 84 - Automation Fun with Jared Sorge
Related Links
TuistGithub @Tuist
XcodeGen
WWDC 2023 - Meet mergeable libraries
WWDC 2023 - Meet SwiftData
WWDC 2023 - Meet Swift OpenAPI Generator
We talked about
(00:00) - What is Tuist
(05:25) - What are Mergable Libraries
(09:48) - Modularity and SPM
(18:16) - Future of Tuist
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/30/2023 • 34 minutes, 59 seconds
Arm Sling for Apple Watch Developers with Hidde van der Ploeg
Hidde van der Ploeg comes on to talk about all the big updates coming to watchOS 10 such as new UIs, better developer experience, and more.Guest
Hidde van der Ploeg - @hiddevdploeg Mastodon - @hidde@mastodon.design
Related Episodes
Episode 151 - Platforms State of Union 2023 with Peter Witham
Episode 63 - Apple Watch 2020 with Steve Lipton
Episode 18 - WWDC 2019 - Apple Watch with Gary Sabo
Related Links
WWDC 2023 - Design dynamic Live Activities
WWDC 2023- Update your app for watchOS 10
Hidde's Apps
SundialKit
We talked about
(00:00) - Apple Watch Blues
(02:51) - Everything is Different
(12:25) - Hidde's Favorite Talks from WWDC 2023
(16:36) - SwiftUI Animations
(27:08) - visionOS
(32:58) - Watch App Store
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/24/2023 • 42 minutes
Spatial Experiences of the Wild with Adrian Eves
Adrian Eves tells us about what it was like meeting folks at WWDC and what it was like watching some his work and his colleagues' work come to fruition.Guest
Adrian Eves - @swifteves
Mastodon - @swifteves@mastodon.social
LinkedIn
Related Episodes
Episode 151 - Platforms State of Union 2023 with Peter Witham
Episode 82 - Game Development
Episode 38 - Accessibility with Kim Arnett
Related Links
WWDC 2023 - Meet Assistive Access
WWDC 2023 - Create accessible spatial experiences
WWDC 2023 - Enhance your iPad and iPhone apps for the Shared Space
We talked about
(00:00) - Tears of the Layoffs
(03:48) - Spatial Experiences of the Wild
(28:23) - Partnership of Unity
(30:31) - Macros of the Swift
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/19/2023 • 43 minutes
Platforms State of Union 2023 with Peter Witham
Peter comes on for our annual discussion of the WWDC 2023 Platforms State of the Union including Macs, Macros, Swift Data, watchOS, and the other thing 🥽.Guest
Peter Witham - Compileswift.com - Twitter
Related Episodes
CompileSwift - Apple WWDC23 Keynote reactions and analysis with Leo G. Dion
Episode 149 - How to WWDC with Peter Witham
Episode 124 - WWDC 2022 - Platforms State of the Union with Peter Witham
We talked about
(00:00) - Mac Hardware
(01:46) - Swift Macros
(06:48) - SwiftUI (4.0)
(14:54) - iOS 17
(16:53) - Swift Data
(23:47) - Camera Stuff
(28:38) - Xcode 15
(35:02) - watchOS 10
(44:28) - Vision Pro
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/6/2023 • 1 hour, 10 minutes, 58 seconds
My Taylor Deep Dish Swift Heroes World Tour
For the 150th episode, Leo talks about his travels to Deep Dish Swift and Swift Heroes, his experience speaking at Swift Heroes, his thoughts on 32 talks, and what concerns he heard from other developers overall and concerning WWDC 2023.Related Episodes
Episode 148 - Pizza, Playpen, and Fastlane Funding with Josh Holtz
Episode 139 - Elephant in the Room
Episode 133 - The Composable Architecture with Zev Eisenberg
Episode 131 - Dynamic Island with Steve Lipton
Episode 129 - NSSpain X with Luis Ascorbe
Episode 100 - 100th Episode Spectacular
Episode 88 - Conferences with John Wilker
Episode 50 - 50th Episode Extravaganza
Related Links
DeepDishSwift 2023: That's a Wrap by Danijela Vrzan
Themes from Deep Dish by Theo Vora
We talked about
(00:00) - My Travels
(03:55) - My Talk
(09:05) - 32 Talks
(33:53) - WWDC and Other Thoughts
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
5/14/2023 • 39 minutes, 35 seconds
How to WWDC with Peter Witham
Peter comes on to discuss how to prepare for WWDC, what to really do that week, and what to focus on during the summer.Guest
Peter Witham - Compileswift.com - Twitter
Related Episodes
Episode 124 - WWDC 2022 - Platforms State of the Union with Peter Witham
Episode 111 - 2021 - Year in Review with Peter Witham
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Episode 53 - WWDC 2020 - Quick Thoughts
Episode 44 - WWDC Spectacular (Part 2) with Peter Witham
Episode 43 - WWDC Spectacular (Part 1) with Peter Witham
Episode 29 - Managing iOS Development with Peter Witham
Episode 1 - WWDC 2018 - What Does It Mean For Businesses?
Related Links
Hacking with Swift - What's New in Swift 5.8
WWDC 2023 Discord
Dub Dub Together
WWDC Notes
iOS Dev Happy Hour
We talked about
(00:00) - Pace Yourself
(10:29) - Installing Betas
(19:11) - Headset Apps
(22:22) - Remote vs Live WWDC
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
5/1/2023 • 30 minutes, 40 seconds
Pizza, Playpen, and Fastlane Funding with Josh Holtz
Josh Holtz comes on to talk about a certain conference in a few weeks, the future of Fastlane, building kids apps with guided access and learning the other mobile programming language.Guest
Josh Holtz (website)
Twitter @joshdholtz
Mastodon @joshdholtz@mastodon.social
Related Episodes
Episode 84 - Automation Fun with Jared Sorge
Episode 24 - Continuous Integration with Kyle Newsome
Episode 91 - Fastlane with Josh Holtz
Episode 129 - NSSpain X with Luis Ascorbe
Episode 88 - Conferences with John Wilker
Related Links
fastlane.tools
fastlane screencasts
deep dish swift
RevenueCat
We talked about
(00:00) - Fastlane
(11:40) - Playpen
(25:53) - Dish Dish Swift
(37:43) - Trigger Warning
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/17/2023 • 47 minutes, 46 seconds
Going Pro with Sean Allen
Sean Allen joins the podcast to talk about what it means to be a pro developer, how to manage your career, and how to use social media to your benefit.Guest
Sean Allen - Twitter @seanallen_dev
Sean Allen - Youtube
Expert Advice to Learn iOS Dev & Swift FAST
Life-Changing Advice for Jr. Devs
Sean Allen - Teachable
Creator View app
Related Episodes
Episode 139 - Elephant in the Room
Episode 36 - Upgrading Your Skills in 2020 with Paul Hudson
We talked about
(00:00) - Beginner to Pro
(03:59) - The Tutorial Trap
(11:33) - Soft Skills
(21:27) - Profressional Networking
(33:42) - On Mastodon
(36:43) - Creator View
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/4/2023 • 45 minutes, 6 seconds
Apples, Glasses, and HAL, Oh My!
In this episode, we explore the exciting and rapidly changing landscape of iOS development, as we discuss the potential impact of AI, machine learning, and AR glasses on the future of mobile apps. We also make predictions about what Apple might unveil at WWDC 2023, and speculate about the secret plans they may have in store. With a mix of humor, quirkiness, and expert analysis, this podcast episode is a must-listen for anyone interested in the latest trends and developments in iOS app development.Guest (how I made the episode)
Generate Script, Title, Description, Links, Social Media Text
Text-to-Voice
Voice-to-Lips
Guest Photo
Album Art
DeepDreamGenerator
OpenAI
An introduction to AI language models
Related Links
Apple's AR glasses: What we know so far
How AI is transforming mobile app development
WWDC 2023: What to expect from Apple's next developer conference
We talked about
(00:00) - Introduce Special Guest
(00:18) - On Managing App Development
(02:18) - Trends in Mobile App Development
(02:33) - AI and Mobile Development
(07:41) - WWDC 2023 Predictions
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/1/2023 • 11 minutes, 25 seconds
Reality and Architecture with Mohammad Azam
Mohammad Azam (aka Azam Sharp) talks about RealityKit and how to get started as well as his recent article exporting large-scale SwiftUI app development.Guest
Mohammad Azam (Website)
Twitter (@azamsharp)
YouTube Channel - azamsharp
Building Large-Scale Apps with SwiftUI: A Guide to Modular Architecture
Related Episodes
Episode 144 - Yak Shaving with Tim Mitra
Episode 142 - Mobile System Design with Tjeerd in 't Veen
Episode 135 - Behind the Scenes of SwiftUI with Aviel Gross
Episode 121 - Server-Driven UI with Mohammad Azam
Episode 82 - Game Development with Tammy Coron
We talked about
(00:00) - RealityKit
(10:52) - SwiftUI Architecture
(24:01) - SwiftUI Navigation
(27:22) - SwiftUI Testing
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/21/2023 • 32 minutes, 18 seconds
Yak Shaving with Tim Mitra
Tim Mitra comes on to talk about the some skills which are helpful for large teams, also how to gauge Apple's rumors and of course yak shaving.Guest
Tim Mitra (website)
Mastodon @timmitra@mastodon.social
GitHub @Timmitra
Twitter @TimMitra
More Than Just Code Podcast
Spockcast Podcast
Pragmatic Hero's Journey
RoundaboutFM
Related Links
Learning Domain Driven Design
ATP Episode 520
Stringslint
Related Episodes
E142 - Mobile System Design with Tjeerd in 't Veen
E137 - Humane Development with Jill Scott
E123 - Microapps Architecture with Majid Jabrayilov
E76 - Scaling and Security with Jeroen Leenarts
E87 - Core Data Fun with Tim Mitra
We talked about
(00:00) - Help?
(01:09) - Video Games
(04:15) - Buzzwords and Trends
(09:36) - QA and Testing
(16:35) - Multi Disciplinary Engineering
(17:54) - Programming Language for Getting Started
(21:58) - Breaking Things Down
(26:40) - Domain Driven Design
(35:25) - Apple Rumors
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/7/2023 • 52 minutes, 53 seconds
dataTile for Simulator with Marin Todorov
Marin Todorov joins us to talk about his app dataTile for Simulator: how it uses logs to help developers, getting help from Apple, and his experience with SwiftUI on macOS.Guest
Marin Todorov - underplot.com
Twitter - @icanzilb
Mastodon - @icanzilb@mastodon.social
Blog - trycombine.com
Related Links
dataTile for Simulator
Bushel
RocketSim
Related Episodes
Episode 98 - Async, Await, and Combine with Marin Todorov
Episode 130 - macOS by Tutorials with Sarah Reichelt
Episode 140 - A Swiftly Year in Review with Antoine van der Lee
We talked about
(00:00) - What is dataTile for Simulator
(02:26) - Power of simctl
(07:26) - Sandboxing dataTile
(10:34) - SwiftUI on the Mac
(18:13) - Keeping it simple for developers
(25:52) - Reactivitiy, Performance, and Apple's Unified Log
(34:02) - Launching dataTile to the App Store
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/21/2023 • 40 minutes, 8 seconds
Mobile System Design with Tjeerd in 't Veen
Tjeerd in 't Veen comes on to talk about asking the right questions for requirements, interviews, testing, and keeping teams in sync.Guest
Tjeerd in 't Veen (Gumroad)
Mastodon @tjeerdintveen@mastodon.social
Twitter @tjeerdintveen
Mobile System Design: Tactical Engineering Swift In Depth
Youtube Video: https://youtu.be/FRMeny1gsqYRelated Episodes
Humane Development with Jill Scott
Impactful Development with Maxim Cramer
Scaling and Security with Jeroen Leenarts
Microapps Architecture with Majid Jabrayilov
We talked about
(00:00) - What is Mobile System Design
(03:40) - Asking the Right Questions
(06:13) - Error Handling and UI Design
(10:48) - Diagrams
(14:17) - Keeping Backend in sync with Mobile
(19:42) - Holistic Driven Development
(22:18) - Abstractions
(27:47) - Architecture Patterns
(34:55) - Testing
(44:32) - Interviews
(49:23) - The Book
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/7/2023 • 51 minutes, 23 seconds
Swift Package Index with Dave Verwer and Sven Schmidt
Guests
Dave Verwer - daveverwer.com
Mastodon @daveverwer@mastodon.social
Twitter @daveverwer
iOS Dev Weekly - Twitter @iOSDevWeekly
iOS Dev Jobs - Twitter @iOSDevJobsHQ
iOS Dev Directory
Sven A. Schmidt - finestructure.co
Mastodon @finestructure@mastodon.social
Twitter - @_sa_s
LinkedIn - Sven A. Schmidt
Youtube Video: https://youtu.be/DjgtYTEI7xQRelated Episodes
Episode 45 - Developer Community (Part 1) with Dave Verwer
Episode 46 - Developer Community (Part 2) with Dave Verwer
Episode 77 - Swift Package Index with Sven A. Schmidt
Episode 75 - Year of the Server with Tim Condon - Part 2
Episode 74 - Year of the Server with Tim Condon - Part 1
Related Links
Swift Package Index
Consider Supporting the Swift Package Index
Recognising Package Authors
Versioned DocC Documentation
We talked about
(00:00) - Introduction
(02:37) - Running the Largest open-source Vapor site
(09:49) - Implementing DocC
(13:57) - SPI YAML File
(21:44) - Search Improvements
(30:23) - Swift Package Registries
(36:18) - Growth of SPI
(46:56) - Supporting Swift Package Index
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
1/25/2023 • 49 minutes, 22 seconds
A Swiftly Year in Review with Antoine van der Lee
Guest
Antoine van der Lee
Twitter @twannl
SwiftLee
SwiftLee Weekly
Youtube Video: https://youtu.be/Zqwt6YyABkARelated Episodes
Episode 136 - Posture Island with Jordi Bruin
Episode 135 - Behind the Scenes of SwiftUI with Aviel Gross
Episode 129 - NSSpain X with Luis Ascorbe
Episode 124 - WWDC 2022 - Platforms State of the Union with Peter Witham
Episode 119 - Swift Package Manager Super Powers with Marco Eidinger
Episode 98 - Async, Await, and Combine with Marin Todorov
Episode 107 - Expert Swift with Shai Mishali
Related Links
Existential any in Swift explained with code examples
Some keyword in Swift: Opaque types explained with code examples
RocketSim
Stock Analyzer
[Pitch] Introduce existential `any`
“In addition to heap allocation and reference counting, code using existential types incurs pointer indirection and dynamic method dispatch that cannot be optimized away.”
We talked about
(00:00) - A Swiftly Year in Review with Antoine van der Lee
(02:22) - Conferences in 2022
(11:43) - Async/Await and Combine
(19:25) - Existential and Opaque Types
(26:18) - Stock Analyzer
(29:51) - RocketSim
(40:13) - 2023 Wishes and Predictions
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
1/11/2023 • 47 minutes, 26 seconds
Elephant in the Room
Youtube Video: https://youtu.be/jE43X-CwFag
(00:00) - Introduction
(00:53) - Rebuilding the Ship of Theseus
(07:32) - Social Media and the Elephant in the Room
(18:58) - Empower Station Blues
(25:43) - What I've Been Working On
(36:19) - My Favorite Architecture
(41:32) - Plans for 2023
Related Episodes
E117 - Empower Station with Matt Braun
E87 - Core Data Fun with Tim Mitra
E135 - Behind the Scenes of SwiftUI with Aviel Gross
E116 - Indie Dev #5 - Knowing Your Market with David Barnard
E115 - Indie Dev #4 - Making an App Best-in-Class with Jordan Morgan
E114 - Indie Dev #3 - Focused Work with Michael Tigas
E113 - Indie Dev #2 - Tasks by Mustafa Yusuf
E112 - Indie Dev #1 - Dark Noise by Charlie Chapman
Related Links
My equipment
Cloudlifter
Focusrite Scarlett Solo 3rd Gen
Shure MV7
My apps
gBeat
Heartwitch
Bushel
My swift packages
Sublimation
SyndiKit
SwiftTube
iosdev.space
LiveStreams
Bushel
Sublimation
Heartwitch Channel
Other Youtube Channel
Show Notes
What am I working on
What I am hoping to work on in 2023
Social Media Changes
Personal Adventures
Accomplishments for 2023
Apple Tech Blues
Social MediaTwitter Leo - @leogdionTwitter BrightDigit - @brightdigitLinkedIn - @leogdionGitHub - @brightdigitGitHub - @leogdionTikTok - @brightdigitMastodon - @leogdion@c.imYoutube - @brightdigitCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
12/29/2022 • 44 minutes, 47 seconds
App Clips with Jon Bauer
Guest
Jon Bauer
Mastodon @coveloper@mstdn.social
Twitter @coveloper
Youtube Video: https://youtu.be/dOnI2PGqql0Related EpisodesEpisode 33 - 2020 Developer Wish List with Alex BushRelated Links
The list of restricted frameworks
App Clips Official Documentation
Nametag Official Site
Jon Bauer: App Clips – When downloads are a dealbreaker - 360iDev 2022
Sponsorsswiftpackageindex.com is the place to find Swift packages.
over 5,000 packages indexed now, you’ll find a package that can help.
help you make better decisions about your dependencies.
host DocC-based documentation for package authors.
You can see how well maintained every package is, what platforms and Swift versions it’s compatible with based on real-world build data, how many other dependencies it will bring in and much more. Unlike an open-source library, running an open-source website requires ongoing time for maintenance and supporting package authors in addition to the time we spend on new features. Our work is primarily funded by you - the Swift communityIf the site has helped you find a package, or if you want to support a community-run open-source project, please go to swiftpackageindex.com, look for the pink heart, and join over a hundred other people who support our work through GitHub sponsors.Show Notes
What is an App Clip?
What is a good example of an app which should be an clip?
"But I don't want my user to only use the app once"
What are some technical limitations of an App Clip?
What's a good way to start an app which may be an app clip?
What's a good way to integrate an app clip in an existing app?
How do you get a user to move from an App Clip to an app (both technically and marketing-wise)
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInLeoCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - What are App Clips
(03:40) - Developer Experience
(12:50) - Starting From Scratch
(16:00) - App Store Setup
(29:55) - Testing Experience
(33:30) - App Clip to App
(36:25) - Future of App Clips
★ Support this podcast on Patreon ★
12/21/2022 • 39 minutes, 4 seconds
Humane Development with Jill Scott
GuestJill Scott
Twitter - @Jilsco9
Mastodon - @jilsco9@hachyderm.io
LinkedIn - Jillian Scott
Youtube Video: https://youtu.be/YVrHPCZnC50Related Episodes
Episode 39 - Managing Code Quality with Anne Cahalan
Episode 120 - Xcode Tips with Dominik Hauser
Episode 135 - Behind the Scenes of SwiftUI with Aviel Gross
Related Links Jill's Talk from 360iDevSponsorsswiftpackageindex.com is the place to find Swift packages.
over 5,000 packages indexed now, you’ll find a package that can help.
help you make better decisions about your dependencies.
host DocC-based documentation for package authors.
You can see how well maintained every package is, what platforms and Swift versions it’s compatible with based on real-world build data, how many other dependencies it will bring in and much more. Unlike an open-source library, running an open-source website requires ongoing time for maintenance and supporting package authors in addition to the time we spend on new features. Our work is primarily funded by you - the Swift communityIf the site has helped you find a package, or if you want to support a community-run open-source project, please go to swiftpackageindex.com, look for the pink heart, and join over a hundred other people who support our work through GitHub sponsors.We talk about...
(00:00) - What is Humane Development
(02:15) - Finding the Cleverest Solution
(05:45) - Bad Code Smells
(07:45) - Your Brain on Code
(11:30) - What you should do now
(20:30) - Accessible Code
(23:15) - Cognitive Overload and Teams
(31:30) - Cyclomatic Complexity
(36:00) - Final Thoughts
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInLeoCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
12/4/2022 • 37 minutes, 40 seconds
Posture Island with Jordi Bruin
Guest
Jordi Bruin @jordibruin
Gumroad
Vivid
Posture Pal
Youtube Video: https://youtu.be/5gYwCHhu_8kRelated Episodes
Episode 132 - Open and Extensible with Matt Massicotte
Episode 130 - macOS by Tutorials with Sarah Reichelt
Episode 112 - Indie Dev #1 - Dark Noise by Charlie Chapman
Related Links
2-2-2 Method Video
Apple Design Award Finalist
SponsorsStream - Free In-App Messaging SDK & UI Kits for iOS/SwiftStream Chat is the easiest way to add messaging to your iOS app. High-level UI components connect the Stream Chat API with minimal coding.
Try Stream Chat free for 30 days https://gstrm.io/empowerapps or
apply for your Maker Account, free forever for qualifying teams https://gstrm.io/empowerappsmaker
Try for freeBushel - the macOS virtual machine app for developersI'm looking for beta testers!
For developers who want to be rigorous and uncompromising in their app testing.
You can set up your virtual machine for almost any configuration, from a fresh, factory reset of the Ventura beta all the way back to Big Sur.
Test, simulate, roll back and debug apps and scripts however you need to without worrying about destroying your machine.
If you want to be invited to our first TestFlight, or even if you just want updates on Bushel, sign up at the website, and we will get in touch with you.swiftpackageindex.com is the place to find Swift packages.
over 5,000 packages indexed now, you’ll find a package that can help.
help you make better decisions about your dependencies.
host DocC-based documentation for package authors.
You can see how well maintained every package is, what platforms and Swift versions it’s compatible with based on real-world build data, how many other dependencies it will bring in and much more. Unlike an open-source library, running an open-source website requires ongoing time for maintenance and supporting package authors in addition to the time we spend on new features. Our work is primarily funded by you - the Swift communityIf the site has helped you find a package, or if you want to support a community-run open-source project, please go to swiftpackageindex.com, look for the pink heart, and join over a hundred other people who support our work through GitHub sponsors.Show Notes
Building with Private APIs
Selling Apps on Gumroad
Where Posture Pal came from
Importance of Localization
How CoreMotion works with Airpods
Dealing with Connection Issues
Testing Motion Data
Future of Apps and the Dynamic Island
Live Activities API and Dynamic Island
What is the 2-2-2 Method
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInLeoCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Who is Jordi Bruin?
(03:55) - How Posture Pal Works?
(11:15) - Airpods Challenges
(23:00) - Dynamic Island
(31:45) - 2-2-2 Method
★ Support this podcast on Patreon ★
11/21/2022 • 38 minutes, 38 seconds
Behind the Scenes of SwiftUI with Aviel Gross
GuestAviel Gross - @avielgrYoutube Video: https://youtu.be/G8I8xdGJB68Related Episodes
Episode 125 - WWDC 2022 - SwiftUI and UIKit with Evan Stone
Episode 98 - Async, Await, and Combine with Marin Todorov
Episode 73 - Multi-Platform SwiftUI with Malin Sundberg
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Related Links
Rebuilding Bēhance in SwiftUI by Aviel Gross
Twitter Thread on Properties in Swift
360iDev 2022 - Aviel Gross SwiftUI Performance for Demanding Apps
Great SwiftUI by Aviel Gross
WWDC2020 - WWDC Data Essentials in SwiftUI
Combine: Asynchronous Programming with Swift by Florent Pillet, Marin Todorov and Shai Mishali
SponsorsStream - Free In-App Messaging SDK & UI Kits for iOS/SwiftStream Chat is the easiest way to add messaging to your iOS app. High-level UI components connect the Stream Chat API with minimal coding.
Try Stream Chat free for 30 days https://gstrm.io/empowerapps or
apply for your Maker Account, free forever for qualifying teams https://gstrm.io/empowerappsmaker
Try for freeBushel - the macOS virtual machine app for developersI'm looking for beta testers!
For developers who want to be rigorous and uncompromising in their app testing.
You can set up your virtual machine for almost any configuration, from a fresh, factory reset of the Ventura beta all the way back to Big Sur.
Test, simulate, roll back and debug apps and scripts however you need to without worrying about destroying your machine.
If you want to be invited to our first TestFlight, or even if you just want updates on Bushel, sign up at the website, and we will get in touch with you.swiftpackageindex.com is the place to find Swift packages.
over 5,000 packages indexed now, you’ll find a package that can help.
help you make better decisions about your dependencies.
host DocC-based documentation for package authors.
You can see how well maintained every package is, what platforms and Swift versions it’s compatible with based on real-world build data, how many other dependencies it will bring in and much more. Unlike an open-source library, running an open-source website requires ongoing time for maintenance and supporting package authors in addition to the time we spend on new features. Our work is primarily funded by you - the Swift communityIf the site has helped you find a package, or if you want to support a community-run open-source project, please go to swiftpackageindex.com, look for the pink heart, and join over a hundred other people who support our work through GitHub sponsors.Show Notes
How migrating from UIKit
Terminology Confusion
How SwiftUI detects changes
SwiftUI mistakes
Combine vs Async/Await
What is a POD?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInLeoCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Migrating to SwiftUI at Adobe
(05:45) - SwiftUI and Performance
(15:00) - How SwiftUI Detects Changes
(27:50) - Architectures and Patterns
(36:30) - Combine and Async
(44:45) - Why Internalized Views
(51:00) - What to do right now
★ Support this podcast on Patreon ★
11/7/2022 • 54 minutes, 46 seconds
Impactful Development with Maxim Cramer
Guest
Maxim Cramer - mennenia.comTwitter @mennenia
Youtube Video: https://www.youtube.com/watch?v=g-xWEdAaOTcRelated Episodes
Episode 101 - How to Learn New APIs with Stewart Lynch - Part 1
Episode 102 - How to Learn New APIs with Stewart Lynch - Part 2
Related Links Made to Stick: Why Some Ideas Survive and Others Die by Heath BrothersSponsorsStream - Free In-App Messaging SDK & UI Kits for iOS/SwiftStream Chat is the easiest way to add messaging to your iOS app. High-level UI components connect the Stream Chat API with minimal coding.
Try Stream Chat free for 30 days https://gstrm.io/empowerapps or
apply for your Maker Account, free forever for qualifying teams https://gstrm.io/empowerappsmaker
Try for freeBushel - the macOS virtual machine app for developersI'm looking for beta testers!
For developers who want to be rigorous and uncompromising in their app testing.
You can set up your virtual machine for almost any configuration, from a fresh, factory reset of the Ventura beta all the way back to Big Sur.
Test, simulate, roll back and debug apps and scripts however you need to without worrying about destroying your machine.
If you want to be invited to our first TestFlight, or even if you just want updates on Bushel, sign up at the website, and we will get in touch with you.swiftpackageindex.com is the place to find Swift packages.
over 5,000 packages indexed now, you’ll find a package that can help.
help you make better decisions about your dependencies.
host DocC-based documentation for package authors.
You can see how well maintained every package is, what platforms and Swift versions it’s compatible with based on real-world build data, how many other dependencies it will bring in and much more. Unlike an open-source library, running an open-source website requires ongoing time for maintenance and supporting package authors in addition to the time we spend on new features. Our work is primarily funded by you - the Swift communityIf the site has helped you find a package, or if you want to support a community-run open-source project, please go to swiftpackageindex.com, look for the pink heart, and join over a hundred other people who support our work through GitHub sponsors.Impact Development
Why developer happiness gets in the way
The widening gap between founder and developer
Startup thinking vs Enterprise approach
Taking Shortcuts
Supporting other engineers on your team
Dealing with difficult founders
Importance of Communication
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInLeoCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Introduction
(03:01) - Excited about Technology
(05:55) - Widening gap between founder and developer
(17:00) - Using Shortcuts
(18:45) - Long-term code
(26:45) - Supporting other engineers
(32:30) - Difficult founders
(35:15) -
★ Support this podcast on Patreon ★
10/23/2022 • 37 minutes, 58 seconds
The Composable Architecture with Zev Eisenberg
Guest
Zev Eisenberg (website)Twitter - @ZevEisenberg
Youtube Video: https://youtu.be/vlwQm6Q_FEIRelated Episodes
Episode 123 - Microapps Architecture with Majid Jabrayilov
Episode 93 - Test-Driven Development in Swift with Gio Lodi
Related Links
Composable Architecture - PointFree
The Composable Architecture - Github
Peep App
TALKING BACKWARDS (Backwards Banter Brain Testing) - Smarter Every Day 168
SponsorsStream - Free In-App Messaging SDK & UI Kits for iOS/SwiftStream Chat is the easiest way to add messaging to your iOS app. High-level UI components connect the Stream Chat API with minimal coding.
Try Stream Chat free for 30 days https://gstrm.io/empowerapps or
apply for your Maker Account, free forever for qualifying teams https://gstrm.io/empowerappsmaker
Try for freeBushel - the macOS virtual machine app for developersI'm looking for beta testers!
For developers who want to be rigorous and uncompromising in their app testing.
You can set up your virtual machine for almost any configuration, from a fresh, factory reset of the Ventura beta all the way back to Big Sur.
Test, simulate, roll back and debug apps and scripts however you need to without worrying about destroying your machine.
If you want to be invited to our first TestFlight, or even if you just want updates on Bushel, sign up at the website, and we will get in touch with you.swiftpackageindex.com is the place to find Swift packages.
over 5,000 packages indexed now, you’ll find a package that can help.
help you make better decisions about your dependencies.
host DocC-based documentation for package authors.
You can see how well maintained every package is, what platforms and Swift versions it’s compatible with based on real-world build data, how many other dependencies it will bring in and much more. Unlike an open-source library, running an open-source website requires ongoing time for maintenance and supporting package authors in addition to the time we spend on new features. Our work is primarily funded by you - the Swift communityIf the site has helped you find a package, or if you want to support a community-run open-source project, please go to swiftpackageindex.com, look for the pink heart, and join over a hundred other people who support our work through GitHub sponsors.The Composable Architecture (TCA)
Why is TCA so useful
How does it take advantage of Combine and SwiftUI
How does it work with UIKit
How well does it work with developer teams
How does async and await work with TCA
Also how can you learn to talk backwards!Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInLeoCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - Introduction
(02:00) - What is TCA?
(08:00) - TCA, SwiftUI, and Testing
(11:30) - Getting Started in your Team
(23:15) - Terminology of TCA
(26:45) - TCA, Combine, and Async/Await
(30:00) - S'Vez Sppa
★ Support this podcast on Patreon ★
10/9/2022 • 34 minutes, 32 seconds
Open and Extensible with Matt Massicotte
Guest
Matt Massicotte - Twitter @mattieChime
Youtube Video: https://youtu.be/dc7x04Ao2xURelated Episodes
Episode 130 - macOS by Tutorials with Sarah Reichelt
Episode 89 - Cryptography with Marcin Krzyżanowski
Episode 45 - Developer Community (Part 1) with Dave Verwer
Related Links
AnyCodable by FlightSchool
An Introduction to ExtensionKit by Matt
STTextView by Marcin Krzyzanowski
Tree-sitter
Short story about OpenPGP for iOS and OS X — ObjectivePGP by Marcin Krzyzanowski
ExtensionKit - Apple Docs
Mac App Store and investing engineering time BY Kaleidoscope
SponsorsBushel - the macOS virtual machine app for developersI'm looking for beta testers!
For developers who want to be rigorous and uncompromising in their app testing.
You can set up your virtual machine for almost any configuration, from a fresh, factory reset of the Ventura beta all the way back to Big Sur.
Test, simulate, roll back and debug apps and scripts however you need to without worrying about destroying your machine.
If you want to be invited to our first TestFlight, or even if you just want updates on Bushel, sign up at the website, and we will get in touch with you.swiftpackageindex.com is the place to find Swift packages.
over 5,000 packages indexed now, you’ll find a package that can help.
help you make better decisions about your dependencies.
host DocC-based documentation for package authors.
You can see how well maintained every package is, what platforms and Swift versions it’s compatible with based on real-world build data, how many other dependencies it will bring in and much more. Unlike an open-source library, running an open-source website requires ongoing time for maintenance and supporting package authors in addition to the time we spend on new features. Our work is primarily funded by you - the Swift communityIf the site has helped you find a package, or if you want to support a community-run open-source project, please go to swiftpackageindex.com, look for the pink heart, and join over a hundred other people who support our work through GitHub sponsors.Open Source and Mac App
Fear of dependencies
What’s the benefit of doing it in open source
What kind of open source licenses are there
How can you avoid your code being copied outside the license
For a larger company what benefits do they get by open sourcing part of their code base?
How does open sourcing work with iOS/mac apps and the App Store
ExtensionKit
What is ExtensionKit and how are you using it?
How is it related to XPC
How does something like this get installed and distributed
How does Sandboxing relate to this
What are some good candidates for using ExtensionKit
Have you looked at the work iOS, watchOS, or tvOS?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - How Open Sourcing an App Works?
(14:30) - What is ExtensionKit?
(17:30) - What is XPC?
(19:00) - On Sandboxing
(24:00) - On the Mac App Store
(35:30) - Selling outside the App Store
(38:45) - Where to use ExtensionKit
★ Support this podcast on Patreon ★
9/25/2022 • 41 minutes, 14 seconds
Dynamic Island with Steve Lipton
Guest
Steve Lipton- Twitter @Steve_Lipton
LinkedIn
MakeAppPie
iOS Development Tips Weekly
LinkedIn Learning Courses
Patreon
Youtube Video: https://youtu.be/QfSFAjaHrZMRelated Episodes
Episode 39 - Managing Code Quality with Anne Cahalan
Episode 105 - Navigating DocC with Ellen Shapiro
Episode 121 - Server-Driven UI with Mohammad Azam
Episode 88 - Conferences with John Wilker
Episode 63 - Apple Watch 2020 with Steve Lipton
Related Links
Gofundme link for 360iDev
How Apple made the iPhone 14 Commercial
SponsorsBushel - the macOS virtual machine app for developersI'm looking for beta testers!
For developers who want to be rigorous and uncompromising in their app testing.
You can set up your virtual machine for almost any configuration, from a fresh, factory reset of the Ventura beta all the way back to Big Sur.
Test, simulate, roll back and debug apps and scripts however you need to without worrying about destroying your machine.
If you want to be invited to our first TestFlight, or even if you just want updates on Bushel, sign up at the website, and we will get in touch with you.Apple September Event
Apple Watch Series 8 - Body temperature for Women’s health
Apple Watch Series 3 is dead!
Who is the Apple Watch Ultra for?
iPhone 14 - Satellite SOS is here!
iPhone 14 Pro - Always-On Display
iPhone 14 Pro - New Camera Stuff
iPhone 14 Pro - 🏝️Dynamic Island🏝️
AirPods Pro - Adaptive Canceling
360iDev 2022
Great Talks this year!
especially the "no-code" sessions
Sad to see it be the last year
Settings up conferences in a post-Covid world
How could it come back and in what form?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - 360iDev 😢
(10:15) - 360iDev 2022 - Favorite Things
(16:45) - What’s next for 360iDev
(18:15) - September Apple Event 2022
(19:45) - Apple Watch Series 8
(29:15) - Apple Watch Ultra
(33:00) - AirPods Pro 2
(36:00) - iPhone 14 and Satellite SOS
(38:00) - iPhone 14 Pro
(40:45) - The Pill
(46:00) - What we’re buying
★ Support this podcast on Patreon ★
9/11/2022 • 51 minutes, 6 seconds
macOS by Tutorials with Sarah Reichelt
Guest
Sarah Reichelt (troz.net)Twitter @trozware
YouTube video - https://youtu.be/QgFW0L0a_D4Related Episodes
Episode 125 - WWDC 2022 - SwiftUI and UIKit with Evan Stone
Episode 124 - WWDC 2022 - Platforms State of the Union with Peter Witham
Episode 106 - Mac Dev in 2021 with Daniel Jalkut
Episode 60 - The Future of Mac Development with Lucas Derraugh - Part 2
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Episode 56 - SwiftUI with Majid Jabrayilov - Part 1
Episode 35 - SwiftUI - The Good, the Bad, and the Benefits
Related Links
macOS by Tutorials by Sarah Reichelt
macOS articles from Sarah's blog
Bushel Waitlist Signup
KeyWindow by Matthaus Woolard
controlActiveState - tells us what's the Active State
Show Notes
Design, macOS, and Ventura System Preferences
Is it more difficult to design an app well in SwiftUI vs AppKit
Did WWDC 2022 make it much easier?
How is macOS development different from iOS
Why write a macOS App
Dealing with multiple windows
Document-Based Apps using SwiftUI
Multi-Platform Apps
Menu based Apps
What do users expect in a Mac app?
Where to distribute your App
Dealing with the Sandbox
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
(00:00) - What is "macOS by Tutorials"?
(03:00) - Settings, Ventura, and Design on macOS
(08:00) - WWDC 2022
(13:50) - Why write a macOS app
(19:45) - Documents, Windows, and Menus
(29:00) - macOS Expectations and Multiplatform Apps
(38:20) - Distributing your app on macOS
(43:20) - Sandboxing
★ Support this podcast on Patreon ★
9/4/2022 • 49 minutes, 19 seconds
NSSpain X with Luis Ascorbe
Guest
Luis Ascorbe (lascorbe.com)
Twitter @Lascorbe
NSSpainX
YouTube video - https://youtu.be/hmSFPjQ7HuYGet 10% Off Your Ticket to NSSpain X!https://ti.to/nsspain/2022/discount/empower-apps-specialRelated Episodes
Episode 88 - Conferences with John Wilker
Episode 125 - WWDC 2022 - SwiftUI and UIKit with Evan Stone
Episode 124 - WWDC 2022 - Platforms State of the Union with Peter Witham
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Episode 56 - SwiftUI with Majid Jabrayilov - Part 1
Episode 35 - SwiftUI - The Good, the Bad, and the Benefits
Related Links
Swift Packages - Dependency Management of the Future - Leo Dion NSSpain 2020
CodeMash
Cocoa Conferences
Sponsors360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Show Notes
Organizing an In-Person Conference After 2 Years of Remote
The challenges of organizing
Migrating to SwiftUI
New NavigationStack API
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/13/2022 • 40 minutes, 44 seconds
Coffee Chats with Danijela Vrzan
Guest
Danijela Vrzan https://danijelavrzan.com/Twitter https://twitter.com/dvrzan
YouTube video - https://youtu.be/AbK1n_WHsZMRelated Episodes
Episode 101 - How to Learn New APIs with Stewart Lynch - Part 1
Episode 36 - Upgrading Your Skills in 2020 with Paul Hudson
Related Links
SwiftUI Social Contributor App
Cocoa Conferences
5 WAYS TO FIND PURPOSE - LeadershipFreak
How to Create a Personal Website in Swift using Publish
Publish: Creating Website Content with Markdown
Sponsors360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Show Notes
The Importance of Meeting with your Co-Workers
Conferences for Swift Devs
Contributing Documentation and Open-Source Projects
Starting a Blog with Publish
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/6/2022 • 25 minutes, 43 seconds
Backend Decisions with Mikaela Caron
Guest
Mikaela Caron
Youtube - MikaelaCaron
Twitter - @mikaela__caron
Instagram @mikaelacaron
Youtube Video - https://youtu.be/_-k97s1ZPzERelated Episodes
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Episode 85 - AWS Amplify with Kilo Loco
Episode 120 - Xcode Tips with Dominik Hauser
Episode 121 - Server-Driven UI with Mohammad Azam
Episode 108 - What is Firebase with Peter Friese
Episode 97 - Day One App Ideas with Mikaela Caron
Episode 90 - AWS and SOTO with Adam Fowler
Episode 75 - Year of the Server with Tim Condon - Part 2
Episode 49 - Vapor 4 with Tibor Bödecs
Episode 48 - Alternative Backends with Kristaps Grinbergs
Episode 8 - Cloud and Backend Services For Apps with Erik Gillespie
Related Links
Code with Chris - Getting Started with Vapor 4
WWDC 2022 - Use Xcode for server-side development
Apps that use iCloud can now be transferred to another developer in the Apple Developer Program.
Sponsors360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Show Notes
Do you need a backend?
Why company size matters?
SQL vs NoSQL Database
Hosting vs MBaaS
What if you have an existing dev ops or backend team?
Is CloudKit an even better option with transferrable apps?
When does Vapor make sense?
How can devs learn more about iOS/Swift backends?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/28/2022 • 38 minutes, 9 seconds
Developer Productivity with Rudrank Riyam
Guest
Rudrank Riyam (@rudrankriyam)Exploring MusicKit and Apple Music API by Rudrank Riyam
Youtube Video - https://youtu.be/BnsPUjcDSikRelated Episodes
Episode 24 - Continuous Integration with Kyle Newsome
Episode 120 - Xcode Tips with Dominik Hauser
Episode 125 - WWDC 2022 - SwiftUI and UIKit with Evan Stone
Related Links
Xcodegen
Tuist
Sourcetree
WWDC 2022 Talks
What's new in Xcode
Visualize and optimize Swift concurrency
Demystify parallelization in Xcode builds
Sponsors360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Show Notes
What is developer productivity
The importance of version control
The importance of build time optimization
automate appstore feedback
Xcode 14 and Developer Productivity
Smarter Autocompletion and Improved Live Previews in Xcode 14
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/22/2022 • 30 minutes, 24 seconds
WWDC 2022 - SwiftUI and UIKit with Evan Stone
Guest
Evan K Stone @evankstone
iOS Dev Break
Interactive Logic
Youtube Video - https://youtu.be/6Te0jPp82qgRelated Episodes
Episode 24 - Continuous Integration with Kyle Newsome
Episode 81 - Awaiting for Async with Vincent Pradeilles
Episode 98 - Async, Await, and Combine with Marin Todorov
Episode 120 - Xcode Tips with Dominik Hauser
Episode 56 - SwiftUI with Majid Jabrayilov - Part 1
Episode 35 - SwiftUI - The Good, the Bad, and the Benefits
Episode 73 - Multi-Platform SwiftUI with Malin Sundberg
Related Links
Swift Remote Studio: It’s official. Time to close up shop.
Speculid
WWDC 2022 Talks
The SwiftUI cookbook for navigation
Visualize and optimize Swift concurrency
What's new in SwiftUI
What's new in UIKit
What's new in Xcode
Demystify parallelization in Xcode builds
Sponsors360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Show Notes
SwiftUI Navigation and Layout
UIKit Updates
New App Icon features in Xcode 14
Autocomplete in Xcode 14
Visualizing builds in Xcode 14
Our deprecated devices
Swift Remote Studio from beginning to end
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/15/2022 • 44 minutes, 15 seconds
WWDC 2022 - Platforms State of the Union with Peter Witham
Guest
Peter Witham - Compileswift.com - Twitter
Crossover EpisodeCompileSwift - Episode - Keynote ReviewYoutube Video - https://youtu.be/eKe4XpPadhoRelated Episodes
Episode 24 - Continuous Integration with Kyle Newsome
Episode 81 - Awaiting for Async with Vincent Pradeilles
Episode 91 - Fastlane with Josh Holtz
Episode 111 - 2021 - Year in Review with Peter Witham
Episode 98 - Async, Await, and Combine with Marin Todorov
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Swift Remote StudioVirtual Coworking for iOS, Mac, and Swift Developers. The last two years have taken a toll on us all. You may have been feeling isolated while working remotely, but now you can do something about it. Join a growing community of iOS, Mac, and Swift developers, designers, and creators just like you. Help one another out. Get motivated. Create new friendships. Work Together, Swiftly. Enjoy:
Virtual Coworking
Silent Coworking
Community Spaces
Job Board
Member Discounts
Community Events
Use the promo code EMPOWER15 will get them 15% off any plan.360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Show Notes
Xcode Cloud Announced
New Server-APIs for Weather and Maps
App Intents, Shortcuts, and Siri
Swift 5.7 and Xcode 14
SwiftUI - Widgets and Complications
SwiftUI - Live Activities
SwiftUI - Compositional Layout and Navigation
SwiftUI Charts
Server-Side Swift has a talk!
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/8/2022 • 1 hour, 9 minutes, 38 seconds
Microapps Architecture with Majid Jabrayilov
Guest
Majid Jabrayilov
SwiftWithMajid.com
SwiftUI Weekly
Twitter @mecid
Youtube Video - https://youtu.be/XRVO43j1ogQRelated Episodes
E119 - Swift Package Manager Super Powers with Marco Eidinger
E93 - Test-Driven Development in Swift with Gio Lodi
E77 - Swift Package Index with Sven A. Schmidt
E57 - SwiftUI with Majid Jabrayilov - Part 2
E56 - SwiftUI with Majid Jabrayilov - Part 1
E46 - Developer Community (Part 2) with Dave Verwer
E23 - Modularizing in Xcode with Abbey Jackson
Related Links
Outgrowing your app: how to scale iOS app development
Meet the microapps architecture by Gio Lodi
Microapps architecture in Swift. Dependency Injection.
Microapps architecture in Swift. Resources and localization.
Microapps architecture in Swift. Feature modules.
Microapps architecture in Swift. SPM basics.
How to Control the World by PointFree
Build Graph for Xcode
SponsorsRiverside
The easiest way to record podcasts and videos in studio quality from anywhere. All from the browser.
Continuously uploads everyone’s audio and video during recording to the cloud, so when it ends you can download the files in seconds. Computer crashed or reloaded while in session? The recordings are saved automatically.
Local recording up to 4K video resolution
Try it for free today. Use our referral link:https://riverside.fm/?utm_campaign=campaign_1&utm_medium=affiliate&utm_source=rewardful&via=empowerappsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Show Notes
What is microapps architecture?
What are some ideal circumstances to use it?
How does SPM fit into it
What are some ideal “modules”Why features
How does dependency injection fit into thisHow does the PointFree “World” method work?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/1/2022 • 41 minutes
Apple Developer Academy with Sarah Gretter, PhD
Guest
Sarah Gretter, PhD (@SarahGretter)LinkedIn - Sarah Gretter, PhD
Youtube Video - https://youtu.be/2uXDG04aJUIRelated Episodes
E38 - Accessibility with Kim Arnett
E36 - Upgrading Your Skills in 2020 with Paul Hudson
E101 - How to Learn New APIs with Stewart Lynch - Part 1
E112 - Indie Dev #1 - Dark Noise by Charlie Chapman
E115 - Indie Dev #4 - Making an App Best-in-Class with Jordan Morgan
Related Links
Apple opens Developer Academy in Detroit to create new career opportunities
Apple Developer Academy | Michigan State University
Apple Developer Academy at Michigan State University in Detroit – MSU Hub for Innovation in Learning and Technology
MSU iOS Design Lab – Discover, create, impact.
Student applications for 2022-2023 still open!
Coding mentor position(s) open
SponsorsSwift Remote StudioVirtual Coworking for iOS, Mac, and Swift Developers. The last two years have taken a toll on us all. You may have been feeling isolated while working remotely, but now you can do something about it. Join a growing community of iOS, Mac, and Swift developers, designers, and creators just like you. Help one another out. Get motivated. Create new friendships. Work Together, Swiftly. Enjoy:
Virtual Coworking
Silent Coworking
Community Spaces
Job Board
Member Discounts
Community Events
Use the promo code EMPOWER15 will get them 15% off any plan.360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Show Notes
What kind of unique skills does the Academy teach
How does it differ from a college class or coding boot camp
What do you think are the most important skills students could learn to participate in the iOS app economy
What skills do you focus on?
coding
design
business
What are some unique challenges students run into?
What do you find to be the most difficult part for students to get started?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
5/19/2022 • 41 minutes, 7 seconds
Server-Driven UI with Mohammad Azam
Guest
Mohammad Azam (Website)
Twitter (@azamsharp)
YouTube Channel - azamsharp
Youtube Video - https://youtu.be/z5JTfzBX4WMRelated Episodes
Cross Platform Comparison with Rob Kerr
Swift Package Manager Super Powers with Marco Eidinger
Scaling and Security with Jeroen Leenarts
Multi-Platform SwiftUI with Malin Sundberg
UI Design for Developers with Heidi Helen Pilypas
Related Links
Server Driven UI Crash Course - iOS, Swift, SwiftUI and NodeJS/Express
Introduction to Server Driven UI in iOS, Swift & SwiftUI - Udemy Course
A Deep Dive into Airbnb’s Server-Driven UI System by Ryan Brooks
SponsorsSwift Remote StudioVirtual Coworking for iOS, Mac, and Swift Developers. The last two years have taken a toll on us all. You may have been feeling isolated while working remotely, but now you can do something about it. Join a growing community of iOS, Mac, and Swift developers, designers, and creators just like you. Help one another out. Get motivated. Create new friendships. Work Together, Swiftly. Enjoy:
Virtual Coworking
Silent Coworking
Community Spaces
Job Board
Member Discounts
Community Events
Use the promo code EMPOWER15 will get them 15% off any plan.AppFiguresThe tools you need to monitor, optimize, and get more downloads.Want Ariel to review your screenshots so you can get more downloads? Submit it here and tune into the live stream on Thursday 5/5 @ 10:30AM EST to see it!There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Submit your app today at:https://fg.rs/ls8fand tune into the live stream here:https://www.youtube.com/watch?v=Eb4hs-g_bhYon Thursday 5/5 @ 10:30AM EST to see it!Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Show Notes
Where Server-Driven UI makes sense
How it helps with Cross-Platform development
Setting decoding components from the server
Migrating your app to use server-driven UI
Which is easier SwiftUI or UIKit
Dealing with Versioning
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
5/1/2022 • 42 minutes, 11 seconds
Xcode Tips with Dominik Hauser
Guest
Dominik Hauser
Twitter @dasdom
Xcode.tips
Dominik Hauser's Books
Youtube Video - https://youtu.be/bgDI6HbxeDURelated Episodes
Episode 119 - Swift Package Manager Super Powers with Marco Eidinger
Episode 84 - Automation Fun with Jared Sorge
Episode 77 - Swift Package Index with Sven A. Schmidt
Episode 46 - Developer Community (Part 2) with Dave Verwer
Episode 45 - Developer Community (Part 1) with Dave Verwer
Episode 23 - Modularizing in Xcode with Abbey Jackson
Related Links
WWDC 2018 - Advanced Debugging with Xcode and LLDB
Steve Jobs presenting Interface Builder
Sourcery Pro
Sourcery
Hot Reloading in Swift
SwiftGen
Tuist
xcodegen
Sponsors360iDev - Denver, CO – August 28-31, 2022 (Hybrid)Grand Hyatt Denver
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 20% off registration.Riverside
The easiest way to record podcasts and videos in studio quality from anywhere. All from the browser.
Continuously uploads everyone’s audio and video during recording to the cloud, so when it ends you can download the files in seconds. Computer crashed or reloaded while in session? The recordings are saved automatically.
Local recording up to 4K video resolution
Try it for free today. Use our referral link:https://riverside.fm/?utm_campaign=campaign_1&utm_medium=affiliate&utm_source=rewardful&via=empowerappsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Show Notes
The importance of learning your tools
The history of Xcode
Best keyboard shortcuts to learn
How to edit code while debugging
Apple Watch issues
Best third party tools to augment Xcode
Swift Packages and Xcode
The future of Xcode Cloud
WWDC 2022 Xcode Wish List
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/18/2022 • 44 minutes, 7 seconds
Swift Package Manager Super Powers with Marco Eidinger
Guest
Marco Eidinger (website)
Twitter (@MarcoEidinger)
iOS Dev Updates
Youtube Video - https://youtu.be/QY0TPCHXMWARelated Episodes
Episode 77 - Swift Package Index with Sven A. Schmidt
Episode 46 - Developer Community (Part 2) with Dave Verwer
Episode 45 - Developer Community (Part 1) with Dave Verwer
Related Links
Swift Package Manager: understand resolve, reset and update
Xcode 13.3 supports SPM binary dependency in private GitHub release
Localized SwiftUI Views in a Swift Package
Integrate a complex Swift Package into your iOS app
Automate the way you keep up with dependency changes in your Swift Package
The best registries for your Swift Package
Use Swift Package Manager in your own Swift Package
Swift Package Dependencies Checker - Github Action
SponsorsSentryFrom error tracking to performance monitoring, developers can see what actually matters, solve quicker, and learn continuously about their applications - from the frontend to the backend.
Source code, error filters, stack locals — Sentry enhances application performance monitoring with stack traces.
Quickly identify performance issues before they become downtime.
Breadcrumbs make application development a little easier by showing you the trails of events that lead to the error(s).
Real-time application monitoring means data, in real-time.
Dashboards add a visual element to our application monitoring.
Over 1M developers and 80K organizations already ship better software faster with Sentry application monitoring. Check out their great iOS dev docs at:https://docs.sentry.io/platforms/apple/guides/ios?utm_source=empowerapps&utm_medium=paid-podcastSign up today for free at:http://sentry.io/for/ios?utm_source=empowerapps&utm_medium=paid-podcastAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Show Notes
How Swift Package Manager has improved?
Dealing with Binary Dependencies
Plugin Support in Swift 5.6
Xcode Issues
Proper Versioning in SPM
SwiftUI and Localization with SPM
Targets vs Products
Setting up for CI Success
Find Packages for your App
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/5/2022 • 44 minutes, 23 seconds
Tracking and Performance with Philipp Hofmann
Guest
Philipp Hofmann (@phil__hofmann)
Articles on Sentry
Mobile Vitals - Four Metrics Every Mobile Developer Should Care About
Close the Loop with User Feedback
How to use Sentry Attachments with Mobile Applications
Youtube Video - https://youtu.be/xMm7qR0FBDURelated Episodes
Episode 40 - Handling Errors Correctly with Jeff Kelley
Episode 110 - Connecting Wirelessly with Gui Rambo
Episode 58 - Big Bad Bluetooth with Leah Vogel
Episode 109 - Objective-C Today with Graham Lee
Related Links
Optimizing App Launch - WWDC19 - Videos - Apple Developer
App Startup Time: Past, Present, and Future - WWDC17 - Videos - Apple Developer
Ultimate application performance survival guide - WWDC21 - Videos - Apple Developer
Proxyman
CharlesProxy
Postman
Official Sentry SDK
Sentry Community Discord
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.SentryFrom error tracking to performance monitoring, developers can see what actually matters, solve quicker, and learn continuously about their applications - from the frontend to the backend.
Source code, error filters, stack locals — Sentry enhances application performance monitoring with stack traces.
Quickly identify performance issues before they become downtime.
Breadcrumbs make application development a little easier by showing you the trails of events that lead to the error(s).
Real-time application monitoring means data, in real-time.
Dashboards add a visual element to our application monitoring.
Over 1M developers and 80K organizations already ship better software faster with Sentry application monitoring. Check out their great iOS dev docs at:https://docs.sentry.io/platforms/apple/guides/ios?utm_source=empowerapps&utm_medium=paid-podcastSign up today for free at:http://sentry.io/for/ios?utm_source=empowerapps&utm_medium=paid-podcastAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Show Notes
What you should track in your app
When to integrate tracking
Linking tracing back-end and front-end
Tools to help debug
How can managers do to help
Android Dev Perspective
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/23/2022 • 35 minutes, 32 seconds
Empower Station with Matt Braun
Guest
Matt Braun (@mattbraun)
Twitter (@mattbraun)
SketchParty TV
Youtube Video - https://youtu.be/HRfciIxoSMoRelated Episodes
E27 - Media Outreach with Jeff Gamet
E71 - App Dev Stack with Jordan Morgan
E78 - Apple Silicon Review with Gui Rambo
E113 - Indie Dev #2 - Tasks by Mustafa Yusuf
Related Links
Matt's Empower Station Tweet
Leo's Empower Station Specs
Eddy Cue mentions SketchParty TV
Buy Hacking with tvOS and build apps and games for Apple TV
Beginning Native tvOS Apps | raywenderlich.com
SwiftUI on tvOS | raywenderlich.com
tvOS Top Shelf Tutorial: Static and Interactive | raywenderlich.com
Beginning tvOS Development with TVML Tutorial | raywenderlich.com
Disney bought baseball’s tech team to take on Netflix
Paper by WeTransfer
MacStories - SketchParty TV By Federico Viticci
CocoaAsyncSocket
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.SentryFrom error tracking to performance monitoring, developers can see what actually matters, solve quicker, and learn continuously about their applications - from the frontend to the backend.
Source code, error filters, stack locals — Sentry enhances application performance monitoring with stack traces.
Quickly identify performance issues before they become downtime.
Breadcrumbs make application development a little easier by showing you the trails of events that lead to the error(s).
Real-time application monitoring means data, in real-time.
Dashboards add a visual element to our application monitoring.
Over 1M developers and 80K organizations already ship better software faster with Sentry application monitoring. Check out their great iOS dev docs at:https://docs.sentry.io/platforms/apple/guides/ios?utm_source=empowerapps&utm_medium=paid-podcastSign up today for free at:http://sentry.io/for/ios?utm_source=empowerapps&utm_medium=paid-podcastAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Show Notes
Home Button is here to stay
M1 on the iPad Air
What the Mac Studio Means
Leo's Choice of Configuration
Future of Apple TV
How the market of the Apple TV works
The power of being mentioned at an Apple Event
Testing Apple TV Software
TVML vs UIKit vs SwiftUI on the TV
Games on the Apple TV
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/10/2022 • 40 minutes, 13 seconds
Indie Dev #5 - Knowing Your Market with David Barnard
Guest
David Barnard (blog)
Twitter @drbarnard
The Sub Club Podcast
Contrast
Youtube Video - https://youtu.be/LaCj_Oaw1uoRelated Episodes
E115 - Indie Dev #4 - Making an App Best-in-Class with Jordan Morgan
E114 - Indie Dev #3 - Focused Work with Michael Tigas
E113 - Indie Dev #2 - Tasks by Mustafa Yusuf
E112 - Indie Dev #1 - Dark Noise by Charlie Chapman
E104 - In-App Purchases and the StoreKit API with Andy Boedo
E68 - App Store Review Guidelines with Paweł Madej
E27 - Media Outreach with Jeff Gamet
E26 - App Store Optimization with Ariel Michaeli
Sub Club - Eric Owens, App Business Brokers — How to Sell Your App
Sub Club - Ben Bajarin, Creative Strategies — Quantifying Apple’s Developer Sentiment Problem
Sub Club - David Smith, Widgetsmith - Lessons From 50 Million Downloads
Sub Club - Ben Thompson, Stratechery - Apple’s App Store Conundrum
Related Links
How to Game the App Store
RevenueCat - The Ultimate Guide to Subscription Testing on iOS
RevenueCat - Managing Cross-Platform Subscriptions
RevenueCat - Subscribers Are Your True Fans
RevenueCat - Cashing Out: How to Sell Your App
Why Amazon Has A Fake Review Problem by CNBC
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.SentryFrom error tracking to performance monitoring, developers can see what actually matters, solve quicker, and learn continuously about their applications - from the frontend to the backend.
Source code, error filters, stack locals — Sentry enhances application performance monitoring with stack traces.
Quickly identify performance issues before they become downtime.
Breadcrumbs make application development a little easier by showing you the trails of events that lead to the error(s).
Real-time application monitoring means data, in real-time.
Dashboards add a visual element to our application monitoring.
Over 1M developers and 80K organizations already ship better software faster with Sentry application monitoring. Check out their great iOS dev docs at:https://docs.sentry.io/platforms/apple/guides/ios?utm_source=empowerapps&utm_medium=paid-podcastSign up today for free at:http://sentry.io/for/ios?utm_source=empowerapps&utm_medium=paid-podcastAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Show Notes
Does not being a developer help?
How to check if there's market for your idea?
What markets attract “scammy” apps?
The Future of App Store
Building a Better App Store
Biggest Mistake Indies Do
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/25/2022 • 54 minutes, 22 seconds
Indie Dev #4 - Making an App Best-in-Class with Jordan Morgan
Guest
Jordan Morgan - @jordanmorgan10
Swiftjective-C
A Best-in-Class iOS App - A Five Book Series
Youtube Video - https://youtu.be/aMBoJDnBuSoRelated Episodes
E111 - Indie Dev #1 - Dark Noise by Charlie Chapman
E27 - Media Outreach with Jeff Gamet
E26 - App Store Optimization with Ariel Michaeli
E62 - Local Database Storage on iOS with Aaron Douglas
E112 - Indie Dev #2 - Tasks by Mustafa Yusuf
E106 - Mac Dev in 2021 with Daniel Jalkut
E94 - iPad Development with Adam Shaw
E71 - App Dev Stack with Jordan Morgan
E113 - Indie Dev #3 - Focused Work with Michael Tigas
Related Links
Spend Stack
Try out the new SwiftUI Tour in the Buffer beta
A New Home for Spend Stack
Dailyios
RevenueCat - Cashing Out: How to Sell Your App by David Barnard
Can you learn design
Microacquire
Flippa
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.SentryFrom error tracking to performance monitoring, developers can see what actually matters, solve quicker, and learn continuously about their applications - from the frontend to the backend.
Source code, error filters, stack locals — Sentry enhances application performance monitoring with stack traces.
Quickly identify performance issues before they become downtime.
Breadcrumbs make application development a little easier by showing you the trails of events that lead to the error(s).
Real-time application monitoring means data, in real-time.
Dashboards add a visual element to our application monitoring.
Over 1M developers and 80K organizations already ship better software faster with Sentry application monitoring. Check out their great iOS dev docs at:https://docs.sentry.io/platforms/apple/guides/ios?utm_source=empowerapps&utm_medium=paid-podcastSign up today for free at:http://sentry.io/for/ios?utm_source=empowerapps&utm_medium=paid-podcastAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Show Notes
How to manage your time as a side gig
How to decide what apps to work on
Why learning about the competition is important
Using SwiftUI and CloudKit in 2022
How getting an acquired works
On writing his book series - The Best-in-Class iOS App
Why accessibility is important
Can you learn design
Why you shouldn't start with design
Why you need to be able to describe your app in one sentence
Pros and cons of low vs high fidelity
Why the tone of your app is important
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/12/2022 • 51 minutes, 31 seconds
Indie Dev #3 - Focused Work with Michael Tigas
Guest
Michael Tigas (@michael_tigas)
Hey I Make AppsLaunching an Indie App Series
Focused Work App
Ochi App
Youtube Video - https://youtu.be/HwC2_dETDFsRelated Episodes
E111 - Indie Dev #1 - Dark Noise by Charlie Chapman
E112 - Indie Dev #2 - Tasks by Mustafa Yusuf
E106 - Mac Dev in 2021 with Daniel Jalkut
E94 - iPad Development with Adam Shaw
E71 - App Dev Stack with Jordan Morgan
Related Links
Pre-Order Ochi Today!
Suggested People to Follow by Michael:
Jordi Bruin (@jordibruin): Soosee, Navi
Emmanuel Crouvisier (@emcro): CardPointers
Aaron Pearce (@aaron_pearce): HomeCam/Run/Pass/Scan
Mustafa Yusuf (@mufasaYC): Tasks
SponsorsSentryFrom error tracking to performance monitoring, developers can see what actually matters, solve quicker, and learn continuously about their applications - from the frontend to the backend.
Source code, error filters, stack locals — Sentry enhances application performance monitoring with stack traces.
Quickly identify performance issues before they become downtime.
Breadcrumbs make application development a little easier by showing you the trails of events that lead to the error(s).
Real-time application monitoring means data, in real-time.
Dashboards add a visual element to our application monitoring.
Over 1M developers and 80K organizations already ship better software faster with Sentry application monitoring. Check out their great iOS dev docs at:https://docs.sentry.io/platforms/apple/guides/ios?utm_source=empowerapps&utm_medium=paid-podcastSign up today for free at:http://sentry.io/for/ios?utm_source=empowerapps&utm_medium=paid-podcastAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsShow Notes
How to find the "right" idea
Using Catalyst to migrate Focused Work from iOS to the Mac
What is AppKit Bridging?
How to get started designing your app
How to get beta testers
How to build interest
How to decide what APIs and Features to tap into
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
1/30/2022 • 1 hour, 9 minutes, 24 seconds
Indie Dev #2 - Tasks by Mustafa Yusuf
Guest
Mustafa Yusuf (@mufasaYC)Tasks App
Youtube Video - https://youtu.be/u_7Ow5dN0lcRelated Episodes
E111 - Indie Dev #1 - Dark Noise by Charlie Chapman
E27 - Media Outreach with Jeff Gamet
E26 - App Store Optimization with Ariel Michaeli
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.SentryFrom error tracking to performance monitoring, developers can see what actually matters, solve quicker, and learn continuously about their applications - from the frontend to the backend.
Source code, error filters, stack locals — Sentry enhances application performance monitoring with stack traces.
Quickly identify performance issues before they become downtime.
Breadcrumbs make application development a little easier by showing you the trails of events that lead to the error(s).
Real-time application monitoring means data, in real-time.
Dashboards add a visual element to our application monitoring.
Over 1M developers and 80K organizations already ship better software faster with Sentry application monitoring. Check out their great iOS dev docs at:https://docs.sentry.io/platforms/apple/guides/ios?utm_source=empowerapps&utm_medium=paid-podcastSign up today for free at:http://sentry.io/for/ios?utm_source=empowerapps&utm_medium=paid-podcastAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Show Notes
Working culture differences
Balancing Architecture and Progress
Benefits and Drawbacks of CloudKit
Understanding Your Audience
Differentiating Your Product
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
1/17/2022 • 37 minutes, 51 seconds
Indie Dev #1 - Dark Noise by Charlie Chapman
Guest
Charlie Chapman (Blog)
Charlie Chapman (Twitter @_chuckyc)
Dark Noise App
Launched Podcast
Youtube Video - https://youtu.be/UXvCBj6SAEARelated Episodes
E110 - Connecting Wirelessly with Gui Rambo
E91 - Fastlane with Josh Holtz
E84 - Automation Fun with Jared Sorge
E27 - Media Outreach with Jeff Gamet
E26 - App Store Optimization with Ariel Michaeli
Related Links
Charlie Chapman - Marketing Dark Noise
Launched - Episode 34: Flighty - Ryan Jones
Patrick (H) Willems - I Accidentally Made a Feature Film - Here's What I Learned
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.LinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comShow Notes
How to keep track of ideas?
How to get help?
What features to prioritize?
Why having a story for your app is important?
What skills have transferred to a day time job?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
1/4/2022 • 42 minutes, 9 seconds
2021 - Year in Review with Peter Witham
Guest
Peter Witham - Compileswift.com - TwitterPeter's New Livestream - compileswift.live
Youtube Video - https://youtu.be/3MOK_smitUURelated Episodes
Episode 110 - Connecting Wirelessly with Gui Rambo
Episode 106 - Mac Dev in 2021 with Daniel Jalkut
Episode 98 - Async, Await, and Combine with Marin Todorov
Episode 95 - Swift Playgrounds with Steve Lipton
Episode 94 - iPad Development with Adam Shaw
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Episode 91 - Fastlane with Josh Holtz
Episode 89 - Cryptography with Marcin Krzyżanowski
Episode 84 - Automation Fun with Jared Sorge
Episode 81 - Awaiting for Async with Vincent Pradeilles
Episode 68 - App Store Review Guidelines with Paweł Madej
Episode 24 - Continuous Integration with Kyle Newsome
Related Links
Xcode Cloud Beta Signup
CoreInt Episode 487 - I Spent A Week On It
Apple Developer Tech Talks
Steve Lipton - Swift Playgrounds Course
Apple SwiftUI Sample App Tutorials
NSSpain 15 - Xcode Cloud: What is it? How to use it? Is it for me? - Josh Holtz
HWS - How to build your first SwiftUI app with Swift Playgrounds
CompileSwift Live Stream Highlight - macOS UI Design with Sketch
Apple Design Resources
Swift Studio by Marcin Krzyzanowski
"Swift Light" by Marin Todorov
Nova by Panic
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsIndie Developer Spotlight - KalWoche by Matthias DeuschlGive a try to the first of many Indie Developer Spotlights with KalWoche by Matthias DeuschlWith this Independent Watch app, scroll through the calendar with the Digital Crown. Count days / weeks with the date calculator. Multiple complications including weekday, week of year, date.
Practical calendar for quick flipping: scroll through time month by month with the Digital Crown.
What weekday is April 1st? When is week 18? Which week of the year is beginning of November? → Just scroll until you see.
How long until date x? → Simply scroll, tap, see.
date calculator: add days, weeks, months or years from today or the selected date and the result is displayed as a date with weekday and calendar week. In addition, the duration from today or the selected date until then is displayed.
Clean watchface complications help to always keep the current weekday, date and week of year in view. Find your perfect fit with numerous options.
Give this app a try today at:https://apps.apple.com/app/apple-store/id1554477157Show Notes
Future of WWDC and Tech Talks
What will be the next big thing next year?
How can iPadOS improve?
How should code start using Async/await?
Problems with macOS Monterey
Where are the pain points for SwiftUI?
Who should start using Xcode Cloud?
What's next for the App Store, Developers, and the courts?
...and the big announcement!Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
12/21/2021 • 1 hour, 27 minutes, 46 seconds
Connecting Wirelessly with Gui Rambo
Guest
Gui Rambo - Twitter @_inside
Blog
Github
Stacktrace Podcast
9to5Mac
Youtube Video - https://youtu.be/U97HwkmKpg8Related Episodes
Episode 58 - Big Bad Bluetooth with Leah Vogel
Episode 78 - Apple Silicon Review with Gui Rambo
Episode 31 - Future Proofing Your Apps with Gui Rambo
Related Links
AirBuddy
MultipeerKit - high-level abstraction built on top of the MultipeerConnectivity framework
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.LinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comShow Notes
Dealing with the Menu Bar
AirPods Thoughts
Lessons learned working on AirBuddy
Bluetooth Terminology Lesson
Dealing with AirPod Issues as a user
How Bluetooth works and differs from Networking
How the Nearby Interaction framework works
How the Multi-peer Connectivity framework works
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
12/7/2021 • 1 hour, 13 minutes, 43 seconds
Objective-C Today with Graham Lee
Guest
Graham Lee - Twitter @iwasleeg
Graham's Blog - Structure and Interpretation of Computer Programmers
Graham's Book - APPropriate Behaviour
Youtube Video - https://youtu.be/H8O0rj1It1wRelated Episodes
Episode 107 - Expert Swift with Shai Mishali
Episode 105 - Navigating DocC with Ellen Shapiro
Episode 70 - Maintaining & Migrating with Antoine van der Lee - Part 2
Episode 69 - Maintaining & Migrating with Antoine van der Lee - Part 1
Episode 48 - Alternative Backends with Kristaps Grinbergs
Related Links
DosAmigans Twitch Stream - Programming on the Amiga
[objc retain]
GNUstep
Cocotron
ObjFW
mulle-objc
WWDC 2020 - Refine Objective-C frameworks for Swift
sicpers.info - …and in the end there will be the command line
sicpers.info - In which I misunderstood Objective-C
Integrating C++ Libraries with Swift - BrightDigit
CairoSVG Objective-C++ Swift Package Example
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsShow Notes
Why you should know something about Objective-C
Why is Objective-C so different from Swift?
Is there a purpose for Objective-C outside of Swift?
Should you still write Objective-C?
What steps to migrate Objective-C over to Swift?
How to make sure your Swift is consumable by Objective-C?
How to work with C++ through Objective-C?
What are the differences between Dynamic and Static Typed languages?
What are the benefits of Dynamic vs Static Typed languages?
What does a PhD in Software Engineering do at Oxford?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
11/23/2021 • 50 minutes, 43 seconds
What is Firebase with Peter Friese
Guest
Peter Friese - Blog
Twitter - @peterfriese
YouTube - @peterfriese
GitHub - @peterfriese
Youtube Video - https://youtu.be/8m8oppa-LosRelated Episodes
Episode 87 - Core Data Fun with Tim Mitra
Episode 85 - AWS Amplify with Kilo Loco
Episode 75 - Year of the Server with Tim Condon - Part 2
Episode 35 - SwiftUI - The Good, the Bad, and the Benefits
Episode 8 - Cloud and Backend Services For Apps with Erik Gillespie
Related Links
Firebase Summit - November 10th
Firebase YouTube Channel
Firebase Blog
Firebase Medium channel
Firebase vs GCP Videos
Projects & storage
Functions & Firestore
the LansingCodes app that never was
Authenticate with Firebase Anonymously on Apple Platforms
Make It So - Replicating Apple's Reminders app with SwiftUI and Firebase
Swift on Cloud Run by Grant Timmerman from GCP
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.LinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comShow Notes
What does Firebase consist of
How to use it properly in your iOS app
How Firestore's NoSQL DB works
How to work with Firestore and SwiftUI
What are Firebase's authentication features
Setting up security properly
How to authenticate with Firebase anonymously?
Register for Firebase Summit
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
11/9/2021 • 42 minutes, 7 seconds
Expert Swift with Shai Mishali
Guest
Shai Mishali - Twitter @freak4pcGitHub @freak4pc
Youtube Video - https://youtu.be/wQNs2ii-zsIRelated Episodes
Episode 39 - Managing Code Quality with Anne Cahalan
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Episode 98 - Async, Await, and Combine with Marin Todorov
Episode 106 - Mac Dev in 2021 with Daniel Jalkut
Related Links
Expert Swift by Marin Bencevic, Ray Fix, Shai Mishali and Ehab Yosry Amer
Modern Concurrency in Swift - Async/Await, Task Groups & Actors by Marin Todorov
Combine: Asynchronous Programming with Swift by Marin Todorov, Shai Mishali and Florent Pillet
WWDC 2020 - Refine Objective-C frameworks for Swift
Combine Community
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Show Notes
What is Expert Swift?
How to be pragmatic about expert features on your team?
How can you improve your use of Codable in Swift?
What are ways to improve Objective-C for Swift consumption?
How can you hide certain Objective-C APIs from Swift?
What makes for good API design?
How to version your API?
How Functional Reactive Programming fits?
Future of Combine and Reactive in an Async and Await
... and another book Shai is helping with concurrentlySocial MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
10/26/2021 • 52 minutes, 31 seconds
Mac Dev in 2021 with Daniel Jalkut
Guest
Daniel Jalkut (@danielpunkass) | Twitter
Red Sweater - Software Company - https://redsweater.com (without the dash 😎)
Daniel's Blog - https://bitsplitting.org
Core Int - Podcast with Manton
Youtube Video - https://youtu.be/W2f-GJFRY_URelated Episodes
Episode 20 - WWDC 2019 - Mac Development with Daniel Jalkut
Episode 60 - The Future of Mac Development with Lucas Derraugh - Part 2
Episode 59 - The Future of Mac Development with Lucas Derraugh - Part 1
Episode 73 - Multi-Platform SwiftUI with Malin Sundberg
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Show Notes
Thoughts on the Apple Sept Event
Macs we want to buy
Apple Watch Evolution
Frustrations of SwiftUI Mac Development
Migrating from Objective-C to Swift
Mac App Store and AppleScript
Shortcuts on the Mac
Setting up AppleScript Access
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
10/12/2021 • 41 minutes, 58 seconds
Navigating DocC with Ellen Shapiro
Guest
Ellen Shapiro - Twitter @designatednerd
designatednerd.com
Apollo GraphQLApolloGraphQL - YouTube Channel
Youtube Video - https://youtu.be/KhIg2u0J_wQRelated Episodes
Episode 48 - Alternative Backends with Kristaps Grinbergs
Episode 102 - How to Learn New APIs with Stewart Lynch - Part 2
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Episode 67 - Documenting Your Code with Bas Broek
Related Links
DoccZz by Helge Heß
Hosting DocC Archives by Joseph Duffy
Leo's DocC Example for SyndiKit RSS Reader Library
WWDC 2021 videos
Meet DocC documentation in Xcode
Build interactive tutorials using DocC
Elevate your DocC documentation in Xcode
Host and automate your DocC documentation
Syndikit Github Action for Publishing to Netlify (at the end)
Add an option to build the concurrency library for back deployment. #39051
SponsorsRevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Show Notes
Why use DocC (and why not)
Why adding header docs is an important first step
How to organize your documentation
Articles vs Tutorials
What is a DocC extension?
Hosting your DocC
What are some challenges with DocC?
Future of Open-Sourced DocC
Adopting New OSes and Deprecating Old Ones
...and quick thoughts on the September 2021 Apple EventSocial MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
9/28/2021 • 45 minutes, 29 seconds
In-App Purchases and the StoreKit API with Andy Boedo
Guest
Andy Boedo - Twitter @AndresBoedo
RevenueCat - Twitter @RevenueCat
The Sub Club Podcast
The Sub Club YouTube Channel
Youtube Video - https://youtu.be/_3sIBHZPhx8Related Episodes
Episode 26 - App Store Optimization with Ariel Michaeli
Episode 71 - App Dev Stack with Jordan Morgan
Episode 97 - Day One App Ideas with Mikaela Caron
Episode 103 - Learning From Your App Store Competitors with Ariel Mitcheli
Episode 100 - 100th Episode Spectacular
Related Links
What's New with StoreKit 2 by Maddie Beyl
Developer’s Guide to Apple Family Sharing by Andy Boedo
Converting a Paid iOS App to Subscriptions by Cody Kerns
Show Notes
How Court Cases will affect the App Store
Why In-App Purchases and Subscriptions are popular?
Why go with Apple's payment system vs. outside payment system?
How to decide what features to cut-off behind your app's paywall?
What exactly is a receipt in StoreKit?
What's new in StoreKit2?
Future of the App Store
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
9/20/2021 • 45 minutes, 5 seconds
Learning From Your App Store Competitors with Ariel Mitcheli
Guest Ariel Michaeli - Twitter @arielmichaeli
AppFigures - Twitter @appfigures
Newsletter
Podcast
YouTube Channel
360idev 2019 - App Store Optimization for the Rest of Us
AppFigures Guides
AF Chats
ASO & App Promotion Guides
App & Keyword Teardowns
This Week in Apps
AppFigures App Store Optimization Checklist
How to Optimize Your Keywords List in App Store Connect
Optimizing Your App’s Name to Get More Downloads
How to Choose the Right Keywords for App Store Optimization
Youtube Video - https://youtu.be/JHmn2y--wy0Related Episodes
Episode 26 - App Store Optimization with Ariel Michaeli
Episode 71 - App Dev Stack with Jordan Morgan
Episode 97 - Day One App Ideas with Mikaela Caron
Episode 100 - 100th Episode Spectacular
Related Links
AF Chats - WWDC 2021 Recap with Joe Cieplinski
AF Chats - A/B Testing Part 1: The Basics with Katie from Storemaven
AF Chats - A/B Testing Part 2: How & What to Test with Gilad from Moburst
AF Chats - Using Competitive Intelligence to Drive Growth with Ian Irving from The BBC
Made to Stick by Heath Brothers
The Curse of Knowledge
Show Notes
Thoughts on 360iDev
What's New in the App Store?
How to do A/B Testing on the App Store
What to do before starting an app
Information to research from competitors
Why competitors' tech stack matters
Future changes to the App Store
Other Apple App Stores
Future of the Metaverse
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
9/13/2021 • 41 minutes, 2 seconds
How to Learn New APIs with Stewart Lynch - Part 2
Guest
Stewart Lynch @StewartLynch
Stewart Lynch Youtube Channel
CreaTECH Solutions
Youtube Video - https://youtu.be/gH3QnVHsUAcRelated Episodes
Episode 101 - How to Learn New APIs with Stewart Lynch - Part 1
Episode 98 - Async, Await, and Combine with Marin Todorov
Episode 97 - Day One App Ideas with Mikaela Caron
Episode 78 - Apple Silicon Review with Gui Rambo
Episode 72 - Functional Programming with Daniel Steinberg
Episode 32 - Training Your Team with Steve Lipton
Episode 51 - Haikus of Code with Erica Sadun - Part 1
Episode 36 - Upgrading Your Skills in 2020 with Paul Hudson
Related Links
Top Headlines Videos
SyndiKit
Binging with Babish
Karin Prater
Jared Davidson
Brian Voong
Mohammad Azam
Code with Chris
SponsorsLinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comShow Notes
Is it just me or a bug?
When to upgrade to betas?
Challenges learning from documentation
Learn SwiftUI or UIKit
Learning Limitations of an API
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
8/31/2021 • 43 minutes, 14 seconds
How to Learn New APIs with Stewart Lynch - Part 1
Guest
Stewart Lynch @StewartLynch
Stewart Lynch Youtube Channel
CreaTECH Solutions
Youtube Video - https://youtu.be/gH3QnVHsUAcRelated Episodes
Episode 102 - How to Learn New APIs with Stewart Lynch - Part 2
Episode 72 - Functional Programming with Daniel Steinberg
Episode 98 - Async, Await, and Combine with Marin Todorov
Episode 32 - Training Your Team with Steve Lipton
Episode 51 - Haikus of Code with Erica Sadun - Part 1
Related LinksTop Headlines VideosSponsorsLinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comShow Notes
Understanding Different Mental Models
Why getting a good foundation is important?
Have a reasonable goal and expectations
Break your app idea into smaller parts centered around specific APIs
How to be a good mentor and good mentee
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
8/19/2021 • 38 minutes, 52 seconds
100th Episode Spectacular
Youtube Videohttps://youtu.be/Rnv58mzGXOkLinksgBeat.comtransistor.fmpodcastedition.comRelated Episodes
Episode 99 - Practical Entrepreneur with Donny Wals
Episode 98 - Async, Await, and Combine with Marin Todorov
Episode 87 - Core Data Fun with Tim Mitra
Episode 86 - Third-Party APIs with Christian Selig
Episode 84 - Automation Fun with Jared Sorge
Episode 83 - Interviewing Tips with Kim Arnett
Episode 80 - A Tour of Software Testing with Christina Moulton
Episode 79 - Large Scale Teams with Joe Fabisevich
Episode 77 - Swift Package Index with Sven A. Schmidt
Episode 74 - Year of the Server with Tim Condon - Part 1
Episode 72 - Functional Programming with Daniel Steinberg
Episode 71 - App Dev Stack with Jordan Morgan
Episode 68 - App Store Review Guidelines with Paweł Madej
Episode 64 - A Very Remote Year with Jacob Gorban
Episode 59 - The Future of Mac Development with Lucas Derraugh - Part 1
Episode 56 - SwiftUI with Majid Jabrayilov - Part 1
Episode 50 - 50th Episode Extravaganza
Episode 8 - Cloud and Backend Services For Apps with Erik Gillespie
Episode 1 - WWDC 2018 - What Does It Mean For Businesses?
About the Show
How it got started
Difference between interviewee and interviewer
Why it's important to get help
Planning vs Flexibility
Leo's Year(s) in Review
Adjusting to working from home during 😷
Producing a video and audio version
How do guests and topics work?
Future of the Show
Big 5 Topics
SwiftUI/Functional Programming
Large Complex Apps/Patterns and Practices/DevOps
Server-Side Swift
Indie Apps
Leadership/Communication and Organization
Also...
Questions and Answers
Future Plans
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
8/3/2021 • 51 minutes, 34 seconds
Practical Entrepreneur with Donny Wals
Guest
Donny Wals - donnywals.com
Twitter @donnywals
Donny's Practical Books
Youtube Video - https://youtu.be/L6U5Wm8_G74Related Episodes
Episode 17 - Subcontracting with Joe Cieplinski
Episode 47 - Practical Combine with Donny Wals
Episode 81 - Awaiting for Async with Vincent Pradeilles
Episode 93 - Test-Driven Development in Swift with Gio Lodi
Episode 98 - Async, Await, and Combine with Marin Todorov
Sponsors360iDev - August 22 -25 (Hybrid)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 25% off registration.Differences from being an Employee
Keep Yourself on Task
Balancing contract work with your product work
Finding the Right Clients
Getting Yourself Ready
How to decide whether you go solo
What's the best way to find clients for your business?
What are the biggest time vacuums for your business?
How to be prepared to leave your employer
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/24/2021 • 49 minutes, 27 seconds
Async, Await, and Combine with Marin Todorov
Guest
Marin Todorov - underplot.com
Twitter - @icanzilb
Blog - trycombine.com
Podcast Survey - https://brightdigit.typeform.com/to/yVZN2gITYoutube Video - https://youtu.be/H6vW7f66zyUQuestions for Episode 100 HereRelated Episodes
Episode 81 - Awaiting for Async with Vincent Pradeilles
Episode 72 - Functional Programming with Daniel Steinberg
Episode 47 - Practical Combine with Donny Wals
Episode 19 - WWDC 2019 - SwiftUI with Jason Anderson
Related Links
Timelane 2
What about Swift actors and Combine
How should profiling new Swift Concurrency APIs look like?
Combine: Asynchronous programming with Swift
Thoughts on Combine in an async/await world
Using Combine for Your App’s Asynchronous Code
Leo Dion - The Multi-Threaded Asynchronous Parallel World of Swift
from UIKonf 2020
from 360iDev 2019
Hacking with Swift - How to document your project with DocC
DocC2HTML
WWDC Videos
Meet AsyncSequence
Swift concurrency: Behind the scenes
Explore structured concurrency in Swift
Meet async/await in Swift
Protect mutable state with Swift actors
Discover concurrency in SwiftUI
Meet DocC documentation in Xcode
SponsorsLinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comShow Notes
How does Async and Await work with Reactive Programming?
When is Combine a good fit rather then Async and Await?
Why does Async and Await require new OSes?
How do Actors work?
What do Actors replace?
What secret project Marin worked on at Apple?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/16/2021 • 45 minutes, 20 seconds
Day One App Ideas with Mikaela Caron
Guest
Mikaela Caron
Twitter - @mikaela__caron
Instagram @mikaelacaron
Podcast Survey - https://brightdigit.typeform.com/to/yVZN2gITYoutube Video - https://youtu.be/mk1H6JIJkOERelated Episodes
Episode 95 - Swift Playgrounds with Steve Lipton
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Episode 85 - AWS Amplify with Kilo Loco
Episode 73 - Multi-Platform SwiftUI with Malin Sundberg
Episode 71 - App Dev Stack with Jordan Morgan
Episode 27 - Media Outreach with Jeff Gamet
Related Links
Mikaela's Apps
Gibbs Crew Trivia
Job Application Tracker
Leo's Apps
Heartwitch
Speculid
gBeat
OrchardNest
Inspiration
Unmute - Phone call assistant
Orbit App
SwitchBuddy by Filip Nemecek
Notion
BIGBRAINHACKS!
Dave Jacobsen - YouTube Channel
Dev/Design Tools in iOS
SemanticUI
Haptic Haven
Dash
Notability
Favorite Guides
Lickability
Marketing Dark Noise by Charlie Chapman
Launching an Indie App by Michael TigasFocus Work by Michael Tigas
A Best-in-Class iOS App by Jordan Morgan
Learning Resources
Swift by Sundell
Hacking with Swift
Code with Chris
Sean Allen
Also...
The Secret to my Productivity by vlogbrothers
📺 AF Chat: WWDC 2021 Recap with Joe Cieplinski
WWDC 2021 - Create accessible experiences for watchOS
SponsorsLinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comOur App Ideas
How Mikaela got into iOS Development
Brain Marks (from Big Brain Hackathon) - hoping to finish this and make it open source
Alarm app, where you can record your voice as the alarm
Bop It App Gestures: like bop it, but moving a phone around in various ways
Podcasting app for Apple Watch
Another Todo App
Another Expense App
Heartwitch
Speculid
gBeat
OrchardNest
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/9/2021 • 42 minutes, 20 seconds
Localization with Zach Brass
GuestZach Brass - @zhbrassPodcast Survey - https://brightdigit.typeform.com/to/yVZN2gITYoutube Video - https://youtu.be/2Lj21NQ3CXIRelated Episodes
Episode 38 - Accessibility with Kim Arnett
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Related Links
Apple Documentation on Morphology.CustomPronoun
Bonmot
WWDC 2021 Sessions
What's new in Foundation
The practice of inclusive design
Localize your SwiftUI app
Streamline your localized strings
What's new in SwiftUI
What’s new in SF Symbols
Sponsors360iDev - August 22 -25 (Hybrid)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 25% off registration.What is Localization
What's the relationship with Internalization?
Why does limiting yourself to English speaker hurt your app?
What's the relationship with accessibility?
Why you should start doing it now?
What's the first thing you should do with your Xcode project?
What's new with inflections from WWDC 2021?
What's the best way to take advantage of formatters?
How does WWDC 2021 improve formatters?
What's Zach's biggest pet peeve with Localization tutorials?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/1/2021 • 36 minutes, 6 seconds
Swift Playgrounds with Steve Lipton
Guest
Steve Lipton- Twitter @Steve_Lipton
LinkedIn
MakeAppPie
iOS Development Tips Weekly
LinkedIn Learning Courses
Podcast Survey - https://brightdigit.typeform.com/to/yVZN2gITYoutube Video - https://youtu.be/l5A8FHfvqIcRelated Episodes
Episode 94 - iPad Development with Adam Shaw
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Episode 63 - Apple Watch 2020 with Steve Lipton
Episode 36 - Upgrading Your Skills in 2020 with Paul Hudson
Related Links
Apple HI Guidelines - Accessibly
WWDC 2021 - Create accessible experiences for watchOS
WWDC 2021 - SwiftUI Accessibility: Beyond the basics
Apple previews powerful software updates designed for people with disabilities
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.360iDev - August 22 -25 (Hybrid)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 25% off registration.Swift Playgrounds Challenges
Challenges with the File Structure
Mac vs iPad
How Playground Templates Work
UIKit vs Swift on Playgrounds
Dealing with Access Levels
Swift Playgrounds Benefits and Updates
Publishing to the App Store
Integration with Xcode Cloud?
Benefits of Direct Hardware Access
More Accessibility with the iPad
Pro Apps on the iPad
Xcode Integration?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/24/2021 • 44 minutes, 19 seconds
iPad Development with Adam Shaw
Guest
Adam Shaw (Twitter @kabukivision)
kabukivision.com
We Like Games Podcast
Developer Commentary YouTube Channel
Moleskine Studio
Bonobo Labs
Podcast Survey - https://brightdigit.typeform.com/to/yVZN2gITYoutube Video - https://youtu.be/WHzAdaMHWgERelated Episodes
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Episode 73 - Multi-Platform SwiftUI with Malin Sundberg
Episode 10 - Business and IT Applications
Episode 9 - iPad Apps for Businesses and Pros
WWDC Sessions
Take your iPad apps to the next level
Focus on iPad keyboard navigation
Support Full Keyboard Access in your iOS app
SwiftUI on the Mac: Build the fundamentals
SwiftUI on the Mac: The finishing touches
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Developing for iPad
Why develop an iPad app?
iPad vs iPhone
iPad vs Mac
Building Pro Apps on the iPad
Limits of iPadOS
Using Custom Controls
Designing for the iPad (specifically)
Migrating from iPhone to iPad
Designing for Different Sizes
Whether to support multiple windows
Supporting SplitView
Supporting Pointers and Keyboard Shortcuts
Pro Apps for the iPad
Problems with Pro Apps on the iPad
Missing Pro Apps on the iPad
Swift Playground on the iPad
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/19/2021 • 45 minutes, 46 seconds
Test-Driven Development in Swift with Gio Lodi
Guest
Gio Lodi - gio.codes
Twitter @mokagio
Blog at mokacoding.com
Test-Driven Development in Swift with SwiftUI and Combine by GioApress Link
Podcast Survey - https://brightdigit.typeform.com/to/yVZN2gITYoutube Video - https://youtu.be/OM9jbAbUXZ0Related Episodes
Episode 15 - Test-Driven Development with Joshua Greene and Michael Katz
Episode 24 - Continuous Integration with Kyle Newsome
Episode 62 - Local Database Storage on iOS with Aaron Douglas
Episode 72 - Functional Programming with Daniel Steinberg
Episode 80 - A Tour of Software Testing with Christina Moulton
Episode 81 - Awaiting for Async with Vincent Pradeilles
Episode 92 - WWDC 2021 - Platforms State of the Union with Peter Witham
Related Links
How to test Swift async/await code with XCTest by Gio
xUnit Test Patterns: Refactoring Test Code by Gerard Meszaros
What's a Test Double?
What's New in Testing talk by Gio from Melbourne CocoaHeads - June 10th 2021Slides from talk
Dependency Inversion Principle
CombineAsyncually
dimsumthinking.com by Daniel Steinberg
Leo Dion - Combine-ing the Old with the New from 360iDev 2019 (on creating Publisher Factories/Publicists)
Xcode Cloud Beta Signup
WWDC Sessions
Embrace Expected Failures in XCTest
Meet Xcode Cloud
Explore Xcode Cloud workflows
Customize your advanced Xcode Cloud workflows
Diagnose unreliable code with test repetitions
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.TDD Thoughts from WWDC 2021
Is Xcode Cloud Ready?
Who's the target audience for Xcode Cloud?
On Testing with Async/Await
Combine vs Async/Await
How to expect failures in Xcode 12.5
Testing Repetitions
TDD, SwiftUI & Combine
Why do TDD now in Swift?
Difficulties adopting it later in project
TDD in SwiftUI vs UIKit
Isolating Systems with TDD
What are the different types of Test Doubles?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/14/2021 • 58 minutes, 20 seconds
WWDC 2021 - Platforms State of the Union with Peter Witham
Guest
Peter Witham - Compileswift.com - Twitter
Crossover EpisodeCompileSwift - Episode - Keynote ReviewPodcast Survey - https://brightdigit.typeform.com/to/yVZN2gITYoutube Video - https://youtu.be/6IEvRlyu904Related Episodes
Episode 24 - Continuous Integration with Kyle Newsome
Episode 81 - Awaiting for Async with Vincent Pradeilles
Episode 84 - Automation Fun with Jared Sorge
Episode 91 - Fastlane with Josh Holtz
Related Links
Xcode Cloud Beta Signup
Test-Driven Development in Swift by Gio Lodi
Josh Shaffer's Clarification on Async/Await and Combine
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.360iDev - August 22 -25 (Hybrid)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 25% off registration.Xcode Cloud
How does it differ from Xcode Server and Serverbots?
Is there an on-premises version?
Can the Workflows be edited via web or text?
How does it compare to other services?
Where's the REST API for Xcode Cloud
How much does it cost?
What's is going to be the relationship with Fastlane?
How do pull requests, discussions, etc... interface with Git Repo Services (GitHub, Gitlab)?
Xcode... Swift Playgrounds on the iPad
Fully Build and Upload Apps from the iPad
How does sharing code with Xcode on the Mac work?
How does it interface with Git Repos?
Can Preview Apps in Full Screen
Sounds perfect for testing and prototyping
Async/Await and Actors
See episode with Vincent on async and await
Xcode includes tools for refactoring
What's the relationship with Combine?
Uncertainty with Actors
SwiftUI - Year 3
Used in various macOS apps (Maps, Photos, etc...)
Continued improvements to List
Table added to macOS
Specific Platforms for modifiers
Pull-to-Refresh One liner
New Material Styles and UI Focus API
Focus and Notifications
More Granular control over notifications
How do notification scores work?
What can we do about notification spam?
Widgets
New Extra Large Widget
More Stacks
Widget Suggestions
iPad Home Screen Widgets
Peter's rant on Widgets
Also... ScreenTime API, SharePlay API, AR Object Capture, and the death of Objective-CSocial MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/8/2021 • 1 hour, 25 minutes, 45 seconds
Fastlane with Josh Holtz
Guest
Josh Holtz (website)Twitter @joshdholtz
Youtube Video - https://youtu.be/YgEXQ1k6eRIRelated Episodes
Episode 84 - Automation Fun with Jared Sorge
Episode 24 - Continuous Integration with Kyle Newsome
Related Links
fastlane.tools
Shibapm
fastlane screencasts
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.360iDev - August 22 -25 (Hybrid)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 25% off registration.What to know about Fastlane
How Fastlane started?
How Fastlane is built and maintained?
How can Fastlane help your team?
What's Fastlane's hidden gem?
How to automate signing your app?
How does Fastlane working with the App Store Connect API?
How does Fastlane deal with Apple's updates behind the scenes?
How does WWDC affect Fastlane development?
What's on Josh's WWDC Wish List (i.e. What feature could help Fastlane)?
How can you contribute to Fastlane?
What's the future of Fastlane?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
5/24/2021 • 43 minutes, 9 seconds
AWS and SOTO with Adam Fowler
Guest
Adam Fowler (website)
@o_aberation (Twitter)
@adamfowlerphoto (Instagram)
Youtube Video - https://youtu.be/X5XOnyysMWoRelated Episodes
Episode 85 - AWS Amplify with Kilo Loco
Episode 75 -Year of the Server with Tim Condon - Part 2
Episode 49 - Vapor 4 with Tibor Bödecs
Related Links
Soto - Swift SDK for Amazon Web Services
Hummingbird - Lightweight, flexible server framework written in Swift
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.360iDev - August 22 -25 (Hybrid)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 25% off registration.What is SOTO and how does it work with S3?
How SOTO Works?
How SOTO sets up its code?
Why use S3 for storage?
How S3 compares with other services?
What Devs Should Know About AWS
What is the best way to serve your website from AWS?
How to setup authentication with AWS?
How does Amplify fit in with other services?
How to use DynamoDB with SOTO?
How SOTO works with Lambda?
How SOTO works with your Lambda?
Dealing with Authentication, SOTO, and Lambda?
How to avoid high costs with AWS?
What is Hummingbird?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
5/14/2021 • 29 minutes, 56 seconds
Cryptography with Marcin Krzyżanowski
Guest
Marcin Krzyżanowski
Twitter @krzyzanowskim
Swift.best
Youtube Video - https://youtu.be/eigMjltZlP8Related Episodes
Episode 88 - Conferences with John Wilker
Episode 84 - Automation Fun with Jared Sorge
Episode 77 - Swift Package Index with Sven A. Schmidt
Episode 55 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 2
Episode 33 - 2020 Developer Wish List with Alex Bush
Related Links
WWDC 2021 Announced
CryptoSwift
OnlineSwiftPlayground.run
SwiftStudio.app
Apple Security Framework
Serious Cryptography
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.360iDev - August 22 -25 (Hybrid)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 25% off registration.What Should Devs Know About Cryptography
What is CryptoSwift
What is relationship between Randomness and Encryption
What's the difference between Base64 Encoding and Encryption
What is a cypher?
What is the difference between symmetric and asymmetric?
What is key derivation for?
What is an initialization vector (aka IV)?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
5/4/2021 • 40 minutes, 1 second
Conferences with John Wilker
Guest
John Wilker (johnwilker.com)
360|iDev - August 22 - 25, 2021
Use the promo code EmpowerApps to get 25% off registration.
Twitter (jwilker)
Instagram (johntwilker)
360Conferences
Youtube Video - https://youtu.be/XXQB24mqQp4Related Episodes
Episode 36 - Upgrading Your Skills in 2020 with Paul Hudson
Episode 9 - iPad Apps for Businesses and Pros
Related Links
WWDC 2021 Announced
GoodNotes
Scrivener
360|iDev 2021 Call For Papers will close May 7, 2021!
Plex now works with the Apple TV app, but not all content is available - iMore
John on using his iPad
Writing wherever you are - johnwilker.com
I might finally not need a moleskine - johnwilker.com
Where's the iPad fit in? - johnwilker.com
iPad..... nice but not magical, yet (my Review) - johnwilker.com
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.360iDev - August 22 -25 (Hybrid)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Available Online or In-Person
Use the promo code EmpowerApps to get 25% off registration.Hosting Conferences Today
Different Challenges with 2021 vs 2020
Getting Signups and Registrations
Improvements to Online Platforms
Dealing with Zoom Fatigue
Being a Speaker
There's always something the audience can learn
Teaching as a novice and avoiding missing steps
Practice at your "local" meeting or on a podcast 😁
Encourage others to speaker for the first time
The More The Merrier
WWDC Wish List
Allowing more content available on Apple TV
Leo's novice experiences with Apple TV
Thoughts on multi-user Fitness+
Apple Watch Band for Watch Enthusiasts?
More Interactive Widgets on iOS 15
iPad Pro vs Mac Book Air M1
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/24/2021 • 34 minutes, 12 seconds
Core Data Fun with Tim Mitra
Guest
Tim Mitra (website)
Twitter @TimMitra
More Than Just Code Podcast
Spockcast Podcast
Pragmatic Hero's Journey
RoundaboutFM
Youtube Video - https://youtu.be/SwVF-wihDvERelated Episodes
Episode 47 - Practical Combine with Donny Wals
Episode 62 - Local Database Storage on iOS with Aaron Douglas
Ok Productive - 030. Neuroplasticity with Tim Mitra
Related Links
WWDC 2021 Announced
Swift TO
MistKit - Swift Package for Server-Side and Command-Line Access to CloudKit Web Services
NSPersistentCloudKitContainer
Setting Up Core Data with CloudKit - Apple Docs
CoreStore by John Estropia - real power of Core Data with the elegance and safety of Swift
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.Building Apps with Core Data Today
Working with CloudKit and CoreData
Fun with SwiftUI and CoreData
Learning how to use AppData
Power of Combine
How to Sync Subscriptions with Core Data
CloudKit on the Server
Business Problems with CloudKit
Why Choose Core Data?
Power of Live Previews
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/14/2021 • 38 minutes, 43 seconds
Third-Party APIs with Christian Selig
Guest
Christian Selig (website)
Twitter @ChristianSelig
Reddit /u/iamthatis
YouTube CLeeSelig
ApolloApp
Youtube Video - https://youtu.be/rhVazmvPTYoRelated Episodes
Episode 73 - Multi-Platform SwiftUI with Malin Sundberg
Episode 66 - UI Design for Developers with Heidi Helen Pilypas
Episode 38 - Accessibility with Kim Arnett
Episode 31 - Future Proofing Your Apps with Gui Rambo
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030RevenueCatUsing RevenueCat to power your in-app purchase infrastructure solves:
For edge cases you don’t even know you have
Protects from outages your team hasn’t seen yet
Saves you time on future maintenance
As well as new features released by the app stores
Empowers your marketing teams with clean, reliable IAP data
All that to say, RevenueCat handles all the headaches of in-app purchases so you can get back to building your app. Try RevenueCat today at revenuecat.com.How building around Reddit works?
Why Reddit is easier than Twitter?
How the variety in apps helps the experience?
Simplicity and Native Features
Dealing with Walled Gardens like Reddit Chat
How Apollo works?
How Server-Side Push Notifications
Dealing with Imgur
Whether to use third-party library
Finding great beta users
Testing Accessibility
UI Design notes
Building Widgets with SwiftUI
Finding a user community
Designing great gestures
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionRedditLeo - /u/leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/4/2021 • 43 minutes, 51 seconds
AWS Amplify with Kilo Loco
Guest
Kilo Loco
Twitter
Youtube
LinkedIn
Youtube Video - https://youtu.be/kQP7dCaKdEcRelated Episodes
Episode 83 - Interviewing Tips with Kim Arnett
Episode 75 - Year of the Server with Tim Condon - Part 2
Episode 10 - Cloud and Backend Services For Apps with Erik Gillespie
Related Links
Getting Started with AWS Amplify
AWS Free Tier
APNs Push Notifications for iOS Using AWS Lambda in Swift - Kilo Loco
AWS Amplify Playlist - Kilo Loco
AWS Amplify Repo
Amazon DynamoDB
Amazon Cognito
Amazon SNS
Amazon Pinpoint
How Do I Write If Case Let in Swift?
GoshDarnSwiftUI
SwiftUIPropertyWrappers
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Swift Heroes Digital 2021Swift Heroes Digital is a one day event, for developers, designers and project managers at all levels of experience with the Swift platform. Combining resources from the Swift Heroes Global network, we’re excited to be bringing you this international, interactive event. Share this code with your network and they receive 20% discount on all Swift Heroes tickets: SH21-SPEAKERS-COMMUNITYInsert the code under 'redeem voucher' on the ticketing platform to receive 20% discount on all ticket types.What does AWS Amplify do?
How it works with your iOS project
Why Amplify vs your own backend
How does it compare with other MBaaS services
What are the different components
How does it compare with something like SOTO
How does the cost compare
Can you opt-out later and use the individual services
Getting Started with AWS Amplify
Using Cocoapods vs SPM
How to use the AWS CLI
How to setup your data model in DynamoDB
How you can take advantage of AWS Lambda
How do you get started with Push Notifications and APNS
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/28/2021 • 32 minutes, 51 seconds
Automation Fun with Jared Sorge
Part 2 of Episode at Xcoders!More on Swift Package Manager, Graphics Management, and Server-Side Dev 👆Guest
Jared Sorge
Xcoders Podcast
Micro.blog (@jsorge)
Twitter (@jsorge)
GitHub (@jsorge)
LinkedIn
Youtube Video - https://youtu.be/hWVfxNkY5SwRelated Episodes
Xcoders Podcast - March 2021
Episode 73 - Multi-Platform SwiftUI with Malin Sundberg
Episode 24 - Continuous Integration with Kyle Newsome
Episode 80 - A Tour of Software Testing with Christina Moulton
Episode 51 - Haikus of Code with Erica Sadun - Part 1
Episode 52 - Haikus of Code with Erica Sadun - Part 2
Related Links
Xcode Project Generation: A Primer
Tuist
XcodeGen
App Distribution
AppCenter
AppCenter Fastlane Plugin
Fastlane
TestFlight
Sparkle
Continuous Integration
Jenkins
GitLab CI
Github Actions
Scripting
ShellOut
Swift-Sh
ArgumentParser
Makefiles
Rake for Ruby
Mac Development
MacStadium
Macs in AWS
Docker
Docker-OSX
Ansible
Chef
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Swift Heroes Digital 2021Swift Heroes Digital is a one day event, for developers, designers and project managers at all levels of experience with the Swift platform. Combining resources from the Swift Heroes Global network, we’re excited to be bringing you this international, interactive event. Share this code with your network and they receive 20% discount on all Swift Heroes tickets: SH21-SPEAKERS-COMMUNITYInsert the code under 'redeem voucher' on the ticketing platform to receive 20% discount on all ticket types.Why Automate
Getting started with Continuous Integration
Avoiding Xcode Project Merges
Avoiding over-automation
Using test plans to empower your tests
Automation Tools
Xcodegen vs Tuist for Project Generation
Gitlab CI vs GitHub Actions vs Jenkins
The power of Fastlane
Yes Makefiles are still great!
Using ArgumentParser and ShellOut
macOS Development Challenges
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/21/2021 • 31 minutes, 17 seconds
Interviewing Tips with Kim Arnett
Guest
Kim Arnett (kimarnett.com)
Twitter @kaydacode
DEV.TO @kaydacode
Youtube Video - https://youtu.be/UpUQY7sD9g4Related Episodes
Episode 38 - Accessibility with Kim Arnett
Episode 25 - Hiring an iOS Developer with John Knox
Episode 12 - iOS Developer Interviews with Alex Bush
Related LinksJob Posting TweetSponsorsHeartwitch 1.4.1 released!
Live stream your health stats while you play the latest video games or exercise online.
Show your heart rate as you live stream with this watch app!
Heartwitch is a combination Apple Watch and Web Application for sending your health data to a web browser window.Use the promo code EMPOWERAPPSMARCH to get 3 months premium freehttps://heartwitch.app/AppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Interviewing Techniques
Removing Anxiety for the Process
Testing Skills Properly
Importance of Communication and People Skills
Creating a Welcoming Environment
Clear Intentions and Company Buy-In
Clear Job Postings
What to Ask Company During Interview
Find out about Turnover
How's their Diversity
What's their Day-to-Day Schedule
What's their priority for Mobile Development and iOS
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/14/2021 • 34 minutes, 40 seconds
Game Development with Tammy Coron
Guest
Tammy Coron
Just Write Code
Twitter (@Paradox927)
LinkedIn
YouTube
Gloop Drop game
Youtube Video - https://youtu.be/cqhSz3-fZtIRelated EpisodesEpisode 64 - A Very Remote Year with Jacob GorbanRelated Links
Apple Game Frameworks and Technologies by Tammy Coron
Trello
Royalty Free Assets
Open Game Art
Itch
Resources for Free/Royalty-Free Assets for Game Dev from /r/gamedev
Managing Multiple Projects Without Losing Your Mind (Probably) by Tammy Coron - 360iDev 2019
Working Remotely: Best Practices for Distributed iOS development by Leo Dion
Games Tammy is Playing Now
All of You
In Most
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Swift Heroes Digital 2021Swift Heroes Digital is a one day event, for developers, designers and project managers at all levels of experience with the Swift platform. Combining resources from the Swift Heroes Global network, we’re excited to be bringing you this international, interactive event. Share this code with your network and they receive 20% discount on all Swift Heroes tickets: SH21-SPEAKERS-COMMUNITYInsert the code under 'redeem voucher' on the ticketing platform to receive 20% discount on all ticket types.Why Game Development
Where to get started
Native vs Cross-Platform
What is a Game Loop
How SpriteKit helps?
SceneKit vs Unity
Working with Game Controllers
On Managing Multiple Projects
Where to get started
Working Remotely
Staying Organized
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/7/2021 • 37 minutes, 20 seconds
Awaiting for Async with Vincent Pradeilles
Guest
Vincent Pradeilles
Twitter @v_pradeilles
YouTube Channel (vincentpradeilles)
GitHub
LinkedIn
Also iOS Memes 😆 ...
Youtube Video - https://youtu.be/hcVJSu7we5wRelated Episodes
Episode 75 - Year of the Server with Tim Condon - Part 2
Episode 72 - Functional Programming with Daniel Steinberg
Episode 47 - Practical Combine with Donny Wals
Related Links
Swift Evolution Proposal
Asynchronous Multi-Threaded Parallel World of Swift by Leo
Experimenting with async & await in Swift by Vincent
Running tasks in parallel using async/await 🚀 by Vincent
PromiseKit by Max Howell
EventLoopFuture in Vapor (and SwiftNIO)
Leo's Async Await Test Code
Chris Lattner's Async Proposal
Getting started with async/await in Swift by Eneko Alonso
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Swift Heroes Digital 2021Swift Heroes Digital is a one day event, for developers, designers and project managers at all levels of experience with the Swift platform. Combining resources from the Swift Heroes Global network, we’re excited to be bringing you this international, interactive event. Share this code with your network and they receive 20% discount on all Swift Heroes tickets: SH21-SPEAKERS-COMMUNITYInsert the code under 'redeem voucher' on the ticketing platform to receive 20% discount on all ticket types.Dealing with Asynchronous Calls Now
Dealing with GCD
History of CPU Cores and Asynchronous Programming
Power of GCD and Queues
How Promises fit in with Swift
Managing Network Call Asynchronously
Dealing with UI Changes
What is a DispatchGroup
What Await and Async Provide
Avoiding Blocking the Main Thread
Subscribing/Publisher vs Async/Await
How do Tasks work
How to get started now with Async and Await
What are Continuations
What is an Unsafe Continuation
Dealing with Errors in Async Functions
How do parallel asynchronous tasks
How Combine works with Async/Await
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/26/2021 • 44 minutes, 16 seconds
A Tour of Software Testing with Christina Moulton
Guest
Christina Moulton - @ChristinaMltnGrokSwift.com
Youtube Video - https://youtu.be/5LShKIwHEsARelated Episodes
Episode 77 - Swift Package Index with Sven A. Schmidt
Episode 24 - Continuous Integration with Kyle Newsome
Episode 15 - Test-Driven Development with Joshua Greene and Michael Katz
Related Links
Testing Your Apps in Xcode from Apple Docs
SnapshotTesting by PointFreeCo
PointFreeCo Episode 41 - A Tour of Snapshot Testing
KIF
Cucumber
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsWhat is Software Testing?
Why is important?
What can be automated? (and what can't?)
Why are unit tests so important?
How to automate the workflow between manual tests?
What tests should you do before release?
What kinds of testing are there?
How to use visual snapshots for testing?
What is integration testing?
How to deal with outside systems which are always changing?
How is smoke testing different from integration testing?
What should be tested?
How to test the visual appearance of your app?
Where to draw the line when isolating what should be tested
How to avoid the code coverage trap?
How iOS devs can share specs with server developers?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/19/2021 • 30 minutes, 43 seconds
Large Scale Teams with Joe Fabisevich
Guest
Joe Fabisevich - Website
Twitter - @mergesort
GitHub - @mergesort
LinkedIn
Youtube Video - https://youtu.be/Mgg9D4JggQIRelated Episodes
Episode 76 - Scaling and Security with Jeroen Leenarts
Episode 64 - A Very Remote Year with Jacob Gorban
Related Links
How Complex Systems Fail by Richard I. Cook, MD
My New 1st Principle of Programming – “Good Code Is Easy to Change” by Aaron King
Conway's law from Wikipedia
Write code. Not too much. Mostly functions. by Brandon Smith
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030LinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comWorking with Big Teams
Does it translate well to each team's work?
Dealing with different levels of communication and detail
How to keep communication consistent
Documenting Why Decisions Are Made
How Early Company Decisions Affect their Future
Organizing Architecture and Code with Large Teams
Staying away from dependencies
Mono-Repo vs Modularity
Server-Driven solutions
Consistency in Platform Design
What does it mean to put People-first in your code?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/12/2021 • 37 minutes, 17 seconds
Apple Silicon Review with Gui Rambo
Guest
Gui Rambo - Twitter @_inside
Blog
Github
Stacktrace Podcast
9to5Mac
Youtube Video - https://youtu.be/L-lOLeuGrnMRelated Episodes
Stacktrace Podcast 113: “The hype is real!”
Episode 31 - Future Proofing Your Apps with Gui Rambo
Episode 77 - Swift Package Index with Sven A. Schmidt
Related Links
AirBuddy 2
FusionCast
Chibi Studio
Distributing Mac apps outside the App Store, a quick start guide by Gui
Run x86 Apps (including homebrew) in the Terminal on Apple Silicon
Homebrew on Apple Silicon
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030BrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.Distributing App Outside the App Store
Dealing with Design Restrictions
Avoiding Sandboxing
Avoiding the Apple Cut
Dealing with Technical Restrictions
Mac Book Air Review
Mac Book Air vs Mac Book Pro
Portability vs Screen Size
Battery Life and Optimized Charging
USB-C 😡
Software Compatibility and Rosetta 2
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
1/24/2021 • 57 minutes, 1 second
Swift Package Index with Sven A. Schmidt
Guest
Sven A. Schmidt - finestructure.co
Twitter - @_sa_s
LinkedIn - Sven A. Schmidt
Youtube Video - https://youtu.be/VqQTUM7-_64Related Episodes
Episode 75 - Year of the Server with Tim Condon - Part 2
Episode 74 - Year of the Server with Tim Condon - Part 1
Episode 46 - Developer Community - Part 2
Episode 45 - Developer Community - Part 1
Episode 49 - Vapor 4 with Tibor Bödecs
Episode 34 - Server-Side Swift with Tim Condon
Episode 24 - Continuous Integration with Kyle Newsome
Related Links
Arena
Hummingbird
Revisor (Xcode Extension)
Swift Package Index
Swift by Sundell #75 - The Swift package ecosystem
Swift Packages - Dependency Management of the Future - Leo Dion
The Swift Package Index Metadata File
watchOS Support in Composable Architecture by PointFree
Docker Image Support in MistKit by Leo
Shields.io - badges for your README
MistKit - CloudKit support outside of CloudKit framework (i.e. Linux)
Swift Metrics
SwiftPrometheus
Snapshot Testing by PointFree
Ink by John Sundell
Plot by John Sundell
OrchardNest.com
PointFree Ep 16: Dependency Injection Made Easy
How To Control The World by Stephen Celis (from PointFree)
Grafana
Rester for Smoke Testing
Running Docker on Apple Silicon M1 (persisted volume)
Extend SwiftPM `PackageDescription` to introduce metadata
Swift Package Continuous Integration Guide by Leo
Virtualization Framework
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030LinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comMaintaining Swift Package Index
Supporting Different Projects and Packages
Dealing with Schemes and Docker Images
Supporting Badges
Server Side Support
Snapshot Testing for the web page
Tracking Metrics and performance
Setting up CI on Gitlab and Github Actions
Making deployment easy
Future of SPI
Dealing with Apple Silicon
Running a Database Server on an M1
README Support Here
Improved Search Support
Category Support
More Metadata Support
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
1/16/2021 • 46 minutes, 28 seconds
Scaling and Security with Jeroen Leenarts
Guest
Jeroen Leenarts - AppForce1.Net
Twitter @AppForce1
Podcast
LinkedIn
Youtube Video - https://youtu.be/iDP9wdtQ6swRelated Episodes
AppForce1 - Special: Leo Dion
Episode 70 - Maintaining & Migrating with Antoine van der Lee - Part 2
Episode 65 - Understanding Git with Ben Chatelain
Episode 47 - Practical Combine with Donny Wals
Episode 42 - Patterns and Practices for Scalable Apps
Episode 12 - iOS Developer Interviews with Alex Bush
Related Links
iOS Developer Happy Hour by Allen W
AppForce1 Podcast
The Manager's Path: A Guide for Tech Leaders Navigating Growth and Change by Camille Fournier
Bazel
Tuist
XcodeGen
Swift Packages - Dependency Management of the Future (NSSpain 2020) by Leo Dion
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Working in 2020 and 2021
Why do podcasts in 2020 and 2021?
Running a Cocoaheads in 2020
Networking in 2020
Working from Home
Writing a Book in 2021
Dealing with Complexity in Your Code Base
Dealing with Large Teams
Keeping Your App Secure
Using the Keychain properly
How does ATS work
Dealing with Isolation and Repetition
Transitioning through Objective-C, Swift, and SwiftUI
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
1/8/2021 • 50 minutes, 41 seconds
Year of the Server with Tim Condon - Part 2
Guest
Tim CondonTwitter @0xTim
Youtube Video - https://youtu.be/VMNvZtw9OyURelated Episodes
Episode 74 - Year of the Server with Tim Condon - Part 1
Episode 72 - Functional Programming with Daniel Steinberg
Episode 49 - Vapor 4 with Tibor Bödecs
Episode 34 - Server-Side Swift with Tim Condon
Episode 8 - Choosing the Right Backend with Erik Gillespie
Related Links
The Future of Swift on the Server by Tim
Building the next version of the Smoke Framework by Simon Pilkington
Swift Server Work Group
Use Swift on AWS Lambda with Xcode - WWDC 2020
Getting started with async/await in Swift by Eneko Alonso
Soto for AWS
Smoke Framework
Building the next version of the Smoke Framework by Simon Pilkington
Kitura
Chaqmoq
Swift Log
Swift Metrics
Swift Tracing
Vapor Queues
Vapor Queues Fluent Driver
A Complete Guide to Swift Development on Linux By Jari Koopman
Swift Setup from Steven Van Impe and PWS Academy
iOS Developer Happy Hour by Allen W
AppForce1 Podcast
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030LinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comVapor 5 and Async/Await
How Async/Await affects SwiftNIO
How Async/Await affects EventLoopFuture
Performances vs Maintainability
What is the timeline on Async/Await
Amazon and Server-Side Swift
What is Soto?
What Amazon web services Soto supports?
How to integrate Soto into your sever-side Swift project?
What is Smoke?
Important Server-Side Frameworks
Smoke, Kitura, and Chaqmoq
Logging and Metrics
Job and Queue Management
Swift Tracing
Server-Side Swift in the Real World
Where to Host Your Server-Side App
Is Server-Side Swift Production Ready
Growth of Server-Side Acceptance in 2020
Differences from iOS Development
Scaling Your Server-Side Application
Can You Develop in Swift outside of Xcode?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
12/29/2020 • 35 minutes, 38 seconds
Year of the Server with Tim Condon - Part 1
Guest
Tim CondonTwitter @0xTim
Youtube Video - https://youtu.be/7pNF4em4pyURelated Episodes
Episode 34 - Server-Side Swift with Tim Condon
Episode 49 - Vapor 4 with Tibor Bödecs
Episode 74 - Year of the Server with Tim Condon - Part 2
Related Links
The Future of Swift on the Server by Tim
Building the next version of the Smoke Framework by Simon Pilkington
Swift Server Work Group
Use Swift on AWS Lambda with Xcode - WWDC 2020
Platforms State of the Union - WWDC 2020 (Vapor at 30:30)
Virtualization Framework
Running Docker on Apple Silicon M1 by Sven A. Schmidt
AWS Graviton
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030BrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.Swift Server Work Group and SwiftNIO
What is the Swift Server Work Group?
Server-Side at WWDC
What is SwiftNIO and how does it fit with Server-Side Swift?
Why SwiftNIO instead of URLSession?
Should you use SwiftNIO for my iOS app?
State of Swift on the Server
Where Swift has grown in 2020
State of Kitura after IBM
Swift and Server-Side Swift on Windows
AWS Lambda and Smoke
Swift on Ubuntu 20, Centos, and Amazon Linux
ARM and Swift on the Server
Server Development on Apple Silicon/ARM
Virtualization on Apple Silicon
The Future of ARM Servers
more on concurrency proposal and Vapor 5 in the next episode... 😯
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
12/24/2020 • 24 minutes, 20 seconds
Multi-Platform SwiftUI with Malin Sundberg
Guest
Malin Sundberg - @malinsundberg
Orbit - https://timeinorbit.com - A nicely designed time tracking and invoicing app
Cup of Tech - http://cupof.tech - Podcast with Malin, Kai and Zach
Order Speculid Today!Youtube Video - https://youtu.be/uFdLYrze0ucRelated Episodes
Episode 25 - Developing for Multiple Platforms with Manton Reece
Episode 35 - SwiftUI - The Good, the Bad, and the Benefits
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Episode 60 - The Future of Mac Development with Lucas Derraugh - Part 2
Related Links
Back to the Mac 2020 - The journey of making a Mac app in SwiftUI by Malin
NSSpain - SwiftUI: We’re now Apple Platform Developers by Malin
iOSDevCampDC 2020 - Full Stack Swift - From Server to Watch by Leo
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsBuilding for the macOS
macOS Design Differences
Where AppKit is necessary on macOS?
How Big Sur changed the design?
Supporting Older Operating Systems
Migrating to iOS
Dealing with iOS screen size
Differences in navigation
What parts can be reused for SwiftUI?
Designing for "glimpses"
Whether to go with SwiftUI
AppKit/UIKit vs SwiftUI
Some parts faster for development - some slower
Based on expertise
How about Catalyst?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
12/16/2020 • 46 minutes, 8 seconds
Functional Programming with Daniel Steinberg
Guest
Daniel Steinberg - dimsumthinking.com
Twitter @dimsumthinking
Newsletter
Youtube Video - https://youtu.be/YWZt2vq3Y_URelated Episodes
Episode 36 - Upgrading Your Skills in 2020 with Paul Hudson
Episode 47 - Practical Combine with Donny Wals
Episode 19 - WWDC 2019 - Swift UI with Jason Anderson
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Related Links
A Combine Kickstart by Daniel Steinberg
A Functional Programming Kickstart by Daniel Steinberg
iOSDevCampDC 2020 - Keynote: Mise en Place - Daniel Steinberg
JFS by Amy Hoy
Refactoring to Patterns by Joshua Kerievsky
flatMap, Double Optionals, and Functional Programming by Leo Dion
Introducing Combine - WWDC 2019
Functional Swift by Chris Eidhof, Florian Kugler, and Wouter Swierstra
The Humane Interface: New Directions for Designing Interactive Systems by Jef Raskin
Combine-ing the Old with the New by Leo Dion at 360iDev 2020
Atomic Habits by James Clear
Latest BrightDigit Newsletter on Error Handling
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030AudibleAudible is the leading provider of spoken-word entertainment and audiobooks, ranging from best sellers, to celebrity memoirs, news, business, and self-development. Every month, members get one (1) credit to pick any title, plus two (2) Audible Originals from a monthly selection, and access to daily news digests (from The New York Times, The Wall Street Journal, and The Washington Post), as well as guided meditation programs.My recommendationTalking to Strangers - What We Should Know About the People We Don't KnowWritten and Narrated by: Malcolm GladwellTry it out today and 2 free audiobooks:http://www.audibletrial.com/EmpowerAppsLearning and Conferences
Presentation vs Code
Avoiding the actual work
Using what works best when you need it
The importance of writing everyday
Functional Programming
History of functional programming
Mathematical basis for functional programming
Examples of use with Array and Optionals: zip, reduce, map, etc...
Difference compactMap vs flatMap
What flatMap actually means
Relationship between functional programming and object-oriented programming
Functional Programming and Combine
Mutability and Values
Adapting to new patterns
Staying organized with small pieces
Testing mapping between inputs
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
12/11/2020 • 39 minutes, 32 seconds
App Dev Stack with Jordan Morgan
Guest
Jordan Morgan - @jordanmorgan10
Spend Stack
Swiftjective-C
Special Cut Our 2020 Apple Purchases - https://youtu.be/0GSKcO18XPsFull Episode @Youtube - https://youtu.be/9-9XxNzXoTsRelated Episodes
Episode 68 - App Store Review Guidelines with Paweł Madej
Episode 62 - Local Database Storage on iOS with Aaron Douglas
Episode 65 - Understanding Git with Ben Chatelain
ATP 405 - The Benevolence of the Powerful
Release Notes 393 - Small Fry
Related Links
Apple Press Release
A Companion of SwiftUI App
NYTimes - Apple Halves Its App Store Fee for the Smaller Companies
Apps We Use
GitHub
Oh My Zsh
Sublime Text
Nova
Ulysses
Homebrew
Homebrew Bundle
Is Apple Silicon Ready?
SponsorsLinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comApp Store Revenue Changes
Make less than a million, cut reduced from 30% to 15%
How it helps indie developers
Alternative App Stores
Setting Up a New Dev Machine
Using Instruments
Power of Accessibility Inspector
Favorite Text Editor
GitHub App
Shell Configuration
Web Development Tools
Dev Application Compatibility on M1?
Working from Home in 2020
Benefits of a Co-Working Space
Keeping kids busy while working
Trying to keep focus in development
Co-working in 2020
Having boundaries with kids
Having "me-time" and being working parents in 2020
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
11/25/2020 • 38 minutes, 29 seconds
Maintaining & Migrating with Antoine van der Lee - Part 2
Guest
Antoine van der Lee
Twitter - @twannl
Linkedin
GitHub
RocketSim
YouTube Video - https://youtu.be/AedW0Da37KQRelated Episodes
Episode 69 - Maintaining & Migrating with Antoine van der Lee - Part 1
Episode 14 - iOS App Architecture with René Cacheaux and Josh Berlin
Episode 15 - Test-Driven Development with Joshua Greene and Michael Katz
Episode 39 - Managing Code Quality with Anne Cahalan
Episode 62 - Local Database Storage on iOS with Aaron Douglas
Related Links
4 Tips to make it easier to fix crashes and bugs
OSLog and Unified logging as recommended by Apple
Adopting SwiftUI at WeTransfer
Code Guidelines at WeTransfer
Antoine's Core Data Blog Posts
Donny's Core Data Blog Posts
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030I will be speaking at NSSpain 2020...Nov 17 - 20, 2020
One of the most known conferences about Apple platforms development is going remote this year!
NSSpain 2020 is an online, continuous 36 hours conference, carefully crafted by the community for the community.
Guests of the show Paul Hudson, Donny Wals and Antoine van der Lee will be speaking as well as others
Go to NSSpain.com and use promo code empowerapps to get 10% offUpgrading Older Projects
Migrating from older versions of Swift
Migrating to SwiftUI
Upgrading piecemeal with new features
Continue supporting older OSes
Bugs and Logging
Understanding OSLog
Finding a Bug Tracker
Using Diagnostics
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)TranscriptionLeo Dion (Host): [00:00:00] Thank you for joining me for another episode of empower apps. I'm your host, Leo Dion joining us again is Antoine Vander Lee. Hey Antoine. Thanks for coming back. Yeah, glad to be back. So I've actually worked on projects that were written in Swift 1. And in the last year or two, have you, have you worked on any of those?[00:00:26] Antoine v.d. SwiftLee (Guest): [00:00:26] I was honored to be at WWDC the, when Swift was announced and you know, you're at the enthusiastic when it's announced, but if you're there, I guess you're even more enthusiastic to get started with it because you're there in that week. You have your MacBook open all the time and you try out a few things.[00:00:44] And yeah, I was at a point where I had to convince kind of my project manager to rewrite the project or not. So, yeah, I know. I knew at that point, Switch was the future. So I had a really good statement to make there and I convinced them and we started writing the project is Swift one.one, which was kind of like the first really public version you could use, I guess if I recall correctly.[00:01:09] Yeah. Yeah. So we, we started using that and the first week, two weeks, it was all fine and it worked nicely and we continue that we continued and a project grew. And then we realized that you know what is it called again? Incremental bills. Sorry, I couldn't get to the word because we didn't have incremental building at the time, which meant that the project builds times where like, like eight minutes, nine minutes at the certain point, just for a really small change, it didn't work at all.[00:01:42] Up until I think introduced incremental building, which was a lot better already, but yeah. Then three arrives with forest grades, but for existing projects, it was definitely not great. I'm not sure if you experienced the same, but we had to rewrite a lot of good. [00:02:00] Leo Dion (Host): [00:02:00] Yes. One to two was a big rewrite, but two to three, I think was even bigger rewrite from what I know.[00:02:07] Antoine v.d. SwiftLee (Guest): [00:02:07] Yeah. Yeah. Not even mentioning all the best practices that arrived with the new changes, you know, so I never regret it. The fact that we went for shrift because we were in a much better place than. If we would have started writing it then Objective-C, but it wasn't easy as well. [00:02:27] Leo Dion (Host): [00:02:27] Yeah. So I've been on a few projects actually in the last year or two that were written in Swift three.[00:02:34] And I, I had to add features or bugs fixed bugs from Swift three. And that was an interesting experience because. I ended up having to set up a high Sierra VM and install Xcode 8, but I also had to change the calendar date because the certificate, when it worked on Xcode 8 and then I, yeah, I had to upgrade the product to four on the VM.[00:03:00] And then I ended up being able to open it on my actual machine and then upgrade it from 4 to 5. And there was like all sorts of cruft in the code of like, no generics. No Try catch. And it was like, yeah, it was an interesting experience having to, I didn't upgrade it wholesale. I just wanted to fix the bugs and get the features in, but it was interesting if like, Just being able to like dance around it, I guess, and not change too much of the old code that worked while also using new methodology is like a lot of like NSArray and NSDictionary and stuff.[00:03:38] I was like, Oh my gosh, this is crazy. [00:03:41] Antoine v.d. SwiftLee (Guest): [00:03:41] Yeah. But it's, it's the same. When you, you have to work on a project still using Objective-C you know, like it's it's, even though you might still notice it texts you, you have a small moment where you need to switch your mindset again. Right. I think the same happens right now with Swift you way, we started adopting Swifty way that we transfer up lately.[00:04:00] And it's a, it's a whole different mindset. And once you start writing those Swifts, your wife, he was, you need to get started a bit, but once you're in there, it goes pretty well. Once you know, the same texts a bit, but at a certain point, you need to get back to UIKit code, and then you're like, damn, I need to write so many codes.[00:04:19] Yeah. It's a, it's an interesting switch. You have to do all the time.[00:04:24] Leo Dion (Host): [00:04:24] How are you switching over to Swift UI at we transfer? You're doing it like piecemeal, I guess. Well, [00:04:30] Antoine v.d. SwiftLee (Guest): [00:04:30] well, what we decided to do is really look into like a place where we can adapt Swift to ill, still maintaining a support for iOS 12, because we still support ios 12 and SwiftUI only arrived in ios 13. So that was the first decision we made before we decided which few or which part of the app we wanted to rewrite. And our designers dropped us a new introduction screen just because it probably worked better. So we had to implement that. And this was like coincidence because we also wanted to adopt choice UI at that point.[00:05:02] So we decided to build those views with Swift way while keeping the older production screens available for iOS 12 users. Kind of an easy approach. It's it's, it's like a distinct piece of the project, which we could simply rewrite. Well, well, almost not touching the old code. We kind of created an in-between business there, which contained all the logic, like opening the signup page, opening the login page basically methods like sign in button tapped, which we could call from the old introduction screen and from the new Swift to I introduction screens.[00:05:37] And with that, we, we started with full confidence on building these SwitUI views and yeah, we, we wrote a blog post about this with all our learnings, which we can share in the show notes later. But if I would make the decision today, I think I would even drop. The new introduction screens for iOS 13, because the thing is once, once SwiftUI arrived, it was iOS 13, obviously.[00:06:06] So we can, until you're re you switched away from iOS 13, but it was early days and there were so many books still in there. And. If you decide to use Swift you way with iOS 13, you still have to deal with those books even though they might be fixed now. So we, yeah. Yeah. [00:06:22] Leo Dion (Host): [00:06:22] That's a good point. I didn't think about that.[00:06:23] Antoine v.d. SwiftLee (Guest): [00:06:23] Yeah. We ended up fixing a lot of books just for those iOS versions, which still have quite a few users on it, you know? So. Yeah, it's a, it's, it's a tough decision. I think if, if we would write like new fuse today, which are quite simple because, you know, our introduction screen sounds simple, but they had a lot of animations because they didn't really make it.[00:06:48] Leo Dion (Host): [00:06:48] Is it like an onboarding essentially? [00:06:50] Antoine v.d. SwiftLee (Guest): [00:06:50] Yeah, and it's an onboarding, but the design, this we're like limited, we always say just, just create the best view possible. We will see what we can do. Okay. And yeah, we did it well, we didn't regret it, but it's [00:07:03] Leo Dion (Host): [00:07:03] possible, [00:07:06] Antoine v.d. SwiftLee (Guest): [00:07:06] especially with squishy way, but it turned out upgrades, but yeah.[00:07:09] Leo Dion (Host): [00:07:09] You know, how does it work on 14? Yeah. [00:07:14] Antoine v.d. SwiftLee (Guest): [00:07:14] So 14 was much better, but fourteen.one, broken other things. So. Oh, boy, it's still not really stable, but I guess it's also, it really depends how complicated your fields are. If you use like customer alignment, guides, for example, then it's all more complicated geometry readers.[00:07:33] Yeah, if you, if you don't all use those things, then it can be really simple. Yeah. Yeah. [00:07:39] Leo Dion (Host): [00:07:39] Yeah. I, you need a doctorate to understand geometry reader. I think, [00:07:44] Antoine v.d. SwiftLee (Guest): [00:07:44] get your head around it. Yeah. Be struggling with that one as well. But yeah, it's pretty useful in some cases even in the, in the kind of hacky way sometimes, but [00:07:54] Leo Dion (Host): [00:07:54] right.[00:07:54] Yeah. So is the idea then in like next year, you're just gonna get rid of the UIKit code since you're not going to support 12 next year properly. [00:08:04] Antoine v.d. SwiftLee (Guest): [00:08:04] Well, I guess at least new fields, you know, once we have the opportunity to rewrite a few, just because the design is so different than we would definitely think about rewriting it in Swift UI, just because, I mean, you know, for sure that one day we want to rewrite it into straightaway.[00:08:19] So if we do it today, we make our lives a bit easier for the future selves, you know? But then still, it depends because if it's a really complicated field tangled, they do a lot of business logic we have in place already. Then it might not be the best decision to do for, for example but you know, if you, if you have a UI collection fee with a lot of your recollections with sales in it, You don't want to rewrite that one cell into Swift UI because performance wise, it might not be the best approach.[00:08:47] You write one rewrite that whole few all cells altogether with the header footers and so on, in switch UI instead. [00:08:54] Leo Dion (Host): [00:08:54] And the other thing you had to think about is like, even though. You might have a collection view is a great example. It's only in 14 that we have something like a collection view 50 wise.[00:09:05] So if you're still supporting 13, you can't really like bring in a H Grid or V Grid or any of that stuff. [00:09:10] Antoine v.d. SwiftLee (Guest): [00:09:10] Yeah. Yeah, exactly. Yeah. You can still decide to rewrite that few for iOS for two uses only, but especially if you have a large, large user base and collected. Has multiple of millions of users in that case, an adoption of 8% is still like a lot of users.[00:09:30] So it's, it's hard to sell that through your product manager that I, that new field will only be available for 90% of the users, because it's still a big percent that you left. Yeah. [00:09:42] Leo Dion (Host): [00:09:42] And if you're like an indie developer, you know, You don't have to care about that. Stuff's too much, but if you're going to, you're starting something new, but yeah, if you're a product company, that's where it could become a real big issue.[00:09:53] Yeah. You know, it's [00:09:55] Antoine v.d. SwiftLee (Guest): [00:09:55] also like a timely decision, you know, like today you have an adoption on iOS 13, but in a year that's probably gone. So. It's also thinking about the future for yourself. If you're in any developer, you're likely want to do the development to Swift your way, just to make it easier for yourself and care a bit less about that lower adoption rate.[00:10:15] At least that's my opinion, how I would look at it because, you know, as an indie developer, your time, it's really valuable. You might not have the time to really maintain all fields as well. So [00:10:25] Leo Dion (Host): [00:10:25] yeah, recently I've dealt with an issue on the watch where there's like a weird archiving issue with watch apps for 32 bit watches.[00:10:36] Essentially crashed on watchOS 6 on 32 bit, because of the way archiving was set up. And I had to figure out a specific build flag for it. And it's like, now I'm like, is it really worth supporting watchOS 6? Like, yeah. I'm not, I'm not so sure about that. So yeah, I'm facing that same, same conundrum myself.[00:10:56] Antoine v.d. SwiftLee (Guest): [00:10:56] Yeah. You know, you can only spend your time once, so you need to be careful, but with your decisions. [00:11:02] Leo Dion (Host): [00:11:02] Yeah, exactly.[00:11:07]App Figures[00:11:07] Hey folks, I wanted to talk to you again about app figures. You probably already know them, but their analytics and their app store optimization and figures really is about giving makers the tools they need to get more downloads and revenue. Well now figures can help you track competitors for how many downloads they're getting and how much money they're making to their audience, demographics and which SDKs they use.[00:11:29] Their competitor intelligence really gives you great context, say a competitor as like a new feature or was mentioned in the news recently with app figures, you can see if that brought in more downloads right away. Got a great idea for an app or a game. Well with that figures, you can figure out how big that market is and how much money you could be making with it.[00:11:50] And that's just scratching the surface, whether you're growing your app or building a new one, and figures has the tools you need that will reduce the risk, but also get you more downloads. You don't need a large budget or a data science degree to do this kind of thing. I figures has made it affordable Ansible on top of tools and figures also provides a lot of great guides and tutorials to take you step-by-step through gaining more visibility with ASO and increasing your revenue by learning from your competitors.[00:12:18] They just released a free guide on that, actually. So go ahead, head to the link in the show notes and try out figures for free. If you like it, user special code and power 30, 30 to get 30% off for the next three months. Thank you at figures first,[00:12:34]End Sponsorship[00:12:34] going back to onboarding now. What's your plan as far as like transitioning out of the UIKit portion of that onboarding thing, once you stopped supporting iOS 12. [00:12:49] Antoine v.d. SwiftLee (Guest): [00:12:49] Yeah. You know, the, the introduction screens, it took a lot of time, but they are now really stable and all I was 13 versions and I was 14. So we're kind of in a place where we were able to just keep on supporting our 13 for as long as we want.[00:13:03] But as soon as we We drop. I was 12. We obviously remove and delete the old, the old logic and the old code. And yeah. [00:13:11] Leo Dion (Host): [00:13:11] Do you use any Swift attributes to deprecate parts of your code? So that way developers understand, you know, don't use this or if you do use it, understand it's going to be going away very soon or like, how do you deal with that kind of stuff?[00:13:23] Yeah. [00:13:24] Antoine v.d. SwiftLee (Guest): [00:13:24] We have two ways of doing that sometimes deprecation warnings. But that's more for like logic that you're likely to reuse or multiple places. Whereas calling the introduction screens, that's not really something you would do with multiple places. So a deprecation warning wouldn't really help a lot there.[00:13:42] But what you can do is you can be smart with the availability API APIs and throw a warning. Yeah. You know that the hashtag a warning, same text you can use to predict one is for yourself. That's a, that's often something we like to do. But I guess if you. If you use the availability API APIs, and you start dropping a sort of version, you can just search on that fill-ability API and basically remove all the code that's in the L statement, [00:14:11] Leo Dion (Host): [00:14:11] right?[00:14:12] Antoine v.d. SwiftLee (Guest): [00:14:12] That's, that's basically the approach we use now. And there's a few places in, in our, in our code, which is kind of like the generic business logic. I think we have, we just adopted difficult data sources and we have some old implementation for iOS 12 to support reloading cells in a factory sales controller.[00:14:30] It's quite detailed, but I know that we use a deprecation warning right there. Just because we use it, the multiple fuse and that way we automatically get like warnings from several places and we know where to where to update it. So, yeah, it's a, it's a case by case thing. [00:14:44] Leo Dion (Host): [00:14:44] Okay, that makes a lot of sense.[00:14:46] So over the summer after WWDC, you wrote actually some really good blog posts on logging and dealing with, with bugs and things like that. I'm not super familiar with. And I don't know if a lot of people are really familiar with how OSlog works, but maybe can you explain briefly why folks should be using OSlog over just debug print or print?[00:15:10] Antoine v.d. SwiftLee (Guest): [00:15:10] Yeah. So honestly, if I, if I ride my own projects, I don't really set up. I was lucky because it's feels like a bigger step to take them just using brains. But if you're really looking carefully on what are the benefits of using all this stuff? There are, there are a few, and I didn't really look into the latest features regarding it, but I know for sure that you can use the console app, for example, to read outlooks, which can be useful in certain deep obsessions.[00:15:37] And I don't know that it's more performing than print and it's, it's probably not something we will encounter that fast in, in regular applications when using prints. But yeah, you know, if you have to decide anyway, then you can maybe just use, I was lugging stat. And within the collective, we, we created our own kind of like convenient class with categories.[00:15:58] So we can really like filter out on certain categories when we run a code and we look out sprint statements which makes it kind of like more coffee and way. And at the time I think we started trying out Coco lumberjack. I was really a favor of using it because I was just used to it. But we really didn't want to add another third party dependency, which is why we decided to use always log, which is kind of like the native available API, similar to Cocoa, Lumberjack, where you also have those log levels in place.[00:16:29] So, yeah, I guess that's, that's how we look at it. [00:16:33] Leo Dion (Host): [00:16:33] How, how can you find that your specific app logs within console, [00:16:39] Antoine v.d. SwiftLee (Guest): [00:16:39] you have to filter out based on your pin, that identifier, and then you can also filter out on the certain log levels. So on, on like the error level or the deepest level and that's where you will only get the print statements of that.[00:16:51] The things you really want to see, [00:16:53] Leo Dion (Host): [00:16:53] and this is available. mAcOS iOS. wAtchOS over us pretty much anywhere you can, you can filter, you can pull these logs up in the console. [00:17:02] Antoine v.d. SwiftLee (Guest): [00:17:02] Yeah. As far as I know it is, and there are even like further steps you can take. I think connecting like a device, say a colleague in the office has a certain issue on their device.[00:17:12] And I think it's even possible to read out certain lugs to the console app, but just connecting the USB connector. I, I really didn't use that often. Yeah, that's maybe interesting to point out as well. We created the framework called diagnostics, which collects all the look statements in your app.[00:17:30] And it allows you to, it's been an issue to just press a button in your app and it opens the mail composer with an attachment. And in the spread file, you have a whole diagnostics report, including user defaults, core data specific data, if required all the look statements, any crisis that occurred.[00:17:50] It's a pretty nice format in an HTML file way to like an HTML menu as well. So. We we often get report from real users that press the set feedback burden and it gets reported through our support team and we get a lot of details about it user already based on the look statements we have in place.[00:18:11] So yeah, I guess that, that took away reasons for us to use the console app, but nowadays, but yeah, it's, it's [00:18:19] Leo Dion (Host): [00:18:19] still, yeah, that's awesome. The other blog post I wanted to talk about was one from last December about. Your four tips to make it easier to fix crashes and bugs, because I know like if you're updating an app, especially when we have an app that, Oh, well we found out it doesn't work in iOS 14.[00:18:37] Can you figure it out? Like and I've had those before. What, what have you found is like some successful ways of figuring out where those bugs are coming from or how those practices are happening? [00:18:51] Antoine v.d. SwiftLee (Guest): [00:18:51] Yeah. So actually in the blog post, I also talk about diagnostics. So that's a. Maybe a pretty interesting entrance point for, for users that for listeners that want to know more, if I look at how we solve crisis nowadays there are a few steps I take we're using Firebase quest reporting.[00:19:10] But tools like Instabook do the same where when you get like the last analytics events before request occurred, and that already points you in the right direction. Then there's also defy statistics. So is it happening on iOS 12 only sometimes that happens or is it happening on an iPad only? That can really point you in a certain direction too.[00:19:33] And then I start to. Look into the coat, you know, like, can I, based on theory, see what happened there. And if not, I tried to reproduce it in the app itself and then sometimes it's very easy to reproduce it and I can start writing a unit test that reproduces that question, because I wanna make sure that that grass doesn't occur again.[00:19:57] So sprint. But sometimes it even happened today. This morning, I explained to her QA engineers, we have a whole team of testing people that run like smoke tests every now and then, and I asked them like, Hey I got a crest related to receiving transfers. It should be around there. Any of those views, did you happen to have a crest when you were downloading content?[00:20:23] And sometimes they can tell me, yeah, I coincidentally had that and I had to do this and this and this. But sometimes they did it and they will start testing themselves and try to see if they can find it in a certain way, by doing all kinds of like edge cases. But yeah, that's, that's basically the approach we take to you to solve it.[00:20:43] And once we solve the quest, that's important to, you know, those fresh reporting tools, even in Xcode itself, you can Mark a crisis fixed. And that way you will tell the tool like, Hey, whenever disgrace occurred again, show me a notification and let me know, because. Probably didn't fix it yet. So I have to take a look again.[00:21:02] Leo Dion (Host): [00:21:02] Awesome. And we'll have a link to both of those blog posts in our show notes. Before we close out, we both will be at a conference coming up soon, as much as one can be at a conference in 2020. We'll both be speaking. And Spain, what are you going to be speaking on? [00:21:22] Antoine v.d. SwiftLee (Guest): [00:21:22] Yeah. So lately I've been writing a lot of blog posts around core data which is kind of like a way I prepare for my talks.[00:21:29] I try to combine my time preparing the presentation by writing about the same, [00:21:35] Leo Dion (Host): [00:21:35] same here. [00:21:36] Antoine v.d. SwiftLee (Guest): [00:21:36] Yeah. So what I'll be speaking about this accord data best practices and. You know, I, I took kind of like a benefit from the fact that we need to pre-record it. So I decided to make fun out of it and without giving away too much, but I'll be not alone in the presentation.[00:21:55] I'll be speaking together with somebody else. And I also decided to really yeah, go deep and create some custom introduction screens. Do some things with audio. No. I had the chance to combine a few, a few of my previous hobbies, which is video editing and audio editing into creating an awesome recording.[00:22:15] So yes, you make it really hard to concentrate now, you know? [00:22:21] Leo Dion (Host): [00:22:21] Sorry. [00:22:22] Antoine v.d. SwiftLee (Guest): [00:22:22] Sorry. I'm looking at like a futuristic. [00:22:26] Leo Dion (Host): [00:22:26] Okay. Okay. Okay. Boilers spoiler, because my, my talk is Swift Swift package management, dependency management of the future. So I spent a few bucks on what I'm wearing right now. So I won't say I won't spoil it, but if you attend to Ennis, Spain, you'll check me out this cool, cool runner.[00:22:47] You don't want to miss this super cool. Purely like, yeah, it has a lot of button. There we go. [00:22:54] Antoine v.d. SwiftLee (Guest): [00:22:54] Okay. But this is so nice. It's so aligned with the house style. No, I'm not giving away too much, but I get what you're doing here. [00:23:02] Leo Dion (Host): [00:23:02] Yeah, yeah, yeah. So, yeah. Yeah, so this will be m, this'll be my 10th. 10th of talk this year, this year.[00:23:12] Yeah. Yeah. Wow. Yeah. That's impressive. And I think like two of them were in person. Yeah. All the arrests, obviously our video video. Yeah. I'm excited to talk about it. It seems like I'm excited. You're talking about Swift packages and like you said, it aligns with a lot of my other talks because they all have to do something with Swift packages.[00:23:30] So it's, it's kind of a good, good cap to the end of the year, I guess, a good capper. But I'm really excited to talk about that. It's funny, you're talking about core data. There seems to be a big, I think Dani has wrote a few posts on core data as well. And we did an episode recently with Aaron from automatic about core data, but there seems to be a big research, I guess, an interest in core data.[00:23:56] Which, which is really interesting. Yeah. [00:23:58] Antoine v.d. SwiftLee (Guest): [00:23:58] You know Donny is a big friend of me. He's also from the Netherlands and we we often speak about gordita. He's writing a new book on [00:24:06] Leo Dion (Host): [00:24:06] it, which is it's practical core data, isn't it? [00:24:10] Antoine v.d. SwiftLee (Guest): [00:24:10] Yeah, exactly. So that, that, yeah. Promises to be a really good way of starting with good data if you didn't do that yet.[00:24:17] But yeah. You know, I think over time, core data really improved, especially in the early days of, of Swift and stuff, core data, wasn't really, really a particular good, but things like the Anna's persistent container persistent history tracking, those really solved a few. Big problems in court data we had at the time.[00:24:34] And nowadays it's much more convenient to use. I guess the only thing I really hoped for during this desktop see, and I guess I'll do that next year. Again, it's more like a Swift version of it. You know, we, we still have to interpret it with a lot with Objective-C code, which isn't really nice, but [00:24:54] Leo Dion (Host): [00:24:54] I've actually looked at a couple of, you know, maybe I'll fly and I'll send you some libraries.[00:24:58] I've looked at. Doing core data in a Swifty way. Cause I just hate dealing with what is a XD object model files and all that stuff. Especially going back, especially talking about Swift packages, I'd rather have my, my, my stuff all in code and doing it that way. So maybe I'll fly in. I'll send that to you.[00:25:15] Cause I found some really interesting libraries that like kind of refactor that into more of a coding format, similar to how like Swift UI removes storyboards in the same way. Like just being able to get that all in code. The [00:25:28] Antoine v.d. SwiftLee (Guest): [00:25:28] thing is, you know, I I've seen those libraries probably. And there's also this discussion often do use realm and, you know, the best thing is, in my opinion, is that they're all third party dependencies and you, [00:25:41] Leo Dion (Host): [00:25:41] which we already talked about that with reacts with Slayer, [00:25:46] Antoine v.d. SwiftLee (Guest): [00:25:46] you know, talking about, use a data and you take a really big risk of using a third party dependency.[00:25:51] Especially if it turns out to be the wrong decision where you have to migrate all the. Which comes with all kinds of risks. So [00:26:02] Leo Dion (Host): [00:26:02] totally fair point. Yeah, absolutely. [00:26:03] Antoine v.d. SwiftLee (Guest): [00:26:03] Yeah. Much broader use like a betel test. That's kind of older for shooting core data than offensive third party dependency, which might not work.[00:26:15] As good as I would hope, [00:26:16] Leo Dion (Host): [00:26:16] especially if Apple Sherlock said essentially come up with something better, that actually works, which God willing. I hope maybe 20, 21 we'll get core data migrated fully to Swift and some declarative way. I hope so. [00:26:30] Antoine v.d. SwiftLee (Guest): [00:26:30] I'm pretty sure they're already building something. I would be surprised if they are not.[00:26:33] Yeah. [00:26:34] Leo Dion (Host): [00:26:34] And if people want to watch Antoine and I speak about core data or Swift packages, you definitely want to go to nsp.com. Use that promo code, empower apps to get 10% off. And it's going to be, what is it like 36 hours of talks. So it will be a lot of talks. Yeah. Yeah. It's going to be awesome. So you'll definitely want to check that out.[00:26:57] Anything else you want to mention before we close out? [00:27:00] Antoine v.d. SwiftLee (Guest): [00:27:00] Well, I think if anybody wants to discuss any of the topics we discussed now and share opinions, feel free to reach out to me to me on Twitter or on my website through email. Yeah. And that's right to reply as soon as possible. [00:27:14] Leo Dion (Host): [00:27:14] We'll have that info in the notes.[00:27:15] But go ahead and I'll let you say, say the names. What's your website and put your handle. I actually, let me try. You can find Antoine@swiftly.com. No, no. That's that hurts, you know, that hurts. Oh no, no. Yeah. vander.com. [00:27:33] Antoine v.d. SwiftLee (Guest): [00:27:33] Maybe the person, the owner of swiftly the is listening and can get sell it to me because I've really tried to get both swiftly.com and the Twitter handler swiftly, which is also not in my [00:27:45] Leo Dion (Host): [00:27:45] hands.[00:27:46] How about swiftly D and L or is there, is that available or I dunno how that works in another lens. [00:27:52] Antoine v.d. SwiftLee (Guest): [00:27:52] You know, I already build up name for a vendor leader com. So I'd rather go to the right, this destination, swiftly.com or stay with eventually, you know, it's, it's kind of the same for my Twitter handle, which is 20 now which is.[00:28:08] Kind of odd as well. It's from the old days, but yeah, some people know it by by themselves, so I don't really want to change that easily. [00:28:18] Leo Dion (Host): [00:28:18] I totally understand. Trust me. And then I know, I know the Twitter handle @twannl. Yep. twannl. I get that right. I've never done that. I've never done the info of the guest have usually let the guest handle it.[00:28:34] What am I missing? You're on get hub as well. [00:28:37] Antoine v.d. SwiftLee (Guest): [00:28:37] I can tell you it's short, short, first or short story about my Twitter handle because you know, I really tried to get swiftly. I started to research was the owner, you know, so I found out the name and I went on LinkedIn. I went on Facebook. I tried to contact him through his email.[00:28:53] It's, it's some kind of guy living in California. Even know where, where it's a city is, but you know, you don't want to go too far, but everybody tried to get the Twitter. I know he's not been active since 2009 and I'm like, come on. I can really use that ahead a little bit. [00:29:11] Leo Dion (Host): [00:29:11] So set. And if you're, if that gentleman is happens to be listening to this podcast, come on.[00:29:18] Come on for Antonie. Come on, please. [00:29:21] Antoine v.d. SwiftLee (Guest): [00:29:21] I'll give you some Swiftly merchandise, swiftly coffee. Come on. [00:29:27] Leo Dion (Host): [00:29:27] We'll have all the info to Antoine. In our show notes, folks can find me on Twitter at Leo G Deon. My company is bright digit. If you have any questions for us or any feedback on this episode, Be sure to reach out to us, please do give us a review in Apple podcast and Google podcasts and Spotify.[00:29:47] I'd really appreciate it. Thank you Antonie, for coming on the show. I really appreciate it. Thank you. [00:29:52] Antoine v.d. SwiftLee (Guest): [00:29:52] It's a please[00:29:54] Leo Dion (Host): [00:29:54] See you at NSSpain. [00:29:55] Antoine v.d. SwiftLee (Guest): [00:29:55] Oh yes, definitely.
★ Support this podcast on Patreon ★
11/19/2020 • 30 minutes, 4 seconds
Maintaining & Migrating with Antoine van der Lee - Part 1
Guest
Antoine van der Lee
Twitter - @twannl
Linkedin
GitHub
RocketSim
YouTube Video - https://youtu.be/bnAzZo3-N4gRelated Episodes
Episode 70 - Maintaining & Migrating with Antoine van der Lee - Part 2
Episode 14 - iOS App Architecture with René Cacheaux and Josh Berlin
Episode 15 - Test-Driven Development with Joshua Greene and Michael Katz
Episode 39 - Managing Code Quality with Anne Cahalan
Related Links
4 Tips to make it easier to fix crashes and bugs
OSLog and Unified logging as recommended by Apple
Adopting SwiftUI at WeTransfer
Code Guidelines at WeTransfer
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030I will be speaking at NSSpain 2020...Nov 17 - 20, 2020
One of the most known conferences about Apple platforms development is going remote this year!
NSSpain 2020 is an online, continuous 36 hours conference, carefully crafted by the community for the community.
Guests of the show Paul Hudson, Donny Wals and Antoine van der Lee will be speaking as well as others
Go to NSSpain.com and use promo code empowerapps to get 10% offIntro
Latest BrightDigit newsletter on Apple Event
Fan or no Fan?
Memory Limits?
Trying to get Speculid out in the App Store
Back to the Mac 2020 Videos
Leo on Modern Mac App Dev and C++
Leo on Swift Argument Parser
Lucas from Episodes 59 and 60 on Custom Search Suggestions Window
Malin will be on in Dec to talk SwiftUI and Multiplatform Dev!
Get your NSSpain ticket soon and use promo code empowerapps
On Simulators
RocketSim
Managing Multiple Simulators
Creating Movies and Gifs from Simulator
Preparing RocketSim for Big Sur
Dealing with Old Code
Your old code vs Someone else's old code
When do you need to rewrite the app?
How do you convince a manager?
Differences between agency and product work
Early Project Decisions
Dealing with Third-Party Dependencies
Refactoring by Unit Tests
Keeping File Size Down
Splitting Types with Extensions
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)TranscriptLeo Dion (Host): [00:00:00] Hello folks. Welcome to another episode of EmpowerApps. I am your host Leo Dion. Before we began the interview with Antonie, I wanted to cover a few things. We just finished the Apple event, revealing the new Apple Silicon Macs. And I wanted to talk about that. We recorded the episode the morning of today of the Apple event.[00:00:20] So obviously Antonie and I didn't really cover these new Macs, but I figured I would just give you a quick, quick thoughts on the event today. So this was our last event from Apple last hardware event. It's been pretty quick. This year. We've had three events in two months, like Tim said, and we got the reveal of the chip, which will be used in the Mac book pro, Mac book air, and Mac mini, which can be ordered today.[00:00:48] I don't know when they're going to be out. Exactly. I haven't been able to check that out. I don't know which I'm really interested in. I'm kind of. Not really up for buying another piece of Apple hardware already bought a new iPhone and a new. Apple watch as well as the home pod mini, that should be coming in a few days.[00:01:05] So I'm not super enthusiastic about buying something new. I do have a Mac book pro that's almost half a decade old now, so it could definitely use an upgrade, but I did just put a two terabyte hard drive in. So that's, that's helped us quite a bit, but it's getting slow for sure. The other. Option is looking at getting a Mac book air.[00:01:25] If I wanted something to replace what was my iPad pro, but that doesn't sound really interesting to me for a right only machine. And then the other option is the Mac mini. And I think if I was really desperate to get an app in the app store that worked on Apple, silicone, I'd probably go that route because I think that would be.[00:01:43] The most reliable as to kind of use it as a remote CI machine, essentially to make sure I can get my builds working on Apple Silicon, especially with the applique speculate, which I'm hoping to get an app store very soon. So that was the Apple event. I am really kind of a wait and see approach to see what the review say and what comes out.[00:02:03] But It doesn't look like new industrial design or anything like that. A lot of comments about devices having fans or don't have fans and things like that, you know, all that's fantastic I guess, but I'm kind of wait and see, and. What is it actually going to be like when developers get these in their hands or even video editors as well?[00:02:23] So that was pretty much the Apple event in summary, not a lot. And then the other thing I wanted to talk about is my videos are out for Back To Mac. Thank you so much, Gavin, for putting this conference together, you can check it out at the YouTube channel, which I'll have a link to as well as my two videos on modern.[00:02:43] Mac OS development with C++ as well as my talk on Swift argument parser, those will be in the links Lucas, who was a guest this summer and talked about Miko West development. He had a video as well, and a few other people that you really should check out. It's awesome conference. If you're interested in Mac development anyways.[00:03:00] Yeah. And that's back to Mac. And then lastly, get your ticket to NSSpain. Remember you can get 10% off if you use our promo code and power apps. I'm speaking at it. I will be speaking on Swift package management Antonie. Our guest for today is also speaking as well. And folks that we've had on the show like Paul Hudson, Donnie Walls, they all will be speaking at this 36 hour conference, which is going to be awesome.[00:03:23] So that's fantastic. Definitely want to check that out, go to Anna spain.com. Use the promo code and power apps get 10% off and you will see me talk about Swift package manager, the dependency management of the future. Thank you so much. I think that's it. Here is the first part of our interview with Antonie about maintaining and migrating old code and old projects over a second part should be out in a few days later, probably five days.[00:03:51] So thank you so much and I'll let the rest episode take it away.[00:04:00] Welcome to another episode of EmpowerApps. I'm your host, Leo Dion. Today. I'm excited to have one of my favorites. Bloggers in the Swift space. Antonie Vander Lee. Hey Antonie how's it going? [00:04:12] Antoine v.d. SwiftLee (Guest): [00:04:12] Hey. Hey. Yeah. Great. Thanks for inviting me over. I'm really looking forward to having a nice conversation today . [00:04:19] Leo Dion (Host): [00:04:19] So for those who don't know who you are, I'll let you go ahead and introduce yourself.[00:04:23] Yeah, I think [00:04:24] Antoine v.d. SwiftLee (Guest): [00:04:24] I'm best known for my personal blog called swiftly at which I write for two years every week. And I try to publish that article every new week, besides that I'm a developer for almost four years that we transfer where I developed the collect by we transfer application. Yeah. And I tried to be a regular speaker at conference. And so yeah, that's me. [00:04:47] Leo Dion (Host): [00:04:47] Yeah. We'll talk about at the end of our recording today. We'll talk about our talks and Spain. I'm really excited about that this year, but you've been working on your big app you've been working on for developers has been RocketSim, correct? [00:05:01] Antoine v.d. SwiftLee (Guest): [00:05:01] That's correct. Yeah. That's like a typical example of a hobby project that turns out to be way more serious than it started.[00:05:09] I think I started like a year ago in August where I found myself testing universal links in the simulator. For the CollectByWeTransfer application and it was quite like a repetitive task. You know, I had to copy a link into Safari on the simulator open it. Then I started evolving it into an HTML page where I could just press a link and it would open in the simulator, but you know, it was repetitive and it didn't really.[00:05:39] Well smoothly my whole process in testing the application. So yeah, I decided to start developing RocketSim, but it's a, it's a different application, you know, today, [00:05:49] Leo Dion (Host): [00:05:49] I think. So what exactly does RocketSim do? Is it like a power tool for simulators essentially? Yeah, [00:05:56] Antoine v.d. SwiftLee (Guest): [00:05:56] so I think many of the iOS developers are familiar with the SIM CTL tools.[00:06:02] Yes, we have available in the, in the terminal command. [00:06:06] Leo Dion (Host): [00:06:06] Yeah. I use that for like screenshots and videos. You can do all sorts of stuff with like clearing or data resetting it, all that stuff. [00:06:13] Antoine v.d. SwiftLee (Guest): [00:06:13] Exactly. So what I basically did with RocketSim is a at first I built like a, a UI around that tool to make it a bit more accessible.[00:06:22] And over time I started developing RocketSim to be a more enhanced version of it. So. Right now RocketSim enables you to record the simulator into MP4 or GIF. So what basically RocketSim is doing for you is converting it into a quality video file, as well as a dif file, which you can share on platforms like Git or GitHub.[00:06:44] Leo Dion (Host): [00:06:44] You can't create a GIF with some CTL, so you you're doing all that in coding yourself. [00:06:49] Antoine v.d. SwiftLee (Guest): [00:06:49] EXactly. So right now yeah, I'm, I'm taking the result from SIM CTL and I'm converting it in multiple ways. I also want it to support dragging it into app store connect so you can use it for app store Prefuse so yeah, you know, it's a lot easier to create app store Prefuse if you want through the simulator.[00:07:07] And it's also resulting in an floating third nail on the bottom right of your screen. So you can dial like directly drag the recording result in any app you want. And that's different compared to using the terminal where you first need to open the third terminal. Remember the commands executed commands, save it to a location with the right syntax.[00:07:28] And then you can start dragging it anywhere. So it's basically making the whole workflow a lot easier. [00:07:34] Leo Dion (Host): [00:07:34] That's awesome. And is this available on the app store or is it just free open source? [00:07:39] Antoine v.d. SwiftLee (Guest): [00:07:39] It's available for free in the app store, in the Mac app store and for free, we'll get like a recording version with a small watermark on it to just to help me promote this RocketSim a bit.[00:07:49] And you can decide to become a rocketsim PRO user and then you get like recordings without any watermarks. [00:07:56] Leo Dion (Host): [00:07:56] Awesome. So are you ready for. The switch over to big Sur with RocketSim. [00:08:03] Antoine v.d. SwiftLee (Guest): [00:08:03] Yeah. Yeah. W what I did, what I'd like to do in general is to just have an separated petition in which I can test out big Sur.[00:08:10] So I did the same because I had quite a few early adopters. I think that's the downside of a developer tool because developers, they want to test out big server as soon as it's available. So I had to actually start testing it quite early. And well, yeah, you know, I was, I think I was kind of lucky because it works almost completely, so yeah.[00:08:33] I guess I'm ready. [00:08:34] Leo Dion (Host): [00:08:34] That's awesome. So today we have. Quite a challenging topic. I'm sorry. This is the topic that we've picked. It's not fun and exotic, but I think as employees and as software developers, we run into this quite a bit and that's maintaining and migrating older applications. We all, we've all done it before.[00:08:59] It's it's the dirty job of iOS development. What kind of experiences have you had? Dealing with like old code or maintaining old code. What kind of challenges do you run into frequently? Yeah. [00:09:14] Antoine v.d. SwiftLee (Guest): [00:09:14] So there's a lot. I can say about this and I think it totally differs per project. Before I worked at we transfer, I was working at a digital agency and it often happened that I had to take over a project from a different company where you would end up being in a reel.[00:09:29] Big, well kind of coat mess. You didn't write yourself, which is a lot. Whereas then if you are in a code mess you did right. Do you know nowadays it's at WeTransfer? I, you know, was one of the first developers, so I can dream like the complete code in that application. And I think if you're, if you're doing a great job for yourself, it's, it's not, not a difficult topic to discuss because if you're iteratively making sure your code is up to date and then there's nothing really to migrate, you know, So what we try to do at WeTransfer.[00:10:01] And we do the same as we speak with SwiftUI is we really try to stay on top of the new things and adopt as we go in phases. Step-by-step which, you know, that makes it at least a much smaller step. Over time. And I think that way it doesn't really hurt. Yeah. [00:10:21] Leo Dion (Host): [00:10:21] I think definitely doing it iterative approach, and I'm a big believer in continuous integration and things like that.[00:10:30] And just making sure your code is constantly like. Passes, whatever linting or whatever code coverage you expect and following that rule. But yeah, I think I've run into more situations where I am brought on to deal with essentially like a mess of code that somebody had already worked on and kind of being brought onto those projects.[00:10:54] And that, that to me is like the bigger challenge is how, how do you take something that's are writing on this and like, introduce. First of all a clean it up, but also be introduced an intuitive process into it. So that way problems don't happen in the future. Yeah. [00:11:11] Antoine v.d. SwiftLee (Guest): [00:11:11] I think if I look back, I have been lucky over time.[00:11:13] Right. Could convince my product managers to really start rewriting the complete project. At the time when Swift first just just arrived. But you know, there are indeed cases where that's not an option that you really need to figure out like a solid structure in a solid way where like tomorrow is a better day for your project, then, then it, and today.[00:11:35] Leo Dion (Host): [00:11:35] What do you think helped convince your product manager?[00:11:38] Antoine v.d. SwiftLee (Guest): [00:11:38] Yeah. So, you know, I always try to really make it visible for them. Especially if the product manager isn't technical, you really need to know how to convince him in terms of like, what does it mean if we wouldn't do the migration in terms of time, for example, because. If it means that the developing a new feature takes, like, for example, a week long, or just because the project structure isn't fitting the way we like to work.[00:12:04] And it takes for example, three months to develop the, the rewrite because you know, you already have the code, right. You only need to rewrite it to Swift. For example, you know, the business rules already. So it's kind of like a faster approach than starting from scratch. Three months is obviously longer than that one week for that developing that new feature.[00:12:25] But if you take it over like two years or three years, then obviously it's, it's, it's a better approach. I think this, this is a case per case, obviously, but in this case it might work. If you, for example, still have a project and Objective-C let's say that you have a project with Swift and that project is a mess just because, you know, maybe, maybe somebody else wrote a lot of things in Well, let me, let me share an example.[00:12:52] What I did, this is a sad story for my old colleagues, because I left them with a, with a project which is now a code mess probably. But you know, you have those, those times where you really want to dive into like a new, new, new tool or topic. And for me, that was at the time RXSwift. Okay. You have to reactive programming.[00:13:12] I was really into it and I wrote everything with our experience, even though it wasn't the best choice. And right now I left over like a few of those engineers with a project, which is completely wired into our Swift observables and those kinds of things. And it's really hard for them to maintain that project because, you know, If you don't have that learning curve for RXSwift, with it's just, yeah.[00:13:36] Time-consuming and it's way harder doing a project without it. And what they do, they take, take it step by step and they rewrite screen per screen, business logic, pro business logic, into like code. That's easier to understand and simpler for them to maintain. And obviously that doesn't result in a better application within a few days, but yeah, it's, it's an iterative process.[00:13:59] Which makes it a better project over time. [00:14:01] Leo Dion (Host): [00:14:01] Yeah. I'm hearing a couple of things. One thing is when you convince your product manager, it seems like, like at the end of the day it's money, right. That's going to drive the decision. If that means they can save more money long time by you rewriting and rearchitecting the code, I think that's much more tangible to them.[00:14:18] And of course, like you said, it depends case by case because a lot of cases there is no long-term, everything is short term. Those are not fun projects to work on, but. They're for real they're out there. And so, like, they don't even care about rearchitecting cause they just want the short term gain. And then, you know, whatever, they'll worry about it at some other point.[00:14:39] Antoine v.d. SwiftLee (Guest): [00:14:39] I think that that's also like an important difference between an agency working for clients that really want to have a result within eight weeks, no matter how you do it. You know, those are often also the examples where you don't write any unit tests because there's no time. Right, right. Whereas if you're working at a product company, it's much more important to have that solid foundation on which we can build on for like years, you know?[00:15:05] We, we can't rewrite the project every, every other year. So yeah, those are really different stories. [00:15:10] Leo Dion (Host): [00:15:10] The other thing you talk about is using RX Swift and the idea of bringing in third party, the library's always is kind of a flag, a warning flag. It better be like really accepted or something. That's pretty major.[00:15:22] If you're going to bring that in and make that your whole design philosophy. Cause I know a lot of fans that RX Swift there isn't, it isn't that. I wouldn't say it's that foreign to a lot of people, especially now that people are getting more exposure to reactive programming, but still at least, I don't know, we're talking to maybe like five years ago that you did this.[00:15:41] Like yeah. I could see how that's a totally, totally foreign way to do things outside of the standard UI kit storyboard way. [00:15:49] Antoine v.d. SwiftLee (Guest): [00:15:49] Yeah, definitely. And you know, it's not per se a problem. You know, if everybody in the project knows what you're doing and knows about this third party dependency, then it's a perfect way to develop the application.[00:16:02] And at the time I was the only one developing the application so, you know, there is no problem. [00:16:06] Leo Dion (Host): [00:16:06] Well, where were you in the hierarchy of the company? [00:16:09] Antoine v.d. SwiftLee (Guest): [00:16:09] This was at the agency time where I grew from like. Being a junior or for four years to a senior. And I think, I think this, this was at a point where I was the senior, because I made a decision to do a[00:16:23] Then I was capable of making that decision. Yeah. [00:16:26] Leo Dion (Host): [00:16:26] And there probably were like, whatever five years ago. That was probably not a lot of Swift developers because whatever Swift is only six years old anyways. Yeah. [00:16:36] Antoine v.d. SwiftLee (Guest): [00:16:36] That's true. This dates back even longer where We also adopted reactive cocoa with objective-C time, you know?[00:16:43] So yes. Okay. In general, any decision to adopt it to a third party dependency? Which obviously also happens way more often than tonight to see because the time is way smaller. So if you can use a third party dependency, which gives you like a boost in development. Yeah. That's the easy choice.[00:17:06] AppFiguresLeo Dion (Host): [00:17:06] I want her to talk to you again about app figures. You probably already know them, but their analytics and their app store optimization. I figures really is about giving makers the tools they need to get more downloads and revenue. Well, now figures can help you track competitors for how many downloads they're getting and how much money they're making to their audience, demographics and which SDKs they use.[00:17:27] Their competitor intelligence really gives you great context, say a competitor as like a new feature or was spending in the news recently with app figures, you can see if that brought in more downloads right away. Got a great idea for an app or a game. Well with that figures that you can figure out how big that market is and how much money you could be making with it.[00:17:48] And that's just scratching the surface, whether you're growing your app or building a new one, and figures has the tools you need that will reduce the risk, but also get you more downloads. You don't need a large budget or a data science degree to do this kind of thing. I figures has made it affordable Ansible on top of tools and figures also provides a lot of great guides and tutorials to take you step-by-step through gaining more visibility with ASO and increasing your revenue by learning from your competitors.[00:18:16] They just released a free guide on that, actually. So go ahead, head to the link in the show notes and try out figures for free. If you like it, user special code and power 30, 30 to get 30% off for the next three months. Thank you at figures for sponsoring our show.[00:18:36]End Sponsorship[00:18:36] So let's say you got a ginormous file. From one of your developers, like a really big file, maybe has maybe there's, it's a huge view controller. Let's say tons of lines, like we're talking thousands. How what's your philosophy fee on like cleaning up that code? Or how do you triage that in such a way that like, okay, first thing we need to do is break this up in this way.[00:18:59] Or first thing we need to do is to deal with this. What are some like red flags that you would take care of right away? [00:19:05] Antoine v.d. SwiftLee (Guest): [00:19:05] So the way I like to do refactoring is by being really convinced that I'm doing the right thing. And the only way I see that makes it possible is by writing unit tests. [00:19:15] Leo Dion (Host): [00:19:15] Yeah. I was about to say the same thing.[00:19:17] Antoine v.d. SwiftLee (Guest): [00:19:17] Yeah. You know, it's, it's, it's the only way you're for sure that the inputs results in the same output and I guess if anybody writes such a big class, a they don't care about unit testing as well. So I probably have to start writing those first. Once I have those, I would, I would take it step-by-step and rewrite like, well, maybe, maybe first look at like data sources, delegates, like those distinct responsibilities and take them out, creates a single responsibilities of them.[00:19:50] And then that leaves you up with, with, with other kind of sectors in that class, you know, like pieces that should be in a field model. Maybe there's some network in which I can extract into networking layer. Maybe that field itself is way to bake and I need to create two new fields first, which already removes a bit of code.[00:20:11] And as you go, it will be more and more obvious what you want to create there. Although, while I'm sorry right here, thinking out loud, I think it's maybe even better to do this beforehand where you really create that structure. So you know what you're going to do, you know, like where, where are you going to place all the pieces that you have in place?[00:20:30] Leo Dion (Host): [00:20:30] Yeah. Like, I like the idea about unit testing, because I think like that's not just as unit testing, ensure that your code does what you expect it to do, but it also it's created at least for me, like a healthy habit of good architecture. That's one of the things and just being able to like, Build the unit tests and then build the scaffolding.[00:20:52] So that way, like kind of like you're building almost like a bridge or a tower to where, like you have pieces in there. I didn't even know what it's called. I'm not a construction person, but like you have the pieces in there that holds the thing up, but then you are able to like remove those pieces that hold it up temporarily, which is basically your old code.[00:21:10] Once you've set up your new code, that's better are cut textured and refactored correctly. Does that analogy make any sense? I think so. [00:21:18] Antoine v.d. SwiftLee (Guest): [00:21:18] Yeah. Yeah, I think it does. Although it might not always be the way how to do this, you know, because it's not always possible to keep the old code in place while rewrite or well writing the new code.[00:21:29] You know, sometimes you have to throw the way the old code first, before you can start writing and adopting the new code, but I guess, yeah. You can make the building collapsed the reflector, you know, [00:21:42] Leo Dion (Host): [00:21:42] what, what do you mean by you have to remove the old code. Well, you know [00:21:46] Antoine v.d. SwiftLee (Guest): [00:21:46] you have two ways of refactoring one way would be to kind of like in an AB testing way where you would have to first and side-by-side working.[00:21:54] That would mean that, that the ultimate approach should completely stay working automatic contest in you. And the other approach would be to. Make the project kind of breaks. So you're kind of like let the building collapse and then you start rebuilding it from scratch to kind of [00:22:11] Leo Dion (Host): [00:22:11] so kind of let it, you let the compiler fail or the app crash, because that way it, it's a way to remind you to, to, you know, understand when that thing is fully working, I guess.[00:22:21] Antoine v.d. SwiftLee (Guest): [00:22:21] Yeah, exactly. And sometimes the new approach needs to make use of codes that already exists, but that existing code needs to be adopted for the new way of working. But to be able to do that, you're breaking the old kind of logic that was already in place. So you have to remove that kind of yeah, it's just an easier approach.[00:22:40] If you don't have to think about the old implementation. [00:22:43] Leo Dion (Host): [00:22:43] Yeah. Yeah. That makes sense. What other red flags do you think you'll see in code that you'd like now that needs to be taken care of right away? [00:22:52] Antoine v.d. SwiftLee (Guest): [00:22:52] Well, what we like to do with retreads transfer is well, it's actually an open source framework we have where you can find our code guidelines, you know, like the same techs using that source spaces. You, you notice, go in discussions you have in the community, but [00:23:09] Leo Dion (Host): [00:23:09] linting rules basically, right? [00:23:11] Antoine v.d. SwiftLee (Guest): [00:23:11] Exactly main thing rules we have we have Swift lint set up and we also have a few custom danger rules. They just systems which will all run during the day and, and pull requests. She, I integration we're using patronize for that, which really helps us to write consistent code and it could easily be that that costs we get.[00:23:32] Somehow doesn't apply to those rules. So I think that's a red flag for us as well, because we want to have consistent code that at least makes it easier. That's that's one part. There is another part that you can't really force through LinkedIn, and that's like structuring code decided to go for a few model, certain naming conventions using a return keyword or not, you know, like all those kinds of decisions.[00:23:59] You want to make sure that that class is adopting that as well. So it's kind of like family of the coat you already have in place. [00:24:07] Leo Dion (Host): [00:24:07] Okay. So let's let me ask tabs or spaces.[00:24:10] Antoine v.d. SwiftLee (Guest): [00:24:10] Tabs[00:24:11] Leo Dion (Host): [00:24:11] Oh my gosh. Yeah. I don't know if we can keep her, keep doing this work. It's going to become a controversial I do, I guess. Yeah. I need two spaces. Just, just FYI. But yeah, I don't, I don't care. Like, I guess for my own part projects, I'll do two spaces, but like, if I'm on a team, I just want a rule. Right.[00:24:34] Like, I think that's the important thing. Just have a rule if it's tabs be consistent. Like, I think that's the most important thing though, to the agreed and then. I guess like one, one thing that I, I haven't found a good Swift lint rule or Swift format rule for is one struck or one extension or one type in each file.[00:24:57] I try to follow that rule. So like, don't have multiple classes in one file. I'll do that when I first start off. Right. But then eventually, like I split it up into like files each file for each type in each extension. And enumeration, whatever, you know what I mean? I'm trying to think what other rules I find a lot of.[00:25:18] I don't know. Well, anything else you can think of? Do you have like a max max line limit or max limit? [00:25:26] Antoine v.d. SwiftLee (Guest): [00:25:26] Yeah, we have the max file length later, but you know, that's always a big struggle because sometimes it's just, you know, those, those few controls that add up so many extensions, it's really hard to just.[00:25:39] Move them over to a different file because you also want to contain them to get a kind of [00:25:44] yeah, because I have, [00:25:45] Leo Dion (Host): [00:25:45] when I've done view controllers like that, I usually just split them up into extensions if they're way too long. And then I try to group it based on what protocol, let's try to implement. And then that way, like, okay, this one is the view controller data source implementation.[00:26:00] Antoine v.d. SwiftLee (Guest): [00:26:00] This is the view controller whatever table view, delegate, you know, things like that. Yeah, the downside, I find there is that it's always, you know, you need to find it in a different file, even though it does files may live together in the same folder. It's an extra step to make it discoverable, which I often kind of dislike.[00:26:18] Leo Dion (Host): [00:26:18] Yeah. Yep. I've heard that's a big pet peeve with extensions in general. [00:26:23] Antoine v.d. SwiftLee (Guest): [00:26:23] Yeah. Yeah. And we, we do end up doing so, but I'd rather have like a hundred lines extra in that class and make it easy to find. Instead of having the code separate. And of course all those files in the end, it's all about findability readability in your project.[00:26:39] And if it means that it's a 600 lines file, but it's still viewable, you know, then I reached my goal. So yeah, we, we sometimes decide to use that wild market to disable the rules. [00:26:52] Leo Dion (Host): [00:26:52] Right, right, right. Yeah. Was there any other red flags you want to talk about? Or should I just go to the next topic?[00:26:58] Antoine v.d. SwiftLee (Guest): [00:26:58] What I find interesting about your road that you suggest that this you know, and that's, that's often something I run into is in the beginning, you start writing your field model in the same file. So you have like a few controller and the structure for your view model in the same file. As long as that's view model is really small.[00:27:15] You don't really feel the need to create a new file because the new file will only contain like 10 lines of code or something. And it seems kind of odd to create a whole file for that small class, you know, but the thing is over time, it could easily grow, grow into like a bigger class with more responsibilities.[00:27:35] So if I, if I look at the code we have in place that we transfer, we often never define two instances in the same file, but it's always an interesting interesting decision. [00:27:47] Leo Dion (Host): [00:27:47] I feel like that's a habit I got from when I was a C# developer. And then I just carried that through, into JavaScript and Swift and, and it makes a lot of science and like, I've gotten to a point.[00:27:58] I have like a, somewhere in my terminal history. I have a series of like batch and bash. Commands that basically splits the file for me, based on every little curly bracket, because I just, I do it so often. And it's just, it's easier to find stuff. If anything, like, I almost wish going back to your comment regarding extensions, like, I feel like.[00:28:23] Maybe an Xcode 13. It'd be nice if like the find finding features worked better. I know it keeps getting improved, but that would, that would make it a lot easier to deal with like multiple files for a single class or type. [00:28:35] Antoine v.d. SwiftLee (Guest): [00:28:35] Yeah, it's a, it's an interesting one. You know, we often run into a discussion as well in our team meetup we developed do we transfer app collect by, we transfer for three iOS engineers and. That's that makes it easy to discuss things. You know, it's not really a given that a certain way of direction is the way forward. And one of my colleagues ofte, likes to use functions in function, which is always discussion.[00:29:01] Leo Dion (Host): [00:29:01] That's scary. [00:29:03] Antoine v.d. SwiftLee (Guest): [00:29:03] Scary. What is your opinion on that? [00:29:06] Leo Dion (Host): [00:29:06] That's really scary. That's that's that should not be done, I guess. Yeah. That's kind of my feeling because yeah, it has a, it has a sloppy Javascript feel to it when you're, when you have a function in a function. Yeah. [00:29:22] It gets used to it too, but you know, in some places he meant to convince me because it kind of works and it's kind of readable.[00:29:31] Antoine v.d. SwiftLee (Guest): [00:29:31] But still, it feels so, you know, it's almost like a structure into a structure itself. So up to me, you know, it just feels like it's, it's like tangled into each other or, you know, it doesn't feel right. [00:29:44] Leo Dion (Host): [00:29:44] That's a hard one. Okay. Here, I'm going to try, try to. Try to try to be coherent and explain why I don't like it and I could be totally wrong, but I'm going to try it anyways, a function in sight, a function.[00:29:59] And the reason why it reminds me of like older Javascript is because it kind of it's masking a variable. As a function, even though it's really a variable, that's essentially private. And I understand he's like trying to like, control access that way to that function. But to me, like why not just make it a file private function in the type, rather than making it inside the function itself like that.[00:30:24] Well in, in unit testing too, like just the unit testing of that individual function is going to be a mess, which goes back to my whole point about how like unit testing, one of the best things about it has been how it's made architecture so much better in the last 10 or 15 years that it's been popular.[00:30:41] Antoine v.d. SwiftLee (Guest): [00:30:41] Yeah, totally. You [00:30:42] know, and it's also not really improving the structure of the method itself. Like it's pretty hard to get an overview of what is not exactly in the method called all those inner methods, you know, and readability doesn't really [00:30:55] approve. [00:30:55] Leo Dion (Host): [00:30:55] Yeah. Is this, it, it reminds me of all the worst parts about Java script when I did a lot words, like even whatever ES6, whatever it is right now.[00:31:05] Yeah. Thank you so much, Antonie. Let's go ahead and we'll continue with the rest of our interview in the next episode. Folks can find me on Twitter at Leo G Dion and my company is BrightDigit. If you have any comments, questions, or feedback, please let me know, reach out to me on Twitter. And then I would love for you to just take a few moments, retweet, whatever you liked about this episode.[00:31:31] Just send me a reply, send me something on Twitter. Just letting me know what you've liked about this particular episode. And if you could post any reviews on Apple podcast, Spotify or Google podcast, I'd really appreciate it. We'll continue the rest of our interview with Antonie in the next episode in a few days.[00:31:47] So be sure to subscribe and we'll talk to you.
★ Support this podcast on Patreon ★
11/14/2020 • 31 minutes, 56 seconds
App Store Review Guidelines with Paweł Madej
Guest
Paweł Madej
Twitter @PawelMadejCK
GitHub @nysander
CodeConf App
Twitter Text Library
YouTube Video - https://youtu.be/NmFHkLlxhL8Related Episodes
Episode 67 - Documenting Your Code with Bas Broek
Episode 62 - Local Database Storage on iOS with Aaron Douglas
Under the Radar - Store Wars
Related Links
Objective-C For Swift Developers by Paul Hudson
Four Reasons Why We Won’t See Third-Party Apple Watch Faces (And What Apple Is Doing Instead) by David Shayer
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030I will be speaking at NSSpain 2020...Nov 17 - 20, 2020
One of the most known conferences about Apple platforms development is going remote this year!
NSSpain 2020 is an online, continuous 36 hours conference, carefully crafted by the community for the community.
Guests of the show Paul Hudson and Donny Wals will be speaking as well as others
Go to NSSpain.com and use promo code empowerapps to get 10% offAlso speaking at...
iOSDevCampDC 2020 - October 30
Back to the Mac - November 9 & 10
Pharmacist to iOS Dev
Learning Resources
Challenges with Documentation
Making CodeConf for Conference Videos
Using CoreML for CodeConf Subscriptions Bonus Clip
Building the Twitter Text Library Bonus Clip
Getting into the App Store
CodeConf - Do you have the right to the IP you're using?Rule 5.2 Intellectual Property
CodeConf - Are you using official libraries?Rule 5.2.2 Third-Party Sites/Services
CodeConf - Do you provide ongoing value to the customer?Rule 3.1.2(a) Permissible uses
Hey - Does your provide some functionality?
Rule 4.2 Minimum Functionality
Rule 3.1.3(a) “Reader” Apps
Wordpress - Are you avoiding in-app purchases accidentally?
Rule 3.1.1 In-App Purchase
Aaron Talking about the Automatic Wordpress Issue
xCloud - Are you providing additional content?
Rule 4.2.7 Remote Desktop Clients
Rule 4.9 Streaming games
Fortnite - Are you avoiding in-app purchases purposefully?
Rule 3.2 Other Business Model Issues
Rule 3.2.2 Unacceptable
Other App Store Tips
Avoid Bugs!
TestFlight Reviews vs App Store Review
You can be rejected later!
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)TranscriptionLeo Dion (Host): Thank you for joining me for another episode EmpowerApps. I'm your host, Leo Dion. Today we have with us. how you doing? Hello? [00:00:12] Paweł Madej (guest): I'm fine. Thank you. [00:00:14] Leo Dion (Host): Thank you so much for coming on the show. Really glad to have you [00:00:17] Paweł Madej (guest): on. [00:00:18] I'm also really happy to talk with you today. [00:00:22] Leo Dion (Host): I'll look, go ahead and let you introduce yourself.[00:00:25] Paweł Madej (guest): Well, I'm pharmacists almost former pharmacists, because last time I found my iOS dev job and I am also making apps for app store for myself. I'm the developer, but for the last one, 13 years, I was working in pharmacy. [00:00:52] Leo Dion (Host): That's such a great story. How, what got you interested in doing, getting into iOS development?[00:00:59] Paweł Madej (guest): I was looking for mobile development in three years ago and I have a background on web development. I was programming in PHP sometime ago and also some Linux administration. So it was my hope before. All my life, I think. And after awhile I started interesting in developing mobile apps. I tried for very short periods, how to develop for Android, but I found it hard for me to learn and understand it.[00:01:39] And after. Some break. I got my iPhone burrowed and tried the iOS, how it works, how it looks and how it feels. And I liked it very much. And then my interests on iOS started, I have bought a few books. I watched the Stanford course online and then decided to that I will try to learn and make up at the same time.[00:02:08] So this was first quarter of 19 year. So I'm year and a half in business now. [00:02:18] Leo Dion (Host): Congratulations. That's fantastic. I'm really happy for you. What did you find to be the best resources in order to get you started with iOS development? [00:02:33] Paweł Madej (guest): Well, at first I was looking for some reading. So blog posts but I bought also some books and with following a book.[00:02:47] You have to think as an outer of a book. And for me, this was a little hard because I got some idea what I wanted to do. But the outer follows some idea, which he has. So this was hard for me at start to transfer this idea from the book to the idea I want to. Use and make some progress. So I started looking for ideas on the web and not the full flow, for example, how to make from a, to B to C, to C, but just the tracks.[00:03:28] And this is how my first app start, that I have some problem to resolve and I looked for solutions. So not the learning. With following your pages of the book. And this one was StackOverflow, the blog posts. But I found also that at some point that conferences from around the world are also helping me.[00:03:58] That I watch some idea and someone explains it in the short period of time, but it's quite to the point. So you can just use this examples or this idea and resolve your problem. So this was also learning path for me. [00:04:20] Leo Dion (Host): I think that's really interesting because in the last episode I had Bas on and we're talking about how we learn via documentation and videos and stuff.[00:04:28] And it's interesting that you like balanced out learning just from some sort of curriculum while also just getting questions answered on the web, you know, either Googling it or doing stack overflow or whatever. So I found that really interesting that you kind of took both modes. [00:04:45] Paweł Madej (guest): Yeah. And I found that documentation is very helpful for me at that point.[00:04:53] I am now, but at first, do not know where to look for and what to look for. [00:05:02] Leo Dion (Host): You don't know what you don't know. I think that's the biggest challenge is it's like you look at it and it's just a, you know, a mess.[00:05:09] I want to talk to you again about app figures. You probably already know them, but their analytics and their app store optimization. AppFigures really is about giving makers the tools they need to get more downloads and revenue. Well, now figures can help you track competitors for how many downloads they're getting and how much money they're making to their audience, demographics and which SDKs they use.[00:05:35] Their competitor intelligence really gives you great context, say a competitor as like a new feature or was mentioned in the news recently with app figures, you can see if that brought in more downloads right away. Got a great idea for an app or a game. Well with AppFigures, you can figure out how big that market is and how much money you could be making with it.[00:05:56] And that's just scratching the surface, whether you're growing your app or building a new one, AppFigures has the tools you need that will reduce the risk, but also get you more downloads. You don't need a large budget or a data science degree to do this kind of thing. AppFigures has made it affordable and simple on top of tools AppFigures also provides a lot of great guides and tutorials to take you step-by-step through gaining more visibility with ASO and increasing your revenue by learning from your competitors.[00:06:24] They just released a free guide on that, actually. So go ahead, head to the link in the show notes and try out AppFigures for free. If you like it, use our special code and power 30, 30 to get 30% off for the next three months. Thank you at figures for sponsoring our show.[00:06:42] And then once you figure out kind of like the structure and the flow and what's the philosophy behind it, I think it just becomes easier to know what you're exactly looking for. Yeah. [00:06:51] Paweł Madej (guest): That's why I started learning from documentation and looking for solutions in documentation. This year, I got around one year of experience because I was able to understand that documentation and I was able to define the problem.[00:07:10] I look in this documentation. Because Google is helpful because you write a sentence and it throws you back hundreds of solutions or examples, but you have to in the documentation. You have to be very specific. What you look for. [00:07:28] Leo Dion (Host): Right. And you have to make sure you understand what's jargon to use and things like that.[00:07:32] I just recently learned term that I didn't even realize was a term that Apple use protected resource. That's an actually official term for anything that you have to ask permission for in iOS. So for instance, when you need to have like location data or health data or microphone et cetera, like, I didn't know that there was an official term for that.[00:07:53] So I would have never known If I wanted him to look up a specific permission dialogue, that term was protected resource for all that. Like, and I've been doing this for, I don't know, 10 years at least. And that, that was news to me. I just learned about that term. So yeah. [00:08:08] Paweł Madej (guest): Yeah. That's the moment you know that there is so many things.[00:08:14] You have to learn yet. So for me, the one and a half year, it's quite a newbie in iOS developer community. So I learned from many people and the documentation is. Because it's drawbacks yeah. It's not in every part. Documentation is easy to use and even if it exists for something. So, [00:08:40] Leo Dion (Host): and yeah especially if there's very specific cases, like documentation is incomplete or it could be out of date, which I've found to be quite true.[00:08:50] Paweł Madej (guest): Yeah. That's a hard thing that you get to the documentation and find, for example, One part of the solution you're looking for, but then you follow links to another part of this thing and there is no documentation. So you will stay at the point that you do not know what to do next. [00:09:15] Leo Dion (Host): Yes. Yeah. I'm very familiar with that.[00:09:19] Seems like conference videos were a big help to you ended up being an inspiration for you to create your first app in the app store, right? [00:09:26] Paweł Madej (guest): Yeah. I have watched a lot of conference videos, but I found that it's hard to find them on the web because I didn't know what conference names are or where to look for them.[00:09:42] So when I found them, it was also because I could learn a lot from them, but not all every conference is easy to find now. So when I was making my first job it's family graves map. And so the idea came that maybe I will make some app that will contain. Lots of conference videos in one place, and this app could help many other developers in my situation, they are learning.[00:10:22] They look for ideas for inspiration or knowledge at all. And. Having the one place to go with this conference videos would be awesome. So after I released this first app to app store on October last year, I decided that I will do this app and this app is named. Called CodeConf it's now in the app store for every user it's free to use and it contains almost 600 videos from talks from around the world.[00:11:00] There are, most of the talks are in English language, but they're also in Russian and probably in quick time, I will have also some in Portuguese language, so that's [00:11:14] Leo Dion (Host): awesome. That's definitely something I think the community needs. I know. I mean, there's a great WWDC app, but, or developer app, I guess now, but to have all those resources from different conferences, it's going to be fantastic.[00:11:27] It's a great app. And thank you so much for building something like this for the community. [00:11:31] Paweł Madej (guest): Yeah. I think this was also. Quite a thank back to community because I have learned so much from the community and this way I can also help others to learn something. I am not a blog poster or writer. I have to hard to write some blog posts.[00:11:54] So I cannot learn people for example, this way. But providing this app and making it free for everyone makes I think easier for people to use almost 1000 people tried it as for now. That's awesome. Thanks [00:12:13] Leo Dion (Host): a lot congratulations that's fantastic. So what were the big challenges you face trying to get this app into the app store?[00:12:24] Paweł Madej (guest): Idea of the app was to be not a static app, for example, but to have some backend. So I have to write a backend for it. And all data is life from these backend. And during that time. When the app was ready for app store, I have found some issues with revenue. One thing, it was a newbie error that I have created In App Purchase for the app, but I didn't attach it to the app in the review process because when you are making this for the first time, you have to.[00:13:09] Do this additional step because otherwise it's not connected one with the other. And that was one reason of the rejection of my app. Okay. The second one was that Apple treat that my that videos I have in my app are not my own. So it was illegal from their perspective for me to use them because I'm not the owner of these videos.[00:13:44] So they were very strict with this. And I had to have official document that I have permission from conference organizers to use these videos in my app and still stream them. Because all videos are streamed from the official channels. So I use YouTube on only as I a video backgrounds for it.[00:14:15] Leo Dion (Host): And that's really interesting. I've heard that like, so getting into the main topic, like I've heard that legal tends to be one of the like big issues that folks get into when it comes to like the ownership rights of certain content that is in your app. So if you're using like external content of any kind, you need to have ownership or permission of some kind when you're using that content.[00:14:44] Even though it's from a third party, which I find really interesting. [00:14:48] Paweł Madej (guest): Yeah. I found as I was sort of researching this problem, I found that even using the images in app, for example of toys that are copyrighted, there is a box with this toy and there is a name of the company which made it. And for people, this was the problem that Apple have denied it using of such images in the app also.[00:15:21] So they are also very strict with libraries use. I think. On test flights. I was testing using Vimeo as streaming because some conferences are so on stored on Vimeo. And I have rejected one of my solutions because it was using. Not right the Vimeo tools. So there are my tools I have used.[00:15:51] And this also, they stayed that I have to change this. [00:15:57] Leo Dion (Host): So you were using some other like third-party plugin or library, I should say in iOS. That was not the official Vimeo library. Is that [00:16:06] Paweł Madej (guest): correct? Yeah, I tried it and this was for tests but as I want to show my test flights users solution with the YouTube videos and Vimeo videos, and then it was, I had to change because they somewhat found that this is not the official solution for it.[00:16:30] So, so, and for you to buy I am using official API. So it was clear to use. But on the other hand, Vimeo API is not as open as YouTube one. So at now I'm not using at all Vimeo for conferences I'm set we've. I am set with that because there are a few awesome conferences that I cannot show in my app, but maybe in some future it will change.[00:17:03] Leo Dion (Host): Yeah. Like I know I spoke at Swift Toronto, that's on Vimeo, so, and I know a few others that were on Vimeo as well, so yeah, that is unfortunate sometimes. Really another good point. I think developers, especially Indies who try to like hack their own thing. Nope. Was it disapproved in test flight or was it disapproved for the app store?[00:17:24] Paweł Madej (guest): No, this was on test flight. So it was not released that I pushed for the apps to review. It was a test light review. Yeah. [00:17:36] Leo Dion (Host): Cause I know like, it seems like test flight reviews have gotten a lot stricter almost to the point where I would say the test flight review usually tends to like filter out.[00:17:46] 90% of the issues are going to run into before you've even submitted it. To the official app store, but yeah, the whole point about like using an official API and not using an official API, it goes back to the whole thing about legality. Apple does not want stuff on their app store that might skirt official rules.[00:18:06] Paweł Madej (guest): Yeah, it's very strict with it. And even if you try to make some hacks they find these ways that you are not using the official or legal content. And they will deny you at all. [00:18:22] Leo Dion (Host): So were there any other issues that you ran into when you submitted CodeConf? [00:18:28] Paweł Madej (guest): Yeah, I think the biggest one for me was to understand why Apple doesn't let me to use enough auto-renewal subscriptions because the idea of my app is to allow everyone to use it for free, without paying and viewing the content, but it some few features additional that let you make these watching and managing these videos easier or way to manage it in a very convenient way, because it allows you when you have these premium package make some favorites make a favorite speaker notifications or making creating[00:19:20] your watch list. Yeah. So when you Browse the dogs. You can save it to their watch list and watch later, and you will not lose these stock. You have found and. That was the the first set of features I wanted to have as a premium package and reviewers, that, that this is not the ongoing content.[00:19:50] When user is grating creating those for example, watch lists or favorites and they wanted to make something that will user use almost every time they use app when they have this subscription. And if at first I even didn't understand what they want from me to do, but as I see it and think what I can do to.[00:20:22] Make this ongoing content, because when I compared to other apps which have enough and auto-renewable subscriptions, from my perspective as a user, I didn't felt that my app lacks of some feature that probably okay can be able to auto-renewable subscription. And I got one feature that I didn't plan to.[00:20:50] Implement in first version of. My app, but creating it might do the review successful as they allowed me finally to use auto-renewable subscriptions and that feature was talk recommendations.[00:21:12] Leo Dion (Host): Hello, everyone. I wanted to let you know about my speaking schedule for the rest of the year. I will in fact, be speaking at three conferences over the next month. These include. IOS dev camp DC 2020 on October 30th, as well as releasing two videos for the online conference. Back to Mac on November six and seventh, you can find links to both those conferences in the show notes below, but.[00:21:41] In the middle of November, between the 17th and 20th of November, I will be also speaking at an S Spain 2020, which will be of course, a remote conference just as all these conferences this year are. And for those of you who don't know, and as Spain is one of the most well-known conferences about Apple platform development and.[00:22:05] It is going to be this year, online, carefully crafted by the community for the community. And it will be going on for continuous 36 hours. This is going to be amazing. If you've been a listener of the show, you probably are familiar with some of our guests, such as Paul Hudson and Donnie walls, who will both be speaking there?[00:22:26] I will be speaking of course, and my topic will be something that is near and dear to me. My talk and Spain 2020 will be on Swift packages, the, to dependency management of the future. If you've heard me talk about Swift packages before that, you know how much I am interested and excited to be speaking on this topic.[00:22:49] So, if you are interested in going to an a Spain this year, then you can get a 10% discount by using the promo code and power apps. All one word again, empower apps to get 10% off your ticket, tennis, Spain, this year, I highly recommend you check this conference out. There's going to be a great set of speakers.[00:23:10] And with 10% off, this is really reasonable to attend from the comfort of your home. Thank you to iOS dev camp DC and back to Mac for inviting me to speak this year and most especially, thank you, Anna Spain for offering a discount to our listeners and for inviting me to speak, these are some great conferences.[00:23:30] I highly recommend you attend them. And if you do, I look forward to seeing you there. Hi,[00:23:37] Interesting, I'm wondering, like, that seems an interesting situation where you have like in-app purchase and you just want to add certain features. Was it maybe like the type of subscription that you use that could have been the determining force? Like. Because there's other apps I've used that have third-party APIs and have in-app purchases that add certain features to the user interface.[00:24:03] So I'm like really curious why they didn't allow your set of features such as favorites and things like that. They didn't allow those as necessarily in-app purchases. [00:24:14] Paweł Madej (guest): I also have no idea why it was like that, but they suggested to me that. They allow me to use subscriptions, but not the outer. Okay.[00:24:27] Leo Dion (Host): Interesting. [00:24:29] Paweł Madej (guest): Okay. But from iOS dev perspective, it is better a lot. If you have these auto-renewable subscriptions. So I tried to make my best and, and get it's as I plan it long time before. Yeah. Yeah. [00:24:49] Leo Dion (Host): So let's start off with the first big controversy this year, which was what the folks at band camp and their app.[00:24:56] Hey, I don't know if you want to get into this Pawel but what exactly happened with Hey this year? [00:25:01] Paweł Madej (guest): Well, they, I, I believe in review denied. Hey To accept to the app store which was unusable. If you do not have any account and the problem was that you could not create these accounts inside the app.[00:25:24] Could create the account on the website and then having these credentials would log in into the, on the iOS device. Yeah. So for Apple, this was the problem. that They said that you cannot use the app that does nothing. It has to make something before it's accepted in the app store. And the problem is that.[00:25:54] It was not the first app that has this idea that you have credentials and you log in and you start using the app because there were many other apps that use the same concept and are all of the available in [00:26:10] Leo Dion (Host): in App Store yeah. I think like Netflix is the big elephant in the room that gets away with a lot of things that most developers can't.[00:26:19] How did, how did this end up getting resolved? [00:26:23] Paweł Madej (guest): Well, I decided to create. Option to make in app the real account so you were able to create the app login and use it for free for 14 days. If I remember correctly. Yeah, I think that's right. this Made Apple happy. If we can say this, that app make some features for the user.[00:26:56] So you can create an account. You can log into this account and use the app. So it is strange, was enough for Apple to alow them back in the app store. [00:27:08] Leo Dion (Host): Yeah. And then the other controversy we had this summer was with the folks at automatic. We actually, I had Aaron Douglas on who works on the WordPress app and we talked about the issue that WordPress ran into was.[00:27:24] Apparently somewhere in app, you could have gotten into a web view to where you'd purchase wordpress.com hosting. So there was WordPress, which is just an open source project that you can install on any old PHP server, but then there's wordpress.com, which is basically WordPress's hosting, hosting offering that they have.[00:27:45] And apparently there was a way in the app that the reviewer had found that you can. By hosting and that essentially skirts getting away from doing in-app purchases. And that, that was why they ended up getting rejected. And I believe like with both of these apps and including, Hey, like this wasn't the first release that got rejected.[00:28:06] It was a later release. Where it was found. So even though your app may have already been accepted, it could get rejected later for a feature or flaw that had already existed earlier. So that's something to keep in mind. We're press, they worked it out with Apple and wasn't as big of a deal as it was made in the press.[00:28:22] But it's still good to keep in mind that you, even if it's accidental, if you end up skirting the in-app purchase stuff, Apple gets pretty pissed about that. [00:28:33] Paweł Madej (guest): Yeah. I think that if Apple find some. Issue with the app during the first release or during the some updates, they are very strict with their statement.[00:28:47] They do not change their mind during some conversation or even excalation of the problem with this app, you have to. make it straight as Apple wants you to, because otherwise you and app with a full rejection or even you are out of [00:29:08] Leo Dion (Host): App Store or. Yeah, agreed. That's the thing is like Apple has all the power in these situations.[00:29:14] I mean, that's something to keep in mind is like from the indie developer for the biggest company in most situations, Apple's the one with all the power, unless you have an app with a large enough audience. I E Facebook, Netflix, like you're pretty much not going to be able to get away with getting.[00:29:31] Around Apple's rules more or less. [00:29:35] Paweł Madej (guest): Yeah. I remember the case with Facebook, as you said, maybe not with the app itself, but even if Facebook have been using not the [00:29:46] Leo Dion (Host): enterprise certificates, is that what you're thinking? Yeah. [00:29:50] Paweł Madej (guest): So. They were using the certificates to install the app on the devices.[00:29:57] They are not allowed to install. Yeah. And Apple also have blocked whole Facebook and all of Facebook's devices that we're using. We've just a revocation of these enterprise certificates. So even it's such big company as Facebook, they are very strict with the rules. And I think. This consistency that every one have to use and keep up with the rules.[00:30:27] Apple states from one perspective it's okay. But the Apple uses its guidelines as a guidelines and the, it is not, not everyone have to feel every guideline in the same manner I think, yeah this is not the very fine way from the Apple but we have to with that because companies have some better treating from Apple[00:31:00] Leo Dion (Host): yeah, agreed. Agreed. And then before we covered the biggest, the elephant in the room, I wanted to cover the whole game streaming controversy. So there's this whole new technology where folks like Amazon, Google, Microsoft in particular have enabled. They're basically you can play games on various devices without actually having the console by basically streaming the video and streaming the input from your game controller to some server in the cloud, essentially.[00:31:32] And then playing the video game that way. Google stadia. I forgot what the Amazon one was called. That just came out a few. Few weeks ago. [00:31:39] Paweł Madej (guest): Yeah, I think the most, do you remember them? No, I'm sorry. I'm not a gamer. So [00:31:45] Leo Dion (Host): I, but I know I'm not a gamer in those, those spheres, but the big one was obviously Microsoft X cloud and the controversy there.[00:31:55] They wanted to put an app in the app store you so you can play any X-Box game you want in the cloud, on your iOS device, especially at on iPad. And basically Apple didn't allow it because of the way it sounds like it's partially the controversy of you can play any game. You want an Apple kind of wanted them to have like.[00:32:15] A separate app for each game that would then use the service, which sounds like a mess. Both for usability and maintenance. Yeah. I dunno. What else did I miss? [00:32:26] Paweł Madej (guest): Yeah, I think Apple is a word that with such solutions as game streaming, they are losing the power of control. Right. So content power of control is on the, provider of these streaming services then, and not the on Apple and Apple wants to keep the power on it's behalf so I think this is the main problem with this services.[00:32:55] Leo Dion (Host): Yeah. And it's really unfortunate because you know, something like Netflix essentially does the same thing, but without interactive content, Netflix doesn't have to have a separate app icon for each show or movie. And it seems like the kind of, there's sort of a lack, there's a lack of foresight in how future technologies will affect how the iPhone is used.[00:33:16] And I don't think when the app rules were first thought out of. Game stream, what was never thought of as an actual, like viable service on the iPhone. So like they don't have the ability to, to kind of. Take that on, in a way that's useful and fun and easy on developers to take care of it. Now it's kind of a mess, so to speak when it comes to having game streaming platforms on iOS.[00:33:41] So now people just ended up having to use an Android tablet or an Android or a Chrome TV to do it, which is [00:33:47] Paweł Madej (guest): unfortunate. I think. At some point, these guidelines will change because the market will be too big to lose the money from it. So I think I think that if Apple finds the way to make some profits from these streaming services and to force these providers, To give Apple money but some of the money they make from these services.[00:34:16] And I think that then it will be possible to stream games on the iPhone or so I think the cash is all the things, [00:34:27] Leo Dion (Host): so, yeah, I agree. And speaking of cash and gaming let's of course cover the biggest elephant in the room with Fortnite, Fortnite. I mean, they blatantly got, tried to get around the whole in-app purchase thing and that costs severely and they've kind of taken rather than acquiescing to Apple in many ways.[00:34:49] They've just go ahead and now they're suing them and who knows how long that's going to take? [00:34:54] Paweł Madej (guest): I have read that's the case on the cart is on May 21. So it's long before some judgment from these guys, but, and [00:35:09] Leo Dion (Host): there's been a lot of back and forth about like their unreal tournament engine and whether Fortnite has the right to post the app on the Mac, even outside of the app store, because there's certain certifications you need in order to get an app on a Mac.[00:35:23] Paweł Madej (guest): I think that fortnight case is. They wanted to test how Apple is strict with the rules, the rules, were open that if you have some purchases in app, you have to use enough from Apple. You cannot do any other tricks. There are many apps that you. By outside of the app for the content, but you cannot drive users to this place when you have to buy, if you can buy these services.[00:35:58] So you can have to find the way on his behalf. Yeah. The fortnight tried to make it very straight without any... Without keeping any rules. So, so they say they forced to your side by side in-app purchases and they're on basket for buying things. So this was, I think the most important rule of the app store.[00:36:28] Yeah, because that was broken by fortnight. So. As I see these guys as I in the dev with some in-app purchases , I'm a little person in the markets. Very little. Yeah. And I think that Paying these 15% of a provision to the Apple and having access to the worldwide market is fair. I think that's fair because if I didn't have access to the app store, I will not have access to users from around the world.[00:37:09] Leo Dion (Host): Yeah, that's totally fair point. And so I think. Something I wanted to really get into is just what, what are some things folks should look out for when they even, I would even go so far as to say when they have an app idea. And I think we've kind of touched on a few of those, making sure you have the legal right to use the content in your app.[00:37:28] I think that's a big part of it. If you're using copyrighted material, make sure you have documentation that you have. You know the right to do that otherwise, you know, I'll make sure it's creative comments. [00:37:39] Paweł Madej (guest): Yeah. I think that this guy sees is very important because every app in app store is reviewer very many ways.[00:37:51] So, this is not only how the app works, because it should not crash for example, on the start, because it will be also rejected. Yeah. But what app does and if it's, for example, have some gambling in it. So I remember the case from, I think last year where some. Newspaper apps were rejected because Apple's site that they allow to open URLs from to the web pages, for example, from this newspaper.[00:38:28] And they say that opening URLs allow you to go to the gambling sites. And the app was rejections for allowing gambling. So this was also the case, but, and it was rather quickly resolved, but also Apple's treat some opening URL can be denied for the app. [00:38:54] Leo Dion (Host): I think there's a really good article. I read recently by David Shayer on why Apple doesn't allow a third party watch faces and why we might not be ever getting third-party watch faces.[00:39:05] There were obviously issues with battery life and buggy code and Apple's image and stuff. But the last reason I found really interesting and it pertains to our conversation here, but like the whole idea of copyright, it made me realize how important it is for Apple to make sure they don't. Do anything that crosses the line legally.[00:39:26] And he talks about how like, Apple has been very painstakingly, like. Certain and careful about what they do with their own watch faces precisely because they don't want to mess with Apple legal. And I think it gives you some perspective about how Apple looks at even your apps in their app store and how you don't want to cross those paths[00:39:48] Paweł Madej (guest): yeah. I think that's Apple with how it's big it's. Can be a target for suing it for many things. Yeah. So they and stood for big money, for example. Yeah. So they legal department keeps everything very strict because of that. I think that they do not want to have been sued because of some deaths issue or using by any dev illegal contents.[00:40:24] So I think this is the thing why they are very strict with these, legal content issues. Yeah. [00:40:31] Leo Dion (Host): Yeah. Agreed. And then the other thing you mentioned specifically with your app is taking shortcuts with third-party APIs, right? [00:40:40] Paweł Madej (guest): That was also the case. And I think you kind of go the shortest way because even it's.[00:40:48] May be convenient for you as a developer, because it's cheaper. It's easier to do, but even if at first it will go for the test flight review, I think day one, you want to release the app in app store. It will be rejected and you have to fix all those things before I they accept you. [00:41:10] Leo Dion (Host): Yeah. Agreed.[00:41:12] And then last that I think certainly not least is anything that kind of. Skirts or bends the rules when it comes to in-app purchases, whether that's trying to get around it, trying to sell something that just isn't. You know, according to Apple, following the guidelines, having any sort of browser view that kind of skirts in-app purchases.[00:41:38] I think that that's something just be careful of when you do it and make sure it follows the guidelines that Apple has available. [00:41:44] Paweł Madej (guest): Yeah. And I think that maybe guidelines are not. Easy to understand in many points. Absolutely. Absolutely. Yeah. Even if you read word by word these guidelines, in many ways, you will find that it's hard to get the Apple's point, what they want you to do.[00:42:07] And so I tried to talk with the reviewer, but on the review when you are, you will not get any tips what to do, because as they say to me on the review, they are describing or replying to features I have, but they will not tell you what feature you have to do. You should have to be accepted with for example, auto-renewable subscriptions.[00:42:39] So I have to find it myself. What they will accept as this subscription. Yeah. So you can't, you can ask questions, but you probably won't have any answer that will help you at all. [00:42:55] Leo Dion (Host): Yeah. I want to definitely state that, like the guy following the guidelines. Well, I'd say following the guidelines are easy and 80% of cases, it's those 20% where it's like becomes ambiguous and challenging.[00:43:06] And I think a few tips is like one thing I've suggested to folks. Is putting your app in the app store, like do MVP in the app store to make sure that you, your MVP can be approved by Apple. What's the least amount of work. So you can just test and make sure that you're following guidelines. Before spending a lot of time building the most robust app you can possibly have and find out that the whole idea is against Apple's rules.[00:43:33] That's something. To keep in mind. The other thing I was going to say is take advantage of the hours during WWDC I had a really great conversation with one of the folks at Apple about why I couldn't use. Imagery from Nintendo games in my watch app. For those of you who aren't familiar, heart Twitch, you can show off your heart rate when you're streaming.[00:43:56] And I have video clips and screenshots of me playing like Mario kart, for instance, and showing my heart rate racing while I'm playing Mario kart. They didn't like that. The watch app store. And I had thought actually the reason being was that it wasn't actual watch app screenshots, but that it was.[00:44:12] Screenshots of the TV. But in fact, the controversy was again, because I had screenshots from games of Nintendo that I didn't have the legal right to use. I would have never thought of that because it's an app store. So, you know, it was really good that I talked to somebody and got that guidance. [00:44:28] Paweł Madej (guest): Yeah. I asked you site about screenshots.[00:44:31] So. What about issue of friends of mine? When he has that used in screenshots, Apple Watch on device side by side with the iPhone and. At first, it was accepted. With this screenshots and after updates or reviewer denied these updates because it was showing the feature, Watch App that doesn't exist for this app.[00:45:03] But the issue is that. One of your doesn't solve the problem or might be missed this screenshot. And for the next one, when update was released, this was the problem. And this friend had to remove the watch from screenshots and everything went fine and the app was approved. So we have to also have in mind what you show on the screenshots, because this could be also one of the, even if the app is okay, this is what you write in description.[00:45:39] App description. What you show on the screen source also can be 0.4 for action. [00:45:46] Leo Dion (Host): Yeah. Was there anything else we wanted to cover when it came to making sure you follow app store rules, as, as much as you can. [00:45:55] Paweł Madej (guest): Well, I don't know what to say. [00:45:58] Leo Dion (Host): I think that pretty much covers it as best as we can. It is definitely a challenge.[00:46:05] And like I said, try to be flexible as far as features and also your release date. It is hard. I'm not going to tell anybody, especially for Indies and just, you know, You know, be careful what you put on the app store content that you have legally right to, and you're not trying to like skirt the laws. I have my own complaints about the app store most certainly.[00:46:24] And I don't want to get into that in this episode, but I think like, I think we pretty much covered the basic guidelines and not trying to cheat Apple out of money. I think that's the overall one of the big rules I would say is be careful, be careful on that. [00:46:40] Paweł Madej (guest): Yeah. I have released my first up.[00:46:43] It was approved without any issues TestFlight went very fast and then the App Store review. Also, I was very stressed how it goes, because I didn't have this experience on releasing App and, but idea of it was very original. I think that. If you have the original idea, you do not copy the existing app one-to-one and that every feature you have in your app is the same exact copy of something.[00:47:20] Other apps. We know all that. There are hundreds of notes up or some, a podcast app, and there are. Any app makes its own the room in app store. But if you have some original idea, you have to make sure it's worth my sending for the review and to make it available to app Store. These problems with review I think that every developer iOS developer will have.[00:47:53] Some issues with apps to review at some point, maybe later on maybe a longer it will take for them. But finally, I think that Every idea is worth [00:48:09] Leo Dion (Host): submitting. Yeah, I agree. And like I said, if you feel like, you know, like I did with heart Twitch, I wasn't certain that an app like that would make it into the app store.[00:48:18] And before I thought it was completely, perfectly ready, I made sure it was approved. Before moving forward. Cause I wanted to make sure the concept was solid with Apple before, you know, spending a lot of time on an app like that. And yeah. So good luck to those out there. Big and small who are posting apps to the app store.[00:48:36] You're going to get rejected at some point and it's okay if you do. [00:48:41] Paweł Madej (guest): Yeah, I think it's for having this rejection is the iOS dev life, you get this rejection will better understand what they want. [00:48:51] Leo Dion (Host): Yeah, I agree completely. Well, thank you so much for coming on the show. Where can folks find you online?[00:48:59] Paweł Madej (guest): Well, I'm mostly on Twitter. You can find me there. [00:49:06] Leo Dion (Host): The show notes. [00:49:16] Paweł Madej (guest): You can find me on my sites. This is also my name and surname.com. Also in show notes. I'm also on github and I think it's replaces. You can find me, so my DMS are open.[00:49:33] So if you want to get in touch, feel free every time. Well, thank [00:49:38] Leo Dion (Host): you so much for coming on Paweł. People can find me on Twitter at Leo G Dion. My company is bright digit. Please take some time and go to Apple podcasts, Google podcasts, or Spotify, and give us a review. And if there's anything you want to talk about on the show.[00:49:56] Or if you have any topic, ideas or feedback for me, please feel free to reach out to me on Twitter. My DMS are open as well. Also, you can email me leo@brightdigit.com. Thank you so much for joining us for this episode. And I look forward to speaking to thank you so [00:50:12] Paweł Madej (guest): much.
★ Support this podcast on Patreon ★
11/7/2020 • 50 minutes, 22 seconds
Documenting Your Code with Bas Broek
Guest
Bas Broek
GitHub @BasThomas
Twitter @basthomas
Contravariance - a Podcast by Bas Broek and Benedikt Terhechte
Goodbye Swift Weekly by Bas Broek
Swift Weekly maintained by Kristaps Grinbergs
YouTube Video - https://youtu.be/4T25oqyXBLwRelated Episodes
Episode 48 - Alternative Backends with Kristaps Grinbergs
Contravariance Episode 313 - Bas leaves XING
Contravariance Episode 314 - iPhone 12 & Apple Silicon
Related Links
Writing better APIs - Bas Broek - Do iOS 2018
Leo's AWESOME AWESOME README Guide
Jazzy by Realm
SourceDocs by Eneko Alonso
Dash by Kapeli
Made to Stick by Chip Heath and Dan Heath
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030I will be speaking at NSSpain 2020...Nov 17 - 20, 2020
One of the most known conferences about Apple platforms development is going remote this year!
NSSpain 2020 is an online, continuous 36 hours conference, carefully crafted by the community for the community.
Guests of the show Paul Hudson and Donny Wals will be speaking as well as others
Go to NSSpain.com and use promo code empowerapps to get 10% offAlso speaking at...
iOSDevCampDC 2020 - October 30
Back to the Mac - November 6 & 7
Apple Event Stuff
iPhone 12 Upgrades
Apple Watch Series 6
HomePod mini
Documentation Challenges
What are some challenges with documentation?
How to keep documentation updated
How to make documentation innovative and clear
Building documentation for open-source projects
Ways to consume documentation
Avoiding jargon in your documentation
How to be thorough
Documentation Process and Tooling
Automating documentation via CI
Keeping tests, docs, and code in sync
Jazzy vs SourceDocs
Testing Your documentation
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
10/24/2020 • 42 minutes, 21 seconds
UI Design for Developers with Heidi Helen Pilypas
Guest
Heidi Helen Pilypas (web site)Twitter @heidi_helen
YouTube Video - https://youtu.be/NTvljGAha_ERelated Episodes
Episode 63 - Apple Watch 2020 with Steve Lipton
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Episode 35 - SwiftUI - The Good, the Bad, and the Benefits
Related Links
Apps designed by Heidi
Capsicum
When Did I...?
Boomerang
Guides
Guidelines for Designing for iOS from Apple with Sketch and PS Templates
Material Design from Google
What has Changed in iOS
Widgets
SF Symbols
Sidebars
Pickers
Color Wells
Menus
Tools for Developers to Get Better at Design
Design+Code
Refactoring UI
Zeplin
100 Days of SwiftUI
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030I will be speaking at NSSpain 2020...Nov 17 - 20, 2020
One of the most known conferences about Apple platforms development is going remote this year!
NSSpain 2020 is an online, continuous 36 hours conference, carefully crafted by the community for the community.
Guests of the show Paul Hudson and Donny Wals will be speaking as well as others
Go to NSSpain.com and use promo code empowerapps to get 10% offAlso speaking at...
iOSDevCampDC 2020 - October 30
Back to the Mac - November 6 & 7
UI Design
What has changed in iOS Design?
What's the difference between skeuomorphic vs flat?
Differences with Android and material design
Differences between web design
What's changed in iOS 14 design?
Differences on the iPad
How to design for Widgets
Design and Developer Teams
How developers should communicate with designers?
Best Tools for Getting Started
Best Guides and Courses for Getting Started
Common Mistakes
Pattern Libraries and Design Systems
Impact of SwiftUI
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)TranscriptionLeo Dion (Host): Welcome to another episode of empower apps. I'm your host. Leo Dion with us today is Heidi Helen. Hey, Heidi, how's it going? Hey, not too bad. So glad to have you on. We've had a lot of requests for having someone who can talk about UI design, because a lot of developers have a hard time. With UI design and designing their iOS app, or just talking to a designer.[00:00:29] And so I'm really glad to have you on, I've looked at a lot of your work especially, Capsicum and some of the other stuff that you've done. Just awesome. Awesome stuff. I'm really excited to have you on today. [00:00:43] Heidi Helen Pilypas (guest): Oh, thank you very much for having me. And I hope that I can describe UI design in a way that does it justice.[00:00:51] Leo Dion (Host): And through a podcast without the, without the, the easiness of visuals. So go ahead for those who might not know who you are, I'll let you go ahead and introduce yourself. [00:01:04] Heidi Helen Pilypas (guest): Sure. Thanks. So my name is Heidi Helen Pilypas. I live in Adelaide, South Australia. I work on a couple of apps as a designer, so.[00:01:18] My main apps are Capsicum. And when did I, Capsicum is an app for planning your day tracking habits and telling your story when inspired by beautiful paper planners. And then when did I is an app for. Tracking when you do things like anything you want, really, it could be making a bed, it could be brushing your teeth.[00:01:42] It could be flossing. It could be changing the oil in your car, or even when you took your medication. [00:01:48] Leo Dion (Host): That's awesome. How long have you been working on those apps? [00:01:52] Heidi Helen Pilypas (guest): I've been working on apps for a couple of years now. I first started in 2011 when I. Got my first iPhone in a very mod way, I should say. Cause what, what happened was I was just in love with all of the apps and I was artistic myself.[00:02:14] I went to university and studied a bachelor of visual arts and I always love drawing and painting as a kid. And I eventually like got more into design. So when I saw apps. I really wanted to get one of every area of my life, including logging my dreams. And there was an app called dream journal and I downloaded it and I noticed a few little things that can use improvement.[00:02:43] And the app had an area for you to write a support request to the developer. So I sent off an email with. A PDF document that I made, where I had screenshots and I had areas and notes about things that could use improving. And I was like, so excited about sending this email. Like I just thought, like I was really passionate about it and that would be really useful.[00:03:08] However, it can also be confronting to someone to get told there's all these issues. This is what's wrong with it. And to my surprise, like I got a positive response actually. And. The developer thanked me and that developer was Ishmael shahbaz who I work with today on our, on our apps, including Capsicum and a couple of others.[00:03:31] And yeah, over the years, we, we eventually built up to larger projects. It started with me helping him with a few design elements for one of his apps. And then it grew to more. I learned all about iOS app design through him, coaching and mentoring me. That's [00:03:52] Leo Dion (Host): awesome. My so I got my bachelor's in computer science and I've always had like a, I wouldn't say a passion, but a desire to get better at UI design.[00:04:03] I ended up getting a graduate degree in digital media and art technology. Cause I was just so interested in UI and I feel like in the last. 15 years. My UI design skills have definitely like atrophied. So it's something I'm really interested in. So. Excited to have, have you on, you've been doing this for quite a while.[00:04:23] It sounds like. What do you think has really changed when it comes to like UI design for the iPhone? [00:04:29] Heidi Helen Pilypas (guest): Let me see. A lot of things change over time with design patterns. So when I first got my iPhone flat design, wasn't so much of a thing. It was heavily skeuomorphic. Things were very much influenced by the real world around us.[00:04:50] So you had actual textures in the notes app for instance of paper, texture, and stitching in the nav bar. And. Then with iOS 7 things changed, things became more flat. And I actually really liked that. I actually really jumped on that. And I, when I looked at the old designs, I started thinking they were really outdated and like, Really thinking flat is the way in flat is the answer.[00:05:21] Yes. [00:05:21] Leo Dion (Host): Yeah. I really, I agree. I like the flat design I've seen this recently. I've switched over to big Sur and you've kind of seen that as well with big Sur, like that kind of design update where everything is flat. [00:05:35] Heidi Helen Pilypas (guest): Yeah. So eventually though, over time, I've actually come to appreciate like both.[00:05:42] Skeuomorphism and flat. And I really like marrying the two together to get something that is the best of both worlds. [00:05:51] Leo Dion (Host): What's a good example of an app that you think does that [00:05:55] Heidi Helen Pilypas (guest): we try and do in Capsicum actually, because we want it to remind people of. Like paper notebooks, but we also want it to be a digital experience that has the versitilty of what you can do on a phone and an iPad.[00:06:18]AppFigures Sponsorship Start[00:06:18] Leo Dion (Host): So here's the thing you're probably thinking to yourself. I want a build a brand new app, or maybe you already have an app in the app store. I think now is probably the time you're going to want to really optimize that app in the app store. And what I mean by that, make it easy for people to find it and for people to download it.[00:06:39] It's one thing that you can build this great app for the iPhone 12 or iOS 14, or watchOS 7. It's another thing. Being able to help folks who have their brand new iPhone or their hand me down, being able to find all these new apps. And this is where at figures really comes in. There give you everything.[00:06:58] You need to do this all in one place. So if you have a really good idea or an app idea, and you want to see how many people are searching for that, AppFigures is going to be your spot. If you already have an app in the app store, and you want to see what words you need to use or what terms you need to use so that people can find you easily AppFigures is for you.[00:07:19] And it's really easy. All you have to do is use our promo code and power 30, 30 to get 30% off for the next three months. That's it. That's on asking a lot in AppFigures they don't just have this really great universal analytics dashboard. They also provide a lot of other great app store tools for optimization.[00:07:38] And that's really the name of the game. That's going to improve your visibility and that's going to help you find more users and figures has more than a decade of providing mobile analytics and insights. And they also have this new tool called the competitor intelligence. Dashboard. And that allows you to track competitor downloads and understand what strategies you're gonna use so that you can grow your bottom line.[00:08:03] That's the thing. You can have a great idea. You can get users. Maybe by personally reaching out to them. But if you can improve your visibility on the app store, that's really the name of the game. So go ahead, head over to app figures.com to try app figures for free. If you like it, both the new and existing customers can use the special code, empower 30, 30 to get 30% off for the next three months.[00:08:27] So go ahead, give it a shot and let me know what you think. And if you need any help, try out some of those new app tear downs that Ariel has been doing. They've been fantastic and they've been really providing a lot of help to me. And I think to a lot of folks to what they need to do to get their app store apps up and working.[00:08:45] So go ahead and try it out with the empower 30, 30, you get 30% off for the next three months, or try the link in the show notes below. Thank you AppFigures for sponsoring our show.[00:09:02]AppFigures Sponsorship End[00:09:02] So it sounds like you communicate with Ish quite a bit. What have you found really works with, you know, your two person team, but would work with any other team when it comes to like. Being able to design an app and communicate clearly for the both of you [00:09:20] Heidi Helen Pilypas (guest): communication starts with mutual respect. For one another, understanding you both have different skills to bring to the table with ish.[00:09:32] He knows all about coding and development. I don't often understand a lot of the constraints, so it's really helpful for me to listen when he gives me feedback on things that I don't know like I sometimes design things that don't actually, I sometimes design things that might not actually work with the constraints of iOS.[00:09:58] So he's able to tell me, and I'm able to adapt. [00:10:02] Leo Dion (Host): Can you give an example of something like that? Cause like what I run into, when I talk to designers, they're more acquainted with like, for instance, Android and they'll design it because that's what they're more acquainted to. And then it's like, yeah, well we don't have a back button on our phones in iOS or like, that seems to me, like the biggest hurdle with designers is like, or, or they just design an app universally.[00:10:28] Right. And then they don't realize that different operating systems have different patterns. Sure. [00:10:34] Heidi Helen Pilypas (guest): That's exactly right. Different operating systems have different guidelines about what fits into them. I have briefly studied material design, which is developed by Google and that is a pattern or a system that's.[00:10:53] Heavily used with Android apps. However, it can also be used on the web and an iOS app, [00:10:59] Leo Dion (Host): right. Especially like Google apps use [00:11:00] Heidi Helen Pilypas (guest): that. But then iOS has their own components, things that are completely different. Like when I studied material design, for instance, it had a floating action button as part of the operating system, but that's not something that.[00:11:20] That's not something that comes with iOS. So you have to do things in different ways that respect the platforms. Like there's more than one way of presenting information to people. There's like, like you could do a menu or you could do like a modal view or you could, you can actually have different navigation and buttons and things.[00:11:42] So it really, it really depends on. The platform you're designing for. It's useful to familiarize yourself with the guidelines. So Apple has their human interface guidelines on their developer website. They have guidelines for iOS, macOS, watchOS, and TVs T V O S. And they update it every year as operating system evolves.[00:12:11] So. I, I read that to find out what is new. And I, I read it when I first started so that I got a good idea of what iOS supports. [00:12:24] Leo Dion (Host): What have you seen anything new as far as like iOS 14 this year? That's changed in the guidelines. Yeah. There's [00:12:30] Heidi Helen Pilypas (guest): quite a lot of new things. One thing that many people are excited about is widgets on the home screen.[00:12:37] Leo Dion (Host): Yeah. Yeah. Ask David Smith that [00:12:41] Heidi Helen Pilypas (guest): David Smith actually has changed the landscape in a lot of ways with how people use their phones. [00:12:48] Leo Dion (Host): I find it interesting how, like one of the big features, I think people are attracted by is like the customization I was listening to the latest ATP. And they were just talking about how like, Apple is very much, like you said, they have certain guidelines and they like try to keep it fairly strict, but people like really want to customize their home screen to the like.[00:13:08] To the nth degree, even if it might look hideous to other folks, and like, you've seen this with like widgets, you can customize colors and fonts. I know David added that recently. And then like the big thing I've heard is, I don't know if you've heard about this, but like custom icons where people hack shortcuts to use custom icons so that it can like really customize their home screen as much as they want.[00:13:33] And I find that really interesting, especially with like UI design, because we tend to be like, this looks pretty, this doesn't. And we try to like give people guidelines, but people want to like personalize. They want to personalize to the nth degree as much as they can. [00:13:46] Heidi Helen Pilypas (guest): Exactly. And I think that's great as an option for users to have to make something more of their own.[00:13:53] Leo Dion (Host): Have you done anything on the watch? I [00:13:56] Heidi Helen Pilypas (guest): have looked into the watch before for projects that I've worked on. I'm not in great debt, [00:14:04] Leo Dion (Host): but you have done iPad. Correct. What is like the big differences you've seen with doing UI design on the phone versus the iPad? [00:14:14] Heidi Helen Pilypas (guest): Well, the iPad has much more real estate recently in iOS 14.[00:14:21] Apple also announced that you can have multiple column formats. With the split view previously could have liked to, but now it can have more than that. And now I've had design can also be heavily sidebar based so you can navigate your app using the sidebar, like maybe instead of using a tab bar, for instance, you can put navigation elements in there.[00:14:52] And then on an iPhone, you would have those in a tab bar, cause you don't have room for a sidebar. So you would have. A slightly different presentation of your app, depending on what screen you're using. [00:15:07] Leo Dion (Host): So it sounds to me like screen sizes are our big deal. As far as like designing, like one thing I love to use on my iPad is like split screen to where I'll have something on one side and something on the other.[00:15:20] And by the time we release this episode, we'll have. Probably new iPhones out the iPhone 12 with its new screen sizes. So what are some tips or things that you've dealt with when you're talking with Ish, especially when it comes to designing an app so that it can adapt to, you know, the new screen sizes that we have with the new iPhones or cars.[00:15:45] Like they seem to be changing every year pretty much. What have you found is like really helpful for, for your communication with your developers in order to make sure that your designs are like adaptable or responsive? [00:15:58] Heidi Helen Pilypas (guest): Well, I usually mock things up in multiple sizes. I, I usually pick a standard iPhone size and mock up something on there and also.[00:16:12] A standard, iPad size. However, there are variations with many different sizes. I leave, I leave a lot of the rescaling up to ish to do because I don't, I don't fully understand it all. I try and work the best with guidelines that I read examples. I see. And I use. Also a third party library from Apple in sketch that has all of that.[00:16:45] User interface components. [00:16:47] Leo Dion (Host): Oh yeah. I know you mean, so like where you can go, like people have like, like usually like a dribble site or what's the other big UI design resource where you can pretty much Oh yeah. Apple has that too. Well, we'll put a link to that where you can pretty much like they have the Photoshop version and then the sketch version where you can like use the drag little widgets in your program, your good graphic design program.[00:17:10] Is that what you're talking about? [00:17:13] Heidi Helen Pilypas (guest): Okay. It's like a pattern library. You can download it for your user interface, design tool of choice. So I use sketch. They do have, they do have a Figma version now I think, and Photoshop as well. And even keynote, a lot of people are Apple design in Keynote. I've heard.[00:17:39] Leo Dion (Host): Nice. What are some like good tools for, for a developer to get started with like designing their app? Like, for me, I used to be much more into like, Just opening up X code and dragging things into the storyboard and see how they look or, you know, now I guess it'd be more like writing the Swift UI code in order to design my app because I find it to be more consistent with how I actually look.[00:18:08] But then like there's obviously benefits to pulling up a graphics program and doing what you're doing with catch what, like, what are some ways that I can really. Pick up more UI design skills and better design my apps [00:18:23] Heidi Helen Pilypas (guest): sure. Sorry. Some, some good examples. Of tools I used when I was learning design design plus code, which has several courses, including how to use sketch, but it also has UI design for developers.[00:18:41] I did a course on learning iOS design from it, which helped me get started. And it was kind of like the missing manual I needed because even though I read the human interface guidelines from Apple, I still wasn't always fully sure where to start and even like what font sizes to pick and stuff. So it really, it really helped me to get more of an idea.[00:19:08] That's right. He founded it. He's got [00:19:10] Leo Dion (Host): a lot of stuff. [00:19:12] Heidi Helen Pilypas (guest): Exactly. And then there's. Another thing I came across, which is refactoring UI. It's a book written from a developer's perspective who over learnt tips and tricks from his designer. So that's worth checking out as well. I'll tell you a little bit about my process though.[00:19:31] So when I am working on designing an app, I think about features that the user wants and that will help them. Solve their problem. So Capsicum, which I'm working on right now, a major redesign, actually, we already have a lot of features in there and I'm just, I'm trying to make it a lot better at the moment, using both what's new in iOS in terms of design, but also.[00:20:03] Improving it based on feedback and my personal preferences, even of what is better. So what I do is I first actually draw something. I use linear sketch on my iPad to do that. However, you could also just use a piece of paper and I actually draw like a rectangle of the screen. And then I start trying to figure out what I want to happen on there.[00:20:31] So. I'll draw all the elements and put all of the information that I want to go on there. And while I'm drawing it, I can like it. It's coming to my mind what I'm going to need to use. And I find that better than like just starting. In software, because that can involve a lot of trial and error and even creating things from scratch, which is quite timely.[00:20:57] So if you just draw it first, you kind of get a better idea before you go and create it in your graphic program or even in code. [00:21:07] Leo Dion (Host): That sounds really cool. I want to try that, that app out. What was it called again? [00:21:11] Heidi Helen Pilypas (guest): Linear Sketch by icon factory. [00:21:15] Leo Dion (Host): Is it compatible with the Apple pencil? [00:21:17] Heidi Helen Pilypas (guest): Yes, it is. This is one thing I love about it.[00:21:20] Leo Dion (Host): I was going to say I want to use my pencil a lot more so. And yeah, I, I'm always looking for a way to like, use the iPad more for, for sketching and things like that. So that sounds awesome. So we did briefly touch on widgets and what they've brought to iOS 14. Have you done any work with widgets?[00:21:41] Yep. [00:21:41] Heidi Helen Pilypas (guest): I'm currently working on something, although I'm not ready to share the details just yet. [00:21:47] Leo Dion (Host): If you can. What have you found are like some of the big challenges or guidelines that you've started to follow when it comes to building widgets? [00:21:56] Heidi Helen Pilypas (guest): I would say about widgets that it's about focusing one idea.[00:22:01] So there's. There's lots of things in an app. There's lots of features and you don't want to cram too much into a widget. You can actually have multiple widgets for one app. So, yeah. Focus on one idea and. Make it easy and glanceable so that people can find out information really quickly when they look at it, you don't want it to be too dense or crowded.[00:22:34]Speaker Schedule Start[00:22:34] Leo Dion (Host): Hey folks, I wanted to take the opportunity to let you know about my public speaking schedule. I'll be speaking at three conferences over the next. Two months. By the time you hear this, I will have a couple of videos out with the online conference, back to Mac. It's basically a YouTube playlist of videos from a lot of great folks in the Swift developer community.[00:22:56] We also have the iOS dev camp DC, which will be on October 30th as well. I'll be speaking there. And then last but not least is NS Spain, which is an awesome conference. That's been going on every year. As with 2020, this is, of course it will be a remote conference. So you can save some money and not have to fly to Spain this year.[00:23:18] But NSSpain is one of the most known conferences about Apple platforms and it's going to be a continuous 36 hour conference, which sounds awesome. I will be speaking on 50 packages, dependency management of the future. And as you probably know, I use Swift packages quite a bit. So I'm really excited to speak on this topic.[00:23:42] There's a list of other great speakers that you'll want to check out as well. If you are interested in attending and seeing some of the great conferences, you can check out NSSpain.com but you can also use the promo code EmpowerApps to get 10% off. So you have no reason not to attend this fantastic conference again, that promo code is empower apps, E M P O w E R a P P S.[00:24:10] And get 10% off your ticket to NS Spain this year. So definitely check that out. Thank you so much for listening to the show, the list of conferences and the promo code for NSSpain will be in the show notes for this episode. And I look forward to seeing you remotely at these conferences this year. Thank you again,[00:24:33]Speaker Schedule End[00:24:33] it sounds a lot like watch complications in a lot of ways, like from what I've heard from people who do watch complications, like essentially is moving. It's it's doing the same thing except on the iPhone home screen. And like, I like you use the term glanceable cause that's exactly what it is. It's like, I just want to get all the information I need quickly by just looking at my home phone screen.[00:24:55] Heidi Helen Pilypas (guest): Exactly I will say like with watches, like I find like all the little apps, like you still have to open them to get lots of information, but I find that. Widgets on the home screen are a lot more easy to look at on the iPhone. [00:25:14] Leo Dion (Host): Right. I agree because like the weather on the watch or temperature, for instance, it'll only tell me the temperature right now, but I'm actually more interested in the forecast.[00:25:23] Whereas the weather widget on the phone, like actually give me like a graph to see, Oh, Hey, this is sweater. This is sweater, weather, this isn't shorts weather, which is what would I really care about when I'm looking at the weather? So, yeah. That's really interesting. Have you worked with any apps that had a web interface or an Android interface and you had to like deal with the hurdle of having to communicate the differences with iOS versus.[00:25:56] The web or versus Android, we kind of touched briefly on Android, I guess, but like, as far as like, how would you explain to somebody what the big differences with iPhone apps designing those as opposed to designing a webpage? [00:26:11] Heidi Helen Pilypas (guest): I have worked with one Android app actually was the first thing I started with, with my designing UI journey.[00:26:22] Even though I don't own an Android phone. So that was a bit challenging. Like I have an iPhone, I read the guidelines from Google's material design, which helped me get a big understanding about what's available in the operating system. I think. It is important to know. There are differences between Android and iOS and web.[00:26:47] Like you can't just take a website and have it look exactly the same on the iPhone or exactly the same on an Android phone. You have to consider, you have to consider what the differences are and what is the best experience for the user of that device. Yeah, [00:27:07] Leo Dion (Host): it seems like a lot of companies and businesses, they just want to take the shortcut and we constantly get this question about like cross-platform tools.[00:27:17] Like I just want to build it once and have it use everywhere. And I mean, it's okay when you're first starting off, I think, but like, if you really want a good looking app, Building it natively and designing it for that native interface is always like the best guideline to follow in the long run. It seems like, you know, even on the desktop, you see this with Slack, for instance, where it's like, it's all built in electron and it looks the same, but it has its own little quirks and ways of doing things like that could be a headache, honestly, for, for some Mac users.[00:27:53] Heidi Helen Pilypas (guest): You want to do things that the user of that operating system is familiar with. You don't want to make people have to relearn how to interact with everything. So iOS has navigation bars and tab bars and tool bars you don't want to suddenly redesign the whole way that is done in a way that isn't familiar to people.[00:28:18] Leo Dion (Host): Ironically, like on the desktop, I'm a cheapskate. And I use gimp and Inkscape for like graphic design right now, but I'm, I'm willing to spend some money, but I haven't found the ideal desktop app yet. And like those apps, like they use some cross-platform stuff. It is a mess to like, like half of the keyboard shortcuts work or they work differently and they're all built on this, like cross-platform layer and yeah, they're graphic design apps, but they're, I know why people spend money on graphic design apps because these ones are just like, The interface is totally not matching with the pattern that you would expect on that less.[00:28:57] So, yeah, I need to, I, I need to spend some money on sketch or something cause yeah. It's it's okay. It works. Okay. But I could use a better app. [00:29:06] Heidi Helen Pilypas (guest): I definitely highly recommend sketch. I've been using it for several years. [00:29:11] Leo Dion (Host): It seems like that's been the most popular one. What are some other mistakes that you've seen teams make, or maybe you've made mistakes that you've made that you wish you knew about earlier when it came to like building an app with when, when I'm talking about is like, when you've tried to like communicate different ideas or built concepts between you and whoever you're working with on an iOS app, [00:29:37] Heidi Helen Pilypas (guest): one mistake is a lack of communication.[00:29:40] And an example of that is. Just say I mock up a design that I would like implemented. And then when I get a beta to test the app, I find things I completely different, not how I like laid it out or not using the specs that I specified. And what would help with that is for the developer to say the design of.[00:30:12] For instance, something like, I wasn't able to do this because of platform constraints or I'm not finished yet. I'm still, I'm still going with implementing this or even just consulting the designer before doing certain things. So they. Know what you're doing and don't freak out when it's changed. [00:30:36] Leo Dion (Host): I think another thing is communicating with the designer.[00:30:40] Not necessarily just that it won't work, but sometimes yeah. Communicating with them that something is very customized or like that's not the default behavior. It's going to take X hours for me to develop this specific thing. Because I think to a lot of designers, they don't realize like what exactly is built in and baked into iOS and what is like really customized that they may have seen in a really like, Popular or well-designed app.[00:31:09] Right. You know, for instance, like you said, with, with the with the action button, right. That material design has like, it's going to take a lot of work or you're going to have to import some third-party library and it's, it's going to be a headache to maintain and I think it's helpful that those considerations are communicated with the designer.[00:31:28] Heidi Helen Pilypas (guest): Yeah. It's very easy as a new designer to not necessarily respect the platforms, guidelines. Or not know what will and won't work, but over time you actually do learn and do come become more familiar with it. And a developer and designer can both help each other by communicating that, like what works well from the platform.[00:31:55] But even if you do know the rules or guidelines, it is good to know. When maybe you can break them is first of all, good to understand them. But at times you can break them, you can actually do something custom. And that comes back to your goals as well. What you're trying to achieve, like maybe you really want to delight users and blow them away with a really unique experience.[00:32:22] Maybe you want to remind them, like we do in Capsicum of a paper notebook. However, even when I say that, like, There's certain things that when it comes to digital that are different from real life and are hard to convey. And it is okay to have controls that don't remind people of paper as well. Like you just have to know what your goals are and what you're able to achieve with what the constraints are as well.[00:32:54] Leo Dion (Host): One issue that I think designers can run into is designing everything like as customized as possible, but not designing it in a consistent way. And I've seen this idea in, from web design folks about like atomic web design. I don't know if you've heard of it, but the idea of where like, You design it like a bullet or a button or a radio button or a checkbox and as add-on essentially.[00:33:20] And then you build molecules, which is like a whole like list or checkbox list. And then it grows from there. Essentially. Have you seen anything as far as like an iOS design where you have this idea of like, Keeping consistency by designing specific features, obviously like Apple has made it pretty encourages a much more default design, but like what have you found?[00:33:44] Has there been anything like this atomic design idea, which helps with consistency and your iOS app? [00:33:51] Heidi Helen Pilypas (guest): So atomic design can work with iOS because it's a methodology that is for all user interfaces, even though. The author of it is a web designer himself. So I have been reading about it in preparation for this podcast and learning little bit about it.[00:34:14] And I will say that when it comes to iOS and working together with a team. On an iOS project that a pattern library helps. And I believe that is something that Brad frost covers with atomic design. So a pattern library is like components that you use in your design when you design something or even work in a team of multiple designers, you don't want.[00:34:44] Everything to be designed from scratch every single time, because that's going to lead to inconsistencies. You want to, you want to have like a system that you can refer to so you can use a pattern library for that our design system is even larger than a pattern library. Like a design system includes more than just your components.[00:35:10] Like a design system might include like, Colors in my include descriptions of why you're doing things and where you're using them. It's a lot more documented. But anyway, going back to a pattern library for my projects, I use symbols and sketch, which are reusable components. And like I mentioned earlier, I use a third party library from Apple that contains a little of their standard UI components.[00:35:43] And I do aim to use system controls where possible, because they do require less work to implement and users are more familiar with them. And I, I create custom UI when it adds linked to the project or it meets a specific need. And then I export my designs to Zeplin, which is a software. That both me, my developer used to help with collaboration.[00:36:11] It has tools to inspect the design, like spacing and sizes. So you can find out what the designer wants when implementing it into design to make it consistent. And you can also export individual components like a button. Does that plan. So that helps other team members know what the specifications are.[00:36:35] And you, you could build your pattern library in Zeplin if you wanted, but there's probably many other tools and places where you could build them. [00:36:44] Leo Dion (Host): I'm really curious if like Swift UI is going to make it easier to create like pattern libraries. Cause then you could codify everything if you were ish worked with, well, I guess more ish worked with Swift UI.[00:36:56] Heidi Helen Pilypas (guest): Yeah. Ish has been working this with SwiftUI we're actually. Rebuilding Capsicum in Swift UI. [00:37:04] Oh, [00:37:04] Heidi Helen Pilypas (guest): all the way I believe so. [00:37:07] Leo Dion (Host): Wow. What is he talked to you about as far as, like how that might change UI design for the both of you? [00:37:16] Heidi Helen Pilypas (guest): He has let me know sometimes that certain things aren't possible with Swift UI yet.[00:37:22] So I might have to adapt my design sometimes like Swift UI. Is evolving. So it adds more functionality over time. [00:37:33] Leo Dion (Host): Have you been brave enough to look at any Swift UI code yet? [00:37:37] Heidi Helen Pilypas (guest): I have actually, I actually started doing a hundred days of Swift UI from Paul Hudson on his hacking with Swift website I've gotten about 30 days into it.[00:37:50] But I'm. Also I'm a little bit out of touch at the moment, cause I've had a lengthy break while I work on redesigning Capsicum. And I really need to get back to it too. [00:38:02] Leo Dion (Host): What's your initial feeling about designing with Swift UI as a designer? I guess my [00:38:09] Heidi Helen Pilypas (guest): initial feeling is that he makes it. Easy to build out the interface.[00:38:19] He has modifiers that I can use to specify things like padding that makes it easier to build things from what I've heard, because prior to , it was a lot more complicated to write code and. It required a lot more lines and a lot more knowledge to do something and what you can do with Swift UI. [00:38:50] Leo Dion (Host): Yeah, I agree.[00:38:51] I think it's. Brings the ease of like HTML editing to building iOS interfaces. And like, I don't know if you've done worked with any of the preview stuff that you can do in X code, but like, you can actually see what you're doing source of truth is, is the term I've heard. Whereas like, Doing it in Swift or objective C doing your UI.[00:39:15] That way is a pain in the neck. And then with storyboards or zips, you can never do it textually. You had to open up and do it in the GUI. And that was always a pain in [00:39:24] Heidi Helen Pilypas (guest): the neck. Yeah, no, I haven't used the old system and I think for developers who know that the old and current system, since that's still.[00:39:39] Still an option and very much encouraged to use as well. Learning's 52. I can still be a learning curve and still require lots of patience skills to learn. So if you come to it brand-new without any coding background before doing it, I think it's a good place to start. [00:40:05] Leo Dion (Host): Have you talked about putting.[00:40:08] Capsicum on the Mac. [00:40:11] Heidi Helen Pilypas (guest): Yes. We have one thing with using Swift UI and having a really good iPad is that that can come over to the Mac really easy. [00:40:22] Leo Dion (Host): So it sounds like you're, you're thinking of doing Catalyst, I guess. [00:40:25] Heidi Helen Pilypas (guest): Well, I don't know if we need, need to use Catalyst or not, because I think I've read that.[00:40:34] use Catalyst for apps that, that aren't pure Swift UI, but with Swift UI, you can, you should be able to work on the Mac. I really, yeah. [00:40:44] Leo Dion (Host): You're you're exactly correct. Yes. [00:40:47] Heidi Helen Pilypas (guest): Depends. I think on, on what our code needs in, as we get further along, ish would definitely know more about that than me, but our first focus is on.[00:41:03] Like really getting it to look good on the iPad. Because even though when we originally started working on Capsicum, we really wanted it to be good on iPad because that is the size of a notebook. Typically it's larger than an iPhone. Like I still focused on iPhone designs when I was. Creating mock-ups on my computer and I didn't have an iPad right.[00:41:30] At the beginning of us working on it either. So it was something that I didn't prioritize as much, but now as we're really. Working on a big remake to make it even better. It is something we're prioritizing it's like Ish is always wanting to prioritize. But I, I was, I was hesitant one and I was taking my time with that.[00:41:55] But now that's really what we're working on [00:41:58] Leo Dion (Host): before we close out. Was there anything else you wanted to mention as far as some of the new stuff that we have in iOS 14? [00:42:06] Heidi Helen Pilypas (guest): Yeah, there is actually. So with iOS 14, As I mentioned previously, there are widgets, but there's also a bunch of other new things.[00:42:15] There's new date pickers, menus and page controls that are quick to scrub with your finger. There are also 715 new SF symbols. So SF symbols are symbols. Apple provides that integrate with the San Francisco font, which is the system font on iOS. [00:42:35] Leo Dion (Host): I love SF symbols. And now they have it working in MacOs as well, which is awesome.[00:42:41] Heidi Helen Pilypas (guest): Yeah. I really like it too. It just, it just makes using symbols in your apps so much more consistent because they're scalable to different accessibility sizes as well. And they, they work next to text labels. Really well. So they also now support multiple colors and they have several out of the box that work with multiple colors and they also have more localized symbols as well for languages that have some different script characters and also left to right text support.[00:43:23] And then on iPad, we also have introduction of the sidebar and multiple [00:43:28] Leo Dion (Host): columns. Yeah. That's something to think about the, the left to right. And right to left text and dealing with internationalization. I think people should consider that when they're designing their app is what it's going to look like on other languages.[00:43:44] Exactly. Well, thank you so much for coming on Heidi. Really appreciate it. Where can people find you online? [00:43:51] Heidi Helen Pilypas (guest): People can find me on Twitter at Heidi "underscore" Helen. I also have a website, Heidi hillen.com don't have much on it right now, but hopefully over time I will have more blog posts on there. And more examples of my work.[00:44:11] It's just kind of. At the beginning of my website at the moment, you can also check out my apps, Capsicum there's a website for that Capsicum.app. And also my app. When did I, I tracking when you do things that is, when did I, whendidi.app? And they're both available on the iOS app store, not available for Android or any other platforms at the moment.[00:44:40] Anyway. Yeah. [00:44:42] Leo Dion (Host): Well, thank you so much for coming on we'll have links to that in the show notes as well. Folks can find me on Twitter at Leo G Dion. My company is bright at digit. If you could take some time to add a review to Apple podcast or Google. Podcasts or Spotify I'd really appreciate it. And if there's anything that you want to talk about, or you want to hear more about, please let me know, send me a DM on Twitter or send me a tweet and let me know what you think really appreciate it.[00:45:21] And we look forward to talking to you again. Thank you.
★ Support this podcast on Patreon ★
10/17/2020 • 45 minutes, 29 seconds
Understanding Git with Ben Chatelain
Guest
Ben Chatelain (@phatblat)
Github @phatblat - for great commit message examples!
😎Some Cool DJ Sets 😎
YouTube Video - https://youtu.be/C0Ymu7vx_koRelated Episodes
Episode 29 - Managing iOS Development with Peter Witham
Episode 46 - Developer Community (Part 2) with Dave Verwer
Episode 64 - A Very Remote Year with Jacob Gorban
Related Links
A Brief History of Version Control : Codemash by Brian Meeker
MS Visual SourceSafe 👴
CVS 👴
Level up Your Git Commits with Gitmoji!
Tower
Pro Git Book
Gitflow
Trunk Based Development
mas - A simple command line interface for the Mac App Store
Dangit, Git!?!
`git log -g` (a better reflog)
Tip: always delete topic branches after merging a PR (or have GitHub do it for you)
Ben’s git shortcuts as fish shell functions
amendne - amend the last commit, reusing the existing commit message
bundle-pull - transports a dirty working copy from one machine to another.
git_bundle_create - creates a git bundle by stashing a dirty working copy
ignore - adds file paths to .gitignore file
lg, lga - minimal yet pimped out history graph
new - show new commits received after a pull
pop - remove the last commit, but keep the changes in the working copy
publish - push a new branch to a remote
review - inspect the last commit
rewrite - uses filter-repo to correct an author email typo (destructive)
scrub - uses filter-branch to delete files from history (destructive)
root - prints the path to the root of the local repo
stash, stsave, stlist, stshow, stpop, stdrop - functions for working with stashes
suri - submodule update recursive init
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsGit Tips and Tricks
Know the Git Terminal Command
What Xcode can help with
How Tower Helps
Gitflow vs Trunk Based
What are the different ways to branch
merge vs squash vs rebase
Dealing with Git Submodules 😱
Merging Xcode Projects and Storyboards 🤬
Creating great commit messages
Git Terminology
How is a Pull Request useful
How Branches work in Git
How to use Tags in Git
What is a Pull Request draft?
What is a Git Stash?
What is Gitmoji?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
10/10/2020 • 56 minutes, 26 seconds
A Very Remote Year with Jacob Gorban
Guest
Jacob Gorban - Twitter @jacobgorbanApparent Software
Youtube Video - https://youtu.be/wKGEc-9YFGsRelated EpisodesEpisode 29 - Managing iOS Development with Peter WithamRelated LinksTupleSponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030LinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Check out OrchardNest Today:https://orchardnest.comRemote Work Guidelines
Dealing with Communication
Slack Guidelines for Channels and DMs
How to stay in touch
Scheduling Meetings
Remote Work and Software Development
Mentoring Junior Developers
Encouraging Communication
Doing Code Reviews and Pull-Requests
Organizing Testing on Devices
Using the right tool for Project Management
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)TranscriptLeo Dion (Host): Thank you for joining me for another episode, a empower apps. I'm your host, Leo Dion I'm with Brightdigit specializing in development in the Swift space and Apple space as well. Today we have with us, Jacob Corban. Hey Jacob, how are you doing? Jacob Gorban (guest): Good. Thank you. Leo Dion (Host): So Jacob, I've known you for, I wanna say like the first time we met would have been like release notes, maybe. Did you go to Release Notes? Jacob Gorban (guest): I've been to all of them. Yes. Leo Dion (Host): Yeah. That's probably the first time I met you back in 2015 back in the good old days when we actually like travel and go to conferences and stuff. I miss those days. I've done. Gosh, two conferences this year that have been I've spoken at that have been remote.I've got. Three more conferences actually, by the end of the year that I'll be speaking at all remote, all from the convenience of this wonderful home office here, which has its advantages. Assuming nobody's home along with me, who's little and requires a lot of attention. I think we're kind of in the same boat actually.There's there's been an adjustment for me, certainly because I have a lot of family members who live in this house. I don't know about you, but like I've worked for mostly for 12 years now. 10 years almost. So what's, what's new to me this year has just been dealing with like me and my wife scheduling and taking care of the kids while we're working, which you know, that's the big curve ball this year with COVID and everything with 2020.How about you? Has there been any big adjustments working remotely this year? Well, Jacob Gorban (guest): I was in this like a situation kind of as your, that I was already working remotely. I've been an Indie since 2009, like full-time Indie. So like on this front it was fine. Like I didn't have to adjust to working remotely.But as you, as you have, like, I have like my kids and there's like a school age. They're not very small, so like it's easier, but. No, they were at home and most of the time I have my, one of my kids at home right now. And I could ask him to be quiet. It's like for the next door. Well, while we're your core is not bothering me with anything.So there's none of that. It was like, it was fine. Leo Dion (Host): Yeah. How long have you been an indie and kind of tell us a little bit about some of the stuff that you've been making over the last 15, 10 years. Jacob Gorban (guest): Like I started dabbling in Mac development on the side, like how did they job? In 2005, I got my first Mac and I was already like a hobby developer.And usually when I kind of tried the new operating system, they like to try those. I would try it to see how do we develop for those. And, and so I tried to do something for the Mac, which I had like almost like an app we try on different platforms to do like you know, my go-to project.And I did that. And eventually on the Mac, I like the, like the, the software environment. I started to learn about cocoa and how this works and all these new concepts that are in cocoa and. I also started to lag the you know, the community of the cocoa developers. So at that time they were very open and helpful and they could see that all people do business with that.And that kind of, Oh, I never considered that really, that much like doing software and, and selling them directly. And so this first app that kind of, it grew into like the first app in the business. This is what's now one of my Mac apps ImageStreamer. So now it's in version of it's version four, but you know, back then was the 1.0, like the ugly 0.1 0.0.So I would continue to studying on the side. And by 2009 it was still not earning anything. I'm not sure, but I found that like part-time partner and we started to work on the new application, which is a CashCreator, which we also kind of still have and developing the second version of and I decided to try and make it like indie full-time.And I know gave my notice at the day job and, and it's been a pretty, like a very luckier ride, but kinda, it was, it was fine. Like, I don't know, maybe I made less money, but I had a much more fulfilling and kind of relaxed life then as a day job, I guess. Leo Dion (Host): Yeah. I'm in the same boat - going independent.Has been one of the best decisions I've made in my life and just there's ups and downs financially. Most certainly. But like I did take that over the flex, the flexibility, and like just the lifestyle over, you know, it's worth the benefits quite a bit. Yeah. Jacob Gorban (guest): Yeah. For, for me, I had like such a, I had a long commute.I had a, you know, pressure. I didn't see my family. So like all these, like. Again, so many lifestyle benefits from going into that kind of adapt ways all day, like financial promise, like we could have, or like possibly now I do work also consult for a, for a different company remotely as well. So my time is split between like managing my own products, my own team, and And doing the consulting work.Leo Dion (Host): Yeah. Yeah. Same thing here doing the consulting work and doing the independent stuff. SponsorshipHey folks. So here's the thing you're probably thinking to yourself. I want to build a brand new app or maybe you already have an app in the app store. I think now is probably the time you're going to want to really optimize that app.In the app store. What I mean by that, make it easy for people to find it. And for people to download it. It's one thing that you can build this great app for the iPhone 12 or iOS 14, or watch at West seven. It's another thing. Being able to help folks who have their brand new iPhone or their hand me down, being able to find all these new apps.And this is where AppFigures really comes in there. Give you everything you need to do this all in one place. So if you have a really good idea or an app idea, and you want to see how many people are searching for that, I figures is going to be your spot. If you already have an app in the app store, and you want to see what words you need to use or what terms you need to use so that people can find you easily.AppFigures is for you. And it's really easy. All you have to do is use their promo code and power 30, 30 to get 30% off for the next three months. That's it. That's on asking a lot. And AppFigures is that they don't just have this really great universal analytics dashboard. They also provide a lot of other great apps, store tools for optimization, and that's really the name of the game.That's going to improve your visibility and that's going to help you find more users. And figures has more than a decade of providing mobile analytics and insights. And they also have this new tool called the competitor intelligence dashboard, and that allows you to track competitor downloads and understand what strategies you're going to use so that you can grow your bottom line.That's the thing. You can have a great idea. You can get users. Maybe by personally reaching out to them. But if you can improve your visibility on the app store, that's really the name of the game. So go ahead, head over to appfigures.com to try and figures for free. If you like it, both the new and existing customers can use the special code, empower 30, 30 to get 30% off for the next three months.So go ahead, give it a shot and let me know what you think. And if you need any help, try out some of those new app tear downs that Ariel has been doing. They've been fantastic and they've been really providing a lot of help to me. And I think to a lot of folks to what they need to do to get their app store apps up and working.So go ahead and try it out with the empower 30 30, you get 30% off for the next three months, or try the link in the show notes below. Thank you AppFigures for sponsoring our show.End SponsorshipSo has any of your clients or anybody that you've worked with have had to adjust - not necessarily for you, but for the other folks that they work with have had to adjust to dealing with remote teams and managing a remote team. Jacob Gorban (guest): My client knows. So because I have one client and I've worked for them for the last five years.So it's a very kind of consistent work environment and they are mostly remote as they already were. So unless maybe, I don't know, maybe they're a sales team, which was kind of had a local presence. As, as far as developers that were already to remote. So I guess they had to do like, just again, only if you adjustments, Leo Dion (Host): that's good to hear cause I think like some companies have had a really difficult time adjusting to being remote this year. What are some of like the biggest lessons you've seen from other teams going remote or having to go remote?Jacob Gorban (guest): I think the biggest lesson is that it can be done. Right. So I think they many companies like wouldn't believe right. They can work remotely. Like there would be more downside than upside, I guess. Leo Dion (Host): Yeah, it certainly seems like this year it's accelerated. It's been going on very slowly, as soon as technology caught up. I just, I remember like 20 years ago when we had all the situation with the airport, it's after September 11th, like conferencing, video conferencing became this big attraction and then it kind of died out.Whereas like this year, a lot of companies have accelerated and found a lot of benefits do it financially, specifically when it comes to real estate to not having to have offices for folks, but it seems like this year it's really accelerated that that move to remote. Jacob Gorban (guest): Yeah. I think one of these examples is like maybe one's the largest Canadians, software companies, Shopify.Right? So they were all like in, I think Ottawa region if I'm not mistaken and so again, with the COVID situation, so people start to work from home. They gave people like, you know, some money to, you know, like buy a chair or whatever, like for the home office and you know, a couple of months. And they said, Oh, we will, that will be what they call like the digital first company.Right? Like, so like the new hires we will default to working remotely and maybe, yeah, maybe they can, there was another company in Canada in the news of that. Like, I think the largest software company, that's going to answer a price company. And they said, Oh, we will just, yeah, like many people will not return home and we will just, you know, sell one of our buildings.Leo Dion (Host): Right, right. That's that's the thing is like the ability not to have to pay for rent on a building is a big attraction. So what do you think are some lessons that folks should come away with when it comes to like dealing with a remote team? Jacob Gorban (guest): You know, remote work is it's all about communication, right?So the communication style changes. And if you, when you work in, you know, at an office, you can, you know, just knock on somebody's door or the chair, right. Or the backend, and, and ask a question kind of remotely it's different tools. Right? So the first of all, The company or the team, right. They have to decide what tools they use for communication.And for many as it was already like, you know, maybe using Slack, maybe it's like one of the most popular for a smaller companies. And this is what kind of we're using. It appears in software as well. So you have to agree on like what the style is. Well, Communicating right. How you respond and, and, and have expectations about like what's the reasonable, like time to, for people to respond.Or it's kind of, it's a big topic, but like communication. Right. And I think the larger the company, the more, I guess, guidelines, the company should have like the, either the HR people or the, you know, the. The leaders of the company set some kind of guidelines for like how people should talk on Slack, like how to respond and and what to expect.And like my clients who are a bigger company than mine. Yeah, they do have that and it helps. Leo Dion (Host): So what are some, like, what do you mean by guidelines? Exactly. Jacob Gorban (guest): Well, it could be first of all. Okay. If you have multiple channels. So like what to post on each channel, if it's like you need to responds then again on Slack, you can have these like emoji responses.Right. And so like, maybe even just know that you've seen like somebody wrote, maybe it's an announcement. So just maybe put an item, like an emoji that you've seen this announcement. Right. Stuff like that. Yeah. Leo Dion (Host): Like a reaction emoji essentially. Yeah. And I think like for me, the, the guideline has always been, is like, Email is usually the slowest form of communication.Like that's something that you're expecting like a few days, then you have the emergency. Of using like something like a text message personally, texting somebody, if you like, if it's really, really important. And to me, like Slack is somewhere in between where it's like, you want to get a hold of someone in a conversational manner, but you don't want it to be as slow as email, but it's not an emergency.And that's like kind of where Slack or Microsoft teams is. The other one I've seen. As far as like communicating with folks, I am on gosh, like 20 slacks, at least, I don't know how many you are, but it's like every specific agency and every specific geographical area technology. And then of course, every time I pick up a new client, they're on their own little Slack workspace.So I feel like I've become an expert in Slack accidentally over the last few years. The other thing I was going to say is like using mentions in a healthy way and making sure you are using DMS and channels properly. So what I mean by that is like a mention is a good way to get ahold of someone who's just not going to be like babysitting a specific channel in Slack.And the other thing is like, some things could be DMS, but if it's something that could be helpful to a whole team, it might be worth putting that in a specific channel. That's. Let's say you have Android folks or iOS folks. Like if it's something to the helpful to the whole iOS team, you may want to ask that question in the whole iOS team as opposed to DMS.Is there any other slick Slack tips you've run into? Jacob Gorban (guest): I think this thing like about posting in the correct, like channel or the am is the important. Like decision for everybody to make. Right. It's similar to, like, you wouldn't want to invite everybody to a meeting and kind of waste their time if they're not related to the questions you're asking.Right. And this may be what leads to sometimes like proliferation of Slack channels, like even on smaller groups. Right. Because maybe somebody is No. I know like a manager maybe needs like, you know, both see the marketing and the development side, but maybe the you know, the marketing team doesn't necessarily want to see the development chatter and vice versa.So yeah, this kind of etiquette, I think becomes important and not mentioning if you don't have to, like, or if it's not really origin. And yes, I do feel kind of the same about like the email versus Slack versus text message kind of urgency or like hierarchy. So Slack is, yeah, I would like, like to have a reply relatively soon, but it probably, yeah.Today or like the next big start of day. Right. I like, especially if you're working like across time zones. So in my team I have a. Some people are like basically the same time zone, but I have a developer in, in Poland. And so you know, and I mean, I'm in Canada, so we have our time difference.And so that's fine. Right. Let's say if I'm messaging him and he's already in those working. And so he replies the next day and it's fine, right? Same for me. Leo Dion (Host): I think that's a, that's one of the things, time zones, definitely something I've had to get used to as I've worked with more people. And just being comfortable with that, but like this idea of asynchronous communication you've talked about like how, when you're in a workplace, you can just tap on somebody's shoulder or just go to somebody's cube and say, Hey, I got a question for you.You really have to do that with Slack. And you have to have like a healthy attitude of knowing that somebody is not going to like message you back right away. And. I like that. Cause I always hated being interrupted. In an actual office, I always found that to be unhelpful. And I think a lot of companies, they just don't like that.They want to be able to get ahold of you all the time and constantly interrupt you. And I think that's, that's I I'm hoping that the remote team thing. Teaches companies, good habits communicating in an asynchronous manner, because if you really need to like talk to someone and you really need to like meet with someone, and that's what scheduling meetings is really about.I don't know how you've found it over the last few years. Jacob Gorban (guest): I like Apparent Software software. I do try something different now. So like the regular timing for like meetings and whatnot, it happened like we had like the weekly meeting where you have a small team. Right. So it kind of, we all get on the, yeah. On the call and it's like, you know, the development, the marketing, the design, we kind of all, I'll hop onto the call and and we'll have our like weekly status and decisions and kind of task for the next week.I did find, well, sometimes it's just. Hmm of takes too long a time. So like if somebody gets either stuck on like, on something, or they're not, you know, banging their head and they're just afraid to ask like, like again, in a different environment, maybe they would just, you know, come by and ask and say, Oh, I have difficulty with that either because of Slack or again, maybe like personal styles, people will sometimes keep kind of to themselves and kind of keep trying to solve the problem instead of like, asking for help with where.This could save a lot of time. And so I did ask for now, like for like from developer and designer too. And kind of, we try and get an experiment where they will like end of day will, you know, right in the, okay. I've been working on that and then maybe I'll be working on that tomorrow. And then if I had any difficulties or the difficulties, Leo Dion (Host): it's basically like a standup, that's what it kind of sounds like.Jacob Gorban (guest): It's like a daily standup. Yes. But instead of like in the, in the morning, especially because again, we're at different timezone and everybody's remote. So like we don't do it like set timers. So people just usually that candles their day, whatever time to decide that we'll kind of say. Okay. I did that and I, I see where the developer, so like my developer, she's like a junior developer, so, you know, I help him, like, I'm mentoring him.And and thus you know, like I can see, Oh, like maybe he's stuck here or maybe he says, I'm stuck here and I can help it more, like quicker than previously. He was sometimes like, wait several days before it kind of, I don't know, maybe mustering the courage to ask or whatever, like it might be, he didn't feel.Comfortable asking. And so I wanted to encourage, encourage that it doesn't necessarily mean that we'll reply, right, right away. Maybe even get maybe a man maybe in a different time zone, the, or maybe I'm busy with my client's work or whatever, but at least it will be, you know, it will not take more than a day or like probably several hours to get to the point.And, and so far again, this experiment to find it, it helps It helps me to understand again, where am I? Kind of, my team stands on, like, especially with regards to the weekly tasks or whatever. And with the development it's helps me help the developer. Quicker and, and that's also kind of run the project maybe with Quaker as well.Leo Dion (Host): That's a really good, good point about the junior developer. How do you create an encouraging environment for them to ask questions? Because I can see how somebody might be intimidated by that. Especially a junior who might think, you know, Oh, they're not going to think. I'm very good if I ask these questions.So I should just keep my mouth shut. Waste time. Jacob Gorban (guest): Yeah, we'll just as we started and, and this developer did work in a different place. Like for several months, like, as his first job where he wasn't encouraged to ask for help and it was kind of like, I guess, reprimanded for it because he was wasting other people's time.And of course it wasn't very helpful for him. And and when w when we started to work together, it was very kind of, you know, I was encouraging that right from the start saying, you know, if you have any questions, like, you know, asking me and like, I, I never reprimand or anything. Right. Like, I, I try, I try to explain, I tried to explain to the, I will ask questions.So like, he, he will try to get to the answer by himself. So like he learns how maybe like to think right. Or how to use the tools or so encourage the learning. But I think it was, he was maybe still, maybe just. Trying to learn by himself. Again, he's a self-taught developer, so, you know, I'm a self-taught developer, so it kind of makes sense for me.Okay. I was banging my hands sometimes, like we know for hours or days to find the, to find the solution to something, but. Sometimes it's would have been nice to have a, you know, an experienced developer to ask in the beginning, the beginning of my career. And especially like, you know what, there was no stack overflow and then no slacks for like different topics.Right. So punch cards, right. Well, not that far away, but, but you know, I've used tapes and like a lot before the Mac, right. I was using, yeah. I don't think discs is that the expectation we had before this, before the diskettes and floppy disks, before that, I meant like the tapes. So I just encourage that.And I think the, now with the, like the kind of the daily stand-up kind of reports, which sometimes it's like, she would just say, Oh, I'm stuck home. Right. And this would be kind of the report and then kind of try to help him and and kind of guide them to the solution. So I think this helps, right, because just, just to save everybody's time. Leo Dion (Host): Yeah. And I think like daily stand-ups are a great way to encourage like that kind of communication. Cause he's forced to basically say what he's stuck on and also realize he's not the only one who's stuck on stuff and has quit pending questions. Jacob Gorban (guest): Yeah. Yeah. Yeah. In this case we don't do that.Like. Publicly. So they, they just each message me, but especially because what, okay. One is the developer one is a designer, right? So like they don't necessarily kind of interact as far as like their tasks. Don't. Don't meet. Usually unless the designer works specifically like software, then maybe it would be, it would change, but it's not the case.Now. Now the designer works more with the marketing Sponsorship (Linode)Leo Dion (Host): Folks, I wanted to let you know about Linode. Linode is one of my favorite cloud server tools out there. As far as hosting is concerned, you may have seen my latest project, orchard nest, where I have built a website completely in Swift. For showcasing some of the latest and greatest blog posts, podcasts, and videos in the Swift community.And that site is completely hosted on Linode. In fact, I can tell you that the server is in Newark, but they have servers all around the world, everywhere from Toronto to Mumbai. So you can set up anywhere or you can set up load balancing and share your site everywhere as well. But it has been a really fantastic tool in building Orchardnest.And really it does a great job showing me like various CPU usage and IP for traffic, IP, six traffic, disc IO, et cetera. It's been awesome. And it's been consistently running. Great. And I think it's a really great. You get a lot for your price, especially for developers who really want to build stuff hands-on and get the developer tools.They need to start their brand new server project. So go ahead and give Leno shot. The link to Linode is in the show notes below. Use that to let them know that you heard about Linode from the show. They've been awesome. I've really enjoyed hosting orchard nest on. Linode orchard nest.com. It's been fantastic.They have all sorts of great tools. Get yourself a nice, simple Ubuntu server and start working on that vapor application you want to today using Lin ode. Again, use the link in the show notes below to let them know you heard about Linode from us. And hopefully you can get started on your new project today.End SponsorshipWhat are some other big challenges that you've seen with like developing software and remote remote teams? Jacob Gorban (guest): I guess the code review. Right. And I know today there are tools for that, that kind of should help with that, but I'm still didn't. Like, I didn't try any of those. So with the developer, it's usually either we just, Oh, you know, open, you know, I would open on my Xcode or he would paste a bit of code and I will kind of go from there and local again, like open the project and Xcode then see what's there and kind of guide him this way.But you know, like remembering from my you know, day job days and Yeah. Lucky even the university, like having somebody like right by your shoulder, like where we actually like looking at the same screen at the same time, like when, like, you know, one person navigation of the other kinds of, you know, talks with checks, this kind of was helpful and I don't use any of those tools yet. Leo Dion (Host): Yeah, I know, like couple's a big one. That's been in a lot of circles I've seen people have been raving about. There is some stuff with like get hub and get lab, for instance, where you can do like code reviews within a poll request. There's things like that.That's good for like asynchronous, like, Oh, I want to review a code, but you still like, like you're saying kind of, you need to have like a call, like a phone call or something where you can like, say, Hey, this is exactly what I meant about like, How you need to change this specific architecture here and like go over that stuff.And I kind of, I, yeah, I completely agree with you, especially with like a junior developer, they need like the handholding essentially to know like how to fix some of the issues in the Jacob Gorban (guest): code. Yeah. Yes. And the simplest would be just screen sharing. So we send them let's go like a Google meet or something and share this screen.And this kind of a simple, you know, like two people's share, looking at the same school, Leo Dion (Host): speaking of, Git and version control, what are some issues you see crop up with remote teams when it comes to that? Anything in particular? Jacob Gorban (guest): I'm not very like detailed about how to work with get Well, we do use get, and, and we do use branches and, you know, we merged them and and all that, but again, we're not a large team.Yeah. I mean, it still helps. And I'm trying to do like the, you know, the kind of like the version, not the version, like feature branches. It's I know it's always a struggle for me as well. Like how I tell me to do the commits. Right. I would usually not spend the time to like rebase and commit, but I will try to make.The best I can during the commits. Right. So I can, okay, this is a fixed thing. I fixed that. Or I added this feature. I'm trying something. Okay. I will try to commit that. But with larger features, something's complicated, right? If you need to like, develop a new feature that goes like, along with the UI and the, I know like the kind of like the backend and sometimes it's just all has to grow together.So I will just have like a work in progress commit, right. Maybe like end of the day. And not necessarily break this up because sometimes it's really hard to break up like a wide, like why it's fraught of development or why kind of you go across the whole, like cross-section of the app, let's say right?Leo Dion (Host): Yeah. We'll be talking more about actually in the next episode, I have Ben Chatelain coming on to talk about, Git, and Gitmoji is and all the different things people need to know about when it comes to git. So definitely you want to catch that next episode when it comes out probably next week.Jacob Gorban (guest): I'm make sure to listen. Leo Dion (Host): It's just such a deep, deep subject there's always like 500 ways of, of doing stuff even more than you just realize. So one of the issues specifically in the Apple space is dealing with like team management and developer teams and certificates and all that stuff.How do you deal with that as a, like with your indie team, essentially Jacob Gorban (guest): within the limits of what they ordered, they allow, right? Like the With the teams and development, it's pretty, I guess, straightforward, right? You are the developer, you add, you allow them access to specific apps. So the, the, the developer I have in Poland, so he works on like, Oh yeah, iOS app, we have called Socialite.And so he has the basically I call him, I called the rise. To not to commit dab to the, for review and to the app store, both he and the, like the product, like marketing person. She also has access to that Susanna with the provisioning. Yeah. You know, it's, it's always a headache. Like I never quite understand provisioning like 100% how this works and we just solve as it goes like, luckily Xcode became better with managing that for non-development devices. So this is fine for the Mac apps. I do the releases Leo Dion (Host): Are you in the app store? Jacob Gorban (guest): Yes, but okay. Both apps store and direct for the Mac app? Of course. Leo Dion (Host): What other challenges do you face developing like in the Apple space and still being remote team?Jacob Gorban (guest): Well, for me, like, again, In the Apple space, that was always remote. So like, I don't know the other way, but I would, I would think that like the larger the team gets and maybe like the, if you have like a QA, then, you know, like a remote team will have to have like their own devices. Right. Everybody's so like you cannot share maybe, you know, those devices and stuff like that.So that might be a, you know, a bit of a problem for like some teams that they have like to spend more on maybe on Monday. On the equipment for remote team, I thought them that I don't think there's anything like special about Apple development versus like other types of developments. Right. Because it's just because like for Apple, we usually develop for the devices.And so everybody has to have the devices or, or you have to, Oh, you have to ask. Right. So maybe if I have the you know, I have this kind of iPhone and the other person has like these kinds of I-phones and okay. Everybody has to you know test a little bit. Right. And this is like the other thing again, because there is no pool of devices in one place.Leo Dion (Host): And then the other thing, do you use any sort of continuous integration? Jacob Gorban (guest): No, no, no, we don't. We like just this such a small team and I used to have it at one point I used to have like an xcode server at like Mac mini colo. They changed name names, and they was using that for 'em. Oh, for one of the Mac apps when I was working with a different remote development team.And so I had this set up and then when, you know, this app has a test for the, like the data model and selected around the tests, you know, went into, so it wasn't the way helpful, but when they start working with a team and it was pretty kind of stable and just managing and paying for that, then they eventually, after maybe a couple of years siding. I disabled that account. I thought of maybe having something like that at home. Like but I don't know, like I'm still not at that scale where I see that as a, you know, as a problem that they need to. Leo Dion (Host): Right. So Jacob, before we close out, One of the biggest challenges. I think folks face, especially with asynchronous communication and such is, you know, we kind of touched on it with our junior developer, but how can you make sure that team members are spending less time like waiting for something that they're stuck on. And that work is constantly queued up. So that way, if there's something they're waiting on, they can always work on something else. What, what are some ways that you've found to like really help your team stay active? Jacob Gorban (guest): I can relate to the question because I was once, like on a different remote contract where I wasn't the situation where I would sometimes get stuck in, like I would finish my task and would not get the next task.And this was also acorss ocean, like my client was across the ocean, so I would have to wait till maybe the next evening for me. Yeah to get them that next task. And of course it wasn't very, yeah. You know, very helpful. Right. Because I, I couldn't build. And so yeah, in my case, like with my team what I'm trying to do is yes, I'm trying to make sure we have the tasks.So one thing is, well, we have these weekly meetings and like, we go through them and I would usually try to make sure I can, we have several things going on at the same time. Like if there's like smaller things. And so often. We will have like more tasks may be queued, kind of we can fit in the week. Right.But just, just in case something goes quicker. You know, people can, can go and if somebody is stuck on something, like one thing I get more. So maybe in like in marketing and design again, we have like a multitude of tasks and so like they can jump maybe to something else right now, like while they're waiting, maybe for, you know, for answer, I think designers that does that quite a lot.He has not necessarily, he's waiting for an answer, but he is just like a variety of tasks and he would split his time, I guess, based on his like preferences or mood or anything. Right. But at any case, like there's always enough task. With the developer, I think like one thing is, well, first of all, you can give like larger tasks, right?So like, just that they're not kind of finished like in the middle of the week and waiting for the next weekly. The other thing is. Is, what's kind of like, we talked about the word introduced, like the daily, right? Like, like the daily stand up for my job. Right. And this way, if they get stuck, then okay.Then to get stuck for a long time. And what helps with that also is for a development project, especially like, right. There's like they plan the projects, and, and like ahead of time and breaks into smaller tasks. Right? So like, again, if you take, maybe, I dunno, like either it's waterfall or agile, like whatever methodology you're using, but.Just just having like the tasks and maybe I signed them ahead of time, even. Right. And so like the developer finishes one. Okay. He knows this was the next one. What can I help with that is also have some kind of, you know, like a project management tool or or maybe some other things like tools. So like we use aSana mostly for both the design and the development.Okay. Sundays, maybe not like the first choice for development teams and, you know, people use the as are like JIRA, maybe like you hadn't the in the most like heavy case. And yeah, but you know, designers, don't like JIRA and kind of, it's not for, for that marketing and the sun is kind of, it's like a good middle ground.You can make us work for it. Like software tickets again, it's not as good, but you can make integrations or like find integration that integrate with you know, like backend tools if you need like Git or GitHub or anything. But we use it more like lightweight, but it has tools now that work well, like the timeline, and it's easy enough to use that.Like everybody. Like, it was like different contractors. I worked with like, everybody find this up, comfortable using a Asana. And so this is kind of the heart of the business. And so like the all long-term task and like the planning and the software, like issues or they like the sprints, we all manage that.Leo Dion (Host): Okay, cool. Thank you so much, Jacob, for coming on the show really appreciate it. Jacob Gorban (guest): No, thank you for inviting me. Leo Dion (Host): Where can people find you online? Jacob Gorban (guest): Well my personal account, like I'm mostly most active on Twitter and Twitter was like a godsend in the early days of indie development on the right, in the cocoa space.And like wherever I go to conferences, people you know, exchange Twitter handles. So mine is just the Jacob Gorbin's are just like the full, full name. I also, I right. Like, you know, through micro the blog. So like my personal home page, also like a gorban.org. Like my last name, G O R B a n.org.Okay. And the company is Apparent Software, but the domain is a apparentsoft.com. If people have any questions can reach us on Twitter. I am at Leo G Dion and my company is BrightDigit. Thank you for joining us. And we look forward to talking again. Bye-bye.
★ Support this podcast on Patreon ★
10/3/2020 • 38 minutes, 1 second
Apple Watch 2020 with Steve Lipton
Guest
Steve Lipton- Twitter @Steve_Lipton
LinkedIn
MakeAppPie
iOS Development Tips Weekly
LinkedIn Learning Courses
Related Episodes
Episode 18 - WWDC 2019 - Apple Watch with Gary Sabo
Episode 32 - Training Your Team with Steve Lipton
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Episode 35 - SwiftUI - The Good, the Bad, and the Benefits
SponsorsTransistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsApple September Event
Is your app ready for iOS 14?!?! 🤯
Why Blood Oxygen? What is VO2 max?
Family Setup
Series 6 vs Series 3 vs new SE?
State of Apple Watch Development
Building Complications in SwiftUI
Custom Watch Faces?
When will the Apple Watch be fully independent?
Why build an Apple Watch app?
When should you build a companion watchOS app?
Is Touch ID coming back?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
9/19/2020 • 49 minutes, 22 seconds
Local Database Storage on iOS with Aaron Douglas
Bonus! We talked about Automattic and Apple here...Guest
Aaron Douglas (@astralbodies)
The Dangling Pointer (homepage)
Core Data by Tutorials
Related Episodes
Episode 61 - Machine Learning and Core ML with Jameson Toole
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Episode 49 - Vapor 4 with Tibor Bödecs
Related Links
Fetching objects from Core Data in a SwiftUI project by Donny Wals
Why NetNewsWire Is Fast by Brent Simmons
Hibernate
Libraries
stephencelis/SQLite.swift
ccgus/fmdb
GRDB.swift
Tools
ChristianKienle/Core-Data-Editor
SimPholders
Alternatives
Realm
Parse
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
How do you start a podcast?https://transistor.fm/how-to-start-a-podcast/?via=empowerappsTry it today with this special link:https://transistor.fm/?via=empowerappsWhy Local Storage?
Local cache is import for speed and being off-line
Benefits of a flat file vs local database
Why not run a server on your iPhone?
Why SQLite
How SQLite works?
What's missing from SQLite as opposed to a relational database server?
How to get started with SQLite in Swift?
Dealing with data types in SQLite
What is Journaling and Why not use it?
Why CoreData
What is Object Relational Mapping?
What is an Object Graph?
What is a Context?
Why use Core Data vs SQLite?
Challenges in Dealing with Migrations
CoreData Tips and Tricks
Optimizations in CoreData
How to Debug CoreData
Building for Cross-Platform
Testing Different Versions
How Syncing to makes your app more tolerant based on API changes
Dealing with CloudKit
Dealing with SwiftUI
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
9/5/2020 • 55 minutes, 7 seconds
Machine Learning and Core ML with Jameson Toole
Guest
Jameson Toole (@jamesonthecrow)
Fritz AI - Twitter (@fritzlabs)
Heartbeat - Fritz AI Development Blog and Tutorials
Related EpisodesEpisode 37 - Machine Learning with Kevin ScottWWDC Videos - We Loved
Build an Action Classifier with Create ML
Detect Body and Hand Pose with Vision
Make apps smarter with Natural Language
Control training in Create ML with Swift
Get models on device using Core ML Converters
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
Try it today with this special link:https://transistor.fm/?via=empowerappsPreparing for Machine Learning
What does it mean to build a Model?
What tasks are you trying to perform?
How do you prep data for a model?
How do you collect data for a model?
Deciding the Machine Learning Task
What types of task can ML do?
What's the difference between recommendation and recognition?
What is supervised learning?
What does Apple provide for building models?
How does the Vision framework work?
Why should you consider Machine Learning on Device?
How can you process Speech?
How does choosing the processor affect training?
Making ML Part of the Project
How to iterate over models?
How do you acquire that first set of data?
What is synthetic data?
How do you implement unit testing in Machine Learning?
ML and WWDC 2020
How does Apple Silicon on the Mac affect Machine Learning?
What advances in Machine Learning came out of WWDC 2020?
How WWDC 2020 reveals how ML continues to evolve?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
8/22/2020 • 44 minutes, 8 seconds
The Future of Mac Development with Lucas Derraugh - Part 2
Guest
Lucas Derraugh
@LucasDerraugh on Twitter
lucasderraugh on GitHub
AppleProgramming on YouTube
Responder Chain
GitUp App
Related Episodes
Episode 59 - The Future of Mac Development with Lucas Derraugh - Part 1
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Episode 56 - SwiftUI with Majid Jabrayilov - Part 1
Episode 55 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 2
Episode 54 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 1
Episode 53 - WWDC 2020 - Quick Thoughts
Episode 20 - WWDC 2019 - Mac Development with Daniel Jalkut
Related Links
Responder Chain Episodes
Ivan Sapozhnik on Creating Menu Bar Apps
Malin Sundberg on SwiftUI for macOS
Leo talks about Asset Catalogs and Speculid
Speculid Update for Big Sur
WWDC Videos - We Loved
Adopt the new look of macOS
What’s new in Mac Catalyst
Optimize the interface of your Mac Catalyst app
What's new in SwiftUI
Port your Mac app to Apple Silicon
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030BrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.Apple Silicon
Are you getting a DTK?
What the future of Windows on the Mac?
Running Virtual Machines and Docker on Apple Silicon
What are the battery life improvements with Apple Silicon?
Migrating Apps using C and C++ Libraries
macOS Big Sur
Challenges running on older machines
New UI Updates
Building UI by staying with Apple's APIs
Ensuring Keyboard Support
Ensuring Discoverability for "Pros"
Distributing Mac Apps
App Store vs Selling Your Self
Challenges with Sandboxing
Dealing with Notarization
Dealing with Permissions Dialogs
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
8/12/2020 • 44 minutes, 27 seconds
The Future of Mac Development with Lucas Derraugh - Part 1
Guest
Lucas Derraugh
@LucasDerraugh on Twitter
lucasderraugh on GitHub
AppleProgramming on YouTube
Responder Chain
GitUp App
Related Episodes
Episode 57 - SwiftUI with Majid Jabrayilov - Part 2
Episode 56 - SwiftUI with Majid Jabrayilov - Part 1
Episode 55 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 2
Episode 54 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 1
Episode 53 - WWDC 2020 - Quick Thoughts
Episode 20 - WWDC 2019 - Mac Development with Daniel Jalkut
Related Links
Responder Chain Episodes
Ivan Sapozhnik on Creating Menu Bar Apps
Malin Sundberg on SwiftUI for macOS
Leo talks about Asset Catalogs and Speculid
Speculid Update for Big Sur
WWDC Videos - We Loved
Adopt the new look of macOS
What’s new in Mac Catalyst
Optimize the interface of your Mac Catalyst app
What's new in SwiftUI
Port your Mac app to Apple Silicon
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance or indie apps like Fotmob.
New competitor's report in the Appfigures dashboard where you are able to view competitor downloads, build performance benchmarks, and see the new trends as they happen. Check it out here.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030360iDev - August 16 - 19 (Remote)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Use the promo code WeAreSwift to get 20% off registration.WWDC and Mac
Emphasis on Mac Development
Why should iOS developers get into Mac development?
iPad Pro Apps vs Mac Pro Apps
Challenges of SwiftUI vs AppKit
Improvements to AppKit
Widgets on macOS
SwiftUI Updates for Document-Based Apps
Electron vs Native
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
8/7/2020 • 46 minutes, 23 seconds
Big Bad Bluetooth with Leah Vogel
Guest
Leah Vogel - Twitter: @leah_m_vogel
LinkedIn
Medium
UIKonf 2020 - Leah Vogel - Who’s Afraid of the Big Bad BLE
Related Episodes
Episode 40 - Handling Errors Correctly with Jeff Kelley
Episode 53 - WWDC 2020 - Quick Thoughts
Related Links
WWDC 2020 - Meet Nearby Interaction
BlueSee BLE Debugger
WWDC Videos - We Loved
Build complications in SwiftUI
Create complications for Apple Watch
App essentials in SwiftUI
Build document-based apps in SwiftUI
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Bluetooth 101
Origins of Bluetooth
Where Bluetooth is a good fit?
What is Peripheral?
Profiles, Services and Characteristics
What's the difference between Classic and BLE?
How to measure signal strength?
How to pull extra information from a Characteristic?
Development Challenges
Similarities with Networking
Decoding and Encoding Data from Bluetooth
Why Mocking is Important in iOS Development
Using the Mac for Testing APIs
Dealing with Connectivity Issues
Connection Peculiarities
How can Bluetooth be misused?
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/31/2020 • 44 minutes, 53 seconds
SwiftUI with Majid Jabrayilov - Part 2
Guest
Majid Jabrayilov
SwiftWithMajid.com
SwiftUI Weekly
Twitter @mecid
Related Episodes
Episode 56 - SwiftUI with Majid Jabrayilov - Part 1
Episode 55 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 2
Episode 54 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 1
Episode 53 - WWDC 2020 - Quick Thoughts
Episode 47 - Practical Combine with Donny Wals
Episode 40 - Handling Errors Correctly with Jeff Kelley
Episode 35 - SwiftUI - The Good, the Bad, and the Benefits
Episode 30 - Quickie: Swift UI and 2020 Trends
Episode 19 - WWDC 2019 - Swift UI with Jason Anderson
Related Links
Swift with Majid - What's new in SwiftUI
Swift with Majid - The difference between @StateObject, @EnvironmentObject, and @ObservedObject in SwiftUI
Swift with Majid - New property wrappers in SwiftUI
Swift with Majid -The magic of Animatable values in SwiftUI
SwiftUI Property Wrappers by Donny Walls
WWDC Videos - We Loved
Build complications in SwiftUI
Create complications for Apple Watch
App essentials in SwiftUI
Build document-based apps in SwiftUI
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030360iDev - August 16 - 19 (Remote)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Use the promo code WeAreSwift to get 20% off registration.New Property Wrappers
How the new State Property Wrappers Works
Managing the Life Cycle of Your App
New @StateObject
Benefits of @EnvironmentObject in the View Hierarchy
Maintaining SwiftUI Apps
Testing Your State
Using @StateObject with @EnvironmentObject
Storing Your State with @AppStorage and @SceneStorage
Handing Errors with SwiftUI
Migrating Older Apps to SwiftUI
Bridging UIKit to SwiftUI
New SwiftUI Features
Document-Based Apps
Improvements to Xcode Previews
Widgets and Complications
Animatable
More Frameworks Views Moving to SwiftUI (i.e. Maps, AVFoundation, etc...)
SwiftUI Challenges and Workarounds
Multi-line Text and Text Formatting
Using Lazy Stacks for Large Lists
Dealing with Animations
Lists vs ForEach
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/17/2020 • 38 minutes, 10 seconds
SwiftUI with Majid Jabrayilov - Part 1
Guest
Majid Jabrayilov
SwiftWithMajid.com
Twitter @mecid
Related Episodes
Episode 55 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 2
Episode 54 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 1
Episode 53 - WWDC 2020 - Quick Thoughts
Episode 47 - Practical Combine with Donny Wals
Episode 35 - SwiftUI - The Good, the Bad, and the Benefits
Episode 30 - Quickie: Swift UI and 2020 Trends
Episode 19 - WWDC 2019 - Swift UI with Jason Anderson
Related Links
Swift with Majid - What's new in SwiftUI
Swift with Majid - Mastering grids in SwiftUI
WWDC Videos - We Loved
Build complications in SwiftUI
Create complications for Apple Watch
App essentials in SwiftUI
Build document-based apps in SwiftUI
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030360iDev - August 16 - 19 (Remote)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Use the promo code WeAreSwift to get 20% off registration.What's New in SwiftUI
More Mature Framework
Used in More New Features
Lazy Stacks
New App Structures
@main App Structure with old UIAppDelegate
YES! Apple Watch doesn't need Storyboards and supports @main
Brand New Grids
Do you build for iOS 13 or iOS 14
Widgets and Complications in SwiftUI only
SwiftUI - Benefits and Issues
Benefits of SwiftUI over UIKit
How Declarative Programming is an Improvement
Limitation of Static Navigation Views
SwiftUI on watchOS
SwiftUI on tvOS
Learning Curve with SwiftUI
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/12/2020 • 29 minutes, 1 second
WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 2
Guest
Vadim Shpakovski - @VadimShpakovski
NativeConnect
Raycast
Related Episodes
Episode 54 - WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 2
Episode 44 - WWDC Spectacular (Part 2) with Peter Witham
Episode 43 - WWDC Spectacular (Part 1) with Peter Witham
Episode 53 - WWDC 2020 - Quick Thoughts
Episode 49 - Vapor 4 with Tibor Bödecs
Episode 36 - Upgrading Your Skills in 2020 with Paul Hudson
Episode 34 - Server-Side Swift with Tim CondonEpisode 33 - 2020 Developer Wish List with Alex Bush
Episode 23 - Modularizing in Xcode with Abbey Jackson
Related Links
Apple’s new ARM-based Macs won’t support Windows through Boot Camp - The Verge
@brianstucki asks which open source software do you need updated for Apple Silicon
Qemu - Processor Emulator
Swift on ARM – Supporting ARM in Swift Package CI
VideoMeme by Gui Rambo - Sample Document-Based App in SwiftUI
Arena: Explore SPM packages with ease by Sven A. Schmidt
Fastlane
Swagger
Xcodegen
Xcode 12 Beta Release Notes
Xcode 12 for macOS Universal Apps Beta Release Notes
Sean Allen - What's the new in Xcode 12
Paul Hudson - WWDC20: Wrap up and recommended talks
Lucas Derraugh - Responder Chain 2 Episode on Speculid
Atomic Web Design
WWDC Videos - We Loved
Explore the new system architecture of Apple Silicon Macs
Adopt the new look of macOS
Distribute binary frameworks as Swift packages
Port your Mac app to Apple Silicon
What's new in App Store Connect
Explore Packages and Projects with Xcode Playgrounds
Get your test results faster
Handle interruptions and alerts in UI tests
Create Swift Playgrounds content for iPad and Mac
Expanding automation with the App Store Connect API
Write tests to fail
XCTSkip your tests
Use Swift on AWS Lambda with Xcode
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
Try it today with this special link:https://transistor.fm/?via=empowerappsmacOS 11 and Big Sur
Stability of Big Sur vs Catalina
Unification of Design
Thoughts on Catalyst
Native iOS on Apple Silicon
AppKit vs SwiftUI
Apple Silicon
Migrating Apps to Apple Silicon
How Virtualization is Limited
Windows on Apple Silicon
Xcode 12 vs Xcode 12 Universal
Xcode 12
New Design
New SwiftUI App and Scene Changes
Swift Package Binary Dependencies and XCFrameworks
Swift Package Swift UI Previews
Swift Playgrounds in Xcode
Testing Enhancements
App Store API Improvements (by the end of the year)
Xcode Tips
Code Completion Improvements
Xcode Tips
Refactoring with Xcode
Modularization with Targets, etc....
Using Xconfig
Xcodegen
Server-Side Swift
Is Vapor Production Ready?
Vapor demoed in the State of the Union
AWS Lambdas in Swift
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/6/2020 • 55 minutes, 41 seconds
WWDC 2020 and Xcode 12 with Vadim Shpakovski - Part 1
Interested in 360iDev Tickets? Let us know what you think of WWDC 2020 by replying to this tweet.Guest
Vadim Shpakovski - @VadimShpakovski
NativeConnect
Raycast
Related Episodes
Episode 44 - WWDC Spectacular (Part 2) with Peter Witham
Episode 43 - WWDC Spectacular (Part 1) with Peter Witham
Episode 33 - 2020 Developer Wish List with Alex Bush
Related Links
Joe Cieplinski - WWDC 2020
Helge Heß on Widgets
WWDC Videos - We Loved
Build complications in SwiftUI
Distribute binary frameworks as Swift packages
Create app clips for other businesses
Create complications for Apple Watch
Support hardware keyboards in your app
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.If you want your app to succeed, there's never been a better time to read up on App Store Optimization and Appfigures provides that for you.
Check out their great articles and guides on app store optimization
Brand new teardowns of specific apps, like Spotify for instance.
Check out more of their resources at appfigures.com/resources.
The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030360iDev - August 16 - 19 (Remote)
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Use the promo code WeAreSwift to get 20% off registration.WWDC 2020 from Home
Big Mac Year After So Many Years
The Slow Unification of Apple Operating Systems
The Slow Unification of User Interface
Our Thoughts on the Format
The Excitement of Speaking with Apple Engineers Remotely
Tight Video Content
iOS 14, watchOS 7, iPadOS
Widgets similarity to watchOS complications
Similarities to Android
The New App Library
App Clips might encourage businesses
SwiftUI Complications on the Apple Watch
More Mobility metrics on the watch
Improvements to Spotlight
Minimize Full-Screen Overtaking - Phone Calls, Siri, Spotlight
Is touch coming to the Mac?
The Power of Scribble on the iPad
Default Apps on iOS
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
7/1/2020 • 26 minutes, 47 seconds
WWDC 2020 - Quick Thoughts
Youtube Videohttps://youtu.be/wDpNBXItVLoiOS 14
Widgets
App Clips
Default Apps Allowed
Clearer Privacy Policies
iPadOS 14
Scribble for Apple Pencil
Shape Parsing(?) for Apple Pencil
New UI Elements like Sidebar
macOS 11 - Big Sur
Big UI Changes and Refresh
Improved Catalyst Look
New Icons
Improvements to Safari Web Extensions
Apple Silicon on the Mac
More Performance Per Watt
$500 Developer Tool Kit (Mac mini) for Rent
Major Software and Tools All ReadyUnity, Microsoft, Adobe, Homebrew, etc...
Virtualization available for Server-Side DevelopmentVAPOR DEMOED!
Building for Universal Apps in Xcode for both CPU Architectures
Rosetta 2 for Emulation
Can Run iOS Apps Natively
More Thoughts🕵️♀️Find My _ (i.e. Apple Tags) is a certification similar to HomeKit⌚️Wish there was more watchOS improvements🌊Want to try Big Sur 🛠Looking forward to try Xcode 12 and talking about it next week with Vadim ShpakovskiSocial MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/23/2020 • 14 minutes, 49 seconds
Haikus of Code with Erica Sadun - Part 2
Guest
Erica Sadun (website)
@ericasadun (Twitter)
@erica (GitHub)
Swift Style, Second Edition by Erica Sadun
Related Episodes
Episode 20: WWDC 2019 - Mac Development with Daniel Jalkut
Episode 49: Vapor 4 with Tibor Bödecs
Episode 34: Server-Side Swift with Tim Condon
Related Links
try! Swift World
Swift Argument Parser
yonaskolb/Mint (GitHub) - THE WAY to install Swift Package Tools
WE FOUND AN INSTALLATION TOOL! - “mint” (a simple SwiftPM installer) has improved my command line life - Erica Sadun
Musings on `Result` and building a command line utility with completion handlers - Erica Sadun
Swift Package Continuous Integration - Leo Dion
Erica's Command Line Tools
erica/now (GitHub) - Times around the world...
erica/remind (GitHub) - Schedule a notification-center reminder from the command-line...
erica/lns (GitHub) - Because no one can remember how to use `ln -s` when it really matters
Leo's Command Line Tools
brightdigit/eggseed (GitHub) - Command Line Tool for Starting Your Swift Packages with Continuous Integration
brightdigit/AssetLib (GitHub) - Create and Build Asset Catalog and Templates
SwiftPackageIndex/PackageListValidator (GitHub) - A tool for validating the Swift Package Index package list
HomeBrew Stuff (for Swift Packages - See Mint)
HomeBrew Home Page - https://brew.sh
How to Create a Tap
How to Create a Cask (for Mac GUI Apps)
How to Create a Formula (Command Line Apps)
docopt - Command-line interface description language
kylef/Commander (GitHub) - Compose beautiful command line interfaces in Swift
JohnSundell/Publish (GitHub) - A static site generator for Swift developers
Heartwitch
Speculid
Gimp
Inkscape
MacDown
Ulysses
VT100 codes 🙄
Exit Codes
Swift Language Change Log
Swift on Windows
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030AudibleAudible is the leading provider of spoken-word entertainment and audiobooks, ranging from best sellers, to celebrity memoirs, news, business, and self-development. Every month, members get one (1) credit to pick any title, plus two (2) Audible Originals from a monthly selection, and access to daily news digests (from The New York Times, The Wall Street Journal, and The Washington Post), as well as guided meditation programs.My recommendationTalking to Strangers - What We Should Know About the People We Don't KnowWritten and Narrated by: Malcolm GladwellTry it out today and 2 free audiobooks:http://www.audibletrial.com/EmpowerAppsSwift Argument Parser
How does the parser work?
What's the difference between Argument, Option, and Flag?
What folks find challenging with it?
How we are using the new library?
How to run asynchronously with command line tools?
How log and write to stdout and stderr?
Dealing with errors
Future of Swift
... also Leo wants to waste time porting SwiftUI into terminal appsSocial MediaEmailleo@brightdigit.comGitHubBrightDigit - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/16/2020 • 42 minutes, 15 seconds
Haikus of Code with Erica Sadun - Part 1
Guest
Erica Sadun (website)
@ericasadun (Twitter)
@erica (GitHub)
Swift Style, Second Edition by Erica Sadun
Related EpisodesEpisode 20: WWDC 2019 - Mac Development with Daniel JalkutRelated Links
try! Swift World
Swift Argument Parser
yonaskolb/Mint (GitHub) - THE WAY to install Swift Package Tools
Erica's Command Line Tools
erica/now (GitHub) - Times around the world...
erica/remind (GitHub) - Schedule a notification-center reminder from the command-line...
erica/lns (GitHub) - Because no one can remember how to use `ln -s` when it really matters
Leo's Command Line Tools
brightdigit/eggseed (GitHub) - Command Line Tool for Starting Your Swift Packages with Continuous Integration
brightdigit/AssetLib (GitHub) - Create and Build Asset Catalog and Templates
SwiftPackageIndex/PackageListValidator (GitHub) - A tool for validating the Swift Package Index package list
HomeBrew Stuff (for Swift Packages - See Mint)
HomeBrew Home Page
How to Create a Tap
How to Create a Cask (for Mac GUI Apps)
How to Create a Formula (Command Line Apps)
docopt - Command-line interface description language
JohnSundell/Publish (GitHub) - A static site generator for Swift developers
Speculid
Gimp
Inkscape
MacDown
Ulysses
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Transistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
Try it today with this special link:https://transistor.fm/?via=empowerappsSwiftArgumentParser
Bringing Swifty-ness to the Command Line Parser
Works well with Xcode
How to Install Swift Package Tools
Graphics Support in Xcode
Why isn't SVG supported?
UIImage with SVG?
Does Android support SVG?
Bézier curve support
Being a Mac User in 2020
Catalina Support
Subscription Services
Adobe vs Apple
Native UI and UX on the Mac
Writing Books for Publishers
Social MediaEmailleo@brightdigit.comGitHub - @brightdigitTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/8/2020 • 29 minutes, 22 seconds
50th Episode Extravaganza
Youtube Videohttps://youtu.be/9rxLjwqID2UCurrent Interests and Products
Komondor
XcodeGen
Rocket
EggSeed
Swift Package CI
SwiftPM.co
PackageListValidator
Speculid
Responder Chain
Heartwitch
Heartwitch v1.1 Update
Big 5 Topics
Career and Getting Hiring
Future Technology
Architecture, TDD, and Code Quality
Backends and Server-Side Swift
Swift UI
Also...
Questions and Answers
Future Plans
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
6/2/2020 • 46 minutes, 39 seconds
Vapor 4 with Tibor Bödecs
Guest
Tibor Bödecs (website)
The Swift Dev Blog - theswiftdev.com
Twitter @tiborbodecs
Practical Server-Side Swift
Take The Survey! 🙏https://brightdigit.typeform.com/to/FwbXt450th Episode - Q&A - submit your questions to me @leogdion with hashtag #empowerappsRelated Episodes
Episode 8: Cloud and Backend Services For Apps
Episode 34: Server-Side Swift with Tim Condon
Episode 48: Alternative Backends with Kristaps Grinbergs
Related Links
Vapor.Codes
Vapor 4 Docs
Vapor Discord
Heartwitch - Uses Vapor WebSockets
WWDC 2020 is happening!
Swift ArgumentParser
Tibor Bödecs - What's New in Vapor 4?
Tibor Bödecs - What’s new in Swift 5.3?
Tim Condon - The Future of Swift on the Server
Swift 5.3 Release Process and OS Support
Leo's setup article for Vapor 3
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030AudibleAudible is the leading provider of spoken-word entertainment and audiobooks, ranging from best sellers, to celebrity memoirs, news, business, and self-development. Every month, members get one (1) credit to pick any title, plus two (2) Audible Originals from a monthly selection, and access to daily news digests (from The New York Times, The Wall Street Journal, and The Washington Post), as well as guided meditation programs.My recommendationTalking to Strangers - What We Should Know About the People We Don't KnowWritten and Narrated by: Malcolm GladwellTry it out today and 2 free audiobooks:http://www.audibletrial.com/EmpowerAppsWWDC 2020?
What are you most excited about?
Will there be new hardware or IDE?
Vapor 4 Changes
Updates to the Command API
New Service Layer
Updates with HTTP 2 with SwiftNIO 2
How SwiftNIO2 does Futures and Promises
Using PropertyWrappers with Fluent ORM
Making Swift Package Manager work with you
Getting Started with Vapor
Requires Linux or macOS with Swift 5.2
Recent Support for Ubuntu 20, Amazon Linux, CentOS
Using Vapor Toolbox vs just SPM
Unit Testing with Separate Package
Structure of the App
Getting Your Database Models Setup
Using Push Notifications on Vapor and Sign-In With Apple
Why Should You Consider Vapor?
Where to Host Your App?
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
5/20/2020 • 49 minutes, 16 seconds
Alternative Backends with Kristaps Grinbergs
Guest
Kristaps Grinbergs (website)
Twitter @fassko
Swift WebSockets
Swift Weekly Brief
Take The Survey! 🙏https://brightdigit.typeform.com/to/FwbXt4Related Episodes
Episode 8: Cloud and Backend Services For Apps
Episode 34: Server-Side Swift with Tim Condon
Episode 47: Practical Combine with Donny Wals
Related Links
UIKonf - 18-19 MAY 2020 · ONLINE
The Multi-Threaded Asynchronous Parallel World of Swift - Leo Dion
We need to talk about Websockets - Kristaps Grinbergs
Heartwitch - Uses Vapor WebSockets
Apollo Data Graph Platform
Server-Side Frameworks
Graphiti - Swift GraphQL Schema/Type framework
Other Server Libraries
Client-Side Frameworks
Introduction to Apollo iOS Client
Apollo iOS Client Library
Other Client Libraries
WebSockets
Vapor WebSockets
StarScream
WWDC 2020 is happening!
SponsorsAppFiguresThe tools you need to monitor, optimize, and get more downloads.There's a lot of demand for apps right now, so it's a really great time to give it a try. It's easier than you think.The guys who run it are indie devs who had a need and created a tool. 11 years later, it's an all-in-one platform for developers who want to get more downloads and make more money with their apps.The folks at Appfigures have easy step-by-step guides and intuitive tools to do that, which many indie developers are using to get more downloads:https://appfigures.com/resources/asoAlso check out our episode with CEO Ariel Michaeli:https://share.transistor.fm/s/15b7ff63Try Appfigures for free, and if you like it use the special link to get 30% off for the next 3 months:https://appfigures.com/account/upgrade?p=empower3030Why GraphQL?
Greater Flexibility
Less Data Usage
REST API is more strict but easy to implement
Big Learning Curve with GraphQL
Fewer Requests Needed with GraphQL
Challenges with accessing in Swift
How Apollo Works
Starting with both REST API and GraphQL
Using Subscriptions WebSockets with GraphQL for Syncing
WebSockets
Perfect for Gaming, Chat, and Financial Applications
Why Long Polling Might Be Better
How to keep a URL Session open
How to stay organized with WebSockets
How to support and test WebSockets?
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
5/8/2020 • 49 minutes, 36 seconds
Practical Combine with Donny Wals
Guest
Donny Wals - donnywals.com
Twitter @donnywals
Practical Combine (25% Off Link!!!) - An introduction to Combine with real examples
Related Episodes
Episode 33: 2020 Developer Wish List with Alex Bush
Episode 19: WWDC 2019 - Swift UI with Jason Anderson
Related Links
Donny's Posts on Combine
Using Combine by Joseph Heck
Timelane by Marin Todorov
CombineCocoa - helpers for UIKit
rxswift-to-combine-cheatsheet - cheatsheet for Reactive API Patterns
Removing duplicate values from an array in Swift by Donny Wals
Asynchronous Multi-Threaded Parallel World of Swift by Leo Dion
Preventing strong reference cycles - using assign with self
Heartwitch for the Apple Watch (uses Combine, SwiftUI, and Vapor)
ReactiveX - An API for asynchronous programming with observable streamsRxSwift - Swift ReactiveX implementation
Promise Libraries
PromiseKit
SwiftNIO
Google Promises
Open source implementations of Apple's Combine framework
OpenCombine
CombineX
SponsorsLinodeA cloud experience developers love
Great for Setting Up a Backend for Your App
Variety of VM Configurations and Settings
Reasonable Pricing Starting at $5 per month
Global Data Centers
The Developer Cloud Simplified
Try it today with this special link:https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7Disney Streaming Services
How the service has been affected by the pandemic
Expansion to other regions
How Donny uses Swift at Work
Apps that DSS support
Working from Home regularly and now
Practical Combine
What is Functional Reactive Programming?
What is a Publisher and it's relationship with time
How Publishers can simplify data tasks and JSON decoding
The advantages of functional programming
Why it's important to keep track of Cancellables?
How to store and remove Cancellables in your ObservedObject
Differences between Threads and Schedulers
Why Type-Erasure is important in Combine
Lifecycle of a Stream
Sink vs. Assign
Differences between Combine and other Reactive Programming
Differences between Combine and MVC
Differences between Combine and Promises
Builtin Publishers with Notifications, Timers, and Data Tasks
How to work with Delegates and Callbacks
When to use @Published vs PassthroughSubject vs CurrentSubject
How easy is it to use Combine with UIKit
How do you build your own Publisher and Subscriber
Projects and Combine
How does Combine fit with current or future projects
Where would Combine not be a good fit
Is Combine production ready for new apps
How to do Unit Testing with Combine
How to debug with Combine
Are there alternatives for older OSes or Linux?
Writing Practical Combine
How Donny got started
How he tested the idea
What questions he asked when getting started
Using questions to organize content
How he got outsiders to edit and beta test the book
What topic is Donny is interested in next?
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/27/2020 • 1 hour, 23 minutes, 31 seconds
Developer Community (Part 2) with Dave Verwer
Guest
Dave Verwer - daveverwer.com
Twitter @daveverwer
iOS Dev Weekly - Twitter @iOSDevWeekly
iOS Developer Community Survey
SwiftPM Library - Twitter @SwiftPMLibrary
iOS Dev Jobs - Twitter @iOSDevJobsHQ
iOS Dev Directory
Related Episodes
Episode 31: Future Proofing Your Apps with Gui Rambo
Episode 37: Machine Learning with Kevin Scott
Episode 42: Patterns and Practices for Scalable Apps
Episode 45: Developer Community (Part 1) with Dave Verwer
Related Links
My Appearance on Responder Chain with Lucas Derraugh
iOS Dev Directory Projects
Swift News by Tibor Bödecs
iOS Dev Blogs by Andrew Yates
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.Swift Packages
What's the future of Swift Packages
Cocoapods vs Carthage vs Packages vs Submodules
Limitations of Swift Packages
SwiftPM Library
How SwiftPM.co began?
What does it provide to the community?
Issues with older packages
Issues with other dependency management systems (NPM, RubyGems, etc...)
Open Source Data
How to use pull-requests for contributing information?
How iOS Dev Directory works
How it helps prevent spam
Allowing for others to build on top of
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/21/2020 • 35 minutes, 40 seconds
Developer Community (Part 1) with Dave Verwer
Guest
Dave Verwer - daveverwer.com
Twitter @daveverwer
iOS Dev Weekly - Twitter @iOSDevWeekly
iOS Developer Community Survey
SwiftPM Library - Twitter @SwiftPMLibrary
iOS Dev Jobs - Twitter @iOSDevJobsHQ
iOS Dev Directory
Related Episodes
Episode 31: Future Proofing Your Apps with Gui Rambo
Episode 37: Machine Learning with Kevin Scott
Episode 42: Patterns and Practices for Scalable Apps
Related Links
Ruby on Rails Demo
BrightDigit - What You Should Know About iOS Software Architecture (My Boring Article 😆)
SponsorsTransistor.FmYour podcast's publishing platformTransistor not only hosts your podcast but also:
Help distribute your podcast with integrations to Apple Podcasts, Spotify, Google Podcasts, YouTube, and Mailchimp
Deep analytics including average downloads per episode, popular podcast apps, number of subscribers, trends
Professional support for creatives, businesses, and professional podcasters when it comes to hosting and analytics
Try it today with this special link:https://transistor.fm/?via=empowerappsiOS Developer Community Survey
How Dave started iOS Dev Weekly
Why we love macOS over Windows
How the community loves Swift
Community and AR (and ML)
How big is Swift development outside of iOS?
What the big backend technologies for iOS devs?
iOS Developer Community History
Mobile Development before iOS
Democratization of the Internet and the iPhone
Challenges using Desktops
Objective-C vs. Swift
Architecture and Programming Fads
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/17/2020 • 42 minutes, 15 seconds
WWDC Spectacular (Part 2) with Peter Witham
Guest
Peter Witham - Compileswift.com - Twitter
Previous EpisodeEpisode 43: WWDC Spectacular (Part 1) with Peter WithamRelated Episodes
CompileSwift - Episode 20 - iPad gets a cursor
CompileSwift - Episode 10 - Apple Release Cycles
Episode 29: Managing iOS Development with Peter Witham
Episode 7: Apple 2019
Related Links
Here’s how the iPad’s new trackpad actually works - The Verge
Peter's Video on Cursor Support for iPadOS 13.4
LidAR example of real-time mapping
SponsorsIndieSupportWeeksIndie Support Weeks is an open two-week effort aimed at helping indie developers within the Apple Developer Community who have been financially impacted by the current global COVID-19 pandemic.Here are some of the apps we recommend:
Home Inventory by @DianeRHamilton - A Mac App Store Editor’s Choice, Home Inventory has been helping people around the world document & manage their home & belongings since 2005.
Pushever - APNS Tester by @soulchildpls - Test push notification easily
NativeConnect by @vadimshpakovski - Native macOS Client for App Store Connect
Modules by @specrefco - super easy for Swift developers to visualize and organize modules in a Swift package
Working Copy by @palmin - Access Git repositories on the go. Clone, edit, commit and push while allowing other apps access to repositories.
Learn more here about other apps from Indie Developers.Apple March Updates
Why can't the Mac Mini fill the desktop gap to Mac Pro?
How the Mac mini works as a background server for CI, Video, etc...
Is the Mac Book Air sufficient for a beginner developer?
Is the iPad Pro enough for "real work"?
Why prefer iPad over Mac Book
The "Surfacing" of the iPad Pro
Portrait vs Landscape
The New iPad Pro Magic Keyboard
Leo's iPad Stands and Keyboard Cases
KABCON Quality Tablet Stand (Portable)
Canopy by Studio Neat
Lamicall Tablet Stand
Peter's iPad Brydge Keyboard Case
The limitations of touch for interaction
Will voice controls and Siri continue to improve?
Does age matter in how we expect to interact with technology?
Does LidAR help VR supplant AR?
What LidAR means for developers?
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/8/2020 • 41 minutes, 37 seconds
WWDC Spectacular (Part 1) with Peter Witham
Guest
Peter Witham - Compileswift.com - Twitter
Related Episodes
CompileSwift - Episode 20 - iPad gets a cursor
CompileSwift - Episode 10 - Apple Release Cycles
Episode 35: SwiftUI - The Good, the Bad, and the Benefits
Episode 34: Server-Side Swift with Tim Condon
Episode 29: Managing iOS Development with Peter Witham
Episode 20: WWDC 2019 - Mac Development with Daniel Jalkut
Episode 10: Business and IT Applications
Episode 7: Apple 2019
Related Links
Here’s how the iPad’s new trackpad actually works - The Verge
Bitrise
MacStadium
Vapor – Deep Dive Guide into Setup and Deployment for Heroku and Ubuntu
Swift Playground Book
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Remote Working From Home
Having to work home with everyone at home
Having a dedicated office
Livestreaming vs. Conference Calls
Having a schedule
Sharing your work schedule on the family calendar
WWDC 2020?
Will WWDC be cancelled this year?
How can they produce video for the conference?
How does a remote conference?
Does this year have a Marzipan?
Refinements for iOS, macOS, etc...?
Any opening of other services (messaging)?
What happened to Apple TV+?
Where is Apple in the server or cloud?
What's going to be the plan for the iPhone?
SDK Updates?
Swift UI 2.0?
What's the future of Catalyst?
More Independence for the watchOS?
more Independence for iPadOS 😄
More Machine Learning ...
What's the ARKit Demo? AR Conference?
Swift Playgrounds on the Mac
Xcode on the iPad?
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
4/3/2020 • 56 minutes, 45 seconds
Patterns and Practices for Scalable Apps
VideoYoutube Video - https://youtu.be/TQpRYibmyvQRelated Episodes
Episode 39: Managing Code Quality with Anne Cahalan
Episode 24: Continuous Integration with Kyle Newsome
Episode 23: Modularizing in Xcode with Abbey Jackson
Episode 31: Future Proofing Your Apps with Gui Rambo
Episode 15: Test-Driven Development with Joshua Greene and Michael Katz
Episode 14: iOS App Architecture with René Cacheaux and Josh Berlin
Related Links
iOS Continuous Integration: How To Avoid Merge Hell
SwiftUI: Everything is possible if you think like Apple
How to avoid iOS app failure with Test-Driven Development
Swift Package Continuous Integration Guide
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Why Good Patterns and Practices Matter
Bug fixes and code upgrades become more difficult to execute
Adding new features can be a real challenge if there's a lack of organization.
Without breaking each layer and functionality apart, it makes testing excruciating.
Without consistency, new developers will have a hard time understanding how the code works.
By using the right patterns, modularizing your code, and maintaining good code quality; you can keep your app development project running smoothly and save money in the long run.
Architectural Patterns
Understand the legacy of Objective-C
How Model View Controller is intrinsic to UIKit
How do Delegation Pattern fits
Why Protocol Oriented Programming works so well with Swift and Testing?
Why Functional Programming makes it easier to build complex functionality?
Why the shift to Model-View-ViewModel?
How Reactive Programming, the Subscriber-Publisher model, and Combine makes sense for UI development?
Modularizing Layers of Functionality
Modularity ensures individual pieces of functionality can work independently.
While each piece of code and functionality remains simple, it is their multitude and integration which is complex.
Each module is an Interchangeable Part.
Modularity allows for use in multiple operating systems and devices.
How does Xcode and Swift allow for modularity
Why Framework Targets are the most mature way still to create independent
Where Workspaces and Projects fit with with Independent Apps and Products
Why Swift Packages are the future
Maintaining Quality Code
Good Architectural Patterns means Easy Testing
Code Coverage is a good metric but not the only one.
Reduce Complexity in your code for easier maintenance
Consistent Styling makes version control and team management easier
Code Reviews Help get an additional set of eyes even though they may be your own.
Continuous Integration of components and apps are the best way to ensure quality code
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/30/2020 • 20 minutes, 10 seconds
Notifications with Kaya Thomas
Guest
Kaya Thomas (Twitter @kthomas901)kayathomas.info
Related Episodes
Episode 15: Test-Driven Development with Joshua Greene and Michael Katz
Episode 8: Cloud and Backend Services For Apps
Related Links
We Read Too
Apple's Developer Docs on Notifications
Beams by Pusher
NWPusher by noodlewerk
Preparing Your App For iOS 12 Notifications by Kaya Thomas - Smashing Magazine
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Why Notifications Are Important
Can encourage user engagement
Notify of updates and messages
Need to be trustworthy and needless
Onboarding helps make Notifications more welcoming
What are the different types of Notifications?
Local vs Remote Push Notifications
Remote Notifications are ideal for complex logic and messaging
How Rich Notifications Work
What are the challenges in implementation of Notifications?
Using Enums to Implement Notifications
How Categories and Actions Work
Using NWPusher to Test Remote Notifications
Big Improvement Coming to Xcode 11.4
How to Unit Test with Abstractions and Mocking
How Push Notifications Work?
Implementing Remote Notifications on the Server
Using Cloud Based Services for Push Notifications such as Firebase
Using Beams for Testing Push Notifications
How APNS works
Dealing with APNS Issues
Understanding APNS Throttling
How to making Notifications part of the design process?
How would Notification make the app more useful?
Would it help the user engage more?
Keep complex actions in the app as opposed to the Notification UI
Being responsible with how Notifications are used
Stay up-to-date with Apple's guidelines
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/22/2020 • 40 minutes, 5 seconds
Handling Errors Correctly with Jeff Kelley
GuestJeff Kelley (Twitter @SlaunchaMan)Related Episodes
Episode 35: SwiftUI - The Good, the Bad, and the Benefits
Episode 18: WWDC 2019 - Apple Watch with Gary Sabo
Episode 15: Test-Driven Development with Joshua Greene and Michael Katz
Related Links
Jeff's talk from Code Mash - Taking Control of Errors in Swift
How To Test fatalError In Swift by Marco Santa
A guide to Charles Proxy by Nelida Velazquez
Running Real Tests on watchOS - Jeff Kelley
Leo's sample code for testing for fatalError
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.What is special about errors in Swift
The history of Objective-C and Swift errors
The strong-typed nature of Swift
fatalError vs assert vs precondition
How to test fatalError in unit tests
What are some ways to handle errors?
User initiated errors and dialogs
Chaining logging and error tracking
Differentiating release and debug build
Using proxy server to listen to requests in debug
When to purposely crash with fatalError
Dealing with asynchronous callbacks and Combine
What is the Never type?
Dealing with permission prompts like HealthKit
What can teams do to design and develop for errors
Use a service to track errors for developers
Showing the user the correct information
Dealing with issues which aren't errors
Designers should show how errors are handled
Design the write localized messages for errors
With agile development, make sure each error path is handled in your story card
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/15/2020 • 49 minutes, 51 seconds
Managing Code Quality with Anne Cahalan
Guest
Anne Cahalan
Twitter @northofnormal
Github northofnormal
Related Episodes
Episode 36: Upgrading Your Skills in 2020 with Paul Hudson
Episode 34: Server-Side Swift with Tim Condon
Episode 24: Continuous Integration with Kyle Newsome
Episode 14: iOS App Architecture with René Cacheaux and Josh Berlin
Related Links
Swift For Good - UI Design by Dave Delong
Goodbye Clean Code by Dan Abramov
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.What is Code Quality
Making Code that's easy to maintain
Low Cyclomatic Complexity
Making your code easily testable
Your code should read like sentences
Avoid fancy short code for more wordy code
Messy code is easier to fix then over-engineered code
While the integration may be complex, keep your code separated into simple parts
Why is Code Quality Important
Saving Time = Saving Money
Easy to Maintain and Easy to Update
Shorter Onramp for New Developers
Code Rots over Time (Delegation Patters vs Subscriber/Publisher Model)
Addresses Tech Debt
When should you upgrade your code
When it makes sense
Use Interoperability (bridge headers, HostingControllers, ViewRepresentable, etc...) to slowly bridge the gap
Be careful leaving too much old code behind
Good Swift Code Quality
Use argument labels and parameter name correctly
Avoid ternary operators
Avoid switch statements with too much logic and cases
Use Generics judiciously
Extensions are great for separating Protocol implementation
Good Code Reviews and Pull Requests
Clear your mind
Use pull requests and templates
Add context and details to the pull requests
Use screen shots to show what the result is
Communicate clearly what is going on
Let them know what to look at and what is a work-in-progress
What Can Managers Do
Set a great example
Provide enough time to the team for quality code
Have some background and experience with quality code
Be attentive and open to what your developers say
Allow time for unit testing
Code Quality Tools
SwiftLint and SwiftFormat
Codecov - for code coverage
CodeFactor and CodeClimate - for code quality
Having a human look at code is always best
Be thoughtful and considerate for each decision
Leo's Swift Package Automated CI Template - WIP
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
3/1/2020 • 59 minutes
Accessibility with Kim Arnett
Guest
Kim Arnett (kimarnett.com)
Twitter @kaydacode
DEV.TO @kaydacode
Related EpisodesEpisode 31: Future Proofing Your Apps with Gui RamboRelated Links
The Curb Cut Effect: How Making Public Spaces Accessible to People With Disabilities Helps Everyone
Deque
Chris DeMars
Nathan Loding
a11y with lindsey
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.What is Accessibility
Accessibility is more than just permanent disabilities
Considering text size, color blindness, screen readers, touch issues
What Can Developers Do Now?
Making fonts scalable with Dynamic Text
Consider text size based on other languages
Apple makes it simple to include accessibility
Using built-in controls over third-party tools
Using accessibility labels
Don't forget Dark Mode
Why Accessibility is important?
Includes a larger audience which depends on it
20% report having disabilities
Fear of Lawsuit 😱
Make Sure Everyone Has A Voice
The Curb Cut Effect: How Making Public Spaces Accessible to People With Disabilities Helps Everyone
What can managers do?
The importance of diversity in your team
Practice using the app without sight and only screen readers
Using iPhone Accessibility settings to test your app
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/23/2020 • 31 minutes, 8 seconds
Machine Learning with Kevin Scott
Guest
Kevin Scott
https://thekevinscott.com
Twitter @thekevinscott
Deep Learning with JS by Kevin Scott
Related EpisodesEpisode 34: Server-Side Swift with Tim CondonRelated LinksDeploying Core ML models using Vapor - Fritz.AISponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.What is Machine Learning
Teaching Machines to Predict Based On Data
Having Machines Mimic Behavior
Subgroup with Artificial Intelligence
How Developers and Companies Can Get Started
Data Preparation
“There's the joke that 80 percent of data science is cleaning the data and 20 percent is complaining about cleaning the data”
Using Pre-Trained Models
Using AWS SageMaker
JS vs Python vs R vs Julia vs Swift
The Advent of Server-Side Swift in ML
Preparing Enough Data or Using Synthetic Data
Using Augmented Data
What are the different types of Machine Learning?
Statistical Learning using Structured Data
Transfer Learning with Neural Networks
Model Training
Examples and Usage of Machine Learning
Predictions Based On Structured Data
Sound Filtering
Computational Photography
Image Classification and Enhancement
Health Care (while respecting Privacy)
Augmented Reality
Audio Transcription
Where And How To Implement ML
Any Apps which use Rich Media (i.e. Image, Audio, etc...)
Server-Side vs Client-Side
Future of using ML with Text
What's the future of Machine Learning
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/9/2020 • 37 minutes, 28 seconds
Upgrading Your Skills in 2020 with Paul Hudson
Guest
Paul Hudson
Hacking With Swift
Twitter @twostraws
Reddit /u/twostraws
StackOverflow twostraws
Related Episodes
Episode 23: Modularizing in Xcode with Abbey Jackson
Episode 24: Continuous Integration with Kyle Newsome
Episode 32: Training Your Team with Steve Lipton
Episode 33: 2020 Developer Wish List with Alex Bush
Related Links
Conferences
iOS Conf SGNice Waterfall Tweet
CodeMashPlaying at CodeMash
dotSwift
SwiftAlps
SwiftAvero
Swift Island
PyCon
Swift TO Transparency Report
Sean Allen and Paul Hudson talk about Connie, the young coder
SwiftTO - Paul Hudson - The Evolution of Swift
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Conference Thoughts
Cultural Differences
Why Speakers Should Be Available To Attendees
The Challenges of Putting On Conferences
Organizers Making Attendees Happy
Having Really Nice Venue
Workshops vs Talks
Where Does the Community Fall Short with Inclusivity and Accessibility
Having Children-Friendly and Budget-Friendly Events
What to Upgrade Skills and Why
Where Do You Want to Be In a Year?
Ask People In Those Positions
The Technology Field Demands Continuing Education
Continuing Education means New APIs but also...
Older APIs - UIKit, Networking, Unit Testing, etc...
Swift Syntax
Patterns and Practice
Dealing with Updates to Swift
The hedonic treadmill of Swift Development
Key Path Expressions as Functions by Stephen Celis and Greg Titus
Objective-C Cruft
When to Upgrade Your Old Swift Projects? (spoiler... Yesterday!)
Upgrading Your Core Skills
Why it's important to have Core Skills and not just Coding Skills?
The Importance of Good Internal Presentation
Why Senior Developers need Good Communication Skills
Picking Up on Impromptu Speaking Skills
Don't Feel Obligated Into a Role such as Public Speaker
Upgrading Your Swift Skills
Paul's Thoughts on SwiftUI
Understanding The New Patterns of SwiftUI
The Importance of Unit Testing
Ash Farrow on JS vs Swift
The Complexity of Xcode
Upgrading Other Tech Skills
Git and Version Control
Learning New and Different Tools
Terminal and Bash Scripting
Regular Expressions
Try Swift on other Devices
Be curious about other languages and platforms
Recommended Courses and books
Testing With Swift
Swift Design Patterns
Swift For Good
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)
★ Support this podcast on Patreon ★
2/2/2020 • 1 hour, 9 minutes, 59 seconds
SwiftUI - The Good, the Bad, and the Benefits
Videohttps://youtu.be/8X2GVqg2lUIFull ArticleSwiftUI: Everything is possible if you think like AppleRelated Episodes
Episode 12: iOS Developer Interviews with Alex Bush
Episode 14: iOS App Architecture with René Cacheaux and Josh Berlin
Episode 18: WWDC 2019 - Apple Watch with Gary Sabo
Episode 19: WWDC 2019 - Swift UI with Jason Anderson
Episode 20: WWDC 2019 - Mac Development with Daniel Jalkut
Related Links
Heartwitch - Live Stream Your Health Stats Right From Your Apple Watch - https://heartwitch.app
LansingCodes - GitHub Repo
Peopart Project
Detroit Tech Watch - Getting Started with Swift and Apple Watch Development
No Overview Available
Gui Rambo - You Can Use SwiftUI Today
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Experience and Example Projects
Peopart ProjectDetroit Tech Watch - Getting Started with Swift and Apple Watch Development
LansingCodes - GitHub Repo
Heartwitch - Live Stream Your Health Stats Right From Your Apple Watch - https://heartwitch.app
Why SwiftUI Now?
Single Source of Truth
Declarative vs Imperative Programming
Functional Reactive Programming
Terminology of SwiftUI and Apple
Why not SwiftUI?
Older Operating Systems
Using Special UIKit Views and Controls
Requires Very Stable App with Good Documentation
Workarounds for SwiftUI
Preprocessor Directives and Attributes
UIViewRepresentable and UIViewControllerRepresentable
When SwiftUI is Ideal
Simple UI
Apple Watch
Cutting Edge Audience
Internal Projects
Brand New Apps
Cross Apple Platform
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshowCreditsMusic from https://filmmusic.io"Blippy Trance" by Kevin MacLeod (https://incompetech.com)License: CC BY (http://creativecommons.org/licenses/by/4.0/)TranscriptionLeo Dion (Host): Welcome again to another episode of empowerapps.Show. Thank you for joining me. I'm the host, Leo Dion. This is the BrightDigit podcast where I talk about Swift development, development in the Apple ecosystem, and just overall updates, changes in ways that managers, CTOs and developers can stay current and up to date with new things coming out when it comes to Swift and Apple products. [00:00:36] Today, I'm going to be talking a little bit more about SwiftUI - the good, the bad, and the benefits. Specifically, I want to talk about my experience and examples of work that I've been doing in SwiftUI over the last few months, and then we'll be getting into why Swift UI is here, why Apple introduced it in 2019 we'll then be talking about why SwiftUI is not really a good use case in a lot of examples. I'll be talking about some workarounds about how to get around that if you still want to use Swift UI. And then we're getting into when and where Swift UI is the ideal use and what apps or maybe devices, where Swift UI really makes a lot of sense. [00:01:21] So I want to talk a little bit about my experience and examples of where I've been using Swift UI.[00:01:27] So back in June, I actually did a workshop, and while it was the same month as WWDC, a couple of weeks actually afterwards, I ended up using UI kit for it. I called it PeoPart because that's the random name generator - what it came up with. Essentially, it's a list of blog posts and comments that you can see on an iOS app.[00:01:50] I use UIKit for this example. Because at the time I really didn't want to jump into SwiftUI with new developers and risk that. But I will say that with this application I am slowly migrating over to SwiftUI. So the sample app actually available for you on GitHub and they will share a link for folks later in the show notes.[00:02:16] But this is a example that I want to see what it'll do and what it will take to convert a UIKit app over to Swift UI and see what exactly happens when I do that. [00:02:29] he other example is a app that I'm using or a building for my local coding community. Lansing codes where people in Lansing can see what events and what meetups are taking place.[00:02:43] It uses the Firebase backend and Web API that Eric, my colleague had built for the local community and uses combine, obviously along with Firebase. It uses Swift UI and I think it's a really great example of where I'm taking a fairly simple app, brand new, basically new app and building it into a iPhone app in this case. [00:03:09] Lastly, you probably heard, I've been working on an app called HeartTwitch ,an independent watch app. They use a Swift UI and Vapor as the backend, and the idea of this app is that live streamers can share their heart rate right from their Apple watch and then take that sharing to a web browser window.[00:03:27] Then use something like OBS for live streaming to share that video. This is a great example of using Swift UI. It's a brand new app. It's Apple watch. It makes a lot of sense because we're talking about streaming data. And so, this is one example where I think that Swift UI works out really well, and that is the Apple watch.[00:03:46] So you're probably wondering why is Swift UI now? And I think there's a few good reasons. We did an episode back in June with René Cacheaux and Josh Berlin from raywenderlich.com to talk about iOS app architecture and René had some really strong opinions about the issues with storyboards specifically this idea of single source of truth.[00:04:09] What are your recommendations or your personal styling? [00:04:12] René Cacheaux (Guest): I would not recommend anyone using Interface Builder, especially in large teams. [00:04:17] Leo Dion (Host): Yes. [00:04:17] René Cacheaux (Guest): That's one of the opinions that I do have. It's mostly because with interface builder. You don't have a source of truth. Everything that you put in your storyboard or your nib file is subject to change by the code underneath it.[00:04:30] And so when you're looking at the storyboard itself and your kind of tweaking the layout and you're taking the constraints and stuff like that, there's nothing stopping the code underneath of completely changing that. And so when there's bugs and stuff, sometimes it's really hard to figure out the root cause, cause you can't just look at the storyboard that's not enough. [00:04:46] Leo Dion (Host): He said the problem with storyboards as well with coded applications. If you're doing two of the same thing, then you run into the issue where your UI is not going to look like what you expect it to look like when you build the Storyboard in Interface Builder as opposed to coding. and this can run into issues because you don't have a Single Source of Truth for how your user interface is going to work out.[00:05:14] What is exactly Single Source of Truth. what Wikipedia says is it's the practice of structuring information models and associated data schema such that every data element is mastered or edited in one place. In other words, you have one central location where data is, as data is added or entered or edited.[00:05:35] The view automatically updates that accordingly. And what this comes down to is what's called reactive programming or functional reactive programming. And we talked a little bit about this with Jason in our Swift UI episode. Jason has a lot of years of experience building a user interface and reactive programming, reactive frameworks have been around, even back when, Objective-C was the only way to develop an app. And Jason talked about this and how reactive programming is supposed to work. [00:06:06] Jason Anderson (Guest): So we all sat down and we looked at it and we started incorporating that into the work that we're doing. It's particularly nice because a lot of the apps we were developing at the time were very heavy with network updates.[00:06:18] A lot of JSON API requests that were dependent upon each other. So, you know, you would set up maybe a, an operation queue that you would have to have something before you get to the next and try to create these dependencies. But you know, that code can become a little bit difficult to manage long-term.[00:06:37] But then when he started showing me how these streams, as they're called on the reactive cocoa world. Basically streams of data that you can subscribe to. We can observe this object. You can subscribe to the data that's coming across and you can manipulate on the fly to get it to what you need. And as those data pieces are coming across, you can filter them based on specific criteria.[00:07:00] You can map them into other objects, you can trigger new network calls based on the results. It became very easy to tie in a lot of that dependency logic into a single network call, where before we would have, you know, a delegates and operation cues and things just strung out throughout the app. Now we have one simple change function that has that logic kept in one place.[00:07:24] So it was, it was kind of nice to keep that altogether there, so it was much easier to maintain. [00:07:29] Leo Dion (Host): There's some really interesting examples and places where reactive programming has already been used. We see this when it comes to a lot of the JavaScript libraries out there. I think Angular kind of does a Reactive thing - even ReactJS does a bit and VueJs. [00:07:46] They all kind of have this idea of having a central place where data is stored and used and reacted to and kind of like a two way binding sort of way. I had some experience with this actually when I used to do a Silverlight development. Yes. How many of you remember SilverLight? [00:08:05] The idea is we're shifting away from Apple's suggested pattern of model-view-controller where you have a central controller that listens to model changes and updates the view. And now what we have is a view model-model-view pattern.[00:08:22] The idea being is that there is a view model, which is a conversion of that model into a data model that the view will use in order to show what is going on. For instance, like you might have a list of people, but that list of people is not just going to have that data object for people, but it might also have some other metadata that you want to display on the screen or view model, which will say things like, what color to show or what font to say, and things like this will be stored in a view model so that the view can update it accordingly.[00:08:56] Some of the components that are used in reactive programming had been translated over to Combine and Swift UI. And there's some specific terminology that's been used. [00:09:05] For instance, we have the idea of a Publisher. So one example is where you're downloading data from a URL, you'll have a Publisher that will have that data or error based on how the status of that network requests went.[00:09:19] And then you might use functional programming to then map that data and using JSON decoder to a set of people instances or blog content. And then you also have the ability to take errors and be able to map those into, say, an empty list of people. Because in some cases, you may not want to show an error - you may want to just want to show an empty list. Um, so that's the idea of a publisher. It's a stream of events that you then are using. Functional programming can map to specific data or data instances. [00:09:53] We also have the idea of a subscriber. A subscriber is something that listens in to a publisher and updates accordingly.[00:10:02] So when it comes to like functional programming, a lot of your functions are kind of subscribers in a way. The most common subscriber that we see, especially with SwiftUI is the idea of observable objects. So for instance. you create a class, which is your view model, which listening listens into updates of models based on data from a URL.[00:10:25] The object model does whatever mapping needs to take place and then updates the view model accordingly. We also have like an EnvironmentObject, States, ObservableObjects, things like this. Depending on how you want that data used throughout the view hierarchy. But the essential idea is like this Observable or Observed object that's then used within Swift UI.[00:10:48] I think the biggest benefit, what we will see with SwiftUI is we can finally say goodbye to Storyboards. I think Storyboards have gotten as far as they can get essentially. And the biggest problem with Storyboards is that you're constantl dealing with a really complex set of user interfaces.[00:11:13] And I think it also introduced, instead of using UI to build your user interface, we can finally have what's called declarative programming brought into Swift. So before a lot, if you do a coded UI, for instance, you're doing a lot of imparative programming and creating that user interface. Here we're using declarative programming.[00:11:33] Where we can do things that we've commonly seen when it comes to HTML. So instead of saying, print out paragraph, print this out and this font print, animate this thing accordingly. We're using declarative programming as a way to basically have almost wysiwyg almost declarative way of seeing how of UI is structured using code. [00:12:03] So you just put in a paragraph within a div, you don't have to say print paragraph, begin print paragraph and things like this. It's all looks according to how your code looks. Another issue that we see with Storyboards is when we're doing a development within teams. So Alex had a really great point about how storyboards kind of have their own limitations.[00:12:30] Alex Bush (Guest): There are, there are trade offs for one approach and another, and at some point it breaks down, right? Or. In some cases it doesn't make sense. And specifically I'm talking about, let's say storyboards don't make a breakdown on scale. When you have. I don't know, more than 20 people, let's say working on the app, but then it does make sense to do it right away as you're a one or two people team.[00:12:55] Leo Dion (Host): Yes[00:12:57] When it comes to working with teams, I think we see the biggest issue when we're merging different storyboards together or multiple people are working on a single storyboard, as I often suggest, if you're going to do storyboards, make them as small as possible and use storyboard references.[00:13:11] But in the end working on a team and working with storyboards can be a real challenge. The other benefit that we see with Swift UI is that Apple now has a way to build cross-platform applications that is cross platform within Apple's ecosystem using Swift UI. I don't know how many of you remember Catalyst, but we talked about this in our episode with Daniel Jalkut where we talk about Mac development and how Catalyst kind of ran into certain limitations.[00:13:44] Daniel Jalkut (Guest): No, it's funny. I had another snap reaction to that during the keynote, and it was basically, I think I tweeted something like. Apple has announced and deprecated a technology all in the space of one keynote, which was basically like: Hey, there's this brand new exciting technology we have that you can adapt your iOS apps to the Mac and you should not use it you should use this new Swift UI. That's not what they said, literally, but..[00:14:11]Leo Dion (Host): So can you do a Mac app was Swift UI, but not as necessarily Catalyst? [00:14:16] Daniel Jalkut (Guest): Absolutely. Yeah. Swift UI is a native technology on and that, just to clarify, that's the big promise of Swift UI is that it is a native technology on all Apple platforms.[00:14:27] Leo Dion (Host): Okay. Yeah, [00:14:28] Daniel Jalkut (Guest): so it's kind of funny. It means that there are two ways to write a Mac app with Swift UI. [00:14:34] Leo Dion (Host): Right? Right. Because you could go to the Project Catalyst route and have basically one bundle essentially, that will work on both iOS and macOS or you can just do a native Mac app and still use Swift UI [00:14:49] Daniel Jalkut (Guest): Right or more precisely do a native Swift UI app and have it run on the Mac on iOS, the watch, or the TV. [00:14:55] Leo Dion (Host): Right, right. [00:14:57] But now, Swift UI allows us a truly cross-platform way to build a Mac app, a watch app and iPhone or iPad app or tvOS app as well. And this goes back to our stuff about HTML. Now we have kind of this way of using almost like a media queries to be able to specify how certain OSes will look in certain ways, using preprocessor directives or things like that as well.[00:15:26] So why might you not want to use Swift UI? I think if you're using an app that's fairly old and it still supports older operating systems, I think you're probably better off sticking with UIKit or whatever framework you're using. There's just no need and no desire to move things to Swift UI because there's nothing in there the user will really see when it comes to that. [00:15:53] So in that case. I think that you probably can stick with UIKit [00:15:59] And if your audience tends to be use older devices or uses older operating systems, there's no need to move to Swift UI. There's no benefit to the user in that case. [00:16:10] Another problem we see is the lack of documentation. I think this has been a really big challenge. There's a great website that provides kind of some information about some of the issues with lack of documentation when it comes to Apple stuff. I think that can be a real challenge with something that's only been around for six months to a year. You may also require UIKit in a lot of ways.[00:16:33] First of all, you might have like a third party dependency to UIKit. You're using some CocoaPod that has some UI widget that uses UIKit and that case it can be a real uphill battle trying to use Swift UI in that case. There's also UI widgets that are just simply missing from Swift UI that we have in UI kit.[00:16:51] One of the biggest ones I can think of is UICollectionView. Especially with some of the updates we have: data sources and diffable data. It makes a lot sense to stick with UICollectionView in a lot of ways because of all the features that it gives us with UIKit and a lot of robust stuff that they've added over the last few years.[00:17:13] It makes sense to just go with UICollection and not try to hack something together necessarily in Swift UI. [00:17:20] So you're probably wondering, well, how do I still use Swift UI if I have an older application because there are work arounds to get around this. There are things like preprocessor directives.[00:17:32] You can say that only a newer operating systems have access to certain features that are built on SwiftUI. There's also the ability to interface between UIKit and SwiftUI. For example, when you have a application that is UIKit based and you want to bring in something from Swift UI. We have UIHostingController on iOS.[00:17:53] Now, UIHostingController is the iOS version of that, but there's one for WatchKit as well as AppKit. And that allows you to, use a Swift UI element within a UIKit. So that's a one great example. [00:18:10] The other thing is that, let's say you will need to bring in something from UIKit to your SwiftUI app.[00:18:16] In this case, you want to use something like UIViewRepresentable or UIViewControllerRepresentable, which allows you to do that. I don't know how many times I've used a activity indicator from UIKit in order to show a busy like for instance, I'm downloading a URL or making a URL request.[00:18:35] I'll often times need to make a activity indicator from UIKit and bring that over to SwiftUI.[00:18:42] So then the question is, when is Swift UI ideal? What is the use case where SwiftUI it makes a lot of sense. I think if your UI is fairly simple, you probably could just stick with using Swift UI. In that case, it makes a lot of sense.[00:18:56] And an example of this is like that Lansing codes app that I built. Or, for instance, an app that just uses a table views. Why don't I just use a List in Swift UI? It makes sense and it will work out great if you're willing to work within the limitations of Swift UI, it actually can work with you as opposed to against you.[00:19:14] And of course that makes sense. If your devices fairly simple, like an Apple watch. I think any Apple watch app, it makes sense to switch over to Swift UI. At some point. Switch UI was built out of the Apple watch UI team, so it makes a lot of sense. [00:19:29] The other thing is, are you willing to deal with unstable API and docs?[00:19:33] If you're willing to deal with that and deal with the challenges and limitations that come up with that, then it's probably okay to just go to Swift UI and if you're starting with a new project and any sort of new application than maybe going with SwiftUI makes a lot of sense. [00:19:47] If you're going to start from scratch, you may as well start using Swift UI, especially if you're thinking about migrating to other operating systems within the Apple ecosystem.[00:19:56] And if your audience let's say people who are really technically inclined, like developers or folks who already are using the latest operating system, then it makes sense to go with Swift UI. In that case, you're willing to deal with whatever issues and be able to deal with the limitations that Swift UI has. There's a great article by Gui Rambo, which I'll link the notes.[00:20:17] Where he talks about how Swift UI is ready in a lot of cases, and maybe if your audience is the right fit, maybe it's the right time to switch over to using Swift UI, especially if you're starting a new project or something on the Apple watch. So we have a lot of great episodes you might want to catch up on.[00:20:33] We talk a little bit more about Swift UI and some of the new stuff that came out in WWDC. We have our episode and video that I did about Swift UI and 2020 trends. We also have the episode with Daniel Jalkut on Mac development. We talked about Swift UI and reactive programming with Jason Anderson and then Apple Watch with Gary Sabo.[00:20:52] And if you're interested more on app architecture, we have a René Cacheaux and Josh Berlin from raywenderlich.com who talked about iOS app architecture and their great book on learning how to do iOS app architecture the right way. You can learn more and catch up with more articles and episodes on my business website brightdigit.com.[00:21:13] As well as the podcast website. Empowerapps.show. Thanks again for joining me. I look forward to talking to you again on our next episodes.
★ Support this podcast on Patreon ★
1/19/2020 • 21 minutes, 29 seconds
Server-Side Swift with Tim Condon
GuestTim Condon - Twitter @0xTimRelated Episodes
Episode 8 - Cloud and Backend Services
Episode 23 - Modularizing in Xcode with Abbey Jackson
Related Links
Hello Server-Side Swift by Logan Wright
Leo's Vapor Tutorials and Videos
How to get started developing Server-Side Swift - SwiftTO 2019
Vapor – Deep Dive Guide into Setup and Deployment for Heroku and Ubuntu
Asynchronous Multithreaded Parallel World of Swift
Server Side Swift with Vapor on raywenderlich.com
Porting Swift to Windows by Saleem Abdulrasool
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.How does Vapor compare With other backends?
Why not use CloudKit or Firebase?
How does it compare to NodeJS, Ruby, .Net or PHP?
Limitation of various programming languages
Preferred Database Backend
What's the difference between Vapor and other Server-Side Swift backend frameworks?
What is the Server-Side Group and SwiftNIO?
Using Vapor Today
Is it ready for production?
What are some considerations a dev team should make?
What's the best way to get started?
What plugins are available? (Database, Authentication, Leaf, etc...)
What are differences with Swift on the server vs. the client?
How can you share code correctly between iOS and the server?
The Future of Vapor 4
What improvements are being made in Vapor 4?
How does SwiftNIO2 affect Vapor?
How does Swift 5 change the way database models work?
How has SwiftUI and Combine affected Vapor and the way HTML is rendered?
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
1/12/2020 • 52 minutes, 35 seconds
2020 Developer Wish List with Alex Bush
Guest
Alex Bush - Twitter @alex_v_bush
LinkedIn
iOS Interview Guide
Inside iOS Dev Podcast
Related Episodes
Episode 12 - iOS Developer Interviews with Alex Bush
Episode 23 - Modularizing in Xcode with Abbey Jackson
Inside iOS Dev - First Thoughts on SwiftUI
Inside iOS Dev - WWDC 2019
Inside iOS Dev - Protocol Extensions
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Podcast Update in 2020
EmpowerApps is Moving to 3 episodes per month
About the Inside iOS Dev Podcast
Xcode Wish ListLeo
Improvements to Auto Completion and SourceKit
Improvements to Playgrounds
Brand New IDE (similar to Objective-C, iTunes, UIKit, etc...)
XcodeGen - Swift command line tool for generating your Xcode project
Better Support for Modularization and Swift Packages
Fastlane - App Automation
swift-sh - Swift Scripting
Speculid - Asset Management and Using SVGs
Alex
Fix Look Up References in Xcode
Vim Support - XVim2
Buck - A high-performance build tool
Guard - automate testing
More Command Line Tools and Automation
Swift Wish ListLeo
Add More UI to SwiftUI
More Guidance on Complex Data Binding
Asynchronous Multi-Threaded Parallel World of Swift - Add Async and Await
Better Asynchronous Unit Testing
In-App Purchases for the Watch
Alex
Alex's thoughts on SwiftUI
Combine and Reactive Programming vs RxSwift
SwiftUI and UIKit interop
Alex's thoughts on Protocol Extensions
Instant apps?
Future-Proofing with SwiftUI
Abstracting Implementation Details for Future Hardware
Learn Once and Code Everywhere
Not Ready For Production Now But is the Future
Perfect for the Apple Watch
Likely to Change in the Future
Backwards Support for UIKit/AppKit
UIActivityIndicatorView
Social MediaEmailleo@brightdigit.comTwitter BrightDigit - @brightdigitLeo - @leogdionLinkedInBrightDigitLeoInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
1/6/2020 • 46 minutes, 27 seconds
Training Your Team with Steve Lipton
Guest
Steve Lipton- Twitter @Steve_Lipton
LinkedIn
MakeAppPie
iOS Development Tips Weekly
LinkedIn Learning Courses
Steve Lipton - No Biz Like Show Biz: Video Recording Your App for Marketing and Instruction
Related Episodes
Episode 25 - Hiring an iOS Developer with John Knox
Episode 29 - Managing iOS Development with Peter Witham
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Why Training Is Important
What is the Red Queen Dilemma?
What's the difference between Coding and Programming
Why knowing your customer's needs helps your training be better focused
The significance of Soft Skills too
Why you should invest in your current employees rather than hiring new employees
When consultants and trainers make the most sense
Building Good Documentation
What Makes For Good Training Material
Make sure the pattern and style matches yours
Good production quality
Make sure it's readable!
Make sure your audience understands - Bloom's Taxonomy
Make sure it sticks
Creating Good Training Videos
Steve Lipton - No Biz Like Show Biz: Video Recording Your App for Marketing and Instruction
Have a decent microphone
Have a quiet room
Font Size 20 and up
Balance Size, Resolution and File Size - 16:9 HD Resolution
Have a script to follow
How to Judge Good Training Material Online
How many video do they have?
Watch the welcome video
Good series of tracks
Good organization
Specific Challenges with Xcode and Swift
Dealing with constant changes and updates (i.e. Xcode)
Understand updates are part of the workflow
Patterns are more stable then APIs (i.e. Reactive Programming vs Combine)
Apple's Character Arcs
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
12/22/2019 • 37 minutes, 2 seconds
Future Proofing Your Apps with Gui Rambo
Guest
Gui Rambo - Twitter @_inside
Blog
Github
Stacktrace Podcast
9to5Mac
Related Episodes
Episode 18 - WWDC 2019 - Apple Watch with Gary Sabo
Episode 19 - WWDC 2019 - Swift UI with Jason Anderson
Episode 29 - Managing iOS Development with Peter Witham
Episode 14 - iOS App Architecture with René Cacheaux and Josh Berlin
iPhreaks Episode 244 - MicroConf and Writing Health Apps for Apple Watch
Stacktrace Episode 63 - Classic Butterfly
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Developer Apps and WWDC
New Apple Developer App!
Apple keeping in contact with developers
Streamlining getting started as a developer
Apple Business bureaucracy and DUNS number fun!
Cocoahub App for Swift Developers
WWDC Mac App by Gui
Lack of Apple Documentation
Supporting Future Hardware
Adam Bell (@b3ll) - Getting ahead of the curve - NSSpain 2015
Don't deviate from what Apple expects
Random iOS Architecture Names
The Multi-Threaded Asynchronous World of Swift from 360iDev by Leo
Will ARM matter when they switch from Intel?
GitHub? Remember SourceForge
Future-Proofing with SwiftUI
Abstracting Implementation Details for Future Hardware
Learn Once and Code Everywhere
Not Ready For Production Now But is the Future
Perfect for the Apple Watch
Likely to Change in the Future
Backwards Support for UIKit/AppKit
UIActivityIndicatorView
Where is AR Headed with Apple?
Gui Rambo: Why an AR skeptic is excited about RealityKit and Reality Composer
Measurement App
Are AirPods Pro a step towards Augment Reality?
Google Translate and Wordlens
Being Able to Connect to Third-Part AR Similar to CarPlay
Tinkering with Raspberry PI and HomeKit
Graphical Swift Development with GTK
Developing with the Raspberry Pi 4 and Raspberry Pi Zero
Homebridge
Developing a HomeKit device in Swift
What's Missing on the Apple Watch
Faster Processor and Better Battery
Lack of In-App Purchases
Lack of Biometric Authentication (i.e. Finger Print Reader)
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
12/15/2019 • 42 minutes, 35 seconds
Quickie: Swift UI and 2020 Trends
Youtube VideoRelated Episodes
Episode 22 - September 2019 Event
Episode 19 - WWDC 2019 - Swift UI with Jason Anderson
Episode 18 - WWDC 2019 - Apple Watch with Gary Sabo
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Maturity for the iPhone
Unlikely to see any big hardware innovations at this point
Maybe foldable
Great time to get an app on here, because it’s a mature product
11 not a huge change from the 10 (but definite upgrade from the 8)
Apple Watch Innovation
Waiting for some improvements to battery and processor, but this is about to become an amazing product
Great time to think about developing an app, esp. in the health & fitness sector
iPads and the Pro App Market
Apple Arcade shows Apple is interested in a subscription/bundle for games
Highlighted new iPad but where are the serious pro apps
Why having a subscription for app/games is great
Hardware is great, but software needs to improve app ecosystem
The App store eco system is still setup for “casual” apps for there is potent
Swift UI
SwiftUI is changing the way UI is developed but slowly
First Swift-only API (no Objective-C compatibility)
Maybe not be ideal for some companies with different design patterns but it’s a better starting place then Storyboards and UIKit
Cross-Platform compatible with iOS, watchOS, tvOS, and macOS
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
12/1/2019 • 7 minutes, 59 seconds
Managing iOS Development with Peter Witham
Guest
Peter Witham - Compileswift.com - Twitter
Related Episodes
CompileSwift - Episode 10 - Apple Release Cycles
CompileSwift - Episode 11 - Source Control
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Release Cycles
Should Apple keep releasing on a yearly cycle?
Rough 2019 Release with iOS and macOS
How iOS 13 is the first significant release since iOS 7
iPad vs MacBook
Improvements to iPadOS 13
What's missing from the iPad for pro-use?
Canopy by Studio Neat
Dealing with App Store and Teams
Certificates and Profiles
Working with Source Control
Agreeing on Xcode Version
Is Swift UI Ready For New Projects?
Depends on Audience and User Base
Lack of Documentation
Dealing with New Technical Hurdles
Big Improvement over UIKit
How to deal with UI Development right now?
Changes Over The Years for Teams
Better Handling of Remote Teams
Xcode Improvements
How Apple's culture affects the developer experience?
How to Deal with Decisions as Team Lead
Dealing with Third-Party Dependencies
Source Control Improvements
Using Gitolite for Local Hosted Git
Introducing New Technologies With Tomorrow in Mind
Realizing the Soft in Software
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
11/24/2019 • 43 minutes, 27 seconds
Apple Hardware 2019 with Paul J Schmidt
Guest Paul J Schmidt - UnoDeuce Multimedia
Youtube
Instagram
Twitter
Facebook
Related Episodes
Episode 13 - Apple and Video
Episode 7 - Apple 2019
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.AirPods Pro
Improved Sound Quality and Battery
Noise Cancellation and Transparency Mode
Possibly A First Attempt at Audio Augmented Reality
iPhone 11
Video Recording Updates
Filmic Pro
Frame Rate Improvements
What's the advantage for Max Vs. Plus?
Night Mode, Deep Fusion, and other camera improvements
iPads and Macs for Professionals
Are iPads ready for Profession Video Editing?
Adobe Premier vs Adobe Rush
iMac Pro vs Mac Pro
Intel vs ARM
iOS 13 and Catalina
Is there a need to upgrade for non-developers?
When will iOS 13 be ready?
Issues with 64-bit only on Catalina
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
11/17/2019 • 33 minutes, 5 seconds
Media Outreach with Jeff Gamet
Guest Jeff Gamet - Text Expander Evangelist
TextExpander - @textexpander
Twitter @jgamet
Instagram @jgamet
Related EpisodesEpisode 26 - App Search Optimization with Ariel MitcheliSponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Importance of Reaching the Press
Clear messaging prevents uncertainty and ambiguity
Pay attention and communicate with users
Get insight from the users by scheduling calls
Cater your messaging to your audience
Using PR Services (ex. PRLog) are helpful but personal relationships are important
Going to the Right Audience
Based on the target device (Android vs iOS) and industry, pitch to right journalists
Talk to developers who have done apps in that space
Make sure the press release service aligns with your app
The Email - Important Components
What is it - Software, Hardware, etc...
What does it do - Email Client, Music Player, iPhone Case, etc...
Who is it for - for the iPhone, for the Apple Watch, for Windows PCs, etc...
Why should I care/What makes it special/What need does it fillEmail Client - AI based Spam Filter for Administrative Assistant
The Email - Subject Line Mistakes
Ambiguous or Unclear Subject Line
Being Too Clever
Pretending Like You're Looping Back
Timing is Important
Keeping It Fresh
When to Actually Follow-Up
How to build a Media Kit
High Resolution Screenshots - PNG or JPEG
Logos - SVG and PNG or JPEG
Product Information - PDF - not Microsoft Word
Reviewers Guide
Walkthrough Documentation
FAQ - Addresses questions the media will have
Required Files or Info - Example Files, Logins, etc...
Contact Info - email address, social media, home page
Videos optional - Youtube Link (for in-use) or GIF (for screenshots)
How Can Companies Integrate the Messaging Early On
Think About the Messaging Early In the Development Process
Think About How It's Presented As It's Developed
Mom Test - Rope In Friends and Family
Look at Other PR Pages such as TextExpander's
Live Stream or Schedule Live Presentations Usage of the App
Using the Press for Recruiting Beta Testing
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
11/3/2019 • 42 minutes, 45 seconds
App Store Optimization with Ariel Michaeli
Guest Ariel Michaeli - Twitter @arielmichaeli
AppFigures - Twitter @appfigures
360idev 2019 - App Store Optimization for the Rest of Us
AppFigures Guides
AppFigures App Store Optimization Checklist
How to Optimize Your Keywords List in App Store Connect
Optimizing Your App’s Name to Get More Downloads
How to Choose the Right Keywords for App Store Optimization
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.App Store Optimization Basics
The Importance of Marketing
Why not depend on Today, Category, or Featured by Apple
How it helps established business as well as startups
60% of downloads are directly from the App Store
You only have 20 seconds to capture your audience
AppFigures App Store Optimization Checklist
Key Differences between SEO and ASO
Backwards Engineering the Play Store/App Store vs. Google
ASO is restricted by the fields and parameters Apple or Google Play Store provides
People Search for Solutions on Google vs People Search for Apps on the App Store
What are the Components For Successful ASO?
Research for Correct Keywords
Apply Keywords based on Solutions the App Provides
Breakdown Keywords
Use the Correct Title and Subtitle Correctly
Title and Subtitle in the Apple App Store Are Rendered As One Sentence
How to Optimize Your Keywords List in App Store Connect
Optimizing Your App’s Name to Get More Downloads
How to Choose the Right Keywords for App Store Optimization
Make Visuals Compelling Which Encourage Downloads
Videos Are Very Helpful
Give Your Screenshots Context and Use the Design of the App PageUser Jump
Monitoring Keywords and Algorithm Changes
Experiment with Emulated App Store Pages and A/B Testing
What are Common Mistakes For Successful ASO?
Don't Optimize for Competitor Name
Don't Leave Your App Page Alone But Constantly Monitor
Don't Optimize for Only Your Competitor
Apple Watch App Store and Heartwitch App Feedback
Understand Your Audience
Use Branding with Browser Window
Selling on the Apple Watch Store Makes the App Unique
Ask Apple to Feature
Reach Out To The Community
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
10/27/2019 • 46 minutes, 1 second
Hiring an iOS Developer with John Knox
Guest John Knox - Twitter @windaddict - LinkedIn
Hiring An App Developer - Twitter @hireanappdev
Previous EpisodesEpisode 12 - iOS Developer Interviews with Alex BushSponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Business of Software Highlights
Matt Wensing on Forecasting
One Second Everyday
iOS Hiring Challenges
Lack of Experience and Understand of iOS Development
Cargo Cult Interview Style (and Burying Dead Bodies😱?)
Lack of Training Resources for Employees
Not Oppurtunities for Growth
Lack of Organization Skills in HR/Recruiting
Getting Hired
Dealing with HR Automation
Finding the Right Person at the Company?
LinkedIn vs Twitter
What Companies Should Look For?
How John Does Coding Challenges
Finding Coding Style
Have Little to No Complex Dependencies
Seeing Actual Experience
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
10/20/2019 • 33 minutes, 46 seconds
Continuous Integration with Kyle Newsome
Guest Kyle Newsome - (Twitter @kylnew)
Continuous Integration - What, Why & How feat. Bitrise - SwiftTO
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.New iPhone 11 Thoughts
Camera Improvements
Max vs Not-Max Size
DSL vs iPhone
Night Mode
Continuous Integration Issues with iOS
Deployment Issues
Cache Issues
Continuous Integration 101
How to Get Started
Removing Dependencies on People and Files
Reproducible Anywhere
Using Pull Requests or Code Reviews As Triggers
Having Tests to Address Pain Points
Dealing with Certificates and Provisioning Profiles
HashiCorp
Using Tools Like Fastlane
Comparing Services
Cloud Services
Bitrise - Focused on Mobile Development (Android and iOS)
Travis-CI - Free Open Source (includes macOS)
Circle-CI - Free Open Source (includes macOS)
Self-Hosting
Jenkins
Xcode Server
Running Your Own Mac Virtual Machine
Hybrid SolutionsMacStadium
Differences between macOS and iOS building SpeculidTutorial Setting Up Speculid and macOS on Travis-CI
Feedback Loops and CI
Having Healthy Unit Tests
Rapid Results through Automation
Proofing Builds Before QA
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshowTranscriptionLeo Dion (Host): Hey, Kyle, how are you doing? [00:00:01] Kyle Newsome (Guest): I'm doing great. Thanks very much. It's unfortunately a slightly rainy day in Toronto here, but otherwise, a good mood. [00:00:07] Leo Dion (Host): Yeah, same here. It's been a weird, cause. I don't know what Ontario's like, but Michigan. It's like one day was 80 degrees and then the next day dropped down to like 50 or 60 [00:00:18] Oh, sorry. That's Fahrenheit. But you get what I mean. [00:00:20] Kyle Newsome (Guest): It's okay. I lived a little bit in the States, so I like can do the conversion. I know that like 70 is nice and comfortable. Eighties getting to hot sixties like not too bad. [00:00:30] Leo Dion (Host): I think fall's finally here. Yeah, so another sign of fall is the new iPhones. Did you get anyone iPhone?[00:00:38] Kyle Newsome (Guest): I got the new iPhone 11 pro max. Which I've been waiting to upgrade for a few years. So this is like my first experience with like the X, you know, edge to edge screen as well. [00:00:49] Leo Dion (Host): What do you think of it? [00:00:51] Kyle Newsome (Guest): Honestly, so far I'm pretty impressed with it and as much as people have complained about how the three lenses look, I actually think it looks pretty nice.[00:00:58] They've done something good with the glass backing, so it looks pretty refined, so I can't really complain about that. I've played around with the camera and the night photography a little bit and it's pretty cool to see how much it can capture in low light. [00:01:11] Leo Dion (Host): What did you have previously? [00:01:13] Kyle Newsome (Guest): Previously I had the iPhone seven plus. [00:01:17] Leo Dion (Host): Okay. And do you really like the max size? [00:01:19] Kyle Newsome (Guest): You know, like I'm used to it in my hand now, so I can't complain. You know, for the longest time I didn't think that I would like it, but I believe when the seven plus was the only one that had the two cameras, and I was really interested in that functionality.[00:01:32] So I upgraded to the largest one, and now I'm kind of used to it. But I think that both the regular size and the max size are both pretty good in terms of screen size you got. I'm just sort of used to this in my hand and I liked that when they at least made the change from the old ones to the new ones, they kept the size of the same and then just you got more screen space so it feels exactly the same as my old phone in my hand.[00:01:56] Leo Dion (Host): Yeah, I was a plus size user and I loved that. And then I went to the 10s, not max. And I don't feel like I miss the size because the screen size is pretty much the same. But I was just curious, like if you see like a big advantage with the max. [00:02:12] Kyle Newsome (Guest): No, I don't really think so. I guess it gets a little bit longer battery life, which is always nice, but otherwise, yeah, they both look pretty nice.[00:02:20] I was sort of on the fence whether to go with one or the other, but I think ultimately it was kind of like hand feel that I just like, I was used to the weight and everything, so I just wanted to make a seamless transition like that. [00:02:30] And the big selling point for me with the plus was the extra lens. And like now we don't have that.[00:02:35] Leo Dion (Host): Like the extra selling point isn't there because he can pretty much get that with the regular pro. So like that was my big thing was I just want a really good camera. Like I don't have cameras anymore. Like I think I sold my DSLR and my other digital cameras a couple of years ago cause I wasn't really using them.[00:02:54] And like the convenience of having an iPhone was always worthwhile to me. And like the dual camera, like I'm a. I know people don't really care for portrait mode, but I use portrait mode all the time when I'm taking pictures with my family and things like that, and I like it a lot. [00:03:08] Kyle Newsome (Guest): It's funny that you just sold your DSLR and I just bought a mirrorless camera because I was interested actually mostly for video recording purposes, which i think is actually where there's the biggest difference between what these phone cameras can do and what the regular cameras can do, because they can do a lot of post-processing on like one image, but doing things like getting that portrait mode depth of field effect per video is not something they're really capable of today.[00:03:33] Leo Dion (Host): Yeah. Not now. [00:03:34] Kyle Newsome (Guest): That aside, I mean, yeah. It's just like the camera on your phone is just so much more of a utility for everyday use. So many of the pictures that I take with my phone or just to like to help me maybe remember a password that was written on a note somewhere that I wanted, or just general utility.[00:03:51] They're not very interesting pictures, but I would never do that with a mirrorless camera. Obviously not convenient at all. [00:03:58] Leo Dion (Host): Yeah. Really liking these cameras on these phones. So what's your opinion of like night mode. [00:04:03] Kyle Newsome (Guest): You know, it wasn't the operating the way I thought. I thought it was just going to basically do a whole bunch of post-processing on the image and know how to like extract the right colors, but it actually does do like a long shutter effect, which surprised me a little bit.[00:04:18] I wasn't ready to see that. But it's interesting. So I think depending on the amount of light in the room, it kind of auto suggests about how long it's going to do the shutter effect for and seems like the longest it goes for is maybe four seconds. [00:04:31] Leo Dion (Host): Okay. [00:04:32] Kyle Newsome (Guest): What I find interesting about it though, like I'm curious about what it's doing, because obviously if you are holding the shutter open for four seconds and you're just doing it like handheld, you're probably not holding it perfectly still.[00:04:43] So, I wonder, you know, what other sorts of machine learning and things they're applying after the fact to make sure it still comes out like a crisp photo, but it's grabbed more information about color simultaneously. I can't say I've really looked into exactly what it's doing, but that was the experience I got from it.[00:05:01] Anyway, I thought it was going to be just Oh snap and then it'll post-process and like bring out all this color, but it actually does try to record more light for longer. [00:05:09] Leo Dion (Host): Okay. So that's what it's doing. So it's basically keeping the shutter open to get more light while at the same time doing some ML stuff to like figure out what's the best photo to use or what's the best picture to use. Interesting. [00:05:21] Kyle Newsome (Guest): For sure. [00:05:21] Leo Dion (Host): That's pretty cool. So before we deep dive into continuous integration, you want to tell people a little bit about yourself. [00:05:28] Kyle Newsome (Guest): Sure. I'm terrible at talking about myself or building myself up. I'm an iOS developer in Toronto. I've also done a lot of full stack development over the years, and so I've done backend and JavaScript and PHP, but I did Objective-C back in the day and then got a little tired of it, did some more Javascript just because the language, I think was more pleasant to use.[00:05:53] And then Swift came out and they open sourced it, and then it just sorta like turned all my attention back to iOS again. And then I've just been going straight with iOS since, but even some of my continuous integration experience actually came first from doing it on the web side, deploying web and backend Java script applications.[00:06:12] And then when I came back to the iOS world, realized I was joining a lot of teams that weren't doing much with that. And so. Really started trying to learn more about continuous integration on the iOS side and championing that at the places I was working. [00:06:25] Leo Dion (Host): And where are you working right now? [00:06:26] Kyle Newsome (Guest): So right now I am consulting with Deloitte for Loblaw digital.[00:06:32] Loblaws is like the Walmart of Canada, effectively. And I work with their loyalty, their PC optimum points application, which is. I believe the biggest loyalty program in Canada as well. So like when you go out and buy groceries or you go to the pharmacy, they're constantly collecting points and they're giving you bonuses and things.[00:06:50] So yeah, that's the application I'm working with right now. [00:06:53] Leo Dion (Host): What have you found is the biggest difference with CI or continuous integration on iOS. And I'm assuming we're just talking about iOS as opposed to web development. [00:07:05] Kyle Newsome (Guest): I mean, I think probably the deployment factor is a huge thing, which isn't exactly like, it's the last step of the continuous integration process, like right as you deploy, but going even beyond continuous integration, there's like continuous integration, continuous deployment.[00:07:20] And continuous deployment is really like, you're always able to continuously like push out the latest version of your application, you know, multiple times per day even, which is not really possible from an iOS perspective. We have to be a little more meticulous because we go through the Apple review process.[00:07:36] A lot of companies are, you know, probably deploying maybe at most once a week. I don't hear of many who are deploying more than once a week. There's probably some out there, so it's a little bit slower. That's one of the big things. And I think even just some of the tasks you actually do, because continuous integration sort of starts first of all with like build, test, deploy steps, which are kind of just the core steps to getting your application built, making sure it's actually functioning properly, and then sending it out to the world.[00:08:04] But beyond that, we tend to add a lot of additional tasks to kind of make sure that we're. As much as possible, automating our entire process. So some of those additional steps are probably quite different depending on web or iOS. Like I remember on web, I had to be constantly clearing cachees out, you know, clearing cachees out from CDNs or content delivery networks.[00:08:27] And I don't have to do that as much on an iOS side, but there's other tasks I might do instead, like, you know, automatically generate screenshots or something like that. [00:08:36] Leo Dion (Host): All right. So let me do my best attempt at trying to explain what CI is and then you let me know what parts I'm missing. So continuous integration is the idea of, as you make changes to the code, you are running various tests, not just like unit tests, but also like integration testing, things like that.[00:08:58] And also making sure that the app can be easily deployed. And usually you're doing it on some central server somewhere, either locally or in the cloud. So that way you can best recreate the situations for where an app will actually be running. And I'm saying this because you have, like for server side stuff, it's pretty easy because you can just run on the actual server and recreate that situation pretty easily whereas with client applications, you need to like actually recreate the client atmosphere in the client environment in order to do that. But is that like a good description of continuous integration? [00:09:35] Kyle Newsome (Guest): Yeah, I think that's a fairly good description of it. [00:09:38] Leo Dion (Host): What am I missing? [00:09:39] Kyle Newsome (Guest): It's not very often that people ask me to explain it and sort of formal terms, so I'm probably usually speaking about it from the benefits perspective.[00:09:49] But one of the things I guess I take away from it sort of from, I guess a more philosophical perspective, is like there's many things you do to sort of make sure that your app is deployment ready and some of those things can be automated and some of them can't. The ones that you can automate, you should automate and you should be doing them every single time, every single day.[00:10:11] Leo Dion (Host): Yeah. There we go. And I think that's it. It's like regression testing where you're like testing old features and making sure they're continually working and doing it every time in a repeated basis. And when we talk deployment, we're talking about like taking that app and putting it on an actual machine, whether that's your server for server side app or an iPhone or iOS simulator in a lot of cases, and actually testing it on that device and seeing if the app is working.[00:10:36] Kyle Newsome (Guest): Absolutely. [00:10:37] Leo Dion (Host): If you were going to convince somebody who like has never done continuous integration, especially in an iOS application, what would you say to that person or to convince them that like, yeah, you really need to get started on getting your iPhone app running, some sort of continuous integration whenever a new release is about to come out in the app store.[00:10:56] Kyle Newsome (Guest): Yeah, I mean, I think certainly on some teams you just really kind of help identify the pain points they're feeling or you know, something goes wrong and then you do a retrospective on like, why did this happen and how could we prevent it in the future? And then it's really easy to say like, Oh, well see, I could fix that coming from the web, like the example I used before with cache clearing, that was a super easy.[00:11:18] Thing to point out at one company I worked with, like we were just forgetting the clear caches, and then people weren't pulling down the latest version of the application, or they were pulling down the latest JavaScript, but not getting the latest CSS and so they weren't seeing things correctly. So that was, you know, a good pain point from a web perspective [00:11:35] On iOS, one team I worked with, they just had one developer who could deploy the app and had all the certificates and was ready to go and he was also responsible cause one of the things when you deploy an iOS application is you always have to bump the build version, which is like the most boring change you have to make to your application is increment you know, the build number every time. [00:11:56] Leo Dion (Host): But it's easily forgettable. [00:11:58] Kyle Newsome (Guest): Oh, super easy to forget. Right. And that's what was happening in this case was that the developer would sometimes deploy it, he'd forget to bump the build number. So we'd go through the whole deployment process and that build process takes sometimes 20-30 minutes to get that, especially if you include the uploading process to Apple's TestFlight and the processing time before they give you feedback.[00:12:20] That's actually, you know, that's sometimes an hour to an hour and a half. So you know, having to kind of realize that the very end of that. Oops! we forgot to increment the build number let's go back. In this case too he actually unfortunately had just been going through ACL surgery too. So he wasn't always available in the office cause he was going to a physiotherapist.[00:12:41] So like his availability wasn't good. So there, you know, the pain points between relying on this one guy who was in the middle of, you know, dealing with ACL surgery and recovering from that and having that point of failure of the build number. Those were two big pain points and good reasons to move to CI.[00:12:57] So, yeah, I guess in summary, find the pain points. It's probably hard for me to pick someone up off the street who doesn't have a problem already and tell them that continuous integration is going to solve things. But once people have those pains, I think it's really, really easy to change their mind or convinced them to start using it.[00:13:16] Leo Dion (Host): It's one of those cases where it's like you don't realize the pain until your employee has to be out for a few weeks, or what was it - somebody who was like on paternity leave at some company and like they're quickly trying to hire somebody to like fill the gap until he gets back. And it's this like one of those situations where you don't run into it until you run into an issue and you're like, okay, now I need to set up some sort of system with continuous integration in order to make sure that deployments are easy and things like that.[00:13:42] Yeah. What are would be some like first steps in order to get started? Like what would you say is like the bare minimum as far as getting continuous integration set up? [00:13:51] MarkerKyle Newsome (Guest): Yeah, so I mean, one of the first things you probably want to be thinking about is eliminating any local dependencies you have, right. If someone can only run that from their machine there's a reason why, right? Something is local to only their machine that isn't available to others. And a lot of cases with iOS, it's mainly about the certificates and the profiles that are on that computer that the others don't have. So you're going to try to either you know, make sure that your CI system has that stuff now, or ultimately, yeah, you're just trying to make sure that this is something that you can reproduce pretty much anywhere.[00:14:29] You know, that people haven't, you know, have too many local scripts or anything like that. Running that would prevent you from duplicating the build experience somewhere else. So that's one of the first things that you can do if you have a tool like fastlane that you're using already. Cause sometimes some teams are actually using fastlane, to do tasks for themselves, but they haven't gotten themselves on CI yet, or you're trying to sort of slowly work your way there.[00:14:54] I think fastlane is a good tool that can start getting you ready for that because fast lane is all about doing tasks related to iOS stuff for you automatically, and you can run fastlane commands in CI. So you could even have your build, test, deploy phases running from your local machine through fastlane.[00:15:12] And then when you put it on CI, you're basically just telling CI to run those same commands you were locally. So that can make it very easy to make the transition. If you already have a pull request code review process going on, that's probably one of the most important places to start integrating your CI server because every time you put code up for review, then it can go through this system and some of that feedback can be automated against it.[00:15:39] So I'd say if a team doesn't have any sort of pull requests or code review process yet, they should get that up and running first. Even if they don't do super thorough examinations of the code in those pull requests, at least get the CI starting to do that for them. I think those are some good first steps to getting ready for CI.[00:15:59] Leo Dion (Host): So let's sit back for a little bit and talk about each of those components, like a pull request and a code review process. What does that mean exactly? [00:16:06] Kyle Newsome (Guest): So it's very easy for me to just merge code into, say, the main code base that maybe I'm collaborating on with others. But if I just sort of get to directly make changes to the code.[00:16:20] No one else is, you know, reviewing that in advance for any sort of mistakes or giving me feedback on how maybe I can improve those changes to the code base. And not having a process in place to do something like that is probably prone to causing error or catching problems later. So if you use anything like GitHub, GitLab, Bitbucket, they all have the ability to do a pull request process, which basically means you work on your code in sort of a separate branch and get terms, you know, from the main master code base, and then you make a formal request to merge your branch of code into your master or into maybe your development branch where you're working on things. [00:17:03] And before that merge actually happens, someone actually has to approve it. You know, someone has to actually go into, say if you're using GitHub, going to GitHub and hit the approve button, and then the code can be merged from there.[00:17:17] So. You know, the pull request process is the first step to, I think, creating a code review process. Like I said, you know, even if you weren't reviewing the code changes, but you at least were going through a formal process of putting up a request to change the code and someone else was approving it, that would be the first step.[00:17:36] And then from there you'd probably want to influence your culture to like spend more time actually looking at the code. I'm getting feedback on it. And then integrating CI as well. And I can certainly talk about things. See I can do for your code review processes as well later. [00:17:51] Leo Dion (Host): So basically like you have unit tests, obviously that need to be run and we did a whole episode on unit tests a few months ago, which you can check out. But like a pull request, that's where you'd have like your branch or your feature, and then you want to make sure to merge it into a specific version or master branch, and then somebody will go ahead and approve that. Does that sound about right? [00:18:12] Kyle Newsome (Guest): Yeah[00:18:12] Leo Dion (Host): and I think like one of the biggest challenges, and you just touched upon this, was the local dependencies and the certificates and profiles and things like that. That seems like one of the biggest challenges that I've faced with getting any sort of continuous integration set up is getting those certificates on some sort of server or putting them into the repo, but also in a way that it's secure.[00:18:36] Because obviously you don't want anybody off the street to come in and get your repo and then put your app into the app store, but like there's a specific process for setting that up, right, where you can like encrypt the certificate, but then like have the password on the CI so that way you can decrypt it while at the same time, like making it secure, but also letting the CI system be able to approve and deploy an app.[00:19:00] Is that right? [00:19:01] Kyle Newsome (Guest): Yeah, absolutely. You ultimately want to expose. You're a certificate to as few people as possible. Ideally, you don't really want to be distributing these widely. So yeah, the fewer number of people that have that privileged, right - the better. And I mean, depending on the size of the team, you know, in enterprise situations, like I was working with a bank earlier this year.[00:19:24] And they don't want the certificates or the profiles available to the developers at all. In fact, they have policies at the bank that, you know, a developer can't end to end both build the application and get it deployed to the store. There's actually multiple steps between to sort of make sure no one gets that much power.[00:19:41] Leo Dion (Host): If you can say, I guess, how do they get around that? [00:19:44] Kyle Newsome (Guest): Well, I mean, ultimately they have a dev ops team, and so these are, you know, operations guys who are sort of full time dedicated to building the applications and getting things configured properly so they get some access to this stuff. Although those certificates and profiles are still kept in a vault.[00:20:02] There's like HashiCorp Vault is a product, I don't know if you're familiar with it, but it's just sort of a secure key store. So their CI system access is things from this vault, but they have permissions to work with the Vault and the CI process. But yeah, we weren't even really super involved. And that, you know, I could make some requests to change some of the CI workflows, but dev ops always was approving those.[00:20:26] I couldn't change those myself. So interesting. It was just sort of one layer away from me that had the access ultimately. [00:20:33] Leo Dion (Host): So if someone were to get started with CI, what service would you recommend first and foremost, and how do each differentiate themselves? [00:20:44] Kyle Newsome (Guest): Right. Well, I think. My suggestion would maybe depend on, you know, whether, like if we're talking about just getting started with your first CI ever and you haven't done this at all, and we're talking about iOS, I've certainly enjoyed using BitRise because BitRise is very iOS and Android focused.[00:21:06] When they first came out, they were even just iOS focused. And I found that the flow of getting started with them, they would, you know, do additional analysis on your project and try to sort of get it auto configured for you every time there's new versions of Xcode, they really try to be the first to get those beta versions of Xcode out onto their systems.[00:21:28] So I found that they just, they have a very, like iOS is first class kind of attitude, which I like. Things like Travis CI and CircleCI are both. I guess I don't have much to differentiate between those two. They might have different price points, some of these different services. Also, I know like let's say you're doing an open source project that you want to put through CI. I think Travis or Circle might be better for that because they have a better free tier. [00:21:56] Leo Dion (Host): Yup, yep. I've used Travis CI and we'll get into it a little bit, but I still haven't figured it out with Circle CI, and I've actually talked to some of the folks there, but Travis also does Mac apps. Which we'll talk about in a little bit.[00:22:09] I think Circle supports that, but I haven't quite figured that out. It seems like the big hurdle with a lot of these surfaces, spoiler alert, is that you actually need a Mac to like run this stuff, which is a huge cost burden to any company in the cloud because they literally, like if you look at somebody like MacStadium, like you literally have to have a rack of Mac pros or Mac minis or iMac pros or whatever to like from this stuff. It's not like even with the VM, you need to run this stuff on a Mac. So I think like that's one of the big burdens with a lot of these services is like a lot of your CI services, they're going to be fine at doing like your Ruby or your Node JS and even some of the.net stuff, but like once you actually need a piece of like Mac hardware to do it, that kind of makes it more of a challenge cost-wise to these companies [00:23:00] Kyle Newsome (Guest): for sure. And yeah, performance of some of these things, I guess when they're like running inside of virtual machines may not be as good as if you say got a really high end Mac mini or something and ran it locally because that is another option is self hosting, which we haven't touched on yet.[00:23:17] And I don't really recommend self hosting for some reasons I'll bring up in a second, but just exploring what that means. You know, this is buying a computer to sort of have, you know, in your office that is connected with the system and running those things locally on your own computer. It meant you could do that either through Jenkins, which is a very popular one, or Xcode server.[00:23:40] Apple has their own X code server. Although I don't know anyone who uses Xcode server. I don't know if you have worked with many companies that use it. I haven't found it to be very good personally. [00:23:50] Leo Dion (Host): It's okay. So here's my situation that I've run into is I have a Mac app Speculid, which is for building app icons from SVG files or image sets, whatever. Okay. [00:24:02] So like with this app, I've run into situations, especially early on where I needed to like actually test it on different like Mac environments and one thing you learn with like Mac development, I find one of the biggest challenges is that you don't have like reset simulator on the Mac, right? So I ended up sending up like a Virtual Box VM on my iMac to run Mojave or whatever is the latest OS and putting Xcode server on it and it works and it's like a great way for me to just like do reset simulator essentially by reverting to like a snapshot on a VM and that's what I've been using whenever I need to like test. There's been all sorts of weird issues like dependencies that have been installed or like I totally forgot about how different countries do decimal points differently and like all sorts of weird issues I've run into.[00:24:54] That has been to my benefit with the CIA stuff. So like XCode server worked. It was fine. It was a great, was it as easy to set up as like Travis, which is probably the other situation I've run into? No, I don't think so. And of course it's like not the fastest, but it works. [00:25:11] Kyle Newsome (Guest): It gets the steps done for sure.[00:25:13] Like it's not pretty, it just sorta does the basics versus something like, I know BitRise. I mean I really liked their interface cause I think it's nice looking and it's something, I mean I know some companies, you know, even have sort of a culture of trying to make sure that sort of the build and whether it's kind of staying green is, you know, the developers are sort of aware of that all time.[00:25:34] So maybe you have a dashboard that's kind of giving you an update on what your CI is and is it staying green. So sometimes using a nice CI that actually makes that look kind of nice to have, but it's not really the most important thing as just being able to run the steps. [00:25:48] Leo Dion (Host): And then integration with the Xcode is really good. And it was just a matter of like, the issue I ran into was just, I was using Travis CI cause Travis CI is free for open source projects and like it worked fine, but there was just a lot of things that I couldn't really like get into the guts of a Mac that I could do with the VM and Xcode server. So that's why I ended up getting that set up.[00:26:09] And Travis CI doesn't necessarily have the latest betas installed for a lot of reasons. So I was able to like set up a CI system with whatever was the latest beta at that time. [00:26:20] Kyle Newsome (Guest): Yeah. For ultimate sort of like power and control, having things, you know, self hosting is the way to go. For sure. You can do things just different that may not be possible.[00:26:31] Like even the kinds of like caching can be different on some of these different services as well. I know that BitRise has some caching capabilities, but there might be a limit to the size of the cache. I've heard recently, I think maybe Circle CI didn't have a cache. Okay. Someone was telling me they were using either Travis or Circle and they couldn't cache the same way that BitRise could anyway.[00:26:52] Leo Dion (Host): And when you say cache, what exactly are you talking about? [00:26:55] Kyle Newsome (Guest): Just like holding onto some artifacts. Like, you know, sometimes you have dependencies such a, you know, a lot of people use CocoaPods [00:27:02] Leo Dion (Host): and you know, want to rebuild and refinish those dependencies every single time. Is that what you mean? [00:27:07] Kyle Newsome (Guest): For sure.[00:27:08] Leo Dion (Host): Okay. [00:27:08] Kyle Newsome (Guest): Exactly. That can certainly add to the time that it takes to get through your whole CI process. [00:27:13] Leo Dion (Host): Yeah, that sounds like a lot. We had Abby Jackson on last week. We talked about modularization but she said like one of the big benefits is build times. So it's not something I really think about, but like if you're doing caching like what you're talking about, but that makes total sense. That's gonna like save a ton of time on your builds [00:27:30] Kyle Newsome (Guest): for sure. One other thing with self hosting is the benefits is you get all the control, but the downsides is nobody's going to do that for you, so you become responsible for it. So I definitely think when a company decides whether they want to use a service or want to self host. They should really think about the dev ops costs associated with that in particular. [00:27:52] Leo Dion (Host): Exactly. [00:27:53] Kyle Newsome (Guest): Because if there's a beta, you're going to be responsible for getting that beta up and running. And if you realize that all of a sudden your team is growing and you need more machines, then you need to go buy and provision all of those machines and then get them collaborating together on a farm yourself again.[00:28:10] And that is one thing that's really nice about using a service is that your team grows and you just buy the next tier or pay, you know, $5 more per month or whatever it costs per developer to grow your team like that. So these third party services scale very nicely. And yeah, the dev ops costs, you should really strongly consider before self hosting, I think for sure. [00:28:31] Leo Dion (Host): Yeah. Do you have like an opinion on using a service like MacStadium because the only reason I see it might be important for self hosting is security reasons or like Mac development where you like actually need an actual machine to like play around essentially with the computer itself and get those settings exactly the way you want it like otherwise, I don't see much of a reason to use self hosting service right. [00:28:56] Kyle Newsome (Guest): Yeah. Unless you just, you want to do something really different. There is one organization I was working with, I can't talk too much about this one, but they wanted to be running a lot of different types of virtual - like they wanted to kind of virtualize their whole system during the CI process.[00:29:13] So the servers that were being communicated with were all being run from that server as well. And so they were looking at moving towards self hosting to get some of those features that they couldn't get from doing it through these third party services. Because there are some limitations to just like how far you can configure these things. [00:29:32] Leo Dion (Host): Exactly, exactly. [00:29:33] Kyle Newsome (Guest): It's like I sort of temporary container. They boot up and they run some things and then they tear it down for you. Right, so you only get so much in that container. [00:29:41] Leo Dion (Host): Like I'd almost suggest maybe looking at something like MacStadium like somewhere it's almost like a compromise in between, like what is it - it's like a layer of abstraction from running your own server locally, but not quite as abstract as like Travis CI or Circle or a BitRise because then like you don't have to do the IT work, but you still have to set up though less. So like that might be a decent compromise in some situations. [00:30:07] Kyle Newsome (Guest): So I don't know MacStadium super well if I understand, it's sort of letting you actually get full access to a Mac machine.[00:30:13] Leo Dion (Host): Exactly. [00:30:14] Kyle Newsome (Guest): Remotely. Yeah. [00:30:15] Leo Dion (Host): Yeah. They just have like. Mac minis that they run in their separate locations that you have access to. And I've done, like I've done the virtual box setup with getting a Mac server set up in virtual box. That way I can like tear it down and bring it back up, but that's only for like small apps that I've done.[00:30:32] And then I'll post a link to my YouTube video about how I got Speculid set up on Travis CI, which is a Mac app and how I got that to work as well. [00:30:41] So I wanted to jump in and talk a little bit more about Fastlane, which we got into and some of the tooling there, but you said you wanted to mention something about feedback loop and how feedback loops can be some issues you can run into with continuous integration.[00:30:55] Do you want to explain that a little bit? [00:30:57] Kyle Newsome (Guest): Sure. Continuous integration is something that I see as fitting as one of your feedback loops or sort of touch points, but to explain first a little bit about what the feedback loop is. You know, developer's going to get a piece of work in and then they're going to need to iterate on that several times before it goes out the door.[00:31:14] And that iteration cycle, I would call your feedback loop and how long it takes for you to get feedback on something, whether it's working for you or not. You want to try to make that the smallest amount of time possible. Right? [00:31:27] So there's lots of different points of feedback that we have. We're getting feedback as we're continuously like developing on something, running it, checking if it's working.[00:31:36] We're getting feedback when we run unit tests, when we run UI tests, we're getting feedback when we pass things to the QA team and when we're say, getting approval from our designers and our product owners, but each one of these points of feedback takes a certain amount of time to like send it out and then get feedback and know whether to iterate on it further or whether you've sort of met the requirements.[00:31:58] So I think we want to try to think about how well A - you know, some of the touch points with people, we want to make sure that we have like fast access to them and can turn around feedback quickly, but we also want to try to organize things in a way where the tightest feedback loops are sort of available to us first.[00:32:14] We get those working and then we slowly work our way outward into the things that take longer and longer to get feedback from. So the first things are the development you're doing as you're iterating on it. Unit tests, I think, are a great way to get fast feedback on something as well. UI tests, those tend to get a little bit slower.[00:32:34] Now, sometimes some UI tests suites, you know, may even take hours to run. So those are not necessarily the greatest way to get feedback. Those are something that might fit well in say, your continuous integration. Right. And I think this, again, so this is coming back to earlier, just like why continuous integration is important and sort of making sure that steps, like say running your UI tests don't get missed before you say go to QA or maybe get your final approvals.[00:33:02] Because those types of feedback to take even longer sometimes than running some of those tests earlier, right. So I think that's where continuous integration fits in ultimately, is that you kind of want to make sure there's some steps that's making sure that's doing that proofing and giving you feedback as soon as possible.[00:33:17] Because sometimes you ship something to QA and QA can't look at it until tomorrow, and then, you know, four hours later, then they give you the feedback and then you iterate on it. So really you want to be sending things to QA as perfect as possible. So yeah, again, just thinking about that feedback loop, what kinds of things can I get the feedback on the fastest to help me with my iterations before I go to the slowest things. CI, I think kind of fits somewhere nicely in the middle, like after I've done my work, but before I start sharing it out with the greater team, I want to have my continuous integration feedback loop in place.[00:33:53] Leo Dion (Host): So you're saying like when it comes to the pipeline between the developer and QA, continuous integration kind of fits in there to kind of facilitate and help QA give you feedback, but on a much quicker timeline. Does that sound right? [00:34:08] Kyle Newsome (Guest): Yeah, absolutely, and I mean continuous integration can even help with the pull requests or code review process itself.[00:34:15] Like I'm really big on automating as much analysis as possible really so that even when it comes to requesting that your peers review code. They're not, you know, nitpicking on - Oh, you left it to do comment in here and Oh your spacing isn't quite right here. Cause those aren't really exciting things. And I don't think they contribute super positively to the culture to be nitpicking at code where you really want to automate those things.[00:34:39] To help just kind of make sure everyone's code is in line and then let the team work on some of the higher level analysis of like, Oh, this is an interesting implementation, but if you use this trick, you might save, you know, five lines of code or something like that. Like that's the kind of feedback I want from peers.[00:34:54] So CI, yeah. Can help do some QA before you get to your QA, and it can also help you do some code review before it even gets to your peers. [00:35:01] Leo Dion (Host): Really interesting. I like that a lot. And then I guess let's just touch on it, but like the elephant in the room to a lot of this setup with continuous integration is fastlane.[00:35:11] And I don't know if there's any other apps you'd recommend, but like I met Felix, I want to say like about a year and a half ago, and he was super nice. He's super into security now. I don't know if you've watched or gone to any of his talks, but he's really into. Man in the middle of tax where you can like have software that kind of listens into your traffic or all that kind of stuff, which I think is super important.[00:35:34] We don't really talk much about, but like Fastlane has been around. I don't know since when, but it's definitely automated. A lot of like the app store API stuff and a few of the other things. What other benefits does Fastlane have, and especially when it comes to continuous integration, what does it bring to the table?[00:35:53] Kyle Newsome (Guest): Yeah, so I mean, Fastlane has like a ton of different types of tasks you can run with it. [00:35:59] Leo Dion (Host): And it's available for both iPhone apps and Android apps, correct? [00:36:03] Kyle Newsome (Guest): Yes, it was iOS support first, but I believe it does all sorts of Android stuff now as well, too. But I don't feel like it's just added so many different tasks and all sorts of ways to communicate also with the Apple or like App Store Connect in order to help like get team members set up so it can do things even sort of outside your system of helping you just get your team set up. I recently worked on a team that had a good fast lane setup for helping people get. The configurations they needed, like pull down the development profiles that they needed just to run things on the simulator, sort of all automatically.[00:36:38] That was something I actually hadn't seen Fastlane used before. So even beyond CIA, it just has tasks that are really useful to automate for an iOS team that maybe don't need to run more than every time you add a new developer to the team. But beyond that also, yeah, just full of lots of different tasks you can do to build, test the application on pure version number, take screenshots.[00:36:59] And one other. I think very important thing to think about. Sometimes when you set up what's going to be happening in your continuous integration process, you can sort of choose - Oh, am I going to write the tasks that it's going to do? Am I going to configure those in the continuous integration system itself, or am I going to try to push as much of that configuration into my code repository, like commands for Fastlane to run.[00:37:26] And the benefit of keeping it in your repository is that the developers have more control over it. Like I mentioned that example earlier where when I was working with a bank, the dev ops team was in charge of the CI, so really we wanted to put as much into Fastlane as possible because that's where we had more control over changing what targets were being built, et cetera, versus if we had put that into the CI system, we would have had to go through a much slower process in order to make changes to our build configurations. [00:37:56] So yeah, putting things in Fastlane, I think helps developers keeping control of it. And you can also think about vendor lock-in.[00:38:03] If you were saying, moving between. Maybe you're using a third party service and then you decided - Hey, I want to actually move to self hosting, or vice versa. Or say you're using Travis and then you decide, no, I'd prefer BitRise. If you have most of your commands in Fastlane, it's going to be easier to move between these services because you've used far less of the vendor oriented configurations. [00:38:28] Leo Dion (Host): Yeah. You talked to a lot of people in server-side development, and I'll tell you, like vendor lock in has become a big deal on their end. So it's only a microcosm of that issue when it comes to like continuous integration services when it comes to iOS development so I can totally understand that.[00:38:43] Kyle Newsome (Guest): Yeah vendor lock in for like server side is way, way more of a problem then what I'm talking about. But I mean, it's not even so much vendor lock in. It's just like, Oh - it's going to take me a little bit of time to get from this service to this service. But like the server side, people are dealing with like serious, like costs associated with moving their services over like nothing we see on our side.[00:39:02] Leo Dion (Host): Right, exactly. Well, thank you so much for coming on. The show is really, really great to talk about this topic. I think it's super important and I'm glad we covered it. Going back server-side people have been doing this for awhile, but like when it comes to iOS stuff, I think, and watch and Mac and TV there, I always forget that one.[00:39:21] I think this is a topic along with a test driven development that people should really engage with and integrate into their team. And where can people find you?[00:39:29] Kyle Newsome (Guest): On Twitter? I guess @kylnew - it's just like the first three letters of my first name, first three letters of my last name. Other than that.[00:39:36] Also, I have a website, pyrus.io that I do consulting through. I blog on there occasionally. I haven't blogged recently. Otherwise I'm just in the community in Toronto trying to run meetups and ran the SwiftTO conference just this past summer, which you spoke at about Vapor. Yeah.[00:39:57] You can find me around Toronto, go to a Toronto Swift meetup and you'll probably see me there. [00:40:01] Leo Dion (Host): Yes. And if you miss a meetup, you're doing the video work on those, aren't you? [00:40:06] Kyle Newsome (Guest): Yeah. As much as possible. And trying to film all the meetups going on in Toronto, just because we did a survey from the conference and got feedback from people and definitely saw from even the conference feedback that like people find it hard sometimes to come into the city. Unless I'd say I like a full day of content. So trying to find ways to distribute more video content so that it's available to those who can't make it downtown for our meetups. [00:40:31] Leo Dion (Host): I'd love to check those out. And Swift Toronto was a great conference. so we'll see if you guys do it again. So [00:40:39] Kyle Newsome (Guest): hopefully I'll try to polish up the details. [00:40:41] Leo Dion (Host): Yeah, yeah. Fantastic. Thanks again for joining us on this episode and we look forward to talking to you in a couple of weeks. Thanks again. [00:40:51] Kyle Newsome (Guest): Take care. Thank you.
★ Support this podcast on Patreon ★
10/13/2019 • 40 minutes, 52 seconds
Modularizing in Xcode with Abbey Jackson
Guest Abbey Jackson - (Twitter @earthabbey)Modularize All the Things - Abbey Jackson
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Themes from Conferences
The Importance with Meeting New People
Learning Old Features
Trying to Deep Dive into SwiftUI and its Future
The Benefits of SwiftUI for Designers
Comparing HTML and SwiftUI
Breaking Down How Xcode Works
How Different Components in Xcode Can Help Organize Your Code
How an Xcode Project Works
How Files result in Targets
Differences between Targets and Build Configuration
Dealing with Target Dependencies
Testing with Targets and Xcode
How Workspaces Differ from Projects
Modularizing Components
What are the best ways to organize your product?
Modularizing Your Persistence Layer
Importance of TDD and Protocol Oriented Programming
Other examples of modularizing: Network, Feature-cased, Authentication, User Profile, Location
Following Apple's SDK Framework Example
Dealing with Source Control
Using Git Submodules
Dependency Management Tools (i.e. SPM, Cocoapods, Carthage)
Using SDK Targets
Swift Package Manager
The Benefits of Modularizing
Decrease Build Times
Share Code and Functionality
Optimize Your Build Pipelines
Post-September Purchasing Choices
Apple Watch Series 5
iTunes vs App Store Gift Cards
iMac Backpack
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
9/29/2019 • 52 minutes, 43 seconds
September 2019 Event
Full VideoYoutube Video - https://youtu.be/5Qn22CN3hAASponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Apple Arcade and Apple TV+
Can there be a subscription service for apps similar to Arcade for games?
Was the pricing reasonable for most
iPad (7th Generation)
Is the iPad ready to be a laptop replacement?
Is the app ecosystem ready for professional apps on the iPad?
Apple Watch Series 6
What the continuing trend of the Apple Watch battery improvement?
Is the Apple Watch the device of the future?
iPhone 11
A continuing trend of maturity in the smartphone market?
Is the iPhone a phone or a camera?
iOS 13
Thoughts on if Apple bit off too much on the OS upgrades to deliver everything on time? - @tonydehnkeSocial MediaYoutube - BrightDigitTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
9/15/2019 • 18 minutes, 47 seconds
Developing for Multiple Platforms with Manton Reece
Guest Manton Reece
Micro.blog
@manton - Micro.blog
Core Int - Podcast with Daniel
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.Micro.blog
Self-Hosted and Indie Web Focus
Dealing with Twitter Issues
Developer-Friendly
Privacy
Community Issues
Marketing to an Audience
Reach Out and Let People Know
Starting a Mailing List and Blog to Reach Out
Slow Growth Allows For Intermittent Improves Based On Audience Feedback
Maintaining Engagement
Using Automation with Mailchimp and other Mailing Lists
Using Kickstarter for Funding a New Project
Finding the right niche or niches
Providing value outside of comparing yourself
Developing for Multiple Apple Platform
Hosting through Linode using Sinatra + Ruby
How Micro.blog works behind the scenes
Having a Public API and Dealing with Third-Party APIs
Adopting standards
Dealing with Multiple Different UIs
Building Frameworks for other Developers
Differences between developing for the Mac vs. iPhone
Catalyst vs SwiftUI on the Mac
Constantly Releasing Updates
Apple September Event
What the new iPhone might mean for developers?
Maturity of the iPhone
Emphasis on Photography with third lens
Independence of the Watch App
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
9/8/2019 • 53 minutes, 15 seconds
WWDC 2019 - Mac Development with Daniel Jalkut
Guest Daniel Jalkut
Red Sweater - Software Company
Daniel's Blog - https://bitsplitting.org
Core Int - Podcast with Manton
(@danielpunkass) | Twitter
Previous Episodes
Empower Apps | WWDC 2019 - Apple Watch with Gary Sabo | Episode 18
Empower Apps | WWDC 2019 - Swift UI with Jason Anderson | Episode 19
Core Int | Episode 378: Hi, I make Macintosh Software
Core Int | Episode 377: Just A Tiny Company
Core Int | Episode 376: I Had A Vegan Quesadilla
Talk Show with John Gruber - Episode 257 - A Real Sandwich
SponsorsBrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.WWDC 2019
SwiftUI is the Future but is it Ready?
SwiftUI and Pragmatic Adoption and Migration
How has Apple changed over the years?
Apple conservative approach towards change
Not Releasing First
What happened to Marzipan?
Project Catalyst vs. SwiftUI
Using SwiftUI with AppKit
Artisanal vs Cross-Platform
Why would a company develop using Catalyst?
When a rewrite isn’t: rebuilding Slack on the desktop
Is Slack in the business of writing exemplary apps?
Pragmatism vs Art in Product Development
How does Apple develop products?
Leading by Design
Would you use SwiftUI in a Brand New App?
Future of macOS
Locking Down of macOSTalk Show with John Gruber - Episode 257 - A Real Sandwich
Mac App Store vs. Distributing Yourself
How does Notarization work?
How does Gatekeeper work?Daniel's Article - A Real Gatekeeper
Apple - Making macOS more secure or more annoying
Is Sandboxing and the 30% cut worth it for the Mac App Store?
Speculid - Easily Manage Graphics in Xcode Projects
FastScripts - Powerful script management utility
Non-Consensual Software
Running an App Business
Limits of the App Store as a Business
How to be a successful business and build great apps?
Build Your Saas - Hosting Costs
Stratechery - The First Post-iPhone Keynote
Find Where the Market Is
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
8/25/2019 • 1 hour, 4 minutes, 50 seconds
WWDC 2019 - SwiftUI with Jason Anderson
Guest Jason Anderson
(@_jasonranderson) | Twitter
jasonranderson GitHub
Previous EpisodesEmpower Apps | WWDC 2019 - Apple Watch with Gary Sabo | Episode 18Sponsors360|iDev- August 25 - 28th - Denver, CO
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It’s all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Use the promo code FriendsInHighPlaces to get 20% off registration.We have an opening for sponsorsDo you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested in sponsoring or go to our Patreon page.
Functional Reactive Programming
ReactiveCocoa · GitHub
Combine | Apple Developer Documentation
Model–view–viewmodel - Wikipedia
First-class function - Wikipedia
Understanding Declarative Programming
Better for Multiple Devices
Improved Team Collaboration
Xcode LivePreview
Keep View Model and Data Model Separate
Faster Iterative Development Long-Term
Drawbacks of using Swift UI
Limited to latest OS (iOS, macOS, watchOS, tvOS)
Lack of Documentation and Support
Collection Views (i.e. Grids)
Good Support of Communication Between of UIKit and SwiftUI
Not Best for New Recent Releases
Do Need To Use It Now
Leo’s Swift UI Stream
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappshow
★ Support this podcast on Patreon ★
8/11/2019 • 22 minutes, 38 seconds
WWDC 2019 - Apple Watch with Gary Sabo
Guest
Gary Sabo
MyndArc, LLC Apps on the App Store
HealthKit Slack
Previous Episodes
Unit Testing Episode
Apple Watch Series 4
Sponsors360|iDev- August 25 - 28th - Denver, CO
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It’s all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Use the promo code FriendsInHighPlaces to get 20% off registration.We have an opening for sponsors and patrons Do you have a product or service which can target our ever growing community of developers as well as technology and business leaders? Contact me today if you are interested or join our Patreon.Thoughts on WWDC
SwiftUI and the slow demise of Storyboards
Gruber’s rumor about Declarite Programming
Swift and the slow demise of Objective-C
Github Repo on Talks
Exploring New Data Representations in HealthKit - WWDC 2019 - Videos - Apple Developer
SwiftUI on watchOS - WWDC 2019 - Videos - Apple Developer
Creating Independent Watch Apps - WWDC 2019 - Videos - Apple Developer
Great Developer Habits - WWDC 2019 - Videos - Apple Developer
Github Repo on SwiftUI
You’ve been sherlocked - Operating systems
HockeyTracker on the App Store
Gear Towards Your Specific Audience
Specific Activities with specific metrics
Independent Apple Watch Apps
Why does Apple Watch apps need iPhone app counterparts?
iPhone Counterparts of Apple Watch workout apps are for visualization
Slow Deprecation of WatchConnectivity
How do you syncing certain data between Apple Watch and iPhone?HealthKit ,StoreKit, etc…
What’s the position of the iPhone in the future with AR and the Apple Watch?
SwiftUI on the Apple Watch
The new Apple Watch App Store
Where’s the Focus of the Apple Watch
Health and Fitness - Niche Fitness
Advanced Notifications
Location Tracking - GPS and Indoor Positioning System (Indoor GPS)
Accessibility and Haptic Feedback
More Sensors in the Future?
Maturity of HealthKit
Lacking Inability to Edit
Apple Partnering with Health Companies
Allowing HealthKit on iPad and macOS?
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitPatreon - empowerappsshowComplete TranscriptionLeo Dion (Host): Hey Gary, how's it going? [00:00:01] Gary Sabo (Guest): Doing well, Leo, how are you doing? [00:00:02] Leo Dion (Host): Good. Good. So what were your thoughts from WWDC? [00:00:07] Gary Sabo (Guest): Boy, so much. I think like a lot of people, just my immediate reaction was this with UI. I didn't hear rumors. I mean, I heard maybe I heard something about, you know, declarative framework, but I didn't expect that.[00:00:18] And sort of the, what seems to be the eventual abandonment of the storyboard. So yeah, that was the biggest shock to me. [00:00:26] Leo Dion (Host): We had some rumors about like declarative programming. I think Gruber had talked about that, but people were just kind of like, not making it as big of a deal about it because I think everybody was like marzipan, marzipan, marzipan.[00:00:38] Right. And then it's like the project catalyst is kind of an afterthought. It's like, Holy crap, they're replacing the entire UI. Framework UI kit. I think it's still vibrant. I don't think it's dead by any means, because they've made some major improvements. It looks like to the way table views and even more so collection views are done, but you can kind of see the writings on the [00:01:01] Gary Sabo (Guest): wall.[00:01:02] Leo Dion (Host): Yeah, it's like Swift. It's like Swift four years or a . It's like, yeah, I mean objective is going to be here for awhile. It's going to be forever, quite frankly. But like that's called Swift UI. It's not called objective-C UI for specific reason. [00:01:18] Gary Sabo (Guest): Right. And obviously companies have existing code bases, and if you were just starting out today, I still don't think I'd dive into Swift UI yet.[00:01:27] You know, companies are going to need to support their existing projects for years, [00:01:31] Leo Dion (Host): and somebody who's been playing around with it for two weeks. Yeah. Don't. I don't suggest jumping into it right now. [00:01:38] Gary Sabo (Guest): Yeah. And it's still in beta, so keep that in mind as well. [00:01:42] Leo Dion (Host): Very much so. Yeah. It was a big year. It's probably the biggest WWDC since Swift was introduced.[00:01:49] We can safely say. [00:01:50] Gary Sabo (Guest): I haven't gotten through all the talks. There's a github repo that I found or came across that kind of lists bullet points of the talks just so you don't have to invest the full 40 minutes. You can kind of just see if it's what you're interested in. So I've been going through that and just, I've been starting with obviously the ones that are most near and dear to me, like the WatchKit the Healthkit.[00:02:11] But yeah, it seems like there's a lot to unpack. The combine is another thing there. Their foundation API. I didn't have a chance to watch that one yet either. And just like you said, Swift UI, there's I think five or six talks just on that, you know, and integration and stuff like that. [00:02:27] Leo Dion (Host): Yeah. Post the link to that git hub repo. It'd be great to share. There was a git hub repo that had a list of Swift UI, a blog posts and tutorials. I mean, I know folks like Ray Wenderlich, paul Hudson already has like put some books they are pre-selling on it, but, there's some really great like tutorials there too that we can post those links in the notes.[00:02:50] Gary Sabo (Guest): Okay. [00:02:51]Sponsorship Sponsorship[00:02:51] Leo Dion (Host): Hey, I wanted to let you know, that empowerapps.show Is looking for sponsors and patrons. Our audience is growing and we'd love to showcase you, your company and your product on our show. If you want to be a patron, you can find us at https://www.patreon.com/empowerappsshow or if you want it to be a sponsor, reach out to me personally at leo@brightdigit.com your support is greatly appreciated and we look forward to showcasing your business and product on our show.[00:03:20]Sponsorship Sponsorship End[00:03:20] One thing I wanted to talk about was, I think as two male developers we don't appreciate is like this new cycle tracking feature. I think that's a big deal to a lot of folks, especially women. Cause I know like my wife and I just take it personal we dealt with infertility for about five years and we had like these stickers and like a binder, like a whole whole kit to track this stuff.[00:03:49] And it was a pain in the neck. And then my wife, you know, who's probably not as techie as I am pretty techie, found this really great app. And she used it for a while, and then we had found that the app ended up getting taken down because of it was using the system with the same name and they didn't like that.[00:04:09] So the, the folks who have that tracking system ended up giving them like a takedown notice and it really sucked. So, it's really good that Apple has kind of like jumped in and kickstarted this stuff. Because I think it's going to help a lot of people, not just going to infertility, but for a variety of reasons or health reasons that women have.[00:04:30] Gary Sabo (Guest): It's that classic, you know, Apple Sherlocking someone, right? And it sucks if you're the developer, but usually as when Apple chooses to take something into their space, it's usually benefits, you know, obviously asked the consumer so. [00:04:44] Leo Dion (Host): Yeah. Like I think with a lot of sherlocking stuff, it's inevitable. Like anybody who builds a business around an action under sand, like Apple could always Sherlock it.[00:04:53] It's about making yourself valuable enough that folks who are really into it, like they're going to download one of your great workout apps or they're going to download one of the Dave Smith's workout apps or something like that because it takes it to the next level. Whereas like Apple stuff is quite frankly, free.[00:05:13] I think it also just gives some guidance to developers like, Oh, that's pretty cool. You can do this, and built on top of it. [00:05:20] Gary Sabo (Guest): It's finding a niche that you know, in the space it like, just for example, like one of my apps HockeyTracker, I mean, conceivably Apple could have, some sort of custom hockey tracking part of their workout app.[00:05:32] And I mean, my thought is mine goes down to the level that it, like tracks shifts during the hockey game. So like, you know, it knows whether you're on the bench or whether you're on the ice and then puts that number tells you how many shifts you had and what you know with the lengths were and things like that.[00:05:48] It's kind of that level of detail that you think might be too, too zoomed in for an Apple app, which, knock on wood makes me think that I'm safe with that app but,I know what you're saying. And the other one too, isn't at some point, I think they're taking on sleep tracking. [00:06:05] Leo Dion (Host): Oh yeah, for sure. I think that's definitely down the line.[00:06:08] Either they're gonna, what do they call it, acqui-hire one of the great apps, or they're going to just make one their own. [00:06:14] Gary Sabo (Guest): Yeah. Which makes total sense. I mean, obviously the watch, I mean, that's, I think that's one of the key. Probably use cases people use it for. [00:06:22] Leo Dion (Host): Yeah. I use one. I think they're really helpful.[00:06:25] Yeah. It's just a matter of understanding of that as part of part of your business. So maybe now's a good opportunity Gary for you to introduce yourself. What, what's your specialty when it comes to the Apple Watch and health kit and workouts? Sure. [00:06:42] Gary Sabo (Guest): I began in 2014. Right. I'm self taught. So traditionally, I'm an attorney and when school would be an attorney, went to law school, but I'm self taught programmer.[00:06:51] So when Swift was announced, that's when I jumped in. I had a little bit of coding experience before then, but that was really when I started building apps and, um, you know, releasing products into the store. And over time basically just because I had ideas, I had their existing things that I wanted to do with my phone that they weren't possible.[00:07:09] So I thought, well, I'll figure out how to do it in building myself and you know, how my own need and then maybe if somebody else is interested, you know, make a dollar or two. So over time I built a, some weather apps and apps on top of the Pinterest SDK a game based on the Twilight zone. [00:07:25] I'm a hockey player and I think it was maybe two, two and a half years ago. I didn't even think about, you know, using my, I, I've had the Apple Watch series zero, but I never really thought about using it in hockey. And then one of my teammates was using it in the locker room and said that, Oh yeah, you could just start, you know, an Apple, an Apple Watch workout app.[00:07:46] And then at the end of it, you could label it as hockey. Which to me, you know, it was just kind of a generic workout and then you just kind of name it hockey. And I was like, Hmm, I wonder if, um, you know, there's some space to build a custom hockey app. [00:08:02] So it's the best thing I did, which really helped me was I posted in a hockey player Reddit and said, Hey, you know, I'm gonna, I'm an iOS developer, I've done watch app development before, and I had this idea and I got a lot of support from that community, and I was able to build a beta version of the app and then use those same Reddit members to transition them into a Slack community where, you know, they're able to like, you know, give me feature ideas or give me feedback.[00:08:32] And to this day I still, you know, when I make a change in that app, I'll put up a poll on the Slack and have them vote on it. So it's usually driven. And so that's really been my focus the last two years. That hockey tracker app is kind of my flagship. Um, I've also done one for soccer, so it's soccer tracker, and I'm just most recently another app called sex tracker, which is kind of the same, along the same lines as tracking your metrics or VOT max and heart rates and that, but for instance, intimacy.[00:09:03] Leo Dion (Host): Interesting. Is it mostly branding that separates the apps, or is it, what are some of the specific features that each app might have? [00:09:15] Gary Sabo (Guest): Well, yeah, good example. So for example, in hockey, you know, you had this concept of a shift and then you also, over time, I think there are eight or nine different session types.[00:09:26] So. You know, you could use it as a goalie, you could use it per pick up for an open scape. There's a coach mode. Um, there's a rough mode. And then you also, my focus of each of these apps have always been health and fitness and metrics, but you could also add your score, score the game, how many goals you scored, how many assists, if you're a goalie, how many shots against, and those sorts of things.[00:09:48] And then there's a note section. Yeah. I mean, the biggest thing is just, you know, hockey is kind of. The algorithms that I built and everything are geared toward, you know, being on the ice. Again, the shifts where as soccer is, you know, more toward running. You don't have shifts. Some of them are the same. I mean, they track distance, they track speed.[00:10:08] I try to do a lot with heart rates. One of the big things, the big features over the past, well I would say six months that I added is an effort level that's based on your time spent in the various heart rate zones. So if like if my max heart rate is, say 190. And you know, I've spend, so some of my top zone might be, you know, 170 to 190 and if I spend more time in that zone during the course of a game than my effort level is higher and things like that.[00:10:39] I mean, you know, there are only so many metrics you have. It's just different ways of sort of packaging them and sort of analyzing that data for the user. [00:10:48] Leo Dion (Host): Very cool. Yeah. I feel like there's so much potential with, with HealthKit and workout stuff. It's interesting the story with the Apple Watch being, we've gone from sending your friends heart rates and heart rates, but what was it called?[00:11:04] I can't remember. Like your your heart beating to like. Now it's pretty much predominantly a workout app or workout device, I should say, and it's, it seems like Apple is really starting to focus on that. Um, I made the leap. I foolishly made the leap to iOS 13 and watch OS 6 week on my primary devices.[00:11:29] So I'm a fool don't do that. [00:11:30] Gary Sabo (Guest): Does it seem stable so far?[00:11:33] Leo Dion (Host): Yeah, it seems fine. iOS 13 is by no means perfect, but there, there's almost an enough issues in iOS 12 where it's like, how bad can it be? And I'd already put it on my iPads and my spare iPhone and I didn't have any major issues, so I was like, you know what?[00:11:50] I'm just going to put it on the primary device. Let's just, usually it's not that big of a deal and it hasn't been, so now, yesterday I was just playing around on the watch. They have that noise detection feature which is really cool, like I don't know if you know what I'm talking about, but where like it'll detect if it's too loud.[00:12:10] And if it is too loud, it, it will let you know, uh, so that you don't damage your hearing over the longterm. That's a pretty sweet feature. Like I'm amazed that they'd finally, you know, it was like, I wish I had thought of that. So, yeah. And it, to me, just looking at some of the stuff with WWDC, I think the other thing that the writing is on the wall is that the watch is going to be an independent device. [00:12:38] I don't know what your thoughts are, but it seems like that's where we're going, especially with the way we're trying to no longer do you have to have watch app packaged as a iOS app extension, but now it can be packaged as a separate app and now you got the app store on the watch and things like that.[00:12:56] Gary Sabo (Guest): Yeah. But as far as the, um, the independent watch apps. Yeah. I mean, that's what I've really been thinking about that for the past few weeks and what that means and what type of opportunities that's going to present. I think just my existing apps and what they do might not be a great use case because.[00:13:15] You know, they track, they use the watch to track and get your raw data, and they do display some UI. But then the iPhone is just a bigger screen and there's so much room to present, like we just talked about, you know, these charts of data. So I'm not sure that like those health and fitness apps are the best example.[00:13:33] But one thing that immediately came to mind is one of my first ever apps was um. a commission, like I do real estate law, so a commission calculator for a real estate agent because, um, it was just a simple app, but you know where you type in the sales price and it tells you, okay, well the split with the buyer agent is maybe 3.5 and then maybe you pay a 20% referral to another agent and then maybe you're split with your broker is 50% and I actually had to, this was the first iteration of the watch, but actually had to build a calculator actually via the emoji digits and that's, yeah, that's how I ended up building it. But you know, I got it working and everything on the watch and then I was like, Oh, well to ship this, I had to build this kind of, you know, just generic iPhone app and basically do the same thing that, you know, it wasn't even the point of the app.[00:14:22] The point was to have it on your watch. So something like that. It was a great example where, you know, I probably spent another week building the iPhone part of it that you wouldn't even need now. [00:14:33] Leo Dion (Host): Yeah, I totally agree. I think when it comes to fitness apps, the watch is exclusively used for tracking and maybe like sending up a workout.[00:14:42] Well, a lot of the features of a typical workout or health app come from the fact that you can visualize it on the actual phone, because again, you can't really look at your reports on a, on a watch very easily. So yeah, I totally agree with that. It's also interesting with me trying to make the watch independent.[00:15:00] They're kind of not deprecating watch connectivity, but more like saying, you really don't need it, I don't if they're trying to get you to kind of use cloud kit or some other server apparatus to communicate with the phone. Was that your impression? [00:15:21] Gary Sabo (Guest): Yeah, that I had heard that as well.[00:15:24] So maybe it's just implied. You know, that if you have an independent watch Apple, you wouldn't need to call out to the phone. To me, the devil is going to have to be in the details of that. A quick example is my apps. Um, if you, for whatever reason, I'm sure, I'm sure there's a reason, um, as far as CPU use or something like that.[00:15:44] But if you query HealthKit on the watch for the user's body mass. You only get anything they've entered within the past seven days. You queried on the watch you get, I mean, on the iPhone, you get as far back as HealthKit started. I use that. I use that body mass and some of my calculations. So that's an area where I use watch connectivity because I have to call out, you know, wake up the phone.[00:16:08] Make the phone query for the body mass and then send it back to the watch. So you know for them, for them to deprecate watch connectivity. For me, they need to update HealthKit to be able to make that full, you know, HealthKit call. [00:16:22] Leo Dion (Host): Yeah, that's a really good point. Like how I think HealthKit, I'm first trying to think what else.[00:16:27] But what other API APIs you'd want to directly connect with the iPhone with? But it seems like HealthKit would be the primary one where it's like the HealthKit data on the watch and the HealthKit data on the phone are not in sync. [00:16:39] Gary Sabo (Guest): Right. Something else that came to mind. My apps currently don't do this, but if you want to put your watch up behind the paywall, there is no StoreKit on the watch.[00:16:48] So if you want to check whether someone's, um, subscription-based app, whether they. Their subscriptions expired or, or not. Um, you need to use watch connectivity can be to that to call out to the phone and parse the receipt or something like that. [00:17:04] Leo Dion (Host): Yeah, there you go. Yeah, and I'm sure there's going to be a ton of other API APIs we haven't even thought of where it's like you pretty much need direct connection to the phone.[00:17:13] Right. What I'm going to guess is at some point they're just going to add an API to HealthKit or StoreKit so that you can do that stuff directly on the watch. One of the other things I could see is how paranoid they kind of are about battery usage. I could see that being an issue because if you need to work directly connect with the server or to the cloud, you're going to need, it's going to need to use the wifi or cell connection in order to do that.[00:17:41] And you can't just depend on Bluetooth for it, which I'm assuming that's what they want most apps to do is they'd rather they directly use bluetooth as often as they can, just to say battery, essentially. [00:17:54] Gary Sabo (Guest): Yeah, I agree. And I think, I mean, is it, is it realistic to think of the watches as an independent, you know, an independent device that would substitute and iPhone, you know, I mean, maybe you, you know, maybe in the future we'll have iPads where, you know, when we don't want to scroll through Instagram, but maybe, you know, Siri and, um, maybe, you know, the watch plus AirPods you know, would be robust enough that you could basically use voice dictation to basically do you know all the commands and all the input with text fields that you would normally do on your iPhone. [00:18:31] Leo Dion (Host): I think that's where they liked that the direction to go, whether it's there now. Yeah. I'm not so sure.[00:18:37] But I could, I know there'd be people, no, like I could see kids especially being like just giving them a watch that no iPhone and doing it that way. It's sort of like an iPod touch substitute in a lot of ways. [00:18:50] Gary Sabo (Guest): Yeah. I have told people that that I think 50 years from now will be looked back, is the generation that always, you know, had our head head down looking at our phone and cause I think when you know glasses are finally a thing and it just going to seem that we were cave men, the way we walk around looking at our friends, [00:19:09] Leo Dion (Host): Like look a like one of those like 80s shows where they have like the big ginormous, a satellite phone in the car. [00:19:18] yeah, and I think like especially with the class is like the other thing, like totally outside of the subject of the Apple Watch, but like the other Friday on the wall is like ARKit, ARKit or like the constantly want to talk about that every year.[00:19:33] You can kind of tell like glasses or some sort of augmented reality display is on their horizon at some point. [00:19:41] Gary Sabo (Guest): Yeah. I think a lot of us as iOS developers, I mean, I know I haven't delved into ARKit too much, but I think we're always kind of keeping it in the back of our heads because as soon as they announced the glasses, then there's going to be this huge opportunity and we're all going to become, you know, AR experts.[00:19:59] Leo Dion (Host): Exactly. Yeah. I think the other thing, um, speaking of Swift UI, which is kind of the elephant in the room when it comes to WWDC, is, uh, looking at like the use cases of SwiftUI. I don't think. Like we've kind of discussed SwiftUI isn't perfect everywhere, but where I think it's a really good fit is on the watch.[00:20:19] Like I think that is probably, if you're going to develop a watch app and you're going to develop a UI and almost seems like SwiftUI would be the first place to start and rather than like a lot of people want to just jump to the Mac and build their perfect Mac app in SwiftUI using Catalyst. I think honestly like Swifty wise, a good fit for the watch if there's anywhere else. [00:20:40] Gary Sabo (Guest): That's what I was thinking too. It seems as far as the first place that you would want to like demo it, I think it would be a watch app to kind of reminds me of the stack view. If you remember how the stack view kind of started in WatchKit and then it was ported over to the iPhone.[00:20:56] Leo Dion (Host): Yeah, exactly. [00:20:57] Gary Sabo (Guest): The only thing that, and I'm sure I'm just, it's early days, but it's just hard to imagine. Given, you know, when you watch the demos, you know how it's going to be as customizable as storyboards are. I mean, storyboard is almost like having, you know, an art board and sketch. I mean, you could basically literally make it look like anything.[00:21:18] Whereas it seems like the SwiftUI is pretty constrained. And again, I'm sure there's going to be a way, I just, I'm interested, how are we going to get there.[00:21:26] Leo Dion (Host): Yeah. I'd almost say like the problem across the board with storyboards. Has it been that you can't do anything but more of the responsiveness and especially when you have like big development teams, the storyboards end up being kind of a pain in the neck.[00:21:42] We did a podcast episodes a few weeks ago and it was the guys with test driven development and one of the terms that they kept using was source of true - source of truth. And it was funny cause then I watched WWDC and they're talking about SwiftUI and like they keep mentioning source of truth, and I was like, that's it.[00:22:01] That we've talked about that. And like that's one of the issues was with storyboards is what you see is an exactly matching up with what. You're going to end up on your device. And like as far as like previews, I'm having issues right now, but obviously it's in beta. I think like that's where it's going to be super powerful is like your Declaritive UI is going to actually match up with what you see in the preview and it's actually going to match up with what you see on an actual device.[00:22:28] I think that's where where the real, a lot of the benefits come from with SwiftUI like it's actually consistent. It actually works out. Whereas dealing with auto layout, dealing with size classes, there's always a little bit of ambiguity that something isn't going to work out quite like you'd thought.[00:22:45] Gary Sabo (Guest): That was something else that maybe made sense to me. I have always heard, I've always heard, cause obviously I'm an independent developers. The storyboards for me are great, but in a team environment with merge conflicts and that sort of thing, that it can be tricky. But the other thing was, it makes sense to me.[00:22:59] I don't, I don't know about you Leo, but just lately, maybe the past year or so, I mean I have a new Mac Book Pro with 32 gig of memory, but some of my complex iPhone UI, um, where I have, you know, maybe stack views embedded five or six deep and I get the beach ball. Just trying to move around the view. [00:23:19] Leo Dion (Host): Yup. Yeah. [00:23:20] Gary Sabo (Guest): I think maybe that's the other thing is that, you know, as, as we get even more complex than that, you're not gonna be able to do that. And that's where Swift UI maybe makes a lot more sense. [00:23:30] Leo Dion (Host): Yeah. And that was looking at somebody who has been testing out SwiftUI versus just doing direct cocoa touch stuff and like it is a lot faster based on some of the early stuff.[00:23:41] It just seems like it's much better at handling that. I don't know if they've somehow integrated Metal in with it or what, but it seems like it's a lot more optimized as opposed to the storyboards and some of the other older stuff in UIKit, [00:23:54] Gary Sabo (Guest): which makes sense. I mean, right. Storyboards and interface builder date back to next. It's built in XML. Right? [00:24:04] Leo Dion (Host): Yeah. XML. Nobody has figured out how to crack. [00:24:09] 360iDev Sponsorship BeginAs you may have heard, I will be speaking at 360 iDev in Denver on August 27th. If you're a developer in the Apple platform, you should highly consider attending this year. 360iDev is a leading indie iOS, Mac, Apple Watch, and tvOS developer conference in the United States.[00:24:27] And it's a great way to meet others in the community. Just go to 360idev.com and here's the promo code friends in high places to get 20% off. Again, this is 360idev.com and the promo code friends in high places. I'm looking forward to seeing you there. [00:24:45]360iDev Sponsorship End[00:24:45] So what, like based on everything you saw at WWDC, what do you think is the difference or do you think there's been a big improvement or a bigger opportunity now to develop apps for the Apple Watch as opposed to like say a year or like two years ago?[00:25:04] Gary Sabo (Guest): I think maybe the most interesting announcement was this Apple Watch App Store. And again, that's something that. Conceptually, I'm not sure how it will play out whether people will want to buy or, you know, maybe we'll be like, Message Apps and how that, I don't think that's really caught on the way Apple thought it would.[00:25:20] I mean, as far as from a developers' perspective, I don't know about you, but just anecdotally. It seems like everywhere I go, no matter what generation, I've seen more and more Apple Watches. [00:25:31] Leo Dion (Host): Yes, that's definitely been the case over the last year or two. [00:25:34] Gary Sabo (Guest): Yeah, and I don't know what their sales numbers are, but it seems like they're doing well.[00:25:40] Especially in the health and fitness. I mean, I think when, you know, when the Apple Watch originally came out, we didn't really understand how it was going to be used. We thought maybe we'd want to read tweets and read Instagram and read Facebook on it. Turned out that wasn't the case. It's just that we want, you know, we want notifications from it and we want to track our health and fitness.[00:25:59] I mean, maybe there's, there's additional use cases that we're not thinking of. I think I'm fortunate in the health and fitness section/sector. You know that consumers are willing to download third party apps for the watch. But I know a lot of people who you know are not in none as much in the health and fitness.[00:26:17] They're pretty happy with just the Apple Watches, some kind of stock apps. [00:26:22] Leo Dion (Host): Yeah, and I also think you get a lot with the existing iOS notifications on the Apple Watch that you almost don't need a lot of custom app as far as for notifications. [00:26:34] Gary Sabo (Guest): Right. But then, you know, thinking ahead now that you can build an independent watch app, you know, is there some use case and with SwiftUI, which is another thing to consider, I haven't played around with it yet on the watch, but it was a big limitation and not having like a core graphics and those sorts of API on the watch that you can make, you know, sort of the beautiful graphics that you could on the, on the iPhone. So. You know, with independent watch apps, is there some use case that is still yet to surface that we're not thinking of that will be an opportunity for developers? [00:27:08] Leo Dion (Host): Well, let's just look at like health care. Do you think that there's still a lot of room in health care and fitness for more apps? Obviously, like you've developed a set of apps for various specific workouts. Do you think that's going to continue to grow. [00:27:22] Gary Sabo (Guest): I think so. I mean, if just me personally, um, you know, and I have this line of track gaps, I would like to reach out and cover all the sports.[00:27:31] I mean, I know there's existing, there's a very good tennis tracking app on the tennis player, and I know there are golf apps, but, um, I'm sure there's even more, you know, sort of obscure niche type sports. I mean, in fact, I think a buddy, a friend of mine showed me one for kayaking. It was a good looking, you know, dedicated app to track your kayaking on your watch. [00:27:54] Leo Dion (Host): that's awesome. [00:27:55] Gary Sabo (Guest): That's another thing is like, and I'm sure there's, you know, even sports more obscure than kayaking that I'm not thinking of, but when your market is in the world, who does that activity? You know? I'm sure there's an opportunity there, [00:28:09] Leo Dion (Host): And with more and more owners of the Apple Watch, you're going to find a cross section of folks who are owners of the Apple Watch can play those obscure sports we don't think about [00:28:19] Gary Sabo (Guest): Exactly like, another area I would like to get into next is, you know, football, lacrosse, those types of sports. But yeah, that's probably. Yeah, more resolution I guess is how I look at that. You know, was kind of you, the first line of apps for the run trackers and now you know, they're starting to get into those more obscure sports.[00:28:40] Something that just popped into my head is, is there a like a B2B or a commercial space for the watch? I don't know if there's any, yeah. I don't know if there's anything like this now, but I remember on my uncle works in the accessibility field and I told him just an idea I had about if you had, say, like a, um, a non-sighted, um, employee and you can use the watch, you know, to get them to their desk every day, you know, if it's a big building or something like that just as an example, and you might be, you might be able to do that with the existing accessibility. [00:29:15] Leo Dion (Host): Yeah. I've had this discussion with other developers, just how, like the haptic feedback stuff. Is it really taken advantage of on the watch? And that would be like a great example of that is like being able to feel kind of where you are, where you're located um, it seems like it would be a good fit, I think. Like with B2B. Yeah, location stuff. Anything having to do with GPS would be helpful on the Apple Watch. Besides of course, health and fitness. And you say where you need like more advance notifications. That would be really convenient on the Apple Watch.[00:29:50] And I'm trying to, trying to think of what other industries could really take advantage of having such a small, convenient device like that. [00:29:57] Gary Sabo (Guest): Yeah, I agree. Uh, I remember too, I was treated about a year ago. I actually, ironically enough broke my ankle playing hockey, but my doctor had an Apple Watch and I asked her about it.[00:30:08] And she said, do you mostly use it for, you know, her calendar, but, um, I'm sure, I mean, I don't know much about, you know, how hospitals work, but, you know, maybe if the nurses or the PA's, you know, contract where that doctor is, what room she's in, you know, maybe that would be helpful or something like that.[00:30:28] Leo Dion (Host): Yeah. What's that term called for like indoor GPS? Cause that's definitely, I think something that's going to continue to grow. I wish I could remember what that term is called, but yeah, I think that'd be another spot or, yeah. And then you got something having to do with beacons. I don't even know if that API is still open at all, but there's a lot that can be done in those areas.[00:30:47] Have you seen anything as far as WWDC is concerned when it comes to other updates to HealthKit or fitness or new APIs with workouts? [00:30:56] Gary Sabo (Guest): Yeah, I'll be honest. I was actually moving, I went through a move and the week of WWDC, so I wasn't watching it live, and then I went in after and looked at all the videos and I was like, okay, let me check out all the health get videos.[00:31:08] And there was one, I was like, wow, you know, cause last year I think there was like six. Then it's like five. [00:31:17] I did the whole blog post about how working sessions work and it's like there was a lot, there was a lot of big improvements last year to workouts and HealthKit. Well, [00:31:27] I think that's good though.[00:31:28] You know, as a developer, you get a little bit of time to breathe and not have to play catch up so much this year. But, um, so it's that, it's the class on, um, I know HKQuantitySeriesSampleBuilder is in it, and it talks about sequencing. So I've watched that a few times, and I know, I think it's just sort of, um. tweaks as far as sort of the resolution. I think their, their, their example is if you're querying for heart rates, traditionally every heart rate object has the device type on it. Whereas if you now use this HKQuantitySeries, you can just get the timestamp and the value and not have to get that redundant device type every time was that their example that they used? Yeah. I think overall from health point of view, the big changes were last year, and this year is kind of a catch up here. [00:32:22] Leo Dion (Host): Yeah, I agree. As far as like the workout stuff, I think it's more pushing folks to build apps for a future where the Apple Watch is essentially not no longer needed with, with an iPhone at the same time.[00:32:34] And I think that's the big emphasis. And then of course with UI, like basically overhauling the way, you know, the use of WatchKit for building the UI. I think that was the big message this year with WOTC and the watch. [00:32:46] Gary Sabo (Guest): One thing that has sort of been a maddening problem for me as a third party developer is that you cannot modify an HKWorkout.[00:32:55] You, um, you know, if you, cause every HKworkout has, you know, it's associated data. You know, it's distance. Heart rates actually are not associated with a workout, but it's distance. It's calories. But then it also has metadata, which you can basically package anything you want and that metadata, but you can't modify a workout.[00:33:15] And I'm sure Apple has their reasons, but what you're forced to do this dance anytime, you know, say the, the user wants to add a note to a workout. Well, I have to make a copy of the current workout, add the new note field to it. Save that new updated workout and then delete the old one and just, I'm not sure why, but um, you get a lot of errors back from Apple.[00:33:41] It's an object. It's actually object filled the fine object for deletion whenever you tried to delete it. And I've had that problem for a long time. And if you Google around Strava, I think has the exact same problem because users complain in on iOS about duplicate workouts. And that's really, I think what the problem is, is because when you try to add something to a workout or receive it and you don't delete the old, you end up with a duplicate.[00:34:06] So that was something that I was kind of hoping to get solved. And if I have whatever attend WWDC, that'd be a great question for. Um, but, um, but yeah, there was nothing that I heard that would solve that issue for me. [00:34:21] Leo Dion (Host): What do you see as other APIs you think are missing for the Apple Watch or specifically HealthKit?[00:34:30] Gary Sabo (Guest): I think HealthKit gets very robust. I'm excited about where they're going as far as the integration of, you know, they're partnering with some of the bigger hospitals and now you can pull down your data from your providers now into the cloud. Okay. Yeah. And it's a third party developer, you know, to me, there's, there's opportunity there because now you have actual help.[00:34:50] Obviously you have to be sensitive with it and obviously Apple is going to require the appropriate authorizations, but provided you get it and you'd probably mid probably an amazing use cases. You know, and, and opportunities for third, third party developers. But one thing that is limiting, I think, is that it is only available on the iPhone and the Watch.[00:35:08] So when we talk about, you know, marzipan, to me, that was never super realistic about it because until HealthKit is available on the Mac or on the iPad, you know, I can't really build my apps on those platforms. [00:35:20] Leo Dion (Host): How is HealthKit stuff. Yeah, I always am uncertain. Is some health stuff in the cloud or is it all on device or how does that work exactly?[00:35:32] Gary Sabo (Guest): It's cloud based. [00:35:32] Leo Dion (Host): Okay. It is cloud-based. [00:35:34] Gary Sabo (Guest): It's at a high level, [00:35:36] Leo Dion (Host): so technically it would be feasible to have that data available on the Mac or on an iPad. [00:35:42] Gary Sabo (Guest): Well, I think the problem is, I mean, just like, you know, nuts and bolts from a developer, you couldn't open up, Oh, well, just on the iPad for example, you have to, before you perform your authorization, you have to make sure the device that HealthKit is available, and that's where you, that's where you would fail on the iPad.[00:36:00] Right. And then, I'm not even sure, you know, under under AppKit how it would work, but I would guess like, you know, you'd go to import health kit and it would find no module, you know, or something like that. [00:36:11] Leo Dion (Host): But I mean, like, they don't have, like the data is in the cloud. It's just a matter of them providing some sort of library or module or framework essentially to access that data.[00:36:21] Gary Sabo (Guest): Maybe that's underway and you know, we just haven't heard about it, but it's obviously a big part of Apple's, um, you know, API APIs. So when they talk about wanting to, you know, with one click push apps from the iPad to, to the Mac, it seems like it's a big segment of apps that they can. You know, it's just an easy tweak on their end to make that data available.[00:36:43] Leo Dion (Host): Yep. Yeah, I agree. [00:36:45] Gary Sabo (Guest): Cause I know my users would love, I mean, think about it on a 12.9 in giant pad pro to see, you know, your data from your workout graph. It would be beautiful. [00:36:53] Leo Dion (Host): Yeah, that's exactly what I'm thinking is like you want to see that that data on the iPad, maybe the Mac would be the next spot, maybe the web, and I think it would be great to have that stuff available cause it's visualization.[00:37:04] That's where a lot of this workout stuff is super helpful is being able to visualize it and see it. Do you think that there's going to be a new watch this year? [00:37:15] Gary Sabo (Guest): That's a good question. So we just had the series for, I guess that was last year. I'm not sure their release cycle isn't, it seems like it's every two years.[00:37:23] Leo Dion (Host): Is it okay? [00:37:24] Gary Sabo (Guest): I think just improving the sensors. I know sometimes, like you know, my users, for example. They'll say, Hey, um, you know, I had a, you know, I was playing soccer and it said I ran 35 miles per hour. And I don't think that's possible, you know, say, well, my app isn't really taking the, you know, taking the reading it's the Apple Watch sensors and you know, we're still at the infancy of wearable technology. So I think over time the sensors will just get more accurate. I don't know if it's ever been thought about, but just a simple use case. I've always wanted to know, like either body temperature or room temperature, you know, adding in their mom and or in the watch.[00:38:01] Leo Dion (Host): I agree completely. I think that would be great. Humid, witty, stuff like that. Cause I think they, a lot of it they think, Oh you can just depend on like the web just kind of tell you a local temperature. Like sometimes it's nice to have room temperature and like body temperature and stuff like that as well.[00:38:17] Obviously can go down the whole rabbit hole of like all those sensors. Like diabetes, I think is a super huge market. I think that they want to crack. We know that there's been reports about that and some of the other stuff, like blood alcohol levels, I could see them working on that somehow without having to, you know, do anything to poke, to poke a person essentially.[00:38:42] Gary Sabo (Guest): That's actually something I'm very interested in and I think it's sorta like the glasses, you know, whenever that is to get, you know, whenever technology is able to catch up there and we are able to store to access the blood, I mean, obviously Theranos in everybody's mind, but if something akin to Theranos that was actually worked, you know, it could be possible, [00:39:04] Leo Dion (Host): not just smoke and mirrors.[00:39:06] Gary Sabo (Guest): Right. Exactly. And I wouldn't surprise me of Apple, you know, was the first one to figure it out. If there's some way that you could, you know, just get enough blood to be able to analyze it. You just think, to me, that's where HealthKit, that's where the future is going to be, is that I don't think cancers are necessarily going to, you know, quote unquote cure it.[00:39:25] But I think if we have 24/7 monitoring of blood markers, like the instant that that cancer begins to develop, if you could start to treat for it instead of having to wait six months for your next checkup. Yeah, no, I think that's really where we'll start to be able to fight these diseases better.[00:39:45] Leo Dion (Host): Yeah, I agree completely, and I think that's kind of where the long tail future, the longterm future of the Apple Watch will be is a lot of the other health kits stuff that's so, so important to people stay at where he lives. Gary, thank you so much for coming on. Anything else you want to talk about before we close out?[00:40:05] Gary Sabo (Guest): The only other thing I had in my notes was - I haven't got to watch it yet, but just looking through that site, I said, I'll post it in the notes, but it was a talk called good developer habits. It looks really good, so I'm excited to check that out. [00:40:18] Leo Dion (Host): Yeah, that sounds awesome. We'll post that in the notes as well.[00:40:22] Are you on Twitter or how can people get ahold of you? [00:40:26] Gary Sabo (Guest): Sure. My company is Myndarc LLC, so if you wanted to check out any of my apps, you can just go Google the app store in mind Ark, M, Y N, B, a R C. And then I'm @GarySabo on Twitter [00:40:39] Leo Dion (Host): Awesome. And then if folks want to get ahold of me, you can find my company @brightdigit, brightdigit.com it's @brightdigit on Twitter and Instagram and BrightDigit on Facebook.[00:40:53] I am looking for new contract work, so if you are a company that needs help. With building a custom iOS app or a watch up, especially in the way the Apple Watch has been growing and becoming more and more powerful. Definitely reach out to me. You can reach me, leo@brightdigit.com. Gary, thank you so much for coming on the show.
★ Support this podcast on Patreon ★
7/28/2019 • 41 minutes, 29 seconds
Subcontracting with Joe Cieplinski
Guest Joe Cieplinski
jcieplinski (@jcieplinski) - Twitter
Micro.blog - @joec
RECaf - Effortless Caffeine Tracking
Release Notes | The Business of Online Businesses
Previous EpisodesCross Platform Comparison with Rob KerrSponsors360|iDev - August 25 - 28th - Denver, CO
The Leading indie iOS/Mac (and watchOS, and tvOS) Developer conference
It's all about Community and Code!
Four days of hands-on training, amazing sessions, and the great community. All Swift.
Use the promo code FriendsInHighPlaces to get 20% off registration.BrightDigit
Specialize in helping businesses build apps for iPhone, iPad, Mac and Apple Watch
10 years of experience developing for a variety of Apple platform
Helping dev shops which lack experience with Apple platforms and Swift
Contact me if you need help today.Thoughts on WWDC
WWDC on a Budget
AltConf
Business + Developer Conferences
Peers Conference
Release Notes 2019
Why Should You Be A Subcontractor?
An Agency needs flexibility and an extra developer for a project
An Agency needs a special expertise (i.e. HealthKit, WatchKit, etc…)
Fill a need for a particular platform and expertise (i.e. iOS) on team with other platform developers
Things to Consider for iOS Developers
Have a portfolio and resume - help the agency sell you to other companies
Be a T-shaped developer - know the how to build an iOS app but also have a special expertise in an area
Consider being a consultant - help build iOS development teams for companies while also making more money
Know developers of other platforms - such as Android - if you can work with them then this provides even more value to the agency
Challenges of Being a Subcontractor
Giving up Flexibility - you can be dropped at anytime because you only filling a role till a full-time employee is hired
Communication and Management - Understood Your Role Within the Structure
Don't Talk Money with Client Directly - Discussions on Money and Time should go though the agency always not directly with the client
Don’t Sell Yourself as an Individual - remember you represent the agency
Listen to the Team - Follow the agency and client’s protocols and guidelines such as their coding style, etc…
Speaking at 360|iDev
Joe’s Talk - When a Simple Algorithm will Do
Leo’s Talk - The Multi-Threaded Asynchronous Parallel World of Swift
Social MediaTwitter - @brightdigit Facebook - BrightDigit LinkedIn - BrightDigit Instagram - @brightdigit
★ Support this podcast on Patreon ★
7/14/2019 • 41 minutes, 5 seconds
Cross Platform Comparison with Rob Kerr
GuestRob Kerr - @rekerrsiveWhy should companies go with a cross-platform solution?
Consistent User Experience (whether that's a good idea or not)
Synchronicity in Code Base
Budget - Use existing team expertise
What are the differences between cross-platform solutions?
Web Based - Cordova, Ionic, PhoneGap
Bridging Solution - Flutter, React Native, NativeScript
Language Based - Xamarin - Use C# to Call Native API
What are the challenges with cross-platform solution?
Dependent on Vendor SupportDev teams need to keep Cross-Platform Tooling up to date
Using a Specific API (Metal, HealthKit, etc…) May not be supported by Cross-Platform Tool
There may be instances such as UI - you want differences between devices
Social MediaTwitter - @brightdigitFacebook - BrightDigitLinkedIn - BrightDigitInstagram - @brightdigitTranscript[00:00:00] Leo Dion (Host): Today with us. We have Rob Kerr. You want to go ahead and introduce yourself. [00:00:05] Rob Kerr (Guest): My name is Rob Kerr. I'm a consultant working primarily in mobile platforms a lot of native development but more and more it's cross-platform with Xamarin, Flutter, and some other tools and I work with primarily business customers who are looking to deliver applications to both IOS and Android with the most efficient development process that they can experience.[00:00:29] Leo Dion (Host): Awesome, really glad to have you on Rob. I've known you for three or four years now. It seems like. [00:00:35] Rob Kerr (Guest): Something like that. [00:00:37] Leo Dion (Host): Yeah, and we've met either at meetups or touch base every so often. So it sounds like recently you've been doing a lot of cross-platform development. And like I said, I have a little bit of experience with that of dabbled a little bit in Cordova as well.[00:00:54] My bread-and-butter, my expertise is obviously Swift [that is] native Swift development. That's what I like to do. I think it has a lot of advantages but there could be situations like business reasons valid business reasons to go cross-platform, right? [00:01:10] Rob Kerr (Guest): Yeah, I think so. And I think you and I have similar backgrounds in solutions as far as Apple. I've done a ton of native development in Swift and iOS and some on Android as well. Probably the last year or two a lot of my work has been cross platform and it's kind of driven by that business need or want to you know, hit both platforms efficiently. And currently in the IOS app store has you know about 1.8 million apps and the Play Store has about 2.1 million but the stats tell us that I think AppFigures had a study that only 450 thousand apps are truly cross platform where the same application is deployed in both platforms, which is you know, it's really small numbers less than 10 percent.[00:01:54] And so when will you find is you know, Everyone would kind of like to be on both platforms at the same time, but not a lot of folks are or at least not not an efficient way. So in the past you mentioned Cordova and PhoneGap and probably five or six years ago that was almost the only game in town.[00:02:11] But now this cross-platform frameworks are you know sprouting up quite a bit and all of the mega vendors offer something like Flutter or React Native or Xamarin from Microsoft. And so it's definitely coming into its own and there's certainly those those applications like business applications, especially where you need to have both platforms, but maybe don't want to fund building the app twice once for each so yeah, I think so.[00:02:38] Leo Dion (Host): What are some situations where businesses should choose cross platform as opposed to a native? [00:02:46] Rob Kerr (Guest): Yeah, that's a good question. And that's you know comes up a lot because the sort of the reasons not to usually drive into accessing very exotic APIs and things like that. In my mind if a business really wants to deliver on both platforms, especially if they like to do it at the same time that kind of tends toward cross-platform if you can particularly if the user experience they wanted to be the same on both platforms then using something cross-platform maybe doesn't mandate it but certainly makes it much likely that an application is going to work the same way so that when the support call comes in then you know somebody who needs to help a user doesn't have to think about you know, how does this work on Android how does this work on iOS. How's the potentially work on Windows? [00:03:29] Then the obvious, you know elephant in the room is just budget. If you have to build the same application twice that costs, you know potentially twice as much typically usually other different teams that work on IOS and Android if they're done completely native.[00:03:44] And then you know, you really have to think about in the long term how does that go into support cost? So if the application has to have a life cycle, new features that we added bugs need to be fixed, if they're written in two different languages than two platforms than that's something to think about so. As I think about it and on the consumer market, if you are going to develop an application to compete with one of Apple's native apps or Android and it needs to be really exotic, you know, cross-platform might not be the right choice for that.[00:04:16] But for the vast majority of apps are content consumpution or business orientated and so on It's probably the majority of the leading cross-platform tools can deliver an app with the same user experience. So something to think about.[00:04:33] Leo Dion (Host): It's funny you mention user experience. I would say that can be a benefit of cross-platform but also a hindrance in a lot of ways because like recently I was doing work with the client and they were really good about making sure that the user experience was actually different on both platforms precisely because of the expectations that certain like Android users have with their UI and Apple users have with their UI - there are definitely big differences. Specificly I'm just like thinking about like hamburger menus is like we don't have hamburger menus is very much on iOS and that's that's one of the jarring things is when you use a cross-platform app.[00:05:18] It can be obvious and jarring when you're using an app that is built cross platform, but doesn't like take into account like the user experience differences between both platforms. [00:05:33] Rob Kerr (Guest): Yeah, there's a little bit to unpack there because as I've worked with clients that you know, definitely wanted pixel-perfect identical experiences in both platforms.[00:05:42] Now, you might argue that you shouldn't do that right and Google and Apple and tell you shouldn't do that because you're not following their conventions and that's a very valid argument, but the cross-platform tooling doesn't really dictate that you have to have that same experience on both platforms.[00:05:58] Leo Dion (Host): Right. I think it really depends. It really depends on which cross-platform tool you're using [00:06:05] Rob Kerr (Guest): It does but even on most of them, I mean you can implement something conditionally. So you say that you know, this is the view used on Android. That's the view used on iOS for example, if that's what you want.[00:06:17] I don't think cross platform prevents that but conversely if you really want a very identical experience cross-platform probably enables it better than forcing a common UI paradigm into the two different native tools but your central point about you know, not deviating from the design aesthetic of iOS and how it works, you know, whether you want to use a tab view controller versus a hamburger menu is very valid point and an important design issue to think about.[00:06:48] Leo Dion (Host): Yeah, that's interesting. I'm just kind of curious going a little bit more into that. What is the reasoning behind having a consistent experience [00:06:58] Rob Kerr (Guest): UX? Yeah.[00:06:59] Leo Dion (Host): Because your typical UX person would be like no no no, it should not act exactly the same way on every platform. Is that is that usually like an executive decision that's done despite how it's not the right decision? Or is it a business decision typically to do that. Like I'm just kind of curious about that. [00:07:23] Rob Kerr (Guest): Yeah, because what I think you just said is you think designers would not want that. I've actually worked for designers that exactly wanted that so I think it depends on the thought leadership behind the app the.[00:07:34] Most compelling I think business reason that I've heard is kind of from a support perspective that that an app is going out and then a support department needs to support it. And when a user wants to know well, how do I go into the settings menu? If it isn't the same then they need to know how to support it in both directions.[00:07:53] So I think there's some degree of. Validity to that concern but I don't think it should override, you know, the overall user adoption and user satisfaction with the app. So even many iOS apps use hamburger menu is even though that's really not an iOS thing. [00:08:08] Leo Dion (Host): I don't like hamburger menus [00:08:11] Rob Kerr (Guest): on iOS[00:08:12] you know, but a lot of apps do you use it and you know many Android apps will you know use tab bar instead completely and not even have that flyover menu. So I think though the kind of a point is that that you can do it differently or not do it differently. I don't think the cross platform tools necessarily corner you to have to use a lowest common denominator. But if that's in your intent, it's probably more and more efficient way to do it. [00:08:41] Leo Dion (Host): Yeah, I could see how that might. I'm okay. If the decision is yeah, it's not a great user experience. We're willing to admit that for budgetary reasons. We we just want to like have a consistent experience. I totally get that but I like that makes total sense.[00:08:55] But if it's like actually like no no we're going to make iOS users have this uncomfortable experience because we think it's better. It's like I don't know about that. [00:09:06] Rob Kerr (Guest): Yeah, well, I would hope someone wouldn't want to like do it in order to give them an uncomfortable experience. [00:09:12] Leo Dion (Host): Yeah, I don't mean like purposely but just like they actually think that they know the best way to design on an iPhone better than Apple does it's like or vice versa, right?[00:09:21] Like that would be an uncomfortable conversation to have yeah, and when we're talking budget. I'll talk to people about the specific subject. There was a great talk last year. I went to in New York given by one of the guys at can't think of his name now Artsy and he talked about transitioning to React Native and how their team transition to React Native and it sounds like that decision was more based on the fact that they already have an existing experience with react.[00:09:56] Rob Kerr (Guest): All right, [00:09:57] Leo Dion (Host): and so it seems like when we talk budget, typically we're talking at what and we talked about this in a previous episode on back-end development. Like what your team is already comfortable with is going to be like the healthiest way rather than trying to like necessarily shove Swift or Objective-C in Xcode down their throats if they're not willing to make that sacrifice and training and hiring like it totally makes sense to like just already use what's already existing in your team in those cases. It's a sacrifice obviously because you're not going to get as good of an experience perhaps that specialize in different platforms. But in the end like it might be a way to like save some money is just hey, this team has great cohesion doing react and React Native. Let's just stick with that.[00:10:44] Rob Kerr (Guest): Yeah, I mean you can't ignore the kind of what resources do you already have what things you're already know how to support if you're building a mobile application to complement a suite of Enterprise, you know other applications and that other team can eventually support the mobile have to because you use similar technology or you know, I mean that that's certainly a benefit and I think there's you know, that is an important factor to consider. So, you know you and I touched on Xamarin earlier and C# - It's XAML. [00:11:14] If you use Xamarin forms, you know, it uses Visual Studio, you know, if you already have 50 people in your company that use all that kind of thing every day, then yeah that might make a lot of sense versus building a very small team that you know is specializing in Swift or Objective-C or Java.[00:11:32] If you lose one of those folks then you're in a lot of pain because you have to replace them. And I think you if you look across like what cross-platform tools different people advocate is very often the technology, they already know. So, you know web oriented folks will typically advocate, you know, kind of a phonegap or you know, react or ionic because you know, they're familiar with those those tools already.[00:11:57] The Microsoft shops probably going to be very interested in Xamarin because it's very C# orientated. Flutter is really gaining a lot of traction from Google and it runs with Dart underneath which which which doesn't really have an installed base some you know, so we'll see where that goes but on some of those other ones, you know, absolutely if you have folks had already have those 80% of the skills. They need to build the app. That might make a lot of sense. [00:12:25] Leo Dion (Host): What are some of the differences between the different cross-platform solutions because I know some are kind of like basically like your Cordova is essentially taking a bunch of HTML and JavaScript and CSS and building it into an app within a container some like React Native and Xamarin might just take whatever language you prefer and essentially like rebuild it into a actual binary and may include like some sort of library so that I can run what are the main differences between these different cross-platform solutions? [00:13:00] Rob Kerr (Guest): I think it's an important question because very often most people think about cross-platform or hear about them and think that all these tools are really the same or you know exact peers. And they're really not and I really think it falls into three segments roughly. And there's some blending between the segments a little bit but I think this is a good way to think about it. The first is web technology driven tools in that are primarily using HTML JavaScript and as you said, they're running almost as a local website within a web viewer some container. Cordova and phonegap are the first that did this- they definitely fall in this camp. Ionic falls in this camp pretty much. It can bridge a little bit to Native but mainly it's running as a web app as a single page web app with any container. And you know these I see, you know, mainly appealing to web development skill folks that you know, they're really good at web.[00:13:56] They want to get mobile as fast as they can so this can make a lot of sense and I think it does make a lot of sense for many kinds of apps especially if they are consumption focused like a mobile news reader or magazine website, you know can be a really good fit. [00:14:09] Now the second segment I think of is like tools that have some common language for the UI and and then have some way to bridge to native SDKs. And that's kind of the thread here is how close to native sdks are you? How abstracted are you into more of a web environment? And you know, the second one is really a common language and there's some bridge and React Native probably falls into this category because it's using React for the UI, but you can access native sdks through bridges and so on - maybe not as efficient as being fully native, but at least you can you can get there most of the time. Flutter probably is a little bit in this camp as well. It's you know, it's of completely abstracted environment, but you can get to native when you really need to. I think these tools are maybe a little more complex to use because you're sort of have one foot in both camps and debugging can be a challenge and so on but it kind of might be the best of both worlds depending your perspective.[00:15:06] And then the third is guy can think of you know, there's a few tools to fit in there. Xamarin is probably one and that's that's where you're using the common language, but actually programming directly to underlying APIs. So in Xamarin you use C# to call the same methods in apis that you would in Swift or Objective-C and it generates native iOS code at the other end. There's some complexity there and so on but I think those three kind of segments.[00:15:35] Are the ones that think about you know web driven, bridged, and just native with other languages kind of tools - that's that's why I think they fit. There's some bleed over obviously and some people say well this one's a little bit more in the first then the second that could be true but from a skills and adoption point of view I think that's a good model. [00:15:53] Leo Dion (Host): Where does Flutter fit into that is that just basically Dart for calling native apis? [00:16:00] Rob Kerr (Guest): Flutter is unique because like with Xamarin or no, I think even to some extent React Native. It's your rendering like in Xamarian your rendering a native like UI button in iOS and on Android it's you know, it's rendering a native Android button you're just using C# in that case to do that [00:16:19] Flutter is different because it actually is everything you see is drawn by Flutter on a Skia canvas. So that's kind of cool because you know, exactly what you're getting both platforms. It's very fast. And I think it'll go 60 frames per second or something like that.[00:16:34] So it's a kind of like Cordova in a way but better but it also does have access to some native sdks as well - not all of them and that team is working on the bridging but it's if it's somewhere in the middle. I think I put a serve in the center camp of something that's common common language and bridging to native to an extent.[00:16:55] Leo Dion (Host): Cool. So the difference between like React Native in Xamarin is that like React Native has its own set of apis whereas Xamarin is just using like - you still have uiviewcontroller for instance, but it's in C#, correct? [00:17:10] Rob Kerr (Guest): Yeah, I think that's the right way to think about it as an react to you guys have kind of using a an abstract paradigm react and then it has a bridge to Native culture.[00:17:20] So so you can get there whereas, you know examine is really totally native unless you use Xamarin forms but if you Xamarin iOS and Xamarin Android you just using a different language to access the underlying operating system apis. And then Xamarin, you know, the reason you would want from their perspective, the reason you would want to do that is because all that common code like web access and business logic and all that is completely shared. It's on C# and there's just no deviation between platforms. At least that's the concept right. [00:17:50] Leo Dion (Host): That makes total sense. What out of those three types are out of the platforms that you seen what do you prefer? [00:17:58] Rob Kerr (Guest): It's really good question. So definitely I tend to gravitate a little bit toward. You know, what's a really good fit for the organization. What's going to be good for long-term TCO and support I do work with a lot of business customers. I think Xamarin is a really good fit there.[00:18:14] I actually like it like working with Xamarin because it works directly with the operating system. So if I have algorithms and Swift that access HealthKit and can do all the things that Health get does I could pretty much Port those. The Xamarin without any changes and it has source-level debugger going at every level which is kind of nice. So I like that platform, it's not that commonly used I guess in you know outside of the business realm. Then outside of that realm I do like Flutter. I like what Flutters doing right now and the support it has behind it. So I'm hopeful that that will continue to grow and get better and React Native is you know fairly common out there and freely use in there. So there's a lot of folks available to work on that technology. I think it's pretty compelling. I haven't done much work with with React Native, but you know Associates that have used in love it, you know kind of sold me that that's a pretty good solution.[00:19:07] Probably the ones I avoid a little bit are more the web driven ones. So the phonegap and ionic, you know, I think they're very good and they can have a place but at least the projects I've worked on. Dig more into the weeds with tell using Health Care using Apple pay and so on and so on and and I think the further you get away from the ability to get the Native APIs the less of a good strategic decision that technology is probably going to be.[00:19:34] Leo Dion (Host): Yeah, and another one I'm thinking of is NativeScript, which that's JavaScript. Yeah, just as well. That's done by the guys at Progress I believe so. [00:19:45] Rob Kerr (Guest): Yeah it is. Yeah. It's yeah NativeScript is I mean, it is really interesting. It's some. It's even more native than React Native, I guess right but you know that probably its biggest [00:19:57] Leo Dion (Host): challenge is that the amount [00:19:59] Rob Kerr (Guest): of folks out there that you the ecosystem.[00:20:02] I mean, it's just really not there. Most people probably never heard of it. But and there's so many competitors that I think they're going to have to travel a challenge getting traction, but technically very compelling. [00:20:15] Leo Dion (Host): I think I hear a lot of ionic and usually if it's a fairly simple app, you don't have to deal with the Native APIs in that case. I know that there's some bridges but not it's not anywhere near as comfortable as working with the other one. [00:20:33] Rob Kerr (Guest): Yeah, ionic actually worked on a project for a client two or three years ago. And and we did some you know, we were able to get to a lot of native things you can bind, you know at the time Swift was really new so we needed to print some things on Zebra printers which had to be done with Native objective-c and we were able to glue it together. The debugging again was a challenge because you can't necessarily debug that library that that are the framework that you're linking in very easily.[00:21:03] So that was a challenge. But ionic, I think what we had trouble most with was kind of controlling the UI a little bit because it's a web-based and and then just generally it's the completely open source volunteer ecosystem. [00:21:17] Leo Dion (Host): Well, the other thing about ionic is you're locked into angular, whereas if you use something like that, I think you know phonegap and ionic.[00:21:25] I think they're the same thing essentially but if you like break it down to like Cordova, so the correct me if I'm wrong but like Cordova is an underlying Apache open source project that will convert web applications to mobile apps right and then ionic is kind of built on top of that and then also brings in angularjs.[00:21:47] Is that correct? [00:21:48] Rob Kerr (Guest): Yeah, pretty much. But you know, I don't necessarily see there's a downside is as much as the reason that you're doing it, [00:21:54] right exactly. Yeah, so if you already have an angular team, then it makes total sense to go with ionic. You can go a step lower than that and use Cordova. If for instance your a VueJS team that might make more sense as well.[00:22:11] Yeah, I think Cordova is basically running a web app in. You know in a web view with some, you know specific JS, you know CSS files. So it's pretty plain Jane, but all the platforms I think kind of funny categories if you're you know, Ionic, you know is you know has it has its particular framework, you know, if you like reacts with power like React Native if you like dotnet you probably like Xamarin, you know, and so on so it's it's and that's where these projects came from its, you know groups that specialized in those platforms came up with a mobile solution so it's I think part of part of the package. [00:22:48] Leo Dion (Host): And then I hear a lot of React Native. That's typically the biggest one I hear and then Flutter is kind of the one that's gained a lot of momentum of the last few months and then here in Michigan. We have a lot of C# and Java developers. So it makes total sense where you'll hear Xamarin being used is typically amongst companies that already have like they're either Microsoft shops, or they have a ton of C# developers and make sense for them to go with Xamarin [00:23:16] Rob Kerr (Guest): Exactly and all of those if you sort of you know, follow the money kind of thing, you know React Native is Facebook, Flutter is Google, Xamarin is Microsoft and then there are a lot of Open Source volunteer Community Driven things you know it out there as well. And I guess you know Native Script has a corporate behind it as well, but it's not really a mega vendor. [00:23:35] Leo Dion (Host): Right, yep. Exactly. What are some of the biggest challenges or what are some of the points within a working on a project where you were just like guys you're making this much harder than you need to you guys should really consider switching over and transitioning to doing a native app or what are some like code smells or smells within a project that you're like - okay at this point I think you guys should consider opening up xcode learning some Swift because this is not going to work out in the long run. [00:24:06] Rob Kerr (Guest): Yep that's really good question and it's definitely something to consider because if you're starting a new product that your likelihood of being able to switch to something else has is low once you have that much sunk cost into it.[00:24:19] So and I think it's a it's really good. You know, what are some of the challenges probably the first isn't necessarily feature driven, but but just that if you use a cross platform platform or development tool to develop something, you know, you're not going to be going directly to Apple for support you're not going to be using Apple's apis directly.[00:24:39] So you have to kind of think about that a little bit that's kind of obvious. Right? Because the whole idea of cross-platform is your working abstraction layer, but you know, your team does need to have still a pretty good understanding of the underlying operating systems and so on so there's there's somebody still need to do.[00:24:55] As far the kind of feature driven [development], I was talking to a client and They said you know, we're thinking cross-platform - here's what we want to do. The red flags I am probably looking for is you know, are you trying to do something that is really really specific to the operating system underneath. So are you trying to use metal on iOS which you might not find any support and most cross platform tools now.[00:25:20] Or are you trying to you know do something like earlier we talked about, you know, having a completely different experience on the two platforms. Well, if it is really completely different than you're still going to be writing it twice just in a different framework and you know, does that make sense?[00:25:35] Another thing? I kind of look at her think about is how much of this app is you I how much of the app is underneath logic and code and things like that. So if an application is like 90% not the UI then cross-platform may make a lot of sense why I write a lot of business logic and database logic and calculations in two different languages to hit two platforms, you know, maybe it makes more sense to consolidate them.[00:26:01] But you know, if the app is primarily, you know, if it's something that is totally UI driven 90% of it is kind of UI stuff and you want that UI to be very different on two platforms. That's like well maybe cross-platform doesn't doesn't make a lot of sense. [00:26:18] Leo Dion (Host): Yeah. I think those are really good points before we close out. Is there anything else you wanted to mention? [00:26:24] Rob Kerr (Guest): No, I think that's a pretty good discussion. There's tremendous interest and you probably see it to with you know, being able to ship the both platforms at the same time and you know, but having completely incompatible ecosystems makes that kind of tough.[00:26:37] So I think a lot of people are thinking about this and you know, unfortunately or fortunately there's probably six really good choices out there to of technology stacks to use and not not everyone is is right for everybody. So it's a. [00:26:51] Leo Dion (Host): Yeah, I think a lot of folks go into it thinking it's a shortcut it does help but it really depends on your team and it really isn't as much of a shortcut as people realize just to kind of reiterate what you're talking about here.[00:27:05] Like I think the good ones is like if you really want a consistent user experience like you really insist upon it probably cross platform is the way to go. If you want like your releases to be in sync that makes total sense. And then of course if you're going to have an already existing team that is familiar with some sort of language or framework that's going to be used by a cross-platform solution then using it saves you money will help your budget when you first start off. The other thing I was going to say is like if you want to test an idea like you want to just put an app on both platforms to test that specific idea - maybe cross-platform is a great way to do it as well. [00:27:44] You talked about the three differences between cross-platform solutions your Cordova based which is essentially a web View and then there's the bridge Solutions like Flutter React Native Native script and then solutions that are strictly language-based if your team is familiar C#, they're probably going to want to go with Xamarin which just basically takes the Swift and objective-c and turns it into C# for your team and just use a platform solution that is something that your team is somewhat familiar with if you already have a react team if you already have a C# team or web dev team that gives you an idea of where to go. But however, the real challenge is if you're going to use a cross-platform solution is that your in end up being dependent on another vendor or another community that is going to add another layer of complexity when it comes to support. So not only are you going to be beholding to Google or Apple? But now you have to be dependent on the react team or Xamarin the folks at Microsoft or the folks at ionic to make sure that they stay up-to-date with whatever changes come to iOS or Android.[00:28:50] If you're using a specific API that's special to a operating system such as metal or health kit or just thinking of like Apple pay anything like that. That's very specific to an API that might be good indication that you might actually want to go with Swift and Native. Then if you are expecting to really personalize the UI to different platforms and there's a lot of UI involved it might also be a good indication that you want to go native as opposed to going with a cross-platform solution. You think I covered that pretty well? [00:29:28] Rob Kerr (Guest): I think so. Yeah, I think and you know, it's kind of a thread that runs through there is a how much how much are you going to write code wise or UI development that can be used in both, you know both platforms. So it's something really to think about but I think that's a good summary, yeah.[00:29:43]Leo Dion (Host): Rob. Are you available on social media? [00:29:46] Rob Kerr (Guest): I am you can find me on Twitter @recursive. [00:29:53] Leo Dion (Host): Awesome. And before we close out, I have one question for you actually it's more like two questions for you. It seems like every guest we ask this question. When you do Native, what do you use to build your user interface? Are you a storyboard or coding person? [00:30:07] Rob Kerr (Guest): So this is the code in storyboard question. (laughter) [00:30:10] Leo Dion (Host): Yeah. Yeah. [00:30:11] Rob Kerr (Guest): Yeah, I don't think there's a middle ground answer to that other than saying...[00:30:15] Leo Dion (Host): Well If you're a coward if you're middle ground, but other than that... (laughter) [00:30:21] Rob Kerr (Guest): Well I'm not a coward, I I tend to use storyboards because I find it easier to support down the road kind of, you know, rather than writing a lot of code, but I have done both on the Apple platform. [00:30:38] Leo Dion (Host): Yeah, I go back and forth on it, I think like if you're on a big team storyboards are really really difficult because you're going to end up with emerging issues.[00:30:47] Rob Kerr (Guest): Yeah merging issues is you know, it's a big deal for storyboards. It gives a visual declarative thing about what's going on with the app kind of like it but it seems like, you know, we're moving toward more declarative UI on this with SwiftUI is doing that's what Flutter does with dart and it seems like the winds blowing in that direction.[00:31:03] But if I you know, if I have a pretty standardized user user interface, I'll use a storyboard for that. It makes a lot of sense. [00:31:09] Leo Dion (Host): Yeah, especially when you are first starting off. So yeah Swift UI - I was going to get into it. What do you think of SwiftUI?[00:31:16] Rob Kerr (Guest): You know, it's a really good direction. It's to be seen but what I loaded up a development Mac with with the new version of Mac OS and installed xcode 11 on there and tried it out and and I really like it. The whole cycle where you In Mobile where you lay out your app screens and you know kind of get it working and then you know compiled build deploy to device and then you know washing repeat the most platforms are trying to deal with that react certainly is React Native as a platform that tries to address that and Flutter to an extent. I think they'll get there.[00:31:52] But SwiftUI is aimed right at that and I think the way they're implemented that is is just right and you know, as you mentioned merge conflicts with UIKIt and so on and that's kind of solves that problem because it's just code at that point. Yeah, and I like the to definitely the split pane where you can make changes on the UI as if it was a storyboard and it updates the declarative code on the left side. I think that's really cool.[00:32:14] Leo Dion (Host): I just hate that you need Catalina in order to really take advantage of it. Other than that, that's fantastic .[00:32:22] Rob Kerr (Guest): It's temporary thing. It only supports iOS 13, which means it's really not going to come into its own for, you know, a couple of years probably - it's right direction. I like that direction. [00:32:33] Leo Dion (Host): I mean if you're willing for an app to be in the App Store in October and November then I would totally recommend people look at Swift UI for their brand new app if they're willing to wait on it. I don't know like [00:32:46] Rob Kerr (Guest): it's pretty buggy at the moment. So yeah, it is taking a risk, but certainly if you're starting something absolutely brand-new and you're comfortable only shipping for iOS 13 then sure. Why not? Yeah, [00:32:58] Leo Dion (Host): that's what I meant. Of course. But yeah, so funny how out of this whole thing people were looking forward to iPad apps on the Mac and marzipan and like out of nowhere comes this like brand new and I love how it's completely severed. My some people aren't going to like it but it's completely severed from Objective-C.[00:33:17] It takes advantage of like the whole Swift and Swift DLC stuff and creates a decently healthy way to build UIs because even it going back to the question going between storyboards and coding your own you I like I think a lot of people would, going back to [the] cross-platform Development discussion, a lot of people like building their UI in HTML and it makes sense like CSS and HTML are just a lot easier to work with and having a declarative way to build your UI using Swift UI.[00:33:50] It's a much more comfortable way because like storyboards all that stuff was like it's a black box like you can't go into that XML and figure out how to manually add like a button to user interface using storyboards. It's impossible. And then decode it like I do like the some of the stuff that they've added and last couple of years with constraints, but it's nowhere near as nice as what we've gotten with with declaratively building user interfaces and this is exactly the way user interfaces should be built. It makes total sense. [00:34:26] Rob Kerr (Guest): A lot of people think so. Yeah. [00:34:28] Leo Dion (Host): Well, thank you so much for coming on the show, and maybe we'll talk about the stuff again. [00:34:34] Rob Kerr (Guest): Great. I've enjoyed being here. I appreciate the invitation and great conversation.[00:34:38] Thank you. Yep. [00:34:39] Leo Dion (Host): You're welcome.
★ Support this podcast on Patreon ★
6/30/2019 • 34 minutes, 43 seconds
Test-Driven Development with Joshua Greene and Michael Katz
Guests
Joshua Greene - @jrg_developer - Senior Author for raywenderlich.com
Michael Katz - @themikekatz - Senior Author for raywenderlich.com
Book - iOS Test Driven DevelopmentLinks
Nimble
Quick
Previous EpisodesEpisode 14: iOS App Architecutre Show NotesThe Components of Test-Driven Development
Keep Your Iterations Small
Test First
Circular Progress of Testing and Developing Functionality
Avoid Testing other APIs (i.e. Integration Testing)
Use Mock Data for Outside Dependencies
Behavioral Driven Development vs XCTest
How to Encourage TDD in Your Team and Company
Make sure Maintainability and Specs are Met
Prevent Regressions with New Features
Regular Code Reviews
Tests Should Be Required Before Deployment
Encourage a Culture of Testing
Slow Add Tests to Projects Missing Them
Common Mistakes When Doing Test Driven Development
Following the Golden Pathand not testing edge cases and errors
Following Test Coverage too strictly or not enough
Use Multiple Test Targets
Write Tests First
For Experimenting with New APIs
Use Spike Solutions to Experiment
Write Temporary Tests
Use Playground to Test Code
Continuous Integration Tools
Jenkins
Travis-CI
CircleCI
Xcode Server
Fastlane
WWDC and TDD
New Performance Tests
Test Plan for Xcode
SwiftUI, Live Previews, and Modeling
WWDC 2019 - Testing in Xcode Social MediaTwitter - @brightdigitFacebook - BrightDigitBrand New Instagram! - @brightdigitFull TranscriptionLeo Dion (Host): So hey guys, how's it going? [00:00:01] Michael Katz (Guest): Great. How are you?[00:00:02] Leo Dion (Host): Good good, just been trying to catch up with WWDC. What's your general thoughts so far. [00:00:07] Michael Katz (Guest): It seems like this is about the biggest one we've had since they introduced Swift. There's just so much stuff. [00:00:12] Leo Dion (Host): Yeah, that's exactly what I was thinking especially with the UI changes. So have you started investing money to buy a $1000 stand? [00:00:20] Michael Katz (Guest): Yeah, I wish. Fortunately at my company, we actually do video editing. We have editing bays already have racks of Mac Pros. So I assume that those will get upgraded with the new machines at the fancy monitor so I can go downstairs and drool over them when I'm not actually. It's working on my MacBook. [00:00:36] Leo Dion (Host): Yeah, I mean that's the thing about these devices. They're not for developers like there for video editing like massive 3d rendering that kind of stuff and big production companies [00:00:45] Joshua Greene (Guest): Maybe if you're doing like 3D games or something as a developer. I could see it being really worthwhile but for business or Enterprise type apps it may be a little bit of an overkill which is definitely pretty awesome. But day to day maybe not so much. [00:00:59] Leo Dion (Host): Yeah, exactly. So if people want to tweet at us or we're also at brightdigit on Twitter at brightdigit on Instagram and Facebook. Let us know your thoughts on WWDC and any thoughts you might have about all the new stuff that's coming out.[00:01:15] Guys, so apparently you have a book coming out pretty soon. Is that correct? So go ahead and introduce yourselves to let me know a little bit about this book. [00:01:24] Joshua Greene (Guest): So my name is Joshua Greene. I am a longtime author for RayWenderlich.com[00:01:30] I've done everything from creating tutorials to books to videos. This is a new project that we're putting together to teach test-driven development it's called iOS Test-Driven Development by Tutorials [00:01:45] Michael Katz (Guest): And I'm Michael Katz and similar story. I've been with Ray Wenderlich for a number of years and also done books tutorials.[00:01:53] Spoke at the RW Devcon. Haven't done any screen cast yet, but maybe someday and they are passionate about test-driven development and we both came I think independently to the idea of writing a testing book and editor-in-chief put us together. And here we are most of the way through it.[00:02:11] Just getting ready to finally finish it up. [00:02:13] Leo Dion (Host): So test-driven development, I remember once it was like almost more than half decade ago, probably almost 10 years ago, I went to a conference in Chicago and I think it was Bob Martin who gave a talk on test-driven development the idea being like first you write your test and then you write your code.[00:02:33] Is that kind of the gist of it or what are the components of test-driven development? What exactly does that mean? [00:02:39] Joshua Greene (Guest): Yeah, definitely writing tests first is definitely a big part of it. Keeping iterations small. I think test-driven development is all about, you know, writing one small thing you write a small test to implement something that you need to get implemented.[00:02:54] You show the test actually doesn't pass you implement. Whatever code is required to get it the pass and then you verify it passes. And you just repeat this process over and over so that when you finally, you know, got your app out not only have you got all the features written you've got all of the tests that you're going to need alongside it but it's not like you just write all the tests in advance. It's literally a small step by a small step is kind of what makes it different and special. [00:03:20] Michael Katz (Guest): It's a circle you just go over and over again at a little test and yet add some code to fix that test and you test the next piece and you add the code for that and so on so you're always in lockstep. [00:03:31] Leo Dion (Host): So the problem I have had with test-driven development and iOS is some of the stuff that is pertaining to like the UI or perhaps like test-driven development, sometimes you have different screen sizes, obviously, you might have to deal with something like core data or networking. How do you overcome those challenges when you're trying to do test-driven development?[00:03:57] Michael Katz (Guest): I think we think about using TDD. Is that it really forces you to think about what your code is doing? And so if you want to make sure that your code is testable and you're starting out with no code. You're going to write your code in a way that is so if you have a dependency on something external to the system like a database or an API or screen, you'll want to write your code, you know, where you have a model. For instance any test the models all the business logic and the data logic and so on and then you can add the UI on top of that and then use a different type of testing like UI tests to handle making sure that the UI is correct, but that way you're certain that your business logic and state is consistent and complete before you even get there.[00:04:36] Joshua Greene (Guest): With TDD, even if you're following TDD from the get-go there. It Is not to say that you have to test everything per say. For example, if you're going to be caught by another their way like at the compiler is going to throw an error if you actually hit an error while you're doing TDD that counts as a failed test [00:04:54] with the UI portion, I typically look at it as if it's something I can configure in interface Builder, I don't, you know, not necessarily going to test that too heavy in terms of TDD because it's something I can see on screen and might mention there's other tests that I can use if I really want to put test in place for UI testing and so.[00:05:14] TDD is really about you know, structuring your code in such a way that it is testable putting in protocols instead of talking directly to a database for like Mike says, you know talking to models that are structured in such a way that you can actually put test where you get the biggest bang for your buck as far as testing goes.[00:05:30] Leo Dion (Host): So it sounds to me like we're talking here about kind of this is similar exactly to what we talked about in our last episode. When we talked about architecture and the fact that you need to architect your app around models, and it sounds like you're basically talking about what specially when it comes to Swift, you know, doing protocol oriented programming and using mocks in your testing as opposed to directly connecting with things like user interface or your database or your network. Is that what I'm hearing?[00:06:00] Michael Katz (Guest): Exactly? In the book. I have a chapter where we're building at a fitness app and instead of connecting to Core Motion we basically build a protocol around it so we can Mock and stub data and act as if these things were happening live, but they're actually just being faked by the tests.[00:06:17] And that's the type of thing you would use for a pretty much any kind of Hardware or network or UI that you can do in your code. So we separate the logic and the pieces that are about the app that are unique from the things that are handled by the operating system. [00:06:29] Leo Dion (Host): Yeah, that's awesome. And I think that's one of the things I really like about TDD is that not only is it a great way to make sure your code actually works in all cases but it also encourages healthy architecture in the end because you're allowing for different things to be plugged in like I need a fake core motion or health kit or core data or whatever. I can fake it in my test so that way when I test the actual application like you said those are different tests, they're not tdd necessarily. [00:07:01] Michael Katz (Guest): It's particularly true when you're testing error condition. So if you have a logic in your code that handles detecting when a call is dropped and then when you reconnect to restart something in this kind of hard to test especially in a CI situation where you're building and testing your app on a server that's plugged into gigabit Ethernet.[00:07:20] So by using TDD enrollment you've already separated out that networking layer. So you can just Supply errors and different combinations and ordering of conditions to test out that your app is going to handle those appropriately even if they're very difficult to test it manually. [00:07:34] Joshua Greene (Guest): Even if you're starting from a point where it so you don't have a completely new application.[00:07:39] It's not to say that you can you know, not introduced EDD later on, you know, a lot of these same principles of you want to talk through something else. Even if you directly coupled yourself to talking to a networking calls or to core data or whatever, you know external API is. You're talking to that directly.[00:07:57] You can break those dependencies and you know move your architecture in the right way, even after the app is already, you know launched or had a few versions out. We actually have some chapters in the book that go into details about taking a legacy based app and moving it towards TDD. So. I'd say that tdd is a great start if you're just kicking off an app, but even if you're not you can still use and consider TDD just you know in sure you're writing those tests first and again, you know, just making sure that you've got the correct coverage and bang for the buck as far as testing goes.[00:08:28] Michael Katz (Guest): Yeah, you can start writing test at any time in this way. So even if you have an app and even if you have tests that you've written sort of after the fact to validate your behavior when you write new code you can start doing TDD at any point. [00:08:40] Leo Dion (Host): So what are some challenges that people typically face when it comes to developing like in Xcode for iOS that's different from say like your typical vue.js developer or PHP or python?[00:08:57] Do you guys typically use the standard packages like the XC test stuff that comes with xcode and iOS, or do you use your own custom packages for mocking or what are some challenges that you've seen people face specifically in iOS.[00:09:12] Michael Katz (Guest): I think Xcode default is he test case is a little bit cumbersome is very much based on the old Xunit or Junit type testing which is gosh has to be 20 years old at this point. Yeah. I think it's out of the 90s where it was a long time ago. [00:09:28] Leo Dion (Host): It was a long time ago. [00:09:29] Michael Katz (Guest): So my company we actually use a form of what we call behavioral driven testing. So it's more descriptive. We use of Frameworks called Quick and Nimble. Which is a layer on top of XC test, so you still run the test and xcode and you get the same reports out that you do but it's a different API and XCtest so it makes it you know easier to read the test understand but it also because it's a layer on top is slower than using actually test, directly so it's the trade-off there. [00:09:59] Joshua Greene (Guest): I'm gonna have to disagree with you a little bit my in that I would say - yes Quick and Nimble is fantastic as far as making things more descriptive and so forth. But to me like it's more syntactical flavoring if you will then it is a strict requirement [00:10:14] XCTest very much so used to be you had to have something in addition to it. You had to have some way to do like asynchronous testing the very first version of XCTest didn't really even provide a way to set up any sort of expectations. I'd say today though, if you really want to and a lot of my day-to-day stuff, I typically unless there's a strong reason why I like you're saying unless I need to do it and some sort of behavior descriptive way that I want to actually set upfront i don't necessarily opt for going to something else always just from the get-go. You can very much so use XCTest right out of the box and it is testing completes - well as complete as you can get with Swift and really having true mock support, but you can basically do everything with XCTest that you can do with Quick and Nimble.[00:10:59] It's just like you said, maybe it's a little bit more verbose or maybe there's a little bit that you might do differently versus some of these BDD type Frameworks that give you some nice syntax.[00:11:10] Leo Dion (Host): I've worked with like mocha for like nodejs and some JavaScript stuff. I think that's behavioral driven, but it sounds to me like Quick and Nimble gives you that like syntactical sugar in a good way to like explain what each test actually does.[00:11:25] Where as XCTest doesn't give you that but it does give you the basic logic and API for doing just logical tests. Which is more or less what TDD is really driving at. Is that correct? [00:11:37] Joshua Greene (Guest): Yeah, I'd say the XCTest doesn't give you the naming syntaxes or so forth or you know, like the nice thing about BDD and really the main difference, you know, but on the other end of the things I'm close to the plain vanilla here than Mike it sounds like. [00:11:49] The nice thing about the BDD Frameworks like Quick and Nimble is it will provide you the ability to say okay here's a descriptive string describing what I'm actually trying to test here. You can do the same thing using method signatures and that's actually what we show in the book there.[00:12:03] [That] is if you named your test correctly, you know describing what you're doing describing what is actually being tested in the expected outcome. You can get a lot of the same benefits from the just a vanilla XCTest. But like Mike said it's you know more so by naming conventions that you set up less so directly supported by XCTest itself.[00:12:23] Leo Dion (Host): So I want to jump a little bit more into TDD and talk about some of the terminology and some of the stuff that's involved. So, we talked a little bit about like mocking what exactly is mocking and what's it used for when it comes to test driven development. If there's any other terms, I'm forgetting that are components of test driven development let me know. [00:12:45] Michael Katz (Guest): Yeah, so. When you're running tests, there's a whole Suite of objects that are commonly called test doubles where basically you have an object. That's just for testing that parallels production code [or] main app code. [00:13:03] So a mock is an object that behaves like the code. So for instance you have like a mock network connection or like an nsurl session. And if you supply a command to that like low data, your mock is responsible for handing back some set of fake data that you supplied to the test knows ahead of time what's going to happen and it's going to succeed or not with mocks in particular it is to verify that certain methods or behaviors happen along with that. So if you call we go back to the mock data URL idea that you would verify that the data was returned correctly or if an error was made if you set it to make an error that the error callback gets called and so on. You can also verify that certain methods are only called once or twice.[00:13:49] So if you have a tertiary object further down so that when you save an object to a database you want to make sure that you're not saving that same thing twice so there's no duplication in the code. You can verify that using a mock by adding methods to count the number of times a method is called and so on. I 'm not sure that was clear but maybe Josh can help here.[00:14:06] Joshua Greene (Guest): I agree with what you're saying there Mike the only sort of difference in my mind as far as Mocks vs. a test double there. A test double may not provide like verification that behavior like you verify that a sort of method was called.[00:14:22] It may just accept those methods and just fill in as a dummy, you know, the simplest way to make just like a test double in my mind would be you know subclass something out or conform to a protocol and then implement nothing. And those are basically the two options that you have in Swift is you either implement a protocol to create a mock and then you can you know, just pass that to either be an initializer or you know setting it as a property.[00:14:46] Or you can subclass something else and again, you know pass it in but one way or another you have to be able to insert yourself in this hierarchy of getting these calls. When creating a mock there we're actually validating whatever happens happens in you know, maybe the correct order or maybe it's that it happens the correct count whatever you're trying to actually accomplish at the time there we're not just filling, you know, just a dummy requirement.[00:15:10] But with that said, sometimes we could create a mock it may be that the initializer requires you to have some sort of other object, but you don't really care you're going to intercept calls and inbetween you might just create something. That's just an empty object. And that's what I call like a test double dummy to me.[00:15:25] So I guess in a way my point is the mocks are a special type of test double that provides verification. [00:15:31] Leo Dion (Host): So basically like for instance, I have a protocol or a mock of what a network called would be guy just like create a mock that pretends to do the call and then have like a Boolean property says like is called and just set it to true and then that way I can verify that that network call has been made.[00:15:48] Is that kind of what we're talking about? [00:15:50] Joshua Greene (Guest): Yeah, then the simplest thing would be holding onto a boolean and just saying that it was actually called. But you know, especially networking. You're likely going to need to return something. Right? [00:16:01] Leo Dion (Host): Right exactly. So then you return some sort of like mock data based on that network call of some sort.[00:16:07] Joshua Greene (Guest): Exactly and with the mocks or that test double is you could actually have like with a real networking API you got to go hit a server. It's going to take however long to connect to that get data parse it return it that you've got the full stack there right. Versus with the mock you can immediately like asynchronously pass something back or if you want to turn it in for you know, take it from an asynchronous to synchronous call.[00:16:29] You can do that with the mark. So you eliminate having to talk to anything real then actually using a mock. It makes your test much much more faster and much more consistent as far as what you expect to happen. Given certain criteria, you can set up the criteria. [00:16:44] Michael Katz (Guest): Yeah, absolutely. [00:16:45] Leo Dion (Host): Are there any libraries or Frameworks that you would recommend to help create those mocks or do you just pretty much implement whatever protocol is going to pretend to do like networking or database or whatever it is?[00:16:58] Joshua Greene (Guest): For me, I guess the sort of nicety that Objective-C had but Swift is actively moving away from this is the ability to actually have mocked that are true mocks and that you say all right i want to mock this object and it magically happens for you using things like OC mock was a very popular framework that allows you to do this in Objective C. [00:17:20] This isn't possible in Swift, because the Swift team actively wants to move things from the runtime to compile time and for production code that makes a lot of sense because anything that you can move to compile time, you can catch an error at compile time you throw an error it doesn't build, you know, the developer has to fix that.[00:17:38] If something gets all the way through runtime, you likely have a runtime crash. So they're really trying to get rid of those runtime crashes. Unfortunately, that makes it basically impossible to do what OC mock was doing with just pure Swift because there's nothing to you know, put yourself in between as far as a runtime that you can actually intercept messages there.[00:17:57] Instead, you basically only have two choices you either conform to a protocol and implement all the methods there or you take whatever real object is and subclass that and just override whatever behavior such as you know, what you're talking about maybe you capture a boolean instead of whatever the superclass - the real object would have been doing.[00:18:17] Now with that said you could definitely do those by hand. You have no choice as far as doing this at compile time. You have to compile something so you can write it by hand or there are a few niceties out there like Sourcery for example is a nice tool that allows you to write code. Do it if I hear you say here's a template that I want to use anytime that I see this protocol, you know, that may be conformed some auto-generating or something Sourcery can write that for you.[00:18:42] So one way or another it has to be compiled time, but there are tools out there to help with some of you know, the harder bits of that or the annoying bits or boiler plate bits.[00:18:50] Leo Dion (Host): I've just started playing around with Sourcery. Sourcery is amazing what you could do with it. Yeah. Usually what I end up doing is just implementing that protocol in creating my own mock in the test Library.[00:19:00] That's essentially what I do because like you said you Don't have that ability that Dynamic runtime ability to just like create something on the fly like you can with Objective C. [00:19:10] So what are some other tips or tricks you have when it comes to like TDD besides mocking trying to think if there's anything else that I think is a major component when it comes to TDD but mocking is a big one and if you have a healthy architecture then I think you're good with mocking.[00:19:29] I guess we'll jump into like what are some ways you can encourage TDD in your team like what are some ways that like somebody who was higher up like a CTO or a manager can make sure that we're getting the tests that we need and that code is actually being tested and written in a way that it is testable.[00:19:50] Michael Katz (Guest): There are two things especially if you're talking to a CTO that they like to hear is that maintainability and scalability and making sure that you have a complete working set of tests allows the team to be more efficient and add features faster in the future.[00:20:05] So. You know that you can add something without worrying that you're going to break existing behavior, especially as the app gets more complicated over time we want to make sure that as people come and go in the organization or just as you forget because you're doing a million different things that there's some requirement that doesn't get lost because it was never really written down in a spec somewhere but there's a test for it [00:20:26] Joshua Greene (Guest): Yep, definitely maintainability is a win factor if you will as far as not having test versus having test. Also, prevention of regressions, you know Mike is kind of get up there to if you don't have any tests not only is it something that it may be that nobody on the team understands how it is because tests form documentation and maybe that later on you introduce bugs that you fixed in V1 yeah, that's a sad thing to actually see.[00:20:53] The wins though are definitely those lines. As far as how to get your team to do it though. I'd say first and foremost, especially if a team of any sort of no more than just a couple developers you should be promoting code reviews and in the code reviews if I you know, see somebody on my team and they put out a code review that doesn't have any unit tests I'm immediately rejecting it and it has to have tests in order to even be considered to get into production.[00:21:21] How do you know if it works without tests? So there is sort of a you know, a philosophy of you must do testing, but you can obviously write unit tests without following TDD. I'd say as far as if you want to get your team to do tdd and you know bring up this test first mentality and get the benefits that TDD. Provides with, you know you write tests for as you're going to get better coverage and typically things will be designed any more testable way versus trying to do that after the fact I'd say the first and foremost your team needs to know how to do it.[00:21:52] If your team doesn't know test-driven development or know and just have any experience in that area. It's hard to say go and do test-driven development with that said, you know Mike and I you know part of the reason for writing this book was we looked at the community and said, you know iOS community knows about unit testing knows, you know about these things to some extent but we don't think there is a strong grasp for how TDD works. So that was a strong part of why we're actually putting this book together. [00:22:20] So I'd say check out, you know things like art book check out the raywenderlich.com for you know, where you can go to get these materials to help get your team up to speed but you know, once they're up to speed keep the bar high make sure that there's something in place like code reviews to make sure that it's actually happening [00:22:35] Michael Katz (Guest): When I've rolled it out on teams, usually what I do is I write a feature in with the team there so that we can serve like a pair programming or four-person five-person programming to see the process and go through it because it can be a little strange if you're not used to doing it a little slow in the first few days until you get the hang but once you do it, it's just like, you know the second nature because it's just this iterative step. [00:22:59] So having someone that can can walk through and hold hands a little bit also makes it easy to make that transition. I also have a culture of testing that really wants this and is willing to allow developers the ability to take it on. [00:23:13] Joshua Greene (Guest): I'd say as far as things that prevented him from going to this especially if the apps been around forever. If you've got an app and it's got you know several hundred or thousands or more classes in it just saying, all right, you've got to do this cycle where you build and compile every 30 seconds or are you know faster than that. It may take several minutes to compile the full app let alone run all the tests, right? [00:23:36] You do have to do this in a way where one thing we are actually going to release a chapter on this in the book even is that you need design not only the core app in a way that it can be testable but there's nothing wrong with actually saying you can pull out a module and so you've got a feature that's implemented just in a module and all of the code for what it's doing is within that module any sort of externalities to its using this third party API or maybe even a different piece of your core application you can put a protocol in between. [00:24:05] So breaking things up in a way that okay. Here's this small bit here. That's a modulo a different piece that you accomplished has a different goal or something else. That's a different module. So you go from this huge monolithic app to alright a set of libraries or frameworks, whatever you're often used based on your use cases that can be compiled to really quickly - you can run the test against them really quickly and you know can be changed pretty much independently without affecting the rest of the code base. That's fantastic. That's the you know, code that isn't tightly coupled anymore. It's Loosely coupled to the rest of the system. It's testable. It's something that can scale, you know as much as you need it to. [00:24:42] Michael Katz (Guest): One of the things that was a game-changer for me and doing this with a existing large app was just accepting that it was okay to do TDD for just a new code and any file that was their existing did not go through that level of rigor and acceptance as it is and then in the book also we described how to like slowly add tests for the things that were there before so you can mix and match TDD even though what works best in doing it, you know straight up fresh you can add it into your process slowly and not have to to write, you know, three thousands tests before you can start writing that code because usually you're under some deadline to get something out there.[00:25:22] Leo Dion (Host): Yeah. I think that's a big part about introducing anything new to a project. I'm thinking about it this week with SwiftUI like when they introduce Swift at you shouldn't go in and rewrite your whole project to be in Swift. If it's an Objective-C. You shouldn't, you know rip out every storyboard and convert everything to SwiftUI for a thousand reasons and I think just with tdd like you shouldn't just go in and start writing tests for all of your existing code.[00:25:46] Like I think it's just easier to slowly introduce it as you write new features and naturally over time. It will develop that like, most of your code will end up being test driven in the end. [00:25:56] Joshua Greene (Guest): Definitely, you don't need to just jump into here and go right to the deep end. You can start by just adding it like Mike said for new code only or identify hey, here's this core part of the app. We really need to make sure that this works or we need to make some changes around this. How can we make sure we're not going to break in the process? There's nothing that says you can't put in test place there. As you need them and identify them you don't have to go back and just add I actually be against this at my teens come and said we want to introduce TDD.[00:26:26] I'm going to add tests throughout the app for I can chip it in new features. No, that's not a good thing to do. It's probably going to be something that you're going to waste time with that. So adding them slowly over time, especially for the very big apps may actually be not only the best choice, but maybe the only choice if you actually want to, you know, continue moving forward with delivering and, you know creating new features at the same time.[00:26:48] Leo Dion (Host): So what are some other mistakes you think either with teams that are getting started with test-driven development or just teams that are doing thinking that they're doing test-driven development but actually, they're not. What are some common mistakes that teams and developers make when they're doing TDD.[00:27:04] Michael Katz (Guest): So I think you know one of the mistakes is only covering the happy path or golden path through the code. So you want to make sure that you're testing the edge cases and different combinations of parameters. And if you find that your function has, you know, 4200, you know different combinations of input and that's kind of a code smell there. It may be an indication to break things up into smaller pieces. [00:27:30] Leo Dion (Host): How do you create enough test data so that you know, you're testing as many cases as possible. Like let's say you have a function that takes in addition like does addition does that mean that I need to test every addition problem possible? What would be a great way to like break that down? [00:27:45] Michael Katz (Guest): With math, you've got your basic, you know, making sure that you have you cover zeros in a negative values values at the max, you know max float, max int those type of things when you're doing it. Those are probably more academic. I think most apps are in the putting JSON into a table sort.[00:28:03] So for their you know, your bounds or more, you know, did you get back an empty array to have text you know for a field that's 6 megabytes when you're expecting just a sentence, you know those type of things. It's probably a good thing. I get help somewhere. That's like common things to look out for for that.[00:28:21] If you have code like an if statement or branch or you know, I do catch those are pretty good indicators that you should have a test at least covers that so you can use the test coverage as a way of least making sure that you've executing the code. [00:28:34] Leo Dion (Host): Yeah. That's what it sounds like is like you're basically talking about test coverage which if I understand correctly is like basically making sure that every line of code. Xcode does it actually I don't know about you guys but it seems to do a decent job as far as the test coverage instrumentation. But like it'll actually tell you if you've covered every if branch and or switch case in every line of code and it gives you a percentage that's seems pretty reasonable.[00:28:59] Michael Katz (Guest): Yeah, and that's a good start. It won't cover the out-of-bounds issues or overflows underflows the errors with formatting and things like that because you're still running that code so you can. End of what the function is trying to do as well, but it just covers a good way to start.[00:29:14] The tricky thing we've run into with test coverage those we have multiple test targets and [with] Xcode I haven't found a good way to sort of sum up the coverage across multiple test targets and maybe the new test plans handles that. [00:29:27] Leo Dion (Host): What do you mean by test targets just briefly? [00:29:30] Michael Katz (Guest): So just like you can have multiple targets you can build Frameworks within a project, multiple apps. You can build multiple test targets so you can group your tests based upon you can have test that just cover networking or databases or test the cover each framework and a test suite and in your scheme, you can specify that when you run the test action which test targets get run and so we've broken up our app into many different libraries and each library has its own test target so we can either run all the suites or if we're just modifying code and one of the Frameworks we just run the tests when you're doing a local development. [00:30:07] Joshua Greene (Guest): That's a good reason to you know, as far as why coverage isn't the end-all be-all story. So it may not be you know, especially in Mike's case there because he has the multiple targets. It isn't actually a true story in that they could be that you've got two targets and they've each got 50%/50% do you have a hundred percent coverage?[00:30:25] Is there any overlap between the two of them? It's difficult to say right? So I'd say another sort of common errors, especially as far as management goes is you know giving too much emphasis to test coverage. Test coverage should be something you look at, you know, if you have zero percent versus 80% Obviously I'm going to say oh 80% is probably covering more than you know, the closer you get to the zero, but it's not the most important metric if you said as a manager I'm going to say a hundred percent of you know, the code must be covered by tests. I don't think that's a good goal. [00:30:58] You know, it doesn't tell you actually, you know very much for what that is. All it indicates is a particular line of code was executed. You know, was it executed with the right inputs?[00:31:07] Was it executed with all the edge cases? Like Mike is talking about. I don't know. So my point is use it as a starting point. But that's not the only thing you should consider you got to look at, you know are the cases that are the edge cases are the normal flows are all you know, all of the entire picture is what you should actually be considering [00:31:26] The nice thing about doing tdd, by the way instead of instead of writing these after the fact and adding the unit test on after you've got all the if else has or switches or whatever your code is. Tdd says in order to add new functionality after I did the test first. So, TDD for the most part is going to be more likely to get you in a case where you've covered all of these edge cases. Now in certain times, especially with things like the out of bounds, you might miss something right and you might miss you know, here's this one weird edge case we didn't think about and you know, we accidentally wrote code that either car forms correctly that's a win or you know misses this thing without actually having to test in place. That's okay even after you do TDD or you know, you have test if you identify you're missing a test add a test. Nothing that says you can always go back and you know add more where you need. But you know knowing up front you got most of everything. That's what tdd, you know provides you a stronger guarantee of than just adding test willy-nilly.[00:32:24]Marker[00:32:24] Leo Dion (Host): One question I have when I am right starting to write like an app is sometimes I need to like explore a particular API and just to make sure I have the functionality of that API down before I've even gotten to a point to understand what to test .[00:32:42] So for instance you're talking like Core Motion or something like HealthKit. I need to understand how HealthKit expects me to get the data back. So I end up actually writing the code before I've even written the test. How do you explore tdd when you're like working with a brand new API that you've never even worked with?[00:33:03] Joshua Greene (Guest): For me, there's nothing wrong with doing a spike solution. So I've never used an API before how good is my code actually going to be the first go around that, you know, I'm actually touching or using this thing. Maybe it's okay, but probably not great. Right I can go and explore this in a test app and compiling just a few classes is going to be way quicker than compiling my entire code base and just play with it.[00:33:27] You know, maybe n after I'm done I can look back and say well this isn't actually too bad and then I might actually rewrite whatever I did in a TDD fashion and you know improve it from there or I might say, oh this code is I mean, at least I learned what I was trying to learn but is actually pretty off o it's not going in my case.[00:33:45] I can entirely throw away a spike that takes me just an hour a couple hours to do and go back and then you know implement it in a correct TDD fashion. That's you know, one way the other way is if you do have some notion of what it does and how it's supposed to work. You can write tests in advance that has the, you know, just the behavior of how the thing works that you're trying to interact with things like Core Motion might be harder because it's actually doing asyncronous things or requiring you to move around in the real world for those sorts of bits. They are, you know, it may be that you can't do a lot of the testing upfront but other sorts of APIs like maybe making REST-ful calls. You can wait on a REST-ful call and you know, accept that I'm just going to write these tests as a temporary thing to see what it returns.[00:34:31] There's nothing wrong with doing that and you know just using as experimentation. So for me if I'm touching a new thing. Those are my go to either use a spike solution that I may or may not keep and if I do keep I'm gonna have to write tests for it in a TDD fashion or just write tests that are temporary tests that are for exploratory only and throw them away after I'm done because they're not actually useful or that might be useful for learning but they're not useful for keeping in my project forever.[00:34:57] Leo Dion (Host): It's almost like a rewrite like you basically explore the solution right and that kind of does the behavior more or less and then go through and then rewrite it with a little bit more architecture and tests within it. Is that what I'm hearing? [00:35:10] Joshua Greene (Guest): You never used it before right so if you've never used an API, you're not going to know how it works or what's best to do with it.[00:35:16] What's not to do? Your first solution probably isn't going to be great. So a lot of times it's worthwhile to throw out whatever you're doing because it's more of a learning thing than it is anything that's going to truly be worthwhile to put in production [00:35:29] Michael Katz (Guest): 100% for me. One of the things that we have in our workspace is we have a couple of playgrounds where we actually import the local frameworks for our project. So if we wanted to like test how something new interacts with the code, we've already built we have that ready to go. And so you can spend some time in the playground adding a code calling a new API seeing how that goes. Obviously it doesn't really work for Hardware dependent things but for learning Core Location or you know something with SQL some like that there's definitely work there.[00:36:00] Leo Dion (Host): Is there anything else you wanted to talk about when it comes to test driven development before I ask more about WWDC?[00:36:07] Michael Katz (Guest): I think it's becoming more and more industry standard especially and I'm sure it's been in the server-side world for a long time. But in terms of the app world, I know I've had conversations with my executives and they start talking about it in a meeting and it usually takes a couple of years before they learn about whatever the cool new thing is.[00:36:27] I think going forward we're going to be living in a world where this is more natural and each year Xcode gets a little bit better in terms of supporting the test, especially in terms of test running and test performance. One thing we do really touch on is how you some kind of continuous integration going which I think is it's not essential because TDD is just a methodology but in practice if you have a server that's always running these tests it makes it easier to catch things and make sure that there are issues with merges or multiple developers working on something not everyone may run all the tests before they submit. [00:37:01] Leo Dion (Host): Yeah, let's talk a little bit about continuous integration. What have you done as far as that's concerned? Like I've done like open source projects on GitHub and I pretty much run Travis CI for doing my you know, simple essentially running my tests and testing out on different operating systems and different devices.[00:37:21] What are some ways that you've done continuous integration? How have you seen benefits from that.[00:37:25] Michael Katz (Guest): We use Jenkins. So we have a local server that actually we have I don't know how many Mac Mini nodes that run our tests and we use is a product called FastLane, which I think is pretty common in the iOS world.[00:37:39] It's kind of like the. It sits on top of xcode build and allows you to basically specify the configuration for building and testing and you can run multiple tests and upload iTunes connect and things like that as part of the service but the important thing there is we have probably about 50 Engineers that contribute to our code base and so it's essential to make sure that what we have is always in good working order.[00:38:04] But if you're working at a small team or you're working by yourself Travis or Circle CI are good solutions. Xcode server is what Apple keeps pushing. I haven't seen anyone use that in practice, but it has all the Integrations with Xcode so if you're able to use it and you're just building an iOS or macOS app and I think it's going to work out pretty well for you because it knows all about Esco tests and code coverage and things like that. [00:38:30] Leo Dion (Host): Yeah, I've worked with xcode server. I've actually set up a virtual machine to run whatever the feud like, I'll probably set up one in a week or so and using Catalina and then put Xcode server on it. It's pretty decent like there's a lot to it some tweaking and things that you have to consider when you set up your project. But yeah, it works pretty decent. [00:38:48] Joshua Greene (Guest): Yeah, so I basically used all of them myself and I'd say given the choice between using nothing or picking at random even right the picking at random is gonna be better than using nothing at all. Especially, you know, the more engineers you have the bigger bang you actually get for wanting to use continuous integration and sure at some point it's just strictly required frankly.[00:39:10] You know, like my team is pretty large, but if you have maybe one or two developers. Especially if you're following TDD, I don't know they're strictly required for for that size per se because you do want to be constantly just running all over the test. Right? But once you reach a certain point where you have to ensure, okay, the projects is just so large or you got so many engineers that you really need to have some safeguards and checks in place other than just you know, Cowboy. Everybody agrees this is the right way to do it. Continuous integration definitely is a requirement. You know and Xcode server is a good one will be you know, especially if you have a Mac Mini or something around or haven't done it with the Virtual Machine although the now I want to try so that's a good suggestion but it's an easy thing. [00:39:52] Leo Dion (Host): Especially if you're doing anything or if you're going to be trying new stuff, you probably want to put Catalina on a VM instead of running it on your main machine that's living on the edge. If you want to do that [00:40:02] Joshua Greene (Guest): The Mac minis are still pretty cheap so our group uses just a small fleet of Mac minis as well there, but the cheaper route is going the VM for sure. So I guess maybe parallel or something depending on how you're running it and I suppose maybe have to buy the parallelization software. I don't know. [00:40:20] Leo Dion (Host): Yeah, great guys. Thank you so much for coming on the show before we close out. You want to talk a little bit about your book again. [00:40:28] Michael Katz (Guest): It's an iOS test-driven development by tutorials available now at raywenderlich.com we have an early access that has the first third of the book and the whole book should be out in the fall. It covers the whole TDD from starting from nothing. We have a whole big piece networking because there's almost every app has that and It's tricky to test we have chapters on how to work with a big legacy app especially where legacy means no tests or insufficient testing.[00:41:00] It goes through each of these things step by step. So you follow along. So unlike other books that may give a more theoretical approach emerges say here's what your code should look like. This is very step by step you follow along going through adding the tests adding the test targets, the whole shebang.[00:41:17] Joshua Greene (Guest): I'd say we've done the hard work for you going through the Apple apis and you know have a very experienced developers that you know Mike and I've used this for several years. Mike has used this for several years here. You don't want to learn all this stuff by yourself. It'll take longer. It'll be harder to do if you want to get up to speed and get running quickly.[00:41:36] It's the best way just get the book save yourself some time. Save yourself some sanity happened to not go through those Apple API to yourself and get running quickly and get up to speed quickly. [00:41:47] Leo Dion (Host): Yeah, that's fantastic. I'm really looking forward to take a look at this book and just learning some new ways to do TDD when it comes to Xcode and iOS.[00:41:57] Before we close out, do you guys have any thoughts on some of the new stuff from WWDC and how it pertains to test driven development? [00:42:06] Michael Katz (Guest): Unfortunately, it's about six hours from the what's new in testing in Xcode. So what I've seen so far as just been what they've covered in the what's new in Xcode and the State of the Union, but it looks like that there's some new methods for.[00:42:21] We've had the measuring blocks before that measure the time your test takes I know it looks like you can also measure memory usage, disk usage, and a bunch of other things which is really great. They're not really like for test-driven development. But when you're building reliability tests and performance tests, and with those are going to be pretty handy and then there's this new thing called test plans which basically.[00:42:42] Takes all the management of tests from the scheme into a separate top-level object in your project and you can rerun your tests against multiple configurations. So you can run all your tests in English and then run all the tests again in French or whatever in one click. They also have four different test ordering and different runtime checks and all that so it takes one manual step out of the loop, but I wouldn't necessarily think it's super revolutionary. What do you think Josh? [00:43:10] Joshua Greene (Guest): I'm totally with you as far as the new features. They look pretty cool for Xcode goes. I also wanted to point out that with the SwiftUI they've really gone very much so protocol oriented development.[00:43:22] That's great news for things like testing and test driven development here anytime you can put in a protocol in place you can insert a mock very easily into whatever set up it is so I'm very excited to see how they've really architected SwiftUI and it looks like just testing is going to be a lot easier compared to some of the previous solutions where you've got concrete class and just figuring out how you're going to mock that out, you know via subclass or whatnot may have been very difficult with pure UIKit.[00:43:51] It looks like SwiftUI is gonna help us quite a bit in the testing realm. So I'm very excited to dive into it and learn everything about you know all the cool stuff that they've done and cool stuff to make developers lives easier with testing. [00:44:04] Leo Dion (Host): You're talking about the difference between like UIViewController, which is this class.[00:44:08] You have to subclass as opposed to like the SwiftUI View protocol which you can pretty much mock up any way you want to right? [00:44:15] Joshua Greene (Guest): Exactly yeah, the whole UIViewController thing, there's so much concrete stuff in that it's difficult to truly create great mocks with it. I mean you can, you know, create a mock by subclassing uiviewcontroller, right.[00:44:28] But had that been a protocol, I mean you can combine protocols so much more easily combined functionality using protocol oriented development. But creating mocks the same thing, you can just conform to that Mark and just Implement whatever message you actually care about and it's just much more elegant solution a much more, you know architecture friendly solution going with the protocol then something concrete.[00:44:51] So it's a very good job on Apple's part and you know it's my take on it so. I haven't gone to see all of the defaults implementations of stuff they give you but you know, hopefully it's saying and you know, from what I have seen it looks very well done. [00:45:04] Michael Katz (Guest): One of those things with SwiftUI is there really is from sample code encouraging people to build out separate model classes, which also makes it easier to test.[00:45:13] Leo Dion (Host): You're talking like the previews [00:45:15] Michael Katz (Guest): Yeah with the previews and you can have being able to put multiple previews in the assistant.[00:45:20] I think I'll make it great for testing not really testing but just visualizing the different conditions before you even get to the point of completing your code, but the at state you can have a separate model class be bound to your view as you to put that logic of loading data and changing data and so on outside of the view of other people couple and their view controllers the setting of The View State and then the model state so it's exciting. [00:45:45] Joshua Greene (Guest): It looks like they're kind of pushing Mike component-based development too you know, I've seen like so many developers where you need a custom UI tap controller or something, right. So you go and instead of right and something your own which may be in the right solution you go and you try to reuse Apple's and then you're trying to hack internal methods and so forth and it's just hard to do with all the Swift you I think they provided a same base and said look you need new components. You can create something. I'm excited for testing because the idea being you could split those off into their own library. Here's this component that I need or set of components that I need and just pull them in as you need and ensure that they're tested really well. So again, it just looks really well done. So the team did a really good job as far as everything I've seen so far. [00:46:25] Leo Dion (Host): Well, thank you so much guys for coming on the program if folks want to get ahold of you. What's the best way?[00:46:31] Joshua Greene (Guest): Sure so if you have questions about the book, we actually have a forum on raywenderlich.com. We actively monitor that as authors of the book.[00:46:41] So if you have questions ask them there and we will actually answer you for anything that you've got. If you want to reach us personally jrgdeveloper@gmail.com by email or Twitter @grg_developer [00:46:53] Michael Katz (Guest): and I'm @themikekatz on Twitter [00:46:56] Leo Dion (Host): well, thank you so much for coming on and maybe we'll talk again later about Swift UI and how that's going to improve test-driven development.
★ Support this podcast on Patreon ★
6/16/2019 • 47 minutes, 4 seconds
iOS App Architecture with René Cacheaux and Josh Berlin
Guests
Josh Berlin - @jab2109
René Cacheaux - @RCachATX
Book - Advanced iOS App ArchitectureLinks
Swinject
RxSwift
Advanced Unidirectional Architecture with Rene Cacheaux - Live Tutorial Session - RWDevCon 2018
Alcatraz RIP
Xcode Extensions
Previous Episodes
Episode 7: Apple 2019
Episode 8: Cloud and Backend Services
Episode 12: iOS Developer Interviews with Alex Bush
Show NotesChallenges with Architecture in iOS Application Development
Dealing with the lack of guidance from Apple
Slow team velocity caused By large volumes of code
Architecture is important when the team is large enough to benefit
One day when the team grows more, you’re going to potentially have more problems.Josh Berlin
The need to slow down and establish an architecture in an app
constant communication and early meeting to discuss patterns and practices (i.e. Architecture)
How team dynamic affects the need for leadership
Applying Patterns to iOS Application Architecture
MVC vs Other Patterns such as RxSwift
How design patterns naturally develop
Using third party libraries
The importance of team DNA
The importance of dependency injection
Tooling - iOS and Swift vs Android and Kotlin
The problems with Storyboards and having healthy architecture
WWDC Hopes and DreamsJosh Berlin - @jab2109Dark Theme (iOS)René Cacheaux - @RCachATX
Marzipan
Swift Concurrency Primitives
Leo Dion - @leogdion
Xcode Improvements
More Exposure for Services and Server Side Swift
Swift Package Manager
More Developer Tools
What happened to Alcatraz and Xcode Extensions?Social MediaTwitter - @brightdigitFacebook - BrightDigitBrand New Instagram! - @brightdigitTranscriptLeo Dion (Host): [00:00:00] Hello, welcome to another episode of EmpowerApps Show today. We have with us René Cacheaux and Josh Berlin. Guys, thanks for coming on. René Cacheaux (Guest): [00:00:08] Thanks for having us. Josh Berlin (Guest): [00:00:09] Yeah.Leo Dion (Host): [00:00:09] So I've heard a lot of issues that companies have with architecture especially architecture with iOS apps and I know you guys have a book coming out as part of the Ray Wenderlich series - IOS app architecture. So this is something I'm really interested [in]. Maybe if you can kind of define the problems you've seen a lot of companies run into when it comes to architecting a successful mobile app, especially in iOS. René Cacheaux (Guest): [00:00:40] Yeah, one of the biggest challenges with iOS development is that there's really no strong opinion from Apple. So everyone's really kind of left to roll their own patterns. The biggest issues that I've seen is just slow in-team velocity, because we read a lot more code than we write. Everytime that we go into a code base to add a new feature, fix a bug, or something - the more tightly coupled all the pieces of your app are [and] the more you have to read to kind of understand all the things that you need to understand to make a safe change without breaking something. And so, kind of architecture really helps speed up your team because if you can kind of use the right patterns and break things up into no easy to reason about chunks. It's much much easier to find where you need to make the change and have confidence that you are not going to break something. So that's what I would say kind of like the main points on that.Josh Berlin (Guest): [00:01:39] Yeah and another thing is like a lot of apps that are built usually start with maybe like one person or a small team and that developer has an opinion about how to architect the app and as a team grows and the product org wants more changes [it] becomes a lot harder to make those changes if the team isn't on board with one type of architecture and everyone is going to have their own opinion. It's going to be a lot easier to make these changes. If everyone agrees on one architecture and knows where to our find everything, everything is documented because one day when the team grows more, you know, you're going to potentially have more problems - like René was saying finding things in the code base. When the app is small it's not as big of a deal but when it grows it becomes a lot more challenging, so it's good to get these architectural patterns in early on and have everyone on board.Leo Dion (Host): [00:02:36] Maybe talk a little bit about your background and how did you guys get into iOS development? René Cacheaux (Guest): [00:02:40] So I got into it back in around 2008. I was doing a bunch of kind of web Java server face, you know internal it development and my wife had bought an iPhone and was kind of really trying to get me on board with the Apple ecosystem. Back then I was kind of Microsoft guy. You know, I was like, I'll try developing for this it would be interesting and I just got hooked honestly like. Working with like very abstract things kind of in the cloud and kind of in the background versus working on something that you can kind of feel and touch and look and show your friends kind of a really really cool thing. That's how I got into it. Leo Dion (Host): [00:03:17] How about you Josh? Josh Berlin (Guest): [00:03:18] Yeah. So in college, it was like maybe 10 years ago and iOS first came out. No one was really teaching this in school and I wanted a fitness tracker. So I built one for myself and ended up getting a job at a company building business products for Windows. They wanted to Android and iOS app and somehow I got the job. I'm in a building iOS apps ever since then. Leo Dion (Host): [00:03:43] It's funny. So how big are the teams that you've worked with? René Cacheaux (Guest): [00:03:46] All kinds of ranges. I mean Josh and I used to work at a consultancy called Mutual Mobile. The kind of a big project that we work together on were kind of establish all this architecture stuff. We had a team about six iOS and about six Android but you know in that agency we had other projects that were like two on each platform - so anywhere between two and six on each platform when we were in which the mobile Leo Dion (Host): [00:04:10] It seems like one of the big things I'm hearing is as more and more code gets written there's almost use the term interesting use in terms of velocity and it is a specific term obviously the agile world, but I can understand what you mean you basically mean speed of the project and its movement but I would almost say like when you get more and more code. It becomes more and more difficult to manage and then on top of it. There's like an inertia there. The bigger it gets the heavier it gets and the harder it is to move it. It seems to me like what you're saying is like good architecture makes it much quicker and much easier to add more and more components to an app. Is that correct? René Cacheaux (Guest): [00:04:49] Yeah, the weird part about it though is to get to the point where you get those benefits. You do have to kind of slow down a little bit. And that's the part that most organizations struggle with is that they want that high-velocity upfront on day zero and you just can't get that. If you don't spend the time to work together as a team and really figure out the patterns that everyone's on board with and really kind of experiment a little bit and kind of lock it in. That's one thing that, the project that I worked with Josh on. You know, the first couple months it was a pretty slow process. I mean we had everyone in every code review. We experimented with the patterns that we were using and we were tweaking them and whatnot. And so at the very beginning, it really wasn't a high-velocity project probably slower than average. But then about three or four months into it, we started moving really really fast and we had a big deadline because this project was for a big brand, for the World Cup and we needed it by certain day and it was a pretty large scope project. And by the end of it the last about three four months of it, I mean we were moving super fast. Everyone was able to build features pretty quickly. I know Josh if you want to expand on any of that stuff. Josh Berlin (Guest): [00:06:05] I think we were pretty lucky to have those two to three months to really nail down the architecture we liked and to implement an architecture that would allow us after that like initial ramp-up period to build new features super super fast and not break everything because If we didn't have those first two months and we just started like writing code like building new features. I don't even know like everything probably would have crumbled because we didn't have a good foundation. So I think it's super important. Like maybe you don't need two to three months, but maybe even two to three weeks when you start a new project to really nail down the architecture and figure out how you're going to be able to build features quickly later on and test them.Leo Dion (Host): [00:06:48] Do you think part of it is making sure somebody is there to enforce consistency or do you need like an architecture role set up for a team or what are ways that you can like foster that within a company?Josh Berlin (Guest): [00:07:01] I don't think you need necessarily an architecture role, but I think that having meetings at the early stages of products about architecture is very important Leo Dion (Host): [00:07:13] And you're talking like highly technical meetings, right?Josh Berlin (Guest): [00:07:15] Yes, very technical like a lot of diagrams like class diagrams how everything is going to fit together and like coming up with some patterns. So I don't think you need necessarily like someone who's an architect on the project. I mean it definitely would help but I think like just a team of four or five people could have these meetings and figure this stuff out early on.Leo Dion (Host): [00:07:34] Do you need somebody to call the shots at all?Josh Berlin (Guest): [00:07:37] I mean I think it's probably better if you have someone driving this and everyone just kind of like tuning their plan, but I don't think it's completely necessary. I mean as long as everyone and I think what's more important is everyone's in agreement and everyone feels that they can have input and they're not just like doing what this one person says.Leo Dion (Host): [00:07:58] Yeah. I've been in situations like that where there's somebody who pretty much is it ordering everybody what to do as far as architecture? And yeah, it can be really difficult to be in situations like that.René Cacheaux (Guest): [00:08:08] I think the DNA of the team has a lot to do with it. I've been on very different kinds of teams and in teams we have folks that are very like self-motivated. You don't really need someone calling the shots and other teams. I've been on their folks that you know, maybe you want some more guidance and so for those are actually wanting someone to call the shots. So I think it really depends on kind of the personality and makeup of each team. But it definitely helps to have at least someone driving and at least the best way it's worked I think is making sure that whoever is driving is very open-minded and is more interested in having decisions being made less than pushing their personal agenda what they personally think is the best architecture.Leo Dion (Host): [00:08:51] I really like that. It's a really good point. So maybe you guys can get into a little bit of the nitty-gritty what are like the different styles or different patterns that people can implement especially when it comes to iOS apps and architecture. René Cacheaux (Guest): [00:09:06] So there's three main styles that we've kind of categorized most of the patterns into. The more traditional work all the MV patterns, which are like MVC and MVP and MVVM. Leo Dion (Host): [00:09:16] And so like Apple, obviously, they really push MVC. René Cacheaux (Guest): [00:09:20] Yes.Leo Dion (Host): [00:09:21] If there's any pattern that they push usually MVC is one of their oldest and most steadfast patternsRené Cacheaux (Guest): [00:09:27] They push it a lot. You know, UIKit [and] Cocoa Touch is designed around that pattern. And so that's the pattern that you will fight the least with when you're working with cocoa touch. It's a good pattern and there's a lot of materials out their on folks that are trying to kind of demystify all the negative kind of vibes around. You see because you can do MVC very well. I think that's actually the main thing that we learned Josh and I working together is that it's not so much a matter of which pattern you use its how well you put it to practice and you can like take any pattern and do a horrible job of applying it. You can take any pattern and do a great job of applying it. Like Dave Delong who used to work at Apple. He's a big proponent of MVC has a lot of cool articles out there on hey MVC is not so bad you just, you know decompose your view controllers into smart controllers and you'll be fine. You don't have to do this whole in MVP thing to fix those problems. Josh Berlin (Guest): [00:10:19] Yeah, like everyone hates on MVC but like I think a lot of it is just like how you implement it. It's not so much that in VC is a bad pattern is just like kind of like a broad thing and there's a lot of ways to do it poorly and a lot of ways do it well.Leo Dion (Host): [00:10:33] Yeah, we had Alex Bush on who does contract work for Uber and his big complaint was how MVC gets unwieldy with really really really large projects. And that's kind of what I've heard. I use MVC. I don't have really large projects that I feel uncomfortable still implementing it but I think one of the things I've seen especially novice developers do is they'll take a pattern like a specific design pattern and just use it to use it without understanding why they use it. Most of the time, design patterns, I feel like they end up growing out of an it like just based on my experience. I've experienced enough that patterns just a naturally develop in your code if you're already using a lot of other things like making sure that things only do one thing. I forgot what that's called or, you know having a healthy use of like protocols or interfaces that automatically creates healthy patterns that follow patterns that we've seen in various books and stuff. René Cacheaux (Guest): [00:11:33] Yeah, I experienced that exact same kind of sequence of events where like I first learned about design patterns and it was like a kid in a candy store. I was like, I want to use as many of these as I can and then it kind of dies down and then when you just start trying to solve the problems that are in front of you it's like you said that you'll end up using those patterns but not because you said oh I want to use the Observer pattern. It's more because oh you have these external signals coming from the outside coming into the view controller and you want to decouple the view controller from that - let me build an observer for that. Leo Dion (Host): [00:12:05] Yeah, and then you realize wait a second. This is an observer pattern. It's like how they naturally grow out of your code. René Cacheaux (Guest): [00:12:11] Yeah. Exactly. Josh Berlin (Guest): [00:12:12] Yeah. Leo Dion (Host): [00:12:12] What other patterns do you see used throughout iOS? Josh Berlin (Guest): [00:12:17] Yeah. I think they'll like the reactive pattern has been super hot lately.Leo Dion (Host): [00:12:21] Yes. Josh Berlin (Guest): [00:12:22] Maybe it's not the best. Thing to do on iOS like to write all this reactive code actually at the company. I work for now when I started a year and a few months ago the app was using a lot of RX Swift. Leo Dion (Host): [00:12:34] And RX Swift is hot right now Josh Berlin (Guest): [00:12:36] It's very hot. It's very hot. And when I first started I was I know RX left and I know like how to write it but it's still like sometimes when you look at a new project with Rx Swift you're kind of just like it's hard to wrap your head around what's going on. It's kind of funny because now a year later we have no RX Swift in the project. We've moved completely away from reactive programming and I think that's more of like, it's just easier to understand sometimes when the whole team doesn't know our RX Swift. It's like well do we want to continue down this path teach everyone this new style this like new trendy hot style or you want to move to something more of like an MVC pattern where everyone's more familiar and it's maybe more readable for everybody. Leo Dion (Host): [00:13:18] I also feel like I don't like bringing in third-party libraries like necessarily fight against the grain of I'm not against that pattern specific. But if you're like, let's say for instance, you're doing react like Facebook. React JavaScript stuff, right? Okay, at least that follows that pattern you're not fighting against the grain because that's what the whole thing is set up for but iOS like you're fighting against Apple and their push for MVC and okay if that's what you want to do. That's fine. But if after you know WWDC things though, work out that way like you're dependent on the React Swift team to like keep up with it, which that's up to you. That's a risk you're have to be willing to takeRené Cacheaux (Guest): [00:13:56] Again. Like I think that's where the team DNA kind of comes in and that's why I think that it's bad advice to say here's the one architecture that you should always use. It's really about looking at who you're working with because there's some folks that are really into that stuff. And so I've been in environments both very reactive in both not and. Direct trainer bring a reactive into a non reactive environment is really hard is really really hard. Like Josh said it's almost not worth it. The other thing I think that kind of popped in my mind while we're discussing this stuff was that I would bring in third-party libraries one of the things that I kind of don't like about RX whiffed is that it's a really big library and if you really think about the common use cases, you're probably only using about maybe 60% of the library maybe 50% So you're only using a portion of it, but you're paying all the binary costs in the weight that it brings in. I really wish they could break it down into like a core version of it or not, but. Bringing third party dependencies can be pretty bad or pretty heavy on your app. Leo Dion (Host): [00:14:57] Yeah, I kind of agree. So anything else you want to talk about as far as different styles. I know like dependency injection has been big, protocol oriented programming especially important in the Swift realm.René Cacheaux (Guest): [00:15:11] Yeah, I mean that's Dependency Injection is kind of cool because it's kind of a universal concept that we've been able to apply to all the different patterns. So I think of Dependency Injection as kind of like the foundation of the architecture where you can put patterns on top of it and if there's one thing that you want to focus on getting a right, I think especially if you're trying to build for a large team or large set of teams dependency injections is really important to get and the thing there is Josh and I've done this several different ways as we were learning the pattern and using it in different environments and different teams different companies. We started writing everything by hand because with Dependency Injection, there are Frameworks and libraries that kind of help you follow the pattern and that's typically where everyone goes to is oh, let me find a library or framework that helps with dependency injection. We found that using those libraries hurts more than helps. We found that handwriting all your dependency injection containers is actually the easiest way to write code that's easy to understand. It's a little more painful. It's a little bit more boilerplate a little bit more boring work, but on the other side of that you get a code base that's much easier to read and understand and trace through that's my advice I would give to any iOS developer is sure like look at the frameworks and play around with them and use them at the end of the day. I would recommend starting with handwriting stuff. The key thing there is. To make sure you don't put everything in one container, you know break it up down into multiple containers. But if you do that, you'll find that it's much easier to manage or do you agree with that Josh? Josh Berlin (Guest): [00:16:41] Yeah hundred percent. I mean, I think you're going to do one thing to make your app architecture better. It's like. Use dependency injection and like René was saying D.I. Can go from very simple to very very very complicated. Leo Dion (Host): [00:16:55] I want to break down dependency injection because some folks might not know what exactly that means. I'm gonna try at what I do. So I learned dependency injection at my previous employer? It was like this is amazing. Now this allows for unit testing, easy plugins and stuff. We had talked before the recording about how like I used to be a C# developer interview. Castle Windsor for dependency injection, which is great because Castle Windsor, it can do all the reflections so I can like look up whatever the default implementation of a specific interfaces and automatically do that for you but then if you want to like use mocks, you can use mocks to unit test as well. And I miss some of that ability to do reflection, automate some of the ability to plug in certain classes. So the way I've done dependency injection is kind of employing the protocol oriented way of creating a protocol for almost everything and then having specific components. Like for instance I have a class that needs I think that turns a wheel. So I have a protocol for turning a wheel and then I'll have a specific implementation of that. And then that way the constructor for that thing that takes in the thing that turns the wheel can take in anything that turns the wheel it doesn't matter but then I have a default implementation that I use an app and then in my unit test I might have a mock one just to see you know that it works regardless of what gets plugged in. Is that kind of what we're talking about here? René Cacheaux (Guest): [00:18:19] Yeah, and we're talking about also like the resolution of these things. So like when you say okay, I want to create this object and this object has a dependency on three other objects that may be a conform to specific protocol how that instruction happens how the assembly of the dependency graph happens. That's where tools like swinge act and other kind of dependency injection frameworks help you out. But the thing that we found is that those tools use what's called runtime resolution. So when you say I want this object, like let's say I want this view controller and it depends on this networking thingy. And this database thingy when you say hey give me this view controller. It does the resolution at runtime it rather than compile time. So if for some reason you don't register how to create a network thingy or a database thingy, you won't find out until you run the app, which is kind of a more dangerous way of doing it. Whereas if you just handwrite your dependency containers that. Know how to create a view controller with it network thingy and database thingy. You'll find out at compile time. If you're not able to create a database object conforming this protocol and injecting into the constructor it just you know, we should won't compile which is great for a really big app where you have lots of different protocols and services and objects and a large dependency graph. You don't want to depend on having to run through all the runtime logic to expose any kind of missing dependencies there so.Leo Dion (Host): [00:19:44] Yeah, that's what I feel like has been the big roadblock for me is the lack of like decent resolution frameworks to plug in. So I just end up, you know hard-coding in the app and taking defaults and things like that.René Cacheaux (Guest): [00:19:57] Yeah, and that's exactly how we found it to be the most helpful. Yep. Josh Berlin (Guest): [00:20:00] I mean even doing it that way like you're still getting all the benefits of dependency injection where your Constructors take in interfaces like protocols and these classes become testable. Even though you're not using a framework or still getting all the benefits of DI doing it yourself by hand.Leo Dion (Host): [00:20:18] Exactly. And then you know, when you do a unit test you can mock it you're not dependent on that specifically so you guys have had experience what other languages have you had experience developing. Sounds like René you've done some Java stuff. René Cacheaux (Guest): [00:20:30] Yeah, Java and JavaScript. I've done Kotlin, Objective-C, and Swift. Those are the main ones. Josh Berlin (Guest): [00:20:39] A couple years ago. I spent some time doing a reactive element the JavaScript. Leo Dion (Host): [00:20:45] Okay. Josh Berlin (Guest): [00:20:45] Yeah, I've done some Java before a little bit of Kotlin. Leo Dion (Host): [00:20:49] What have you found as what's unique as far as IOS app architecture? Would have been unique benefits that unique challenges that you've seen, you know with that and with the dev tools in general.René Cacheaux (Guest): [00:21:02] That's good question. There's a lot of thoughts there that are running through my mind. So one of the things that I think is challenging is that Apple even though they do push MVC quite heavily and cocoa touch does kind of you know is designed with MVC in my they don't seem to have a very strong opinion about it at least not around tooling and things like that. Whereas like in the Android side Google's really into architecture these days and they're putting out like libraries that are all about just architecture. It kind of helped folks, you know, architect their apps. And so I think the platform having an opinion really helps because it allows people to kind of rally around that set of patterns or that sort of thing and build tooling libraries that kind of just work with it and like an IOS and Android you don't have to use those things, right, but if you want to move. It's a good default. Whereas an iOS we really don't have that. So that's I think a challenge. Leo Dion (Host): [00:21:55] It's funny you mention that because I'm doing a talk on multi-threaded like asynchronous development. I'm preparing for it. And one of the big libraries for Swift to do that is actually done by Google. Yeah, even though we have like Swift NIO by Apple, Google is even providing libraries for Swift developers. René Cacheaux (Guest): [00:22:14] Yeah, and I guess Swift is a huge a challenge right? Because it's a great language. It's moving so slowly. I mean you can pair it with something like Kotlin. We just have huge gaps in Swift like concurrency primitives that are not there and I'm calling you have things like her routines and things like that. It's just, you know Collins moving a lot faster than Swift. And so when you're doing both Android and iOS today's a weird time to be doing both because there's a lot lacking or not on the iOS side. It used to be the other way around.Leo Dion (Host): [00:22:41] Yeah. I mean it almost seems like with Swift they've slowed down because they've placed a high priority on like ABI stability. I think now that they've gotten over that hurdle. It'll be interesting to see and we'll get into that like what they might come up with as far as development tools for iOS and maybe updates to Swift as a language. How about as far as like Xcode devtools? It seems like we're going in the same direction where it's just like Xcode. It's painful to do Swift development on sometimes like I'm glad we have some refactoring stuff but just like autocomplete sometimes it works. Sometimes it doesn't very cryptic messages from the compiler when we just aren't doing our generic protocols the right way that it wants us to. What other stuff have you run into?Josh Berlin (Guest): [00:23:28] The error messages are kind of a tough. I think it's another reason to just make your apps as simple as possible. That's why I like sometimes using third-party libraries just makes all the error messages worse and it's harder to find bugs Leo Dion (Host): [00:23:42] It fixes one problem, but crazy three more. Josh Berlin (Guest): [00:23:44] Yeah. So like maybe you have like a really cool architecture and like you have one way data flow, you know, everything works properly, but when something breaks, it might be a lot harder to fix versus if you go a simple around simple architecture, you're kind of setting yourself up for success later on. So think like like Xcode has come a long way in the last 10 years, but you still have to fight it sometimes for sure. René Cacheaux (Guest): [00:24:09] It's definitely creaking any like the fact that they had a kind of rebuild the build system underneath it completely. I mean it really needs it have an overhaul. Yeah. Josh Berlin (Guest): [00:24:19] Yeah build times are pretty high.Leo Dion (Host): [00:24:21] It's not as bad as iTunes, but still it needs help. Josh Berlin (Guest): [00:24:24] And the thing is like Google's just continuously improving their IDs and it kind of like makes me want to start doing more Android development not like I love iOS like that's my number one. It is I think interesting because they're doing so much with architecture and their build system is amazing. Right? So iOS developers can learn a lot from the Android platform. Leo Dion (Host): [00:24:46] Yeah, it's amazing to see like there are some really good tools out there that third parties have built like I'm just thinking I like Fastlane and see what you will about Cocoapods or Carthage, but they're essentially filling in the gap that Apple hasn't provide like hopefully Swift Package Management can fill a lot of that Gap like with dependencies, but still it's nice to see that at least there's a community out there filling in the gaps that apple hasn't filled, right?René Cacheaux (Guest): [00:25:13] It's strange though because you know apple is such a large organization with so much money. You know, I feel like if they really wanted to solve these problems. They probably could do a pretty good job and they are doing things like they acquired BuddyBuild and so we'll see what happens with that. But I still feel like there's so much more that they could do in terms of helping developers in the environments that they are in today because a lot of the tooling that Apple builds. Apple doesn't use themselves things like Interface Builder isn't that widely used I think in apple and so what happens is a lot of the stuff that Apple builds is not really tailored for large organizations or large teams building large apps. And so that's where the community has to kind of jump in and fill those gaps which you know, the community has a really good job of it. I feel like apple could do even better job of it given all the resources that they have, Hopefully Leo Dion (Host): [00:26:03] You speak about interface Builder. So let's get into it like especially with architecture. How do you deal with managing your UI, but keeping a healthy architecture. I'm a storyboard guy, but I'm by no means somebody who's going to like shove it down anybody's throat. I totally get how painful it can be especially working on a team when you have like merging you have to deal with some crap like that. But what are your recommendations or your personal styling?René Cacheaux (Guest): [00:26:33] I would not recommend anyone use interface Builder especially in large teams. Leo Dion (Host): [00:26:37] Yes. René Cacheaux (Guest): [00:26:38] That's one of the strong opinions that I do have is mostly because with interface Builder. You don't have a source of Truth everything that you put in your storyboard or your nib file is subject to change by the code underneath it. And so when you're looking at the story board itself in your kind of tweaking the layouts and you're taking the constraints and stuff like that. There's nothing stopping the code underneath the completely changing that and so when there's bugs and stuff, sometimes it's really hard to figure out the root cause because you can't just look at the storyboard. That's not enough. You have to go to storyboard and you have to look at the code. So that's one of the things that Apple could fix that. The other thing around is if you use a storyboard still kind of the way that Apple suggest you use them with segues and stuff like that. We do end up coupling all your view controllers together and there are kind of acts around it to make it less so but they're still pretty hacky. The simplest example is just a navigation stack, right, you know, you have a navigation controller and you have your presenting like, you know a list of things and you tap on an item with segues you're going to have to instantiate the next view controller in that first view controller. Now your tightly coupling those two things. If you needed to reorganize the navigation path, you're gonna have to go in to touch all the view controllers and kind of remove things around. So those are like a couple of big things I would say there's other ones but they're the ones that up my mind Josh Berlin (Guest): [00:27:54] Also like Auto layout code is not that hard to write by hand. I think the initial ramp up time is pretty high. It takes a little bit to learn how to build constraints by hand.Leo Dion (Host): [00:28:05] You're talking about like the visual format language?Josh Berlin (Guest): [00:28:08] I'm just talking about like all the helper methods that Apple provides to create constraints and like constrained one view to another one in code Leo Dion (Host): [00:28:16] Interesting. Okay. René Cacheaux (Guest): [00:28:17] Yeah. They added like a new anchor API that makes it way easier Josh Berlin (Guest): [00:28:20] So nice. Yeah and like you can write it some helper methods around that stuff reading this in your view classes is really nice and it's really easy to look at a view and see how everything's laid out in code and the other thing is like simple views in Interface Builder. Maybe it's easier to build those using like like a storyboard or seeing the views like laid out on screen versus encode but once you start doing like animations and changing constraints that stuff is so much easier to write in code. René Cacheaux (Guest): [00:28:51] One thing you mention there Josh is I think a lot of folks don't use this enough where you can totally subclass uiview and do all your styling and layout in there as opposed to in a view controller. I still see a tons of you controllers with times of layout and styling code. I think that's one of the biggest complaints about not doing your UI and code is like, oh it blows my view controllers in your dad's all this layout and style code into my view controllers. And so. You know what I usually say is. Okay. Well, that's fine. Just subclass your route uiview do it all in there and that really nicely separates the viewcontroller kind of controlling logic from like the UI and a styling logic. Leo Dion (Host): [00:29:27] Yeah that goes back to the whole point about having healthy app architecture. Your view should not be in the controller like drawing your view should be in your view. That's what it's there for. René Cacheaux (Guest): [00:29:35] Exactly. Leo Dion (Host): [00:29:37] Cool. Well, thanks guys for coming on. So do you want to talk a little bit about your book that's coming out? René Cacheaux (Guest): [00:29:42] Yeah, definitely. So it's been lots of effort getting this book out. We've been working on it for I think about three years now, we're super excited about it. We really wanted to write something that was extremely pragmatic and something that would tackle all the real world scenarios of architecture. I think I've read a bunch of different architecture books that have come out and they're very theoretical they usually have very simple example code and so what we decided to do is to try to build out as much of a real app as we could possibly do and so what we did is we built basically an app that's kind of like an Uber app, but it's kind of fun. It's a kangaroos pick you up, so it's called Koober. And so yeah, you can hail a kangaroo Leo Dion (Host): [00:30:26] I started watching your YouTube video. You did a presentation on it, about Koober I loved it. Yeah, and I'll post a link to that as well.René Cacheaux (Guest): [00:30:33] It was a lot of fun. We based it off of Uber. So we built as much of Uber as we possibly could and so we had to tackle some hard problems. We couldn't shy away from things like navigation. Or things like authentication tokens and authentication stuff. And so we tackled all of those things. So because of that we didn't cover that many architectures. I think we cover three but we cover them pretty deeply and so yeah, I mean that's a couple of things I'm excited about actually probably the thing I'm most excited about is Josh and I are working together last, you know, six or so years. We kind of came up with her own kind of architecture and the last chapter of the book kind of covers that and we're pretty excited about it. Hopefully the community will have a good response to it. And I'm sure Josh has lots of thoughts on it. Josh Berlin (Guest): [00:31:20] I'm excited to hear what people think about elements. It's an architecture that we created a Mutual Mobile a long time ago, and we really try to provide a set of useful. Architecture patterns that people can like pick and choose which ones they like and yeah, we're pretty excited to see what people think of that. Leo Dion (Host): [00:31:39] Awesome. The name of the book is Advanced IOS app architecture and you can find out right at Ray Wenderlich's site. I'll provide the link in the notes just to plug our podcast. We are at brightdigit on Twitter as well as Facebook and I just started Instagram so you should definitely check that out. And before we close out guys, I wanted to ask you maybe your top three or top two things. You're most looking forward to at WWDC this year.Josh Berlin (Guest): [00:32:07] I know my number one. Definitely the Dark theme and I'm really excited to see what they do with seeming because that's something I've been working on at work lately is building a theming for our app and there's a lot of like third party theme libraries that are available right now. And I'm excited to see how Apple is going to do this.Leo Dion (Host): [00:32:29] Yeah, I'm excited about that too. René Cacheaux (Guest): [00:32:31] Oh boy. I have things that I want that I don't think are going to happen if this is gonna happen if they're cool. Obviously, I did. My number one. Most realistic was Marzipan. Just seeing what that looks like. I think I'm most interested in seeing how much of the macOS stuff is exposed like things like Safari extensions and stuff like that. Things that I would like to have that probably I think might not happen. I'd love for them to present concurrency primitives for. Something like co-routines would be so awesome. It would be really really cool Leo Dion (Host): [00:33:02] I feel like that if they're gonna announce it like a Swift is open source. That's the thing. I'm thinking about Swift is open source. So if they're going to announce that they would announce it. I think that's gonna be a Swift 6 or 5.3 or 5.2 thing. I think is definitely on the radar but I doubt we're going to hear about it at WWDC. But yeah, I totally agree. We need a async await. We need some of that stuff. René Cacheaux (Guest): [00:33:24] So you never know but yeah, I don't expect it. Yeah, those are my two. Leo Dion (Host): [00:33:28] Yeah. I was just going to say going back. Like I wish they'd fix our Xcode. I wish they'd get some of that stuff fixed. I think Swift Package Manager should be integrated into Xcode and it shouldn't be so difficult. I've become a big fan of some of the server side stuff. I'd like to at least have some sort of plug. For like Swift NIO and all the different Vapor and all the Kitura and all those projects because I think they're missing a lot of that push that Apple could give it. I'm really interested to see and I've done an episode on it as Apple has moved more into services if we're going to see Apple do anything for developers when it comes to services. Are we going to see more robust like CloudKit or integration with that because we have Firebase right Firebase is elephant in the room. Like where's Apple and this. So anything else guys before we close out? René Cacheaux (Guest): [00:34:18] The only I would say is you reminded me of something what happened to Xcode Extensions, like nothing like it was gonna go somewhere. It wouldn't go anywhere yet. Leo Dion (Host): [00:34:26] Yeah. Yeah exactly Josh Berlin (Guest): [00:34:28] Alcatraz thing. Yeah. I've hardly ever used anything some cool stuff on there though. Leo Dion (Host): [00:34:33] And it seems like that stuff is really more developer tools. Just more robust developer tools. That's all I'm asking for but I am interested in Marzipan and how that's going to work out. I've done some mac development and it's not that bad but there's a lot of old old René Cacheaux (Guest): [00:34:47] it's painful. Leo Dion (Host): [00:34:49] It's old. That's my problem with it. It's very Objective-C focused. And so I think Marzipan will breathe some fresh air. But my worry is that we're going to get kind of how. Lot of lazy companies but take their iPhone apps and just make them really big on the iPad. I have a feeling it's going to be the same on the Mac, unfortunately. Yeah, cool where can folks get a hold of you as far as on social media. René Cacheaux (Guest): [00:35:14] I'm on Twitter. My handle is at rcacheatx. That's where I primarily am. Josh Berlin (Guest): [00:35:21] My Twitter handle is at jab2109Leo Dion (Host): [00:35:25] So guys. Thanks again for coming on the show. It's been fantastic, and I would love to have you go again talking more about architecture and how it can help teams work out and expressing. Thanks, Leo.
★ Support this podcast on Patreon ★
6/2/2019 • 35 minutes, 37 seconds
Apple and Video with Paul J Schmidt
UnoDeuce Multimedia and Storytelling
UnoDeuce Multimedia
Youtube
Instagram
Twitter
Facebook
Previous EpisodesApple 2019 - Apple and ServiceMarch 25th Event
Other Services
Apple Arcade
Apple Card
Apple News
Apple Music
How is Apple positioning itself compared with other Streaming Services?
Apple TV
Apple TV+
Amazon Prime
Netflix
Disney+
Exponent Episode - Family-Friendly Disney
Hulu
How to start telling stories with video now
Filmic Pro
Clips
iMovie
Recording with an iPhone
Editing with an iPad
iMac vs iMac Pro for Video
HD vs 4K
High Color Gamut
Final Cut Pro
Mac Mini
Running IT in an Apple Run BusinessDropboxArchiving and Hard Drives
Lacie
Western Digital
BackBlaze Hard Drive Stats For 2018
Lansing Marketing Hackers
Lansing Marketing Hackers Meetup
Learning a New Skill with Alexa with Paul J Schmidt
WWDC
New Mac Pro?
Pro App Updates
★ Support this podcast on Patreon ★
5/19/2019 • 40 minutes, 52 seconds
iOS Developer Interviews with Alex Bush
Alex's LinksOn Twitter @alex_v_bushiOS Interview Guide Inside iOS Dev PodcastPrevious EpisodesEpisode 8 - Cloud and Backend Services For AppsWhat makes interviewing iOS Developers special?
Apple Design Patterns
Model-View-Controller
Delegation Pattern
Protocol Oriented Programming
Special Background and Knowledge in Frameworks: UIKit, HealthKit, AVFoundation, WatchKit, etc...
Common mistakes employers make interviewing iOS candidates
Not understanding their own appHiring a consultant to help estimate and understand what iOS knowledge is nessecary
Not understanding the phase their app and whether general iOS developers are needed as opposed to iOS developers with specialties
Algorithms and Optimization Interview Questions
Interview Questions about building a UI in iOS
Finding out whether the applicant understands the pros and cons of various methods: Storyboards, Coding, etc...
Make sure they are willing to work with the team
Common mistakes iOS developer applicants and candidates make
Not having broad knowledge of various solutions an app may need: Data Storage, Networking, UI...
Some Backend Knowledge
Full TranscriptionLeo Dion (Host): Hey Alex[00:00:01] Alex Bush (Guest): Hey Leo [00:00:01] Leo Dion (Host): how are you doing, sir? [00:00:02] Alex Bush (Guest): Great. How are you doing? [00:00:04] Leo Dion (Host): Fantastic glad to have Alex Bush on from IOS interview guide and inside iOS Dev podcast. If you are interested in iOS development, you should definitely check his podcast out. Alex, what are you up to right now? [00:00:21] Alex Bush (Guest): I am sort of getting up to speed after Microconf and vacation.[00:00:27] Leo Dion (Host): I hear you. I'm in the same boat microconf and peers and vacation and starting a new contract. So I know where you're coming from. [00:00:35] Alex Bush (Guest): Right and yeah, and I'm Contracting as well iOS so doing that getting up to speed on that [00:00:42] Leo Dion (Host): Who are you working with right now? [00:00:43] Alex Bush (Guest): Currently with Uber. Yeah, Silicon Valley, you know all the companies, around probably be looking for another gig soon enough. [00:00:53] Leo Dion (Host): Yeah. If you are interested in architecture, definitely check Alex's podcast out like your specialty really is in helping iOS developers get jobs and specifically the interview process, correct. [00:01:11] Alex Bush (Guest): Yes, that's sort of been my aim my focus lately last couple of years. Yeah, I wrote a book as you mentioned on the topic helping iOS developers get jobs right prep for interviews. [00:01:26] Leo Dion (Host): Okay. So if you're like a company hiring iOS developers, what are some things that make interviewing a potential iOS Developer different from - I guess the biggest thing is web developers, right? So what makes it different from hiring your standard web developer. [00:01:45] Alex Bush (Guest): That's a good question and it's sort of how the whole book thing and helping iOS devs interview started. I was at the time at a different consultancy helping them hire people for their iOS project. And as I was interviewing sort of same things will come up and I would kind of jot some notes take some notes on what to ask what to remember you get to ask and probe as I interview people and in general sort of when you interview, let's say a web developer or just a software developer right you go for a broader software topics, right?[00:02:30] Roughly speaking algorithms and then design patterns and architectures, right but overall for software not specific for iOS and I think that's what's different when you're interviewing and hiring iOS people. The one thing is to in the sort of web world and specifically backend world in my opinion.[00:02:52] You can hire a generalist and they can adapt. Quick enough I guess but in the iOS world it's very crucial to for for developers to really know very well the the frameworks that they work with and I think that's the main biggest difference when you're interviewing iOS people to sort of aim at that and assess their knowledge not just overall software development knowledge, but specifically iOS development.[00:03:23] Leo Dion (Host): But I guess like you like it comes to mind because it drives almost everything maybe we'll particulars about UI kit are you thinking people should really know about [00:03:34] Alex Bush (Guest): it also depends right? Like if you're hiring for just I guess you don't have a heavy UI animation or performance concerns for your project or your app.[00:03:46] Then you don't really need a specialist. Who knows. Low-level details some of that right but sometimes for example social networking apps or apps that have social networking aspect of some kind they struggle with scrolling performance. Right? Let's say you have a some sort of a Instagram like feed with pictures infinitives feed that you can scroll and it's dynamically size, right if that's a crucial part of your app.[00:04:14] It's important to make the performance buttery smooth right and not every developer. Like this is what in regards of UIKit what you want to dig and assess more in that case [00:04:26] Leo Dion (Host): Okay, [00:04:27] Alex Bush (Guest): rather than just overall. You know, what is MVC? Right right. [00:04:32] Leo Dion (Host): So maybe we should clarify the audience like UI kit is the basic framework for the user interface on iOS. So if you're going to do any. Simple menus tables with navigation UI kit is the bread and butter of that and then like Apple kind of they teach an MVC pattern or model view controller, which I think correct me if I'm wrong like every developer who does iOS development should know that in an interview correct.[00:05:00] Alex Bush (Guest): That is correct. Although I would say these days that's a prerequisite to Simply develop for iOS, but to be sort of hired for position. You should know more than that. At least be aware. Right? [00:05:16] Leo Dion (Host): I agree. I think that's the very basics what are some other things you should know about [00:05:20] Alex Bush (Guest): what comes to mind the core apple design patterns, like key-value observation, delegation, Singleton, protocol oriented programming as they call it.[00:05:31] Leo Dion (Host): Yes. Yeah, [00:05:32] Alex Bush (Guest): which is basically coding for interfaces. [00:05:35] Leo Dion (Host): Yes, essentially. [00:05:37] Alex Bush (Guest): So yeah those things. And I think on top of it you need to know the most common components and tools that you would use such as networking. Right? How does an NSURLSession work? Yes and how you would not block the main thread as you perform in a networking requests so that the UI doesn't freeze things like that.[00:06:01] Leo Dion (Host): Yeah. So let's break some of those down so like protocol oriented programming. Why would an employer care that a developer knows protocol oriented programming. [00:06:12] Alex Bush (Guest): So in this specific thing is, you know, a typical developer answer right or developer or consultant answer depends like of course, but let's say if you're building something more than just an MVP one of throw away MVP to just validate your idea. Then what you're building needs to live through multiple iterations of development, right and protocol oriented programming is let's just say an approach to development coding that would facilitate extracting abstractions in your code and then later for other developers to build on top of and use [00:06:56] Leo Dion (Host): I think it is like, you know, they toss to use the word protocol. The word interface is used in a lot of other programming languages, but the way I think about it is a protocol is like a contract. It says that this object will do these things and it agrees upon it and that just allows a lot of developers to know - okay, I need to like these are the requirements that it needs. This is what I'm testing for that this object actually will do that to me is like one of the benefits of that and if a developer you hire knows that. They may not know the term protocol oriented programming especially if they're from another language, but the idea of like this interface first. This protocol first design just introduces so much more convenience has and makes it easier for testing for architecture and things like that. I think that's kind of what you're getting at, right? [00:07:47] Alex Bush (Guest): Yeah. That's a way better way to put it - contract essentially and that will help you structure your code in a way that its building blocks right as an example of that. You could if you don't do protocol oriented or interface oriented to few will development approach you and let's say your app needs to have some offline mode right where you store data offline and when there is network connection it still displays something to the user you could in a naive approach without protocol oriented programming would be to just hard code that and save that in memory- let's say in your view controller, right. But then later when the next developer comes to iterate on that and make some changes to persist that actually to disk so that the app displays that data even after its killed not just in offline mode then if you don't do protocol oriented programming then for the next developers it's harder to figure out how it was originally done but if you do protocol oriented, you have a clear interface and let's say a storage interface or protocol and then the next developer clearly sees - oh, okay. So I just adopt the storage protocol for my new thing that not just saves in memory, but also saves to disk the data I want to have offline something like that.[00:09:15] Leo Dion (Host): Yeah totally makes sense. Because if you allow that agility of any developer coming in and changing how something is done, but the important thing is that that object does what it says it does. And then like yeah, I think your point about like URL sessions, networking ,and understanding how that works with the UI is so important because then you get into like some threading stuff, background threads ,and Global thread, the main thread and all that as well. Because the last thing you want in an app is a crappy UI that freezes on your because it's trying to pull data from the internet.[00:09:48] Alex Bush (Guest): Right? I would say if we're talking about interviewing iOS developers right for your project or your company the advice I would give - sometimes you need Specialists, right? So what we talked about is sort of general overall what every iOS Developer is supposed to know but sometimes you need a specialist. Let's say your app is heavy on video right? Then likely you need AVFoundation expert that would be another framework. AVFoundation is Apple's framework that helps you work with audio and video. [00:10:26] Leo Dion (Host): Another one I can think of is like HealthKit if you're doing anything in the health or Fitness space like you're going to need to know something like that [00:10:32] Alex Bush (Guest): or let's say you are app connects to Bluetooth peripherals or devices, right? You need someone with BLEframework experience. So that's not necessarily your typical developer like such as myself. I don't know neither of those things, right? I worked with a AVFoundation maybe twice in my life, but that's not something I'm interested in so I didn't specialize in that. But some other other devs did and they like it. And then again right when you interview I don't know. Let's say you putting together a team of three maybe you need two general iOS devs" but then one specialist in AVFoundation, so keep that in mind, right then we are interview process should be focused more on. Oh do they know AVFoundation? They might be lacking in well roughly speaking is an example knowledge of storage and how to store and persistence that we just talked about. But they're really really really good at doing video stuff. That's what you need maybe.[00:11:34] Leo Dion (Host): I think it's a really good point because like that's one of the struggles I see with like the iPhone is a lot of apps kind of do the same thing over and over again.[00:11:43] There's so much potential out there with all the different Frameworks and a lot of businesses don't know how to take advantage of those Frameworks and then they don't know how to find the expertise in that area. Like I've done work with HealthKit, you know going to the Apple watch of worked with WatchKit.[00:12:02] So I totally understand how those are really really deep Frameworks and there's a lot to know in those areas. [00:12:11] Alex Bush (Guest): I think that that's the challenge for an employer right [or] for a company if you're not. I think if you're not a developer or a specific iOS developer yourself, it might be hard to define what do I even need? Right? I just want this app to look good and again, maybe show videos, right? [00:12:31] Probably that's where you would want to hire maybe for a shorter period of time like for a few hours or days more experienced developers, more senior developer, maybe architect would take a look at your project and your idea , your proposal whatever you have and give you a well - I guess list of Frameworks involves potentially. [00:12:53] Leo Dion (Host): Yeah, it's almost like you need like a consultant to come on and 99% of people don't know about all these Frameworks. They know - I'm going to do video or I want to track people's heart rate. The frameworks are completely outside of people's knowledge and rightfully so. That's where you might - I know I want to target iPhone. Like okay. I need a consult come in and tell me how much work does this involve and what expertise I'm looking for? And I think that would be very helpful to a lot of business owners and a lot of CTOs who are just looking for somebody to come in and kind of give them an idea of what needs to be done.[00:13:32] Alex Bush (Guest): Yeah, I remember when I was running my small agency, small consultancy. We had usually two people including myself working on projects, but occasionally we would actually get outside help of an iOS expert in a particular framework. I believe our case was BLE, Bluetooth. Neither of us knew how to work with it. It was kind of complex and we were on a crunch time. So we hired someone for I believe like a week to just get us up to speed on how it works. And the pitfalls and then from there we took the prototype code and just improve that. [00:14:14] Leo Dion (Host): Yeah, you know it makes me think of like when I have work done on the house. Like we had like the basement finished a couple of years ago like we brought somebody to come in. [00:14:25] They had a specific person that did plumbing, a specific person that did electrical, a specific person that did drywall. And I think like that's something to keep in mind with some of these Frameworks is like, you know you what you need is like some consultant coming in to manage that and be able to like help figure out: okay what you actually need when you interview an iOS Developer. [00:14:48] Alex Bush (Guest): I think the challenge comes, unlike in the web world, those specialties are clearly defined. I think at least [that's] my impression. And it's easy for example to find a Stripe expert for PHP or something but a bit harder for iOS right like a payment expert Apple Pay or something for iOS. I personally haven't seen many of those. [00:15:14] Leo Dion (Host): Yeah, yeah. [00:15:15] Alex Bush (Guest): But again, if you know that if that's what you need at least in your interview process those are the questions you want to be asking: how does that work? Can you walk me through it explained the whole system over. All right, and then maybe minutiae details - something like that. [00:15:31] Leo Dion (Host): I think the other thing is [and] I think this is with finding [all] developers who can learn because you know, you may not know until you get into it, you know, but okay, there are common patterns. Like you said, the delegation pattern that Apple uses that is used throughout every framework and being able to kind of go with the flow with whatever the team is and being able to learn new things.[00:15:54] Alex Bush (Guest): Right. Well, yeah, I guess as you said that's a general software developer trait, if you will.[00:16:01] Leo Dion (Host): Right, it's not necessarily iOS specific.[00:16:05] Alex Bush (Guest): Right. And that's actually an interesting thing that an observation i've had over the last four years sort of. You want more of that of the general software knowledge and experience down the road as your app grows basically. And by app growth i mean the amount of code and number of people working on it.[00:16:29] So roughly speaking just to simplify, Uber today doesn't need anyone just a general iOS dev who knows MVC. There is a way more complex architecture there that allows hundreds of people to more than a hundred people working in the same app at the same time.[00:16:50] That's where it just doesn't cut it anymore. Right? So we need someone more advanced and architecture. For example. [00:16:58] Leo Dion (Host): Yeah exactly. What are some stories or what are some things you've seen happen during the interview process that companies have completely failed at or the traps they fall into [00:17:12] Alex Bush (Guest): my personal favorite, although not everyone agrees with me or rather not favored, but the opposite of favorite - companies asking all the algorithmic questions.[00:17:24] Leo Dion (Host): Mmm [00:17:25] Alex Bush (Guest): and all the - I mean, I'm joking. No one else did, but all the bubbles sorts of the world, right? [00:17:32] Leo Dion (Host): Yes. [00:17:33] Alex Bush (Guest): In the iOS world specifically, that does not make much sense because again unlike with back-end web world to be productive your general software knowledge, I mean it's necessary yes, but it's not as crucial.[00:17:50] To be more productive you need to know more of iOS rather than more of general software algorithms. because unlike the backend we don't deploy multiple server instances to scale and propagate route balancing all of that stuff right and have a great algorithm for that. [00:18:10] Leo Dion (Host): Yeah. I think that there's a divide between software that's written for performance and software that's running for maintenance. I think that differentiation is it made sometimes so that during the interview process you're going to ask. How do you write the fastest bubble sort? I think like unless you're doing machine learning or like high intense graphics where you're actually managing memory and CPU and that kind of stuff for the most part you want to write code that is easily maintainable.[00:18:41] And that's where things like protocol oriented programming becomes important or like knowing the different patterns. And I think that -yeah, I totally agree with you a hundred percent. I've done interviews with like I think I did an interview with Amazon. They'll ask you all sorts of like oh, how do you sort this? How do you do a tree like this blah blah blah? And I like all I wanted to ask was wait. Do I have to relocate to take this position? Because I'm not moving it was like why are you wasting my time asking me these questions when like you haven't even like answered basic questions about whether I'm going to want to take the job if I know how to do it and it was this like, yeah...[00:19:20] Alex Bush (Guest): Every time I hear those questions on interviews my question and response: oh, is that what I'm going to be doing at work if you actually like offer me the job. [00:19:30] Leo Dion (Host): Yeah.[00:19:30] Alex Bush (Guest): But the answer is no, right 99% of the time so[00:19:34] Leo Dion (Host): You write code for maintenance and then 90 percent of companies, [if] the code is slow they either buy a bunch more CPUs and memory and then you know on top of it like you just want the code to be maintainable because there's already 52 libraries that do bubble sort better than any amount of optimization you can do so I totally agree with you. I'm glad you brought that point up. [00:19:57] Alex Bush (Guest): Right. Yeah, as you said your code is 10 times more likely to change rather than to be slow on iOS so you optimize for that as you interview the people who can make it easier to change rather than faster. [00:20:13] Leo Dion (Host): Yeah. I think it's a really really great point. Maintainability [and] testability are much more important than optimizing for speed or the best - what is it? - like O^n or O^n squared algorithm? [00:20:25] Alex Bush (Guest): Yeah that. [00:20:26] Leo Dion (Host): So question that I wanted to bring up was - I wanted to go back to this - but developing UI on iOS. There's a lot of people who have a hundred opinions about the best way to maintain a UI in a code base. [00:20:45] Alex Bush (Guest): I do too by the way. [00:20:46] Leo Dion (Host): Yeah, I bet you did. So we have like storyboards which is the way xcode and Apple probably wants us to do it. You could write UI by code. In the interview process, what is the best way without getting too opinionated as the interviewee. What is the best way to ask those questions to know whether someone might be a good fit? Does that make sense? Because I don't want to get into like a storyboard versus code your own UI debate.[00:21:17] But I'm more want to know like if you're interviewing somebody how do you know that they know how to build a good UI and work with your team. Does that make sense? [00:21:27] Alex Bush (Guest): It does and I think the best way to gauge that is to look at the work they've done already right? Do they have a well-polished UI app in their portfolio, right or list of companies or projects they've worked on. And personally what I would do, right? I don't know if that's the right approach. But if I interview, I would want to know if regardless of what the person prefers or you prefer, right? Do they prefer storyboards or they prefer writing everything in code? I want for them to tell me the pros and cons of each option.[00:22:08] And when to use each option that way, I will you know, hopefully hear from them that they know taht there are trade-offs for one approaching another. And at some point it breaks down right or in some cases it doesn't make sense. And specifically I'm talking about let's say storyboards don't breakdown on scale when you have I don't know more than 20 people let's get working on that app. But then it doesn't make sense to do it right away as your one or two people team. [00:22:42] Leo Dion (Host): Yes. [00:22:43] Alex Bush (Guest): Something like that, right at least some reasoning like that because if they don't have it and the answer is oh, I just been doing storyboards all the time because Apple said so that is not a good answer.[00:22:54] That means they don't think why they do it. That means the likely it's going to be difficult for them to adapt or impossible even when the scale grows to more than 20 people and then storyboards don't work anymore. [00:23:07] Leo Dion (Host): Yep. I think it's a really good point. I think this goes with all interview questions. I mean there is right or wrong answers, but it's more are they reasoning this out well.[00:23:16] Alex Bush (Guest): Right yeah.[00:23:17] Leo Dion (Host): Do they understand the basics because yeah, I agree with you completely. It's like, okay. Do you know why you're doing what you're doing? And are you aware of other ways and then how do you work with large teams especially when you're building UI if you want to do storyboard or if you want to code it. Like what are some pitfalls? I think that's a really great point. [00:23:39] Alex Bush (Guest): Another thing sort of related to that comes to mind. It's my personal opinion though. But still it's an observation over the years. The other thing you kind of want to gauge as how much do they agree or not agree... That's not the right word. But how much do they follow what Apple says - and you do need to follow what Apple says most of the time right? But again, are you still aware of the trade-offs? [00:24:08] Leo Dion (Host): Can you give an example of a apple guideline? [00:24:11] Alex Bush (Guest): It's the overall model view controller thing? The reason they push it on us all these years and still don't stop.[00:24:21] It's an easier design pattern to start with and build a simple app with and that fits their the goals of the company. Apple is a company once more apps. Yes. They want a better quality apps. What they want more is more apps and much more developers coding for their platform. So that's why they're pushing MVC if you want a better quality app or a bigger app, you can't really use MVC but they never say is that right?[00:24:50] They always sort of skew it the other way or if you're not doing MVC you're doing it wrong. That's just as a you know, general from the software architecture perspective. That's not the right answer. Unfortunately Apple keep saying that right and a lot of people still think: Apple is right because it's Apple.[00:25:11] Leo Dion (Host): Yeah, I think that like, it's also hard to change the ship when it's moving in a specific direction. I wouldn't be surprised if Apple like recommends other UI patterns, but for 99% of developers like they're not going to know. Like if you're already experienced enough you know to look for other patterns anyways. But yeah, I agree like if you're starting off being an iOS developer, you should definitely know MVC is a prerequisite if you know other patterns, I think that's definitely even a greater skill to have during an interview.[00:25:44] Alex Bush (Guest): Trying to say the same thing if they tell you: oh use MVC because Apple said so then maybe a follow-up question from you should be all but why MVC is good, in what scenarios and what cases? [00:25:58] Leo Dion (Host): It says a lot for a developer to not like fight going upstream because like you want to go with what Apple already recommends because when version 2 or version 3 of whatever you're working on is based on an Apple framework changes like at least you're ready for when those upgrades and updates happen. As opposed to fighting Upstream with your own custom thing and then finding out like oh it's not compatible anymore because Apple's changed the API. [00:26:24] Alex Bush (Guest): Yeah, that's true. It's a balance to strike, right?[00:26:29] Leo Dion (Host): Yeah [00:26:30] Alex Bush (Guest): On the one hand your working and building an IOS app because you wanted to run on iOS platform, but on the other hand you're actually, building an app right that is your own thing with your own business logic and you don't want it to be too tightly couple it to specific iOS Apple stuff right?[00:26:53] but then again, you still run it there. So you kind of have to in some cases that's what it's about. [00:26:58] Leo Dion (Host): Yeah, and I think it goes back to what we were saying earlier is like if their reasoning is good and they have solid reasons, you know that they're knowledgeable in that space and they can learn and adapt to your team.[00:27:09] So the other thing I wanted to ask is what are some pitfalls that people who are interviewed constantly run into when they are being interviewed, [00:27:20] Alex Bush (Guest): huh? I think I would say basically, I think what I see a lot of developers when they're interviewed the mistake they make is they know only a certain subset of iOS Frameworks, right and the concerns and IOS app has but they don't know others this sort of overall the full circle of it. Specifically they might know how to do UI stuff and networking but they never done any storage or architecture for business logic right? Or doing very little of it and they don't pay attention. Again as we talked about it if you're interviewing for an UI heavy position. Maybe that's good enough, right? You really know your UI stuff very well and low-level details of it and likely then you'd be asked those questions in the interview and you probably pass right.[00:28:18] But just in general as you apply right most of the time you kind of need to know more of overall rather than specifics because like let's say you Leo, you and I we team up and you know build an app and it's e-commerce with some social networking feed - let's say right some hybrid of Instagram and Amazon.[00:28:42] So to build that you and I can code but let's say we need two more people to help us because timelines. [00:28:50] So for that when we will interview people we would ask. Oh, yes. Do you know how to do UI work and networking but also we would want to know: oh, do you know how to do offline and storage stuff right?[00:29:07] Because again, maybe our app needs to persist something offline for reasons. And also on top of it a little bit of a I call it business logic, I guess business logic / architecture / design patterns as with we again talked about it something beyond MVC right at least a little bit. Do you know MVVM and MVP and in what cases to use those and maybe other design patterns like a Factory and Command write something like that?[00:29:39] So I think that's the mistake a lot of iOS devs make. They just prep for UIKit UI stuff and networking. They never look into storage all the ways. You can store things on iOS like file storage core data key value storage all of those. [00:29:57] Leo Dion (Host): Yep, [00:29:58] Alex Bush (Guest): and they don't look a bit beyond at least a little bit beyond MVC and those design patterns and architecture.[00:30:05] Leo Dion (Host): Do you think you could just like as iOS developer? You just pick up one framework? And just be like, okay today I'm going to use like core data and then get really knowledgeable about Core Data for this particular app. And then that gives them at least one framework that they can bring to an interview and speak about [00:30:23] Alex Bush (Guest): In a way, yes, it's possible. Each one of those you can go very deep right but at least I think what I recommend focusing on maybe not even a specific framework but a concern an app has.[00:30:42] Leo Dion (Host): So like you talked about like storage like you don't have to know particularly like core data, but like okay be able to bring to the company that is interviewing you different ways of doing storage and the pluses are pros and cons of each one.[00:30:57] Alex Bush (Guest): Precisely. Yeah, because you can implement it with core data or realm or whatever else is out there. Right? I don't even know. But when you and I interview people we would want to know that they're aware of that concern and how to sort of overall approach on how to solve it and what it does rather than the details of how to do it because that's what they'll figure out on a job.[00:31:22] Leo Dion (Host): Yes. [00:31:23] Alex Bush (Guest): So that. I would say there are four big concerns, right? That's the UI, networking, storage, and business logic. So that's the pitfalls I think for interview is not knowing those four overall. [00:31:39] Leo Dion (Host): I think it's a really good point is yeah, a lot of people can just obsess over UIKit in the very basics of you.[00:31:45] I can't without knowing, you know that to build an app. You need to store data somewhere. If you need to call the web you need to do notifications. For instance. That's a whole elephant that we haven't even gotten to but I think it's a really good point. Is there anything else you wanted to talk about? As far as for people who are doing interviewing other iOS developers.[00:32:09] Alex Bush (Guest): One more thing for interviewees. I guess that's not more or less for interviewers. You will get a lot of points on your interview if you're actually know a little bit of a back-end. Maybe not how to code it but at least how it works, right because as an iOS dev, you likely constantly will need to work with back-end people [00:32:31] Leo Dion (Host): so maybe like the basics of what a rest API or GraphQL back end should do okay [00:32:38] Alex Bush (Guest): and how to establish those contracts. What are the best practices there ... Things like that.[00:32:44] Leo Dion (Host): Yeah. It's a really good point. I'm just surprised at how many iOS developers don't know anything about the back end. [00:32:50] Alex Bush (Guest): Yes, it sort of makes sense to a degree they're specializing in iOS right there not those general software developers, but still it helps to know and in a lot of cases.[00:33:04] The API design the backend API design will be driven by the front end people which means iOS people right? [00:33:13] Yep. [00:33:13] So the more knowledgeable you are maybe that applies more to sort of architect if you have a team, but if you're solo person you need to know that. As you mentioned it like at least know what restful is best practices there with my experience in one of the companies I worked at.[00:33:31] That got out of hand so bad that we were sending 5 megabytes payloads of JSON down with each request to iOS and then parsing that took forever on the older devices like iPhone 4. Yeah, so they had to do client-side hacks to parse only lazily portions of the JSON and the rest on demand, so that is something that as an iOS developer, you should stop before it even comes to it.[00:34:04] You need to be aware of what's going on with their API right that you're consuming and are they are you guys as a team keep shopping more data in it and not deprecating and migrating and having versions or something like that. [00:34:18] Leo Dion (Host): Yeah, it's wow. Five big Json files. [00:34:22] Alex Bush (Guest): I know right? [00:34:24] Leo Dion (Host): Well, thank you so much for coming on the podcast and talking about this.[00:34:28] I think there's a lot of companies that have no idea and just need help interviewing and finding iOS devs and it can be a real challenge. I know I know it's hard just recruiting people let alone interviewing them. [00:34:41] Alex Bush (Guest): Right? Yeah. Yeah my pleasure and again, you know, it's been a passion of mine on the other side right help iOS devs to get jobs, but I understand the pain and that's where I originally came from the pain of how do I access and know that the person I'm hiring is actually knows what they're doing and everything that you know, they need [00:35:05] Leo Dion (Host): so if you're someone who's looking for an iOS job. How does your book help them or tell me a little bit about the book and how it guides iOS developers in the interview process. [00:35:18] Alex Bush (Guest): Overall. The book actually does what we talked about is those four areas of concern. Like UI, networking, storage, and business logic it gives you an overview of all those options that you have in each area of concern right like back to the storage option.[00:35:37] Oh you can press store things in memory or you can store them key value storage right in as user default. So you can store things in files or it database like core data and so on. So it gives you this overview right without going into deep into details of how they work like specifically core data or something like that.[00:35:59] But at least it tells you: oh here are the options that you have and in some scenarios you you want to use this or another option. That's what the book talks about. It kind of perhaps you overall. If you want to dig deeper, you can go ahead and research on specific topics. But yeah that overview was lacking before I wrote the book. So that's why I decided to do that [00:36:23] Leo Dion (Host): Awesome. So where can I find the book at?[00:36:26] Alex Bush (Guest): Its iOSinterviewguide.com [00:36:28] Leo Dion (Host): awesome and then your podcast is insideiOSdevs.com, correct? [00:36:32] Alex Bush (Guest): Yep. [00:36:33] What do you talk about on that podcast specifically?[00:36:36] So this podcast is for developers and we talked mostly I guess architecture and design questions sort of higher level, you know, everything beyond MVC.[00:36:46] Leo Dion (Host): Okay. Awesome, so you can be found on Twitter at?[00:36:53] Alex Bush (Guest): @alex_v_bush[00:36:55] Leo Dion (Host): Awesome that'll be all in the show notes. And then you can find this podcast we are on brightdigit so @brightdigit on Twitter also you can find my website brightdigit.com for more info about the services that brightdigit offers when it comes to iOS development. Alexm again. Thank you for coming on. [00:37:16] Alex Bush (Guest): Thank you for inviting me on.[00:37:18] Leo Dion (Host): Welcome, and we will talk to you later. Bye.
★ Support this podcast on Patreon ★
5/5/2019 • 37 minutes, 22 seconds
External Developers with Jaim Zuber
Previous Episode
Episode 6 - Project Estimation Guest: Jaim Zuber of Sharp Five Software Sharp Five SoftwareJaim Zuber BlogMarch 25 Apple Event
Not following Apple Events
Cable Cutters
New Macs
What does that mean working with external developers?
Types of Developers
Employees vs. Consultants
Mobile Developer vs. iOS Developer
Types of Consultants
What is the best way to know you have a good developer?
How about “cheaper” developers?
What are other gotchas with developers?
Follow Jaim at jaimzuber.com
★ Support this podcast on Patreon ★
4/21/2019 • 27 minutes, 2 seconds
Business and IT Applications
Previous EpisodesEpisode 9 - iPad Apps for Businesses and ProsReddit Threads
r/macsysadmin
r/osx
r/apple
Database Collaboration Tool
Airtable
FileMaker
Ninox
Managing Devices
JAMF - Manage Multiple Mac, iPads, and iPhones
More Details
Managing Software and Disk
DaisyDisk - Manage and Visualize Disk Space
Homebrew - Command Line Application Package Installer
Creative Apps
Adobe Creative Cloud - Includes Photoshop, Illustration, Audition, Premier and more...
Ulysses - Distraction Free Writing App
FiLMiC Pro - Professional Video Recording App
FiLMiC Remote - Companion App for FiLMiC Pro
Marketing Apps
Buffer - Manage Social Media Queues
Facebook Page - Manage Your Facebook Page
Google Analytics - Visual Your Analytics from your Phone
Wordpress - Post to and Edit Your Website
MailChimp - Manage your Email List and Campaigns
Zoom - Conference Calling App
Communication and Todo Apps
FullContact - Manage Multiple Different Address Books
Slack - Chat Application
Doodle - Setup Polls, especially for Meetings
Todoist - Todo app, pro version includes sharing of tasks
Finances Apps
Quickbooks - Business Accounting
Genius Scan - Scan Documents From Your Phone
Receipt Bank - Scan Receipts and Hook up to your Quickbooks
Expensify - Scan Expense Receipts and Hook up to your Quickbooks
Wave - Business Accounting
Paypal - Transfer Money
Music by Bimbotronic from Fugue
★ Support this podcast on Patreon ★
3/10/2019 • 18 minutes, 1 second
iPad Apps for Businesses and Pros
Apple March Event
Apple makes moves towards services (Previous Episode - Apple in 2019)
Apple March 2019 Special Event Preview
New Non-Pro iPads and iPad Minis coming out
History of the iPad
Is the iPad Still Transitioning Similar to SmartPhones and Notebook Computers did?
Leo's iPad Journey
What makes iPad and iOS work well
What’s the difference between Professional and Business Apps?
Limitations of the iPad Hardware Limitations
Battery Life
Connectors
External Drive Support
Files Management
UI Issues
Touch vs Keyboard and Mouse
FaceID and TouchID
Managing Apps and Split Screen
Responsive Web Sites
App Store Monetization
Ads
Flat price
In-App Purchases
Subscriptions
Where is Group Licensing?
Enterprise Licenses
How Enterprise Licensing Works (Apple Support Page)
What is Enterprise Licensing For
How did Facebook abuse Enterprise Licensing? (Recode Article)
★ Support this podcast on Patreon ★
2/24/2019 • 32 minutes, 59 seconds
Cloud and Backend Services For Apps with Erik Gillespie
Previous Episodes
Episode 7 - Apple 2019
Episode 6 - Project Estimation Episode
Define Whether You Do Need Cloud or Backend ServicesYou Do Not Need If…
Privacy-Sensitive Data
No Cloud Backups Needed
Already Storing Using a Third Party APIs
Example App Developed by BrightDigit - CE Genius
You Do Need If..
Multiple Devices In Sync
Cloud Backups Nessecary
Example App Developed by Shiny Frog - Bear
What To Consider When Deciding How To Store Data?
MVP vs EnterpriseWhat is an MVP? Most Viable Product
Start With the User - Project Estimation Episode
What Devices Does the App Support?
How Complex is the Data and Queries?
Are Outside Jobs Needed? Such as Cron Jobs, Backups, Push Notifications, etc…
Consider Prices - Bandwidth and Storage
Consider Developer Team’s Comfort Level
Develop Abstracting User Experience From Data Layer
Build a Custom Web AppVirtual Machine Options
Amazon EC2
Linode
Digital Ocean
Web App Options
Kubernetes
Docker
Heroku
Database Options
MySQL
MariaDB
PostgreSQL
MongoDB
Redis
Programming Options
PHP
Node.js
C#and ASP.NET Web APIs
Ruby
Elixir
Swift Options
Vapor - Review
Kitura
Perfect
Server Software Options
IIS
Nginx
Apache
Other Software Considerations
Cloudflare
New Relic
Supervisor
Mobile Backend As A Service
Parse
CloudKit
Firebase
Using Multiple Services
REST API vs GraphQL
Music by Roman Bulakhov from FugueFull Transcript[00:00:00] Erik Gillespie (Host): Hi Leo, it's me. Again. [00:00:01] Leo Dion (Host): Hey, Eric. Glad to have you on to help host this episode. So today we're going to talk about back-end and cloud services for your IOS app. And I think first we should talk about when you should need a back-end or cloud service because I don't think it's needed in every absolute case when it comes to an IOS app or any mobile app.[00:00:25] Erik Gillespie (Host): Yeah, I'm really curious to hear what your ideas are on this. [00:00:27] Leo Dion (Host): So one thing to consider is there's a lot you can get away with without even doing cloud services. The thing with an IOS app is if you're storing your data in something that is like iCloud or in a lot of cases people really don't need the cloud to store their data. They can just sort on their phone itself. I think often times when we think about building an app that's something to think about is like do you really need this stored in the cloud and if you maybe can provide a manual mechanism to backup the data into some sort of iCloud storage as a file that saves a lot of trouble and saves you a lot of time and money quite frankly when you're building your mobile app. And then that way you don't really need a cloud service or a back-end service in a lot of cases. [00:01:15] Erik Gillespie (Host): What are some situations where you think it's okay to go with a back-end service or on the flip side choose to only or mostly store things directly on your users phones. [00:01:27] Leo Dion (Host): I think anything that's privacy sensitive. I think you should definitely just store on the phone locally because that's a whole other headache you having to deal with if you're worried about that stuff being stored in the cloud and if it's very simple stuff if it's things that they just need on their phone and if they lose it, it's not the end of the world I think it's totally legitimate to only store that stuff on the phone. Also, if you're using any third party apis in other words. Like let's say you're using Twitter or YouTube or some other API where you're not really storing data. Data that's being stored is essentially being stored in this third party structure than it's not really necessary because you can just use that third party API as your database in many ways.[00:02:06] I'll just tell you one case I built an app for nurses and doctors to do continuing education for their career and all that data was just stored in core data, which is essentially a SQL lite database abstraction layer. And so all that stuff was sort of essentially in SQL and it was all sort of locally and there was just a simple option. They don't have the budget for it. They didn't have the timeline for it either. So the simple way we did it is we just have a manual backup process that you can run and it essentially creates a zip file of this data stored as a Json or JavaScript object notation file. And so if they wanted to back up they can just sort it in iCloud and if they ever wanted to restore it they can always restore it back on their iPhone. Where I think a back-end service and a cloud service is really helpful is if you're going to have it available on multiple devices .So for instance I'm a big user of Bear, which is an awesome note taking app that's available on all Apple devices and they use kind of combination iCloud and CloudKit they store their stuff in the back end and then that way if I pull up my notes on a Mac or on my iPad or my iPhone. I always have it accessible because it's all stored in the cloud. I think that's where something like a back-end service is really useful. [00:03:19] Erik Gillespie (Host): Like when you need to synchronize data across multiple devices [00:03:22] Leo Dion (Host): Exactly. Yep. So I think that's really where it's really nessecary. As we get into this we'll talk about complexity of like data in any sort of like back-end stuff for notifications ,things like that, that's where we really are going to want to look at having a stuff stored in the cloud somehow [00:03:37] Erik Gillespie (Host): gotcha. So what are some things to consider when you decide that you do need back-end storage?[00:03:42] Leo Dion (Host): One thing to consider is timeline and budget and specifically what is the purpose of this app? Is this just a simple MVP or is it more of a long-term app that needs to be well architected when I first starts off? Because if it's an MVP, use something that you know how to use that's easy, that's simple and that's cheap and just get it done and have something that is usable and can be tested by your audience and seeing whether it works according to what you're testing as far as the app's value to the customers.[00:04:15] Erik Gillespie (Host): Just going to ask if you could briefly explain what you mean by MVP. [00:04:18] Leo Dion (Host): So by MVP, I mean most viable product if you're familiar with like Lean Startup methodology. So you're just proving to whether this is a product that your customers are actually going to want. And so you're just getting something quickly out there that essentially works and that you can see whether this is something customers want or you need to pivot or you need to change something or something like. Does That that make sense? [00:04:39] Erik Gillespie (Host): Yeah, like a bare-bones version of like the basic features that you think that your customers or your users want exactly. [00:04:46] Leo Dion (Host): Yep. [00:04:46] Erik Gillespie (Host): Okay. [00:04:47] Leo Dion (Host): Otherwise if you're building like an Enterprise app for a big Fortune 500 company, you probably are more likely going to want to build something a little bit more robust and customizable. That doesn't necessarily rule out some of the more cheaper options, but it's just something to consider is what do you want to work with in the long term because it's going to be used for quite a while. I think another thing to consider is when you're developing the iOS end of things and you're writing your Swift or Objective-c code to talk to this back-end make sure you have some healthy abstraction with your API communication so that way in case you pivot and use a different service at some point that that's not a big deal to what you view or what you're showing the user on the front end if that makes sense.[00:05:27]Erik Gillespie (Host): I think so. So do you recommend doing some user-focus design and come up with the kind of data that your users need and then work your way back towards how you would need to store that in some kind of a back-end storage.[00:05:40] Leo Dion (Host): Yeah, absolutely in an earlier episode. I believe it was episode number 6. We talked about project estimation and one of the first things I do when I have workout app is almost like a little MVP in a way is I build out the storyboard the UI of the app and essentially fake the data to make sure that that data is what the customers want and then go backwards which is exactly what you're saying. So get your UI because that's the most important thing that the users are going to see get that stuff settled and ready before you go in and build the back end in some cases. I think that's a useful rule [00:06:16] Erik Gillespie (Host): right on. [00:06:16] Leo Dion (Host): So another thing to consider is what devices you support. Are you only supporting Apple devices - In which case we'll talk about the more Apple centered back ends. Are you also going to support the web? Are going to support Android? Are going to support Windows and Linux desktops? Are you going to support internet of things? Because that all Is something to consider when you're looking at different backgrounds, which we'll talk about in a little bit. And then the other thing to think about is the complexity or simplicity of your queries, which is essentially when you're asked for data back or the data itself.[00:06:50] How complex and simple is it? Because some things especially relational data is best done through some sort of SQL database when in some cases you might be better off with like a document storage type database and all the various other nosql or other types of data structures that you can do with a database so that's something also to keep in mind.[00:07:09] Erik Gillespie (Host): Okay. And so if I'm understanding correctly some other thing ways that you could approach that is do you need to aggregate your data or you do you need to create filters and view it in a lot of different ways and combine your data set? Is that close? [00:07:23] Leo Dion (Host): Yeah, that's exactly it. [00:07:25] Erik Gillespie (Host): Okay, and then on the simple side, it would be I need to look up a user with this ID. I need to look up, you know the single record with this ID or something along those lines. [00:07:33] Leo Dion (Host): Yeah, exactly. Are you willing to just kind of offload a lot of the complexity of a good query over to the device like your iPhone or is it important to have that stuff on the server and done on the server instead? That's really the question asked. [00:07:47] Erik Gillespie (Host): Okay. [00:07:47] Leo Dion (Host): Another thing is do you need any sort of like outside communication or outside jobs, like cron jobs essentially scheduled jobs to be run on a periodic basis. Doing backups - that's another thing we could talk about because that stuff doesn't necessarily come with a lot of the more track cloud level databases that we're going to talk about.[00:08:09]Erik Gillespie (Host): One of the ideas there is that the user does something that creates data and then you need to be able to do something with that data whether or not they have their phone on. [00:08:18] Leo Dion (Host): Yes, exactly. Just because you think you might need a Cron job doesn't necessarily mean you might need one. Because in a lot of cases you can just get away with like having the person when they run your app run a particular job that they haven't run in like several days.[00:08:32] That's totally a reasonable way to get around not having access to cron jobs is just having the user do it automatically when they run the app. So that's always something to think about. That's just a way to get around the lack of the ability of having cron jobs and last but not least. I think the two other more important ones is what's your developer team comfort level like what's their expertise in that's going to matter a big deal because if their expertise is a .net shop, you probably are just better off having a Windows back end with SQL Server and C# just using like Web API and have at it. If you're already getting a decent price on your Azure instance go for it because that's what your team is an expert in. There's nothing wrong with that. So, you know it all depends. What's your team? What's your price? Because it definitely matters. Does That make sense?[00:09:21] Erik Gillespie (Host): Yeah it does I mean let your developers the ones who are going to be supporting all of this do what they do best. Yeah, that sounds very empowering. [00:09:28] Leo Dion (Host): Exactly. So let's talk about the different options. The first option we're going to talk about is probably the most customizable the most robust perhaps and that's just hosting your own server essentially and even that comes with different abstraction layers.[00:09:42] So you can buy your own server and have a hosted at a site you can have a virtual machine which is what 99% of people do and get something through like AWS EC2 or Linode or DigitalOcean. I'm doing linode that's like five bucks a month super reasonable and if you listen to any other podcasts in the technical area, I'm sure you can get a really reasonable discount. They are very reasonably priced. You can go that route. [00:10:04] If you want to go another layer of abstraction. There's something like Kubernetes. This is Google's thing, but it's open source. I believe even like AWS and Linode or DigitalOcean also host Kubernetes instances, and that's like a software layer of abstraction. I'm not an expert on kubernetes, but that sound about right Erik.[00:10:23]Erik Gillespie (Host): I think so. I was just going to ask if you would mind explaining a little bit about what some of these are.[00:10:28]Leo Dion (Host): I am not an expert at them, but they're just simply put it's another way to easily plug in your app into an infrastructure without the headache of setting up an entire machine essentially. People are big fans of kubernetes and for good reason, especially in the dev-op space but that's another layer of abstraction rather than just sending up a whole server essentially. [00:10:48] There's of course Docker which is uses Kubernetes as well. And there's other container type instances that you can use. I've used Heroku as well. Heroku is fantastic. If you're just starting from scratch and want something very little to try out with I highly recommend starting off with Heroku with that.[00:11:05] You don't even need to know kubernetes or how to setup an HTTP host or any of that stuff. That's super super easy. And that's also something to consider as well and they're not that expensive. [00:11:14] Erik Gillespie (Host): I haven't dived into a lot of the specific platforms that you just mentioned, but I'm a little bit familiar with Heroku and I know that some of these platforms I would project don't necessarily support all of the different types of data storage solutions that you might want to host.[00:11:30] Leo Dion (Host): Or if they do they might charge them at a premium. I mean, that's part of the problem If anything. And we'll get into that in a little bit.[00:11:37] Erik Gillespie (Host): Research Is important and don't just pick one and then think it's going to be smooth sailing [00:11:43] Leo Dion (Host): right like with a virtual machine. You pretty much can put whatever you want to put on it. That shouldn't be a big deal because you have a blank slate to do whatever you want with but with Kubernetes or Heroku you're going to want to look at what databases they actually support. [00:11:56] Well, let's just get into like the different database structures you could do you could do like a traditional SQL database like MySQL or Mariadb postgres or if you're doing Microsoft, you have SQL server or if you're really, you know, you're doing some Enterprise and you're a masochist you could always do Oracle[00:12:14]Erik Gillespie (Host): and have a lot of money. [00:12:15] Leo Dion (Host): Yeah, exactly. So those are options if you want a more of like a SQL relational database type structure. That's what I like to go with. That's what I'm used to and despite dabbling in nosql I've always found that I almost want to go back home to SQL when it comes to database structure because that's how I think of stuff - in real a relational ways the problem with those is that. And to be more expensive but that's always an option. Heroku has a free option with postgres, which is really nice. If you're doing something small and just want to do a SQL database. [00:12:45] Erik Gillespie (Host): Yeah, that seems like it would work with the MVP approach very very well. [00:12:49] Leo Dion (Host): You could always do something like Mongo if you want something more loose and document-based there's redis of course and other key value type database structures as well.[00:12:57] So those are your options when it comes to data storage as far as the database is concerned. Programming language again, what is your developer team familiar with: just stick with like PHP? That's still pretty popular; ruby's very popular; nodejs; if you're a .Net shop. There's always C sharp. You can run on that and luckily for us Swift developers. We have a plethora of options right now. [00:13:18] There's Perfect; if you're on the Enterprise side of things and we want to stick with Swift I would recommend looking at Kitura by IBM - they're moving fast on that. If you want something more community-based than I would highly recommend Vapor which is what I've worked with and it's really awesome and easy to set up both on development when it comes to xcode or if you're setting it up on a Ubuntu I got Vapor set up on Ubuntu box over on Linode and that worked fantastic. So that's something can consider again. What is your developer team want to do? What's their toolset? What are they familiar with you're going to go find with any of those options.[00:13:55] When it comes to running your HTTP server, you have your choice with like Apache which has been around for forever. If you're doing dotnet there's IIS, of course what's really grown in popularity in the last 10 years is nginx because it's so simple and there's a great Community out there and it's much simpler than Apache and that's always something to look at as well. Did I cover everything you can think of as far as server, database, programming language, and abstraction?[00:14:20]Erik Gillespie (Host): I think in regards to picking a language as well. If you don't have a team then these popular ones are also ones that you can look out for if you're looking for Freelancers to do some one-time development for you. [00:14:32] Leo Dion (Host): Yes, and if you're looking for a Swift developer who's worked with Vapor contact me [00:14:37] Erik Gillespie (Host): nice [00:14:38] Leo Dion (Host): because I've worked with vapor and it's a really fun framework to work with if you're already a Swift developer.[00:14:43] We've talked about the main stuff you need but then you're going to need some sort of monitoring security and backups and things like that and that's also something to consider. What I set up to get the app working on Ubuntu for Vapors is I used supervisor which essentially runs the app so that way it can be tunnelled through nginx through the main server and supervisor is really good.[00:15:04] If you're looking for security or a CDN or things like that, you definitely want to look at cloudflare. They're pretty reasonable for what you can get for free from them. I would highly recommend checking them out. I don't know if New Relic is specifically PHP related but New Relic is really good for monitoring when it comes to your app.[00:15:21]Erik Gillespie (Host): I recommend actually testing all of these out. So whichever one you decide actually try it out and make sure that for any kind of security or monitoring that you're able to not just read and understand how to use these tools. You can use them and that they work the way that you think and if you're doing like database restores and recovery and security that you're testing those really well. This is an area of your infrastructure that needs to be pretty rock solid or your entire application will just go down and be unavailable [00:15:50] Leo Dion (Host): That's a really good point Erik. So some of the advantages of hosting your own is the fact that you can customize everything down to the minutiae, I mean you basically have a whole machine that you can work with that is also the disadvantage because the burden is on you to make sure everything is set up correctly wear as a lot of these other services. They pretty much can take care of everything. All you need to do is write your app code and get your database setup. So that's something to think about. I think the good time to host your own is if you're building Enterprise or long-term application. If you're using something outside of the Apple domain, I think it's something I consider is just hosting your own server or having your own web app.[00:16:29] And then if you're doing any sort of complex queries or complex data, definitely you want to take a look at setting up your own SQL database. And if you absolutely need backups or cron jobs or things like that you definitely want to take a look at hosting your own.[00:16:43] I would not recommend hosting your own if you need a simple MVP or if you're doing this only on Apple devices or your data is fairly simple. Of course, this is all pertains to what's your price range? What's your developer team Comfort level and things like. That but those are things to consider.[00:16:57] Erik Gillespie (Host): It sounds like basically if you have simple needs go with the simplest solution and then plan on scaling out from there according to the growth of your own needs. [00:17:06] Leo Dion (Host): Exactly. And let's be quite honest with ourselves here quite often people are rewriting web apps all the time. So especially in software nothing's written in stone.[00:17:16] So I would definitely think long term but not too long term because in the very long term the stuff is going to be re-written quite frankly keep that in mind as well. I don't know how I put that but so it makes sense Erik. Let's talk cloudkit now, which is Apple's more or less back-end storage. CloudKit is essentially like an abstraction layer of object storage cloud based object data storage.[00:17:41] It's a fairly simple to use if you're sticking with iOS it comes with push notifications so you have the ability to do that. It's completely native to Apple. So if you're running a Mac app or an iPad app or using an Apple Watch or Apple TV, it's really easy to do. It also includes a JavaScript component for the web.[00:17:59] So you have that ability. If you're doing something web-based. However, there are some disadvantages. Right now, It's probably pretty difficult to use for Android. I say that because there is no like. It is Android use, you know, it's interesting. We talked in the previous episode about Apple's growth in the services space.[00:18:17] It'll be interesting to see if they make any moves towards Android with CloudKit June with WWDC because you know if they're putting an iTunes on a Samsung TV, or they're putting Apple music on an echo you'd think they wouldn't mind putting cloudkit on Android, but we'll see about that. I think there's probably ways to get around that with Android.[00:18:34] I'm not an Android developer, but I would think there's ways you can call the JavaScript API using Android or at the very least you could like say running ionic or Cordova app and just use JavaScript in that sense using cloudkit. And you know going to the desktop maybe if you're running an electron app, for instance, you might be able to just use cloudkitJS with that so that option is available but like I said there might be an uphill battle. [00:18:59] Erik Gillespie (Host): Do you happen to know if the JavaScript API can be used from node? Or is it only from the browser? [00:19:06] Leo Dion (Host): I don't know that that goes to the next point is like would you be able to like write an app on a Raspberry Pi using cloudkit JS? Like I have no clue about that. That's a really good question and somebody out there knows that right us back. We'd love to hear. [00:19:18] Where it is an easy yes is if you're just going to target only Apple devices. Then I would say cloudkit is definitely what you want to go with and then if you don't need a lot of outside jobs, like I said, you probably could figure out how to write your app so that way you don't really need a crown job, or maybe you do automatic backups in the app itself. These are seriously powerful iPhones so really I wouldn't worry too much about straightening a user's iPhone when they have so much power, especially with these like newer iPhones. I think you're totally fine offloading some of the stuff onto the iPhone itself if your data is not too complex or your data or your queries aren't too complex when I wouldn't suggest using it is if you're not doing Apple only I have some hesitation about just depending on cloudkit JS for everything if you're not targeting only Apple devices. And if you absolutely absolutely need outside backups or outside cron jobs of some sort to be run and you're absolutely cannot do it on an iPhone or an iPad then you might want to consider not going with the cloudkit option if you're targeting especially slower devices or you really need to offload a lot of these queries or data is just way too complex to sort and cloudkit then you might want to not consider cloudkit in that case.[00:20:50] Maybe we'll do a little history lesson. So I would say about five years ago six years ago the most popular one out there by far when it came to mobile backends was Parse. Parse then got bought out by Facebook and then Facebook essentially killed it. Now, they open sourced it so anybody could run their own Parse server, but out of the ashes of that came another startup called Firebase. And I don't know how many years it's been but a Firebase essentially got acquired by Google.[00:21:20] And as far as what I've seen it's the most popular mobile backend as a service and actually backend as a service over all because of price probably but also that it's available on a plethora of devices. Erik, you've actually used Firebase, correct? [00:21:36] Erik Gillespie (Host): I have and yeah on the surface, it seemed really really appealing and I've got to say right now I would be hesitant to use it in to any of my applications that might scale [00:21:49] Leo Dion (Host): so could.explain a little bit about how Firebase works?[00:21:52] Erik Gillespie (Host): You can think of it as a nosql database that stores everything that effectively as one giant JSON object; every single user if you have user records, if you have a Blog every single post, it's all going to be in one giant JSON structure and they have a very basic querying language that you can use to access data within that JSON structure, but it's not very robust and it's got a little bit better, but I think this typically ends up happening with a lot of NoSQL databases if you want complex querying capabilities typically you end up duplicating a lot of your data to make it a little bit easier so.[00:22:26] Leo Dion (Host): Did you run into a lot of like map-reduce issues with Firebase? That's what I've run into when it comes to Mongo is like you end up having a lot of map-reduce and like that stuff can get really complicated really quick.[00:22:39] Erik Gillespie (Host): Yep. So there's a lot of different ways that I needed to use this data that took a lot of consideration and to how to secure the data how to. So data how to do things efficiently and then also like you were suggesting how to actually manipulate all of the data once I do have it so that I can report it to the user in the correct way.[00:22:59] Leo Dion (Host): Does Firebase allow you to offload a lot of that complex querying over to their servers you can pick they do have functions. So you can do things on the Firebase server as you would or you can run your own server. And so you can query the Firebase database manipulate the data on your own server and then send that to the users or.[00:23:19] Erik Gillespie (Host): You can even access everything directly from the browser or your IOS app and then manipulate the data directly on the client device. The tough thing is Firebase does make it really easy to get started with a database and do some really cool real-time interactions with basic data sets. And so there is a strong appeal and I can understand why there's this popularity to it and it's really good as an introductory database.[00:23:44] If you want to learn how to do real-time database integration in a web browser and you don't want to have to introduce like rest apis or making graphql or any other typical ways where you have to just create a bunch of extra code, In order to get access to data. Firebase is a great way to go about it.[00:24:01] However from my experience if you're doing anything more than basic it gets really complicated really quick. So very early in this episode you mentioned the security is one of the concerns. If you have clients accessing the database directly and you don't have any server in the middle there. Then you have to start writing all of these different rules in Firebase in order to make sure that user X cannot access data that is exclusive to user Y that's really complicated and it's kind of like JavaScript but it's not quite JavaScript. So there's all these nuances that you have to learn about how to use it. [00:24:34] Testing is also really challenging. So the way that you watch data is you watch it query URL. So you provide a path, to an object or a structure within your Json that you want to watch and anytime there's changes to that fire base will automatically stream that data to any of the affected clients. So you have to be concerned about the size of the data. So if you have let's say you have a user profile that has your username and an avatar and a bio you have to be mindful that if you want to just present in the navigation bar on any given page the name of a user that you only want to query for the name of the user otherwise you might be incurring a lot of extra downloads if the bio or that image change. So there's some performance impacts if you don't model and code your Firebase application correctly. [00:25:22] Leo Dion (Host): So this sounds a lot like subscriptions and cloudkit. So in cloudkit you can do something like a subscription and listen to changes in the database for a particular user. Is it some similar to that and then you get like a push notification with subscriptions essentially?[00:25:37] Erik Gillespie (Host): Yeah exactly the Firebase realtime database doesn't use browser or client push notifications. So you don't have to do the like I allow this application or this website to push notifications to me.[00:25:54] Leo Dion (Host): Right[00:25:54] Erik Gillespie (Host): and it does that really well. So the data syncing does work marvelously. However, sometimes it can take a long time to sync data if you're watching an entire user record and they change their profile. Meanwhile, all of your users who are in a chat room who only care about the username then may have to download this profile that is maybe like one kilobyte and until that is donethey don't actually see any changes to like a username or anything like that. [00:26:28] Leo Dion (Host): Yeah. That's a really good point. [00:26:29] Erik Gillespie (Host): Yeah, so you have to be very careful about those subscriptions or what you're listening to.[00:26:34] Leo Dion (Host): Now cloudkit has the idea of like a private database, public database and a shared database you have somebody like that like CloudKit? Or is it all just kind of like a database which is kind of the more traditional way of doing things?[00:26:46]Erik Gillespie (Host): Firebase has a few different storage options might be able to guess this since they store in the real-time database everything as JSON you have all of the same limitations of what you're able to store so binary data is automatically out.[00:27:00] So if you need to store files PDFs or images or anything like that, That will go into a different Firebase service. So you have to then code to separate ways to potentially get access to the data that you need which can have its benefits. However, it can also seem a little cumbersome. The last point is the querying capabilities.[00:27:19] They've gotten better. However, there's still really basic and definitely not as powerful as what you can do with like an SQL database. I would say if you have any kinds of reporting needs or you need to aggregate lots of data and then present it to the user in. One, two, three, or more different ways than you may need to take that into consideration when you're modeling your data and potentially create duplications of your data, or maybe just reconsider using Firebase for that kind of reporting need.[00:27:50] Leo Dion (Host): Okay, that makes total sense. [00:27:52] Erik Gillespie (Host): It does seem really really popular but the more I dig into it like there are some companies using it but not a whole lot of like enterprise-grade companies that are really relying on Firebase. So that is something to consider as well. And I would recommend considering that not just for Firebase.[00:28:09] But any kind of storage solution that you're going to use see if there are any big companies is using it if you want something that's rock solid and stable and gets a lot of support you can. Be sure that these big companies who have lots of lots of time and money to spend will have taken the time to research and vet these solutions and so you can offload some of the work on to them and consider it a little bit safer to go with a solution If you have like one of these Fortune 500 companies using it.[00:28:37]Leo Dion (Host): What do you think of Fortune 500 company is using for their back-end?[00:28:41]Erik Gillespie (Host): I've seen a lot of them end up hosting their own. [00:28:44] Leo Dion (Host): Yes. [00:28:44] Erik Gillespie (Host): I am seeing them shift more towards cloud based Solutions but what they tend to do is do a lot of self manage types of solutions. [00:28:51] Leo Dion (Host): Yep.[00:28:52] Erik Gillespie (Host): Not necessarily like a Heroku but maybe like AWS or there's other what are considered enterprise-grade.[00:28:58] Leo Dion (Host): When it comes to your Fortune 500, If they're going to go Cloud, they usually go AWS, Azure, IBM - typically those are those are the big three Cloud platforms that I've heard of maybe maybe Google if they've been given enough incentives to do that as well.[00:29:13] I don't see a lot of Firebase. Now, I've also seen the case where. You might use multiple database systems. So maybe you have like MySQL for some of your data. And then maybe you'll have like a real time data using Firebase. Is that a use case you've seen a lot of?[00:29:27] Erik Gillespie (Host): I haven't seen a lot of it, but it was it is something that I would consider. I think graphql makes that a little bit easier because you can aggregate data from a lot of different sources more easily with a rest API you basically have to do all the coding yourself. So if you want to use Firebase and postgres, for example, then you create an API and then your apis server-side code will connect to both of those places pull down the data they need and then manipulate it however and then spit it back out to you so definitely very viable something to consider.[00:29:57] Leo Dion (Host): Could you explain a little bit what graphql is as opposed to rest API[00:30:01] Erik Gillespie (Host): With a rest API, typically you have a URL or resource on the web and you will fetch that and download one piece of data with graphql from the client you can provide a multitude of data that you want to access and then a graphql will take on the responsibility of figuring out how to quickly get and combine all of that data and then get it to you. [00:30:31] Leo Dion (Host): Yeah, I think Rest API kind of is a very simple as far as what you can query. It's meant to be like that. It's always been structured in that way.[00:30:39] So you can say I want to get user with ID 20 and I'll just do it and then maybe you can maybe attach some filters and things but it's really it's very simple as far as that where I think like with graphql which is by Facebook. They've done is they've created a weight so that the client can send a complex query essentially in some sort of JavaScript object notation format.[00:31:01] And then the server has the responsibility of figuring out how that query is to be run and how that query data is supposed to be outputted to the user. Is that correct? [00:31:11] Erik Gillespie (Host): Yeah for my understanding. Yeah and it introduces some alternative concerns with rest. You have a single resource that you're trying to fetch so it's pretty easy to lock down data. With graphql, then you have to consider now a user is potentially queering for anything that they want because you're exposing this query API to potentially anyone. [00:31:31] Leo Dion (Host): Yes. [00:31:31] Erik Gillespie (Host): So how do you protect all of this data? How do you make sure that they don't come up with a query that is going to just totally bog down your server or get access to data that they're not supposed to have access to. How do you actually present errors when they occur?[00:31:45]Leo Dion (Host): Anything else you want to talk about as far as Firebase is concerned?[00:31:47]Erik Gillespie (Host): I would recommend using it for very very simple situations where you have data that is not going to change in structure over time, data that's generally flat and when you don't have to do lots of complex queries. So on the flip side of that if you have lots of relational data you have to do a lot of reporting you have lots of large Fields like files to download that might be text-based so you'd be inclined store them in Jason or you have very complex security needs then you might want to consider some alternatives to Firebase. [00:32:19] Leo Dion (Host): Yeah, because I feel like Firebase is the most popular it's the hotness and from what you've told me with your story is like it's not necessarily a good fit for most things. Is that correct? [00:32:31] Erik Gillespie (Host): I think most people when they're building applications have grand ideas of them scaling to lots of people being used for very big things Firebase is very appealing for small projects. However, from what I've seen they get really complicated really quick. So as your needs change firebase might not be able to adapt and grow with you and can be very difficult to continue to support. [00:32:55] Leo Dion (Host): I think it's a really good point Erik. So always consider your developer team your price when you're doing your backend and help simple. Can you make your data? How much can you get away without a lot of the complexity of a home-built server?[00:33:07] Because the backend they're great. If you don't mind dealing with the hosting and all their headache and also even if you do a custom back-end consider how much of that can be abstract and you're willing to get away without having to maintain a server all on your own. If you're doing anything in the Apple space and you already have a team of Swift developers I would recommend looking at vapor at the very least for your back end. But if your team is mostly .net Developers or mostly Ruby developers or PHP or Elixir or go or rust or whatever one of the plethora of languages out there consider the comfort of your developer team. If you're just doing mostly Apple apps so stuff for the Mac iPad iPhone TV watch whatever consider cloudkit. With Cloudkit, you can get away with a lot. It's very very cheap. Apple practically gives it away for free. You're hardly ever going to run into the limit and it's really easy to use when you're working with Apple devices and you're already programming in Swift or Objective-c. [00:34:00] And then as far as Firebase, it's great if you're doing really simple data or you're working with a really simple MVP but really look at the limitations before you jump into it. It might not be a good fit for what you're looking for. And you know, if you need to pivot do it early it. Don't do it when it's too late, if you feel like your data isn't a good fit for whatever you end up picking pivot as quickly as you can because you're not going to want to be burnt out by constantly trying to get your data to fit and in particular space.[00:34:28] Erik Gillespie (Host): Yeah. Yeah. I totally agree with that [00:34:30] Leo Dion (Host): cool. So yeah. Thank you so much for coming on again and telling your story about Firebase and we will talk to you later. [00:34:37] Erik Gillespie (Host): Alright take it easy. Thanks for having me.
★ Support this podcast on Patreon ★
2/10/2019 • 34 minutes, 40 seconds
Apple 2019
Previous Episodes
iPhone Xr
Low-Cost Macs
Slowing iPhone Sales
China
Samsung 4th Quarter Guidance
Apple’s Precarious and Pivotal 2019 - M.G. Siegler
Apple Revises Guidance - Accidental Tech Podcast
Apple's China Problem - Strechery
Decrease in Computer Sales4 Charts That Explain The Decline in PC
SmartPhones Plateau / Mature
Smartphone Sales Are Slowing
Apple's Battery Program
Growth in ServicesApple's Servies Segment Continues to Grow
Apple and Business
How does Apple balance quality and price in the PC Market?
How will Apple tailor their growing services segment for businesses?
Apple and Developers
Will Apple encourage more services in the cloud?
Amazon Web Services
AWS Lambda (Server-Less)
Google Cloud Platform
Microsoft Azure
Apple CloudKit
Will Apple encourage more services for developers?MacStadium
Will Apple offer some sort server-side services?
Vapor
Perfect
Kitura
★ Support this podcast on Patreon ★
1/27/2019 • 20 minutes, 25 seconds
Project Estimation
Speculid Talk
Development Alternatives
Ionic
React Native
Xamarian
Cordova
NativeScript
Continuous Integration for iOS Options
MacStadium
Travis-CI
Jenkins
MacinCloud
Xcode Server
CircleCI
HockeyApp
Complete Transcription[00:00:00] Theresa Jasko (Host): I feel like last time we had our podcast you've maybe done a few speaking engagements. [00:00:06] Leo Dion (Host): I spoke at ArborMoon at the Ann Arbor Cocoaheads group about Try! Swift which is the conference, I went to Labor Day week. And then I also talked about Speculid which is a Mac App for developers that I've been working on for building graphics for apps. I just talked about how it works and kind of the guts of the challenges I faced building the app. [00:00:31] Theresa Jasko (Host): Nice, So what is IOS development? [00:00:34] Leo Dion (Host): IOS, of course, is the operating system for iPads and iPhones. So typically it's the process of coding, designing, testing, and packaging an app and delivering it in whatever way a customer would want.[00:00:52] Theresa Jasko (Host): Yeah, so if someone's looking into doing that what kind of factors go into getting a quote for that kind of service.[00:00:59] Leo Dion (Host): So really it depends on the features and kind of the timeline of the app. So faster timeline is going to mean a higher quote then integrating any sort of third party services. So if you're integrating something like Facebook or integrating any sort of special controls or sensors on the iPhone like motion controls then that's going to up your quote. And then the complexity of the data that's being used, especially if it's data that's going to be stored locally or remotely - there's going to be some complexity there and that will take take more time. [00:01:40] Because that's essentially what we're talking about is quality and time the more you pay the more time it will take and the more higher quality will also mean a higher quote for those Services because that quality also takes time of course. So offline capabilities - not a lot of apps necessarily need that but a lot of apps want to have the ability to just having online and offline capabilities so syncing and things like that. Any sort of UI complexity and any UX complexity, chat, the amount or number of screens is a good indicator of how complex an app is going to be and how much the price is going to be. [00:02:26] And then this is much more an issue on Android but as far as iOS is concerned, It's what operating system versions you support. What devices you support. So is this just an iPad app is it just an iPhone app is a support iOS 12, iOS 11 how far down the chain are you going and that usually factors into the price of the quote for developing an app.[00:02:53] And also another thing to mention is in many cases we're thinking a green app, but starting an app from scratch that has its challenges but also picking up an app that's already been developed on has its challenges as well. So that's something to that will weigh into the quote of developing an IOS app.[00:03:17] Theresa Jasko (Host): Yeah, so when you talk about like those factors just now is there like a common app that you could use it as an example of like kind of illustrating some of that stuff? Is there maybe like a weather app or something like when you talk about like UI ux complexity and things like that? I'm having a hard time envisioning what that means in real life.[00:03:38] Leo Dion (Host): Sure. So the way I think about it is a lot of times customers depending on how much they want to do when it comes to getting requirements for an app have a pretty good idea of what screens they want. And so I usually get into the process of asking them - Okay, what does this app do? What are you trying to do? What is your end goal and then figure out - okay, we'll need a screen for this and a screen for that and then the screen will go to that. Then I'll start thinking about like different edge cases because we always have to think like what happens in this case what happens in that case. What I do is in spreadsheet will write out the different screens that an app will need in order for it to essentially work. [00:04:26] For instance, we developed a nurse training app and that uses about four different tabs and probably each of those have different dialogues for adding credits for a nurse. And so we'll have say 12 screens in that app. Just kind of roughly and so that I look at the complexity how much data is being entered is it like one field, 2 fields, 3 Fields? How complex is that data? Is that data dependent on certain variables? Is there a certain range of acceptable values and then that factors into some of the UX that's involved or the user experience because I want to make sure that the user is walked through the app. Easily and knows what they need to do and it's intuitive.[00:05:17] So I kind of rough guess how many hours that's going to be for each screen. We also talked about for instance with a brand new app, there's some setup time usually involved. And then for each screen, there's going to be testing involved say every week or two weeks so that gets added in as well.[00:05:41] And then of course at the end, there's the issue of getting into the App Store assuming it's a app store app and there's always time involved there because you'll always find all sorts of issues when you get into App Store. There's also dependencies for their marketing or graphic design folks to make sure that they have the assets that are needed to get into the App Store.[00:06:02] Theresa Jasko (Host): Hmm. Wow, do you find that when people approach you about getting a quote or something? Do they have a full understanding of the things that you're talking about are usually have to really kind of work with people to even explain that?[00:06:17] Leo Dion (Host): Usually what I like to do is kind of do a rough tree of how the app is going to work. And then from there I'll go ahead and make estimates for each of those things. Sometimes I might do something like an initial consultation for a fee depending on how complex the app is. And then what I like to do early on in the project is have basically an app that doesn't work but at least has the UI and the workflow that they expect out of the app so that way early on in the process they're there confirming how the app is going to work eventually at some point. [00:07:00] Theresa Jasko (Host): What are the things - you know what - let's say someone wants to do a development project and they get let's say three different quotes. What's the reasons you know, if the prices are kind of varying pretty significantly what could be different there? What would you be maybe missing out on if you go with the least expensive? [00:07:23] Leo Dion (Host): Sometimes they are perhaps using services that might expediate the development process without really offering any ability to customize it later. Perhaps it's using some sort of different method besides building it native Apple like Swift or Objective-C. We can talk about the different methods for developing apps later. It's all kind of based on maybe an extensive experience or you know, just kind of taking shortcuts and things like that. There's some app building templates out there that people might be using as well which doesn't really fit with what they want. But really you're getting different quotes based on possibly the quality of work and just what features haven't been completely flushed out early in the process. [00:08:20] Theresa Jasko (Host): Yeah, so when you say for instance that you won't be able to be updated later or something. Does that mean they kind of cobble something together? And then that's just kind of it and you can't add to it later? [00:08:34] Leo Dion (Host): Yeah, that could definitely be the case in many ways. [00:08:37] Theresa Jasko (Host): Do a lot of people like when they make an app want to update it later or is it kind of 50/50 or you know, like well, yeah, we made this and it's good enough and we just kind of let it lie.[00:08:48] Leo Dion (Host): I think it's 50/50 but with a lot of at least with iOS you need to keep updating app if you're going to want people to use it when you come out with a new iPhone that's bigger or has a notch or uses a different design then you pretty much have to update your app. You can't get away with keeping on the App Store because Apple can just drop the app if it doesn't work on newer phones. [00:09:15] Theresa Jasko (Host): Mhm. And so when you're saying people you maybe use like a template or something to say is it is it kind of like a square peg in a round hole thing where it's like, well we have this starting point and we're going to kind of make it work for you.[00:09:26] Leo Dion (Host): Yeah, that's exactly what you could run into. If somebody could just be using like a template and they're not maintaining a they're not keeping it working and keeping it going. So when the new phones come around they haven't updated the template or they haven't updated the app. You're going to have to just come back to those people to update the app and your kind of dependent on them at that point.[00:09:51] Theresa Jasko (Host): So you're saying you couldn't have somebody else come in and update it then. [00:09:56] Leo Dion (Host): Well somebody else could but they're going to charge for whatever it takes to reconfigure that app. That might be outside of their wheel house. [00:10:06] Theresa Jasko (Host): So what is the difference between starting from scratch like to me when I feel like when you start from scratch with something it's going to take longer than going to be more expensive. But then you're saying if you using a template or you know, kind of a starting point that somebody else is made then that can create problems later on too. So you ever start with a template or anything or do always kind of start from scratch? I've started with some templates before or at least started with other development projects and it really depends on that previous team and how well they did if they did a good job and structured their app well, then it might not be that big of a deal to pick it up. But if it's just cobbled together like what we're talking about then there could be some serious issues trying to bring that app in. And if it's old enough that it uses some old code that doesn't work anymore. That could be a serious issue for the new team that comes in and adds new features to the app. They might come to a conclusion that is some of the stuff is worth just burning down and starting from scratch. [00:11:13] We've been kind of talking about different ways of going about it. Does that mean that there are different methods for developing apps for the iPhone? [00:11:21] Leo Dion (Host): Yeah. So we kind of talked about some templates. There's app building templates are out there, but there's also a different methods that deviate from just doing it the Apple way so to speak. So there's what I like to call like the web development wrapper way of doing it and the building it in my own favorite language, but still make it a native way of doing it and they each have their advantages.[00:11:48] So with the web development wrapper, that's typically something like Cordova or Ionic. Cordova was built by Adobe and essentially what it is is you build a web app. So you're just you doing regular HTML and things like that to build. The app and it's wrapped but you still have access to certain native features on that phone.[00:12:14] So to the user it looks like just regular app out of the box, but to you the developer, you're actually just building a web page. There's so many questions as far as how to get something like that into the App Store that can sometimes be a challenge but if you do it, right, there's quite a few apps that are built using that technology[00:12:39] Theresa Jasko (Host): what do you mean by native? [00:12:41] Leo Dion (Host): When I say at least looking native is an app that doesn't look like something that's hacked together using custom components or packaged like it doesn't use like actual apple design elements that people typically use when they build an app.[00:13:01] So like I've been on certain apps that have like a weird wood grain or it has buttons that don't look quite right or has drop down menus, which you don't really see in a lot of Apple apps and that kind of gives a good indication that use some custom software to build it. Unless of course it's designed well, and it uses kind of some of the third-party tools will talk about in a little bit.[00:13:26] So like with a web development wrapper, sometimes it'll just have a weird color scheme attached to it or it'll have different menus that you don't typically see in an app that's developed natively using xcode the toolset Apple has available. [00:13:45] Theresa Jasko (Host): Okay, so it just kind of feels a little off or looks a little off at best.[00:13:49] Leo Dion (Host): Yeah, exactly. [00:13:51] Theresa Jasko (Host): Okay, then what at worse? It just doesn't work correctly. Yeah. [00:13:55] Leo Dion (Host): Yeah or it just doesn't make any sense. It doesn't follow the paradigms people typically are used to when they use a IOS app. [00:14:04] Theresa Jasko (Host): Well, if so if it's clunky and weird like that, why do people even make them or release them [00:14:14] Leo Dion (Host): because it's cheap and easy. So, I mean that's kind of it. Also, maybe maybe they're focusing on Android. So they just wanted to make sure it works on Android and if it works on iOS, that's fine. It's a lot of that. So that is the benefit. A lot of these different methods is that you can ideally developed for both Android and iPhone at the same time. But in a lot of cases your UI won't look natural on Android, but also won't look all that natural on iPhone as well. Okay, because you've made some compromises. [00:14:51] Theresa Jasko (Host): Yeah, I didn't think it went that both ways because I've always heard. You know, when I complain about different apps that I use on my Android usually people are like, well it's because you have an Android. I didn't realize it happened on IPhones and stuff too. [00:15:08] Leo Dion (Host): Yeah, there's definitely some crappy apps out there on the iPhone. [00:15:15] Theresa Jasko (Host): All right. So what other ways are there to develop apps than besides this cobbled thing?[00:15:20] Leo Dion (Host): So we talked about building a website or webpage and then packaging it as an app kind of what Cordova or Ionic does. And then the other method is developing in a specific language that your development team might know in a lot of cases JavaScript and then building it using that for iPhone or IPad. You see that a lot with NativeScript which is built by the folks at Progress but even more popular we see that with React Native which is built by the folks at Facebook. React is really popular amongst folks in the web development circles. And so if you're somebody who's already have a web team and they're already familiar with React then it makes sense. Maybe you just reuse those same people to build an app using React Native and it uses the same a lot of the same things that React does, but you can use it to build basically a native app. Whereas the first one [Ionic] takes it. A series of web pages are and HTML files and kind of puts it in a frame or wraps it this one actually converts the code into native code. So it actually is building a app. There's no HTML or anything like that in the app. It's actually building native features, but it's converting it to native from JavaScript in these cases or NativeScript. [00:16:55] Theresa Jasko (Host): Okay. Have you done all these different methods? [00:16:59] Leo Dion (Host): Well, the one that I've used is Xamarin, which is by the folks at Microsoft. So that uses C# to build apps. The problem that I found was constantly these tools have to catch up with Apple or Google to make sure that they're compatible. So Apple might come out with new stuff. That means your have to be dependent on them to make sure that they're updating their tools to work with whatever is new when it comes to Apple. So there can be a little bit of a support issue. Also at least with Xamarian those files can get pretty large because they might have like a file in there that has to do all the heavy lifting of making sure that the app works, even though it's written in a different language. So your app size might be a little bit larger a little bit slower because of that. That's kind of the issues I ran into at least when it came to developing using Xamarin [00:18:02] Theresa Jasko (Host): So developers do use different methods. [00:18:06] Leo Dion (Host): Yeah You'll see a lot of teams, they might just do react native because that's what they know - React. So it's easier for them to just go ahead and stick with that. Or they might be a bunch of web developers, so it might just be quick and easy to use Cordova or Ionic in that case. [00:18:25] Theresa Jasko (Host): So one of the related words or phrases I guess I've heard is continuous integration. So how does this relate to continuous integration? [00:18:38] Leo Dion (Host): Well, we're talking earlier about experience, testing, UI complexity are kind of the factors that might make a quote more expensive. One of the things is being able to continually make sure that as software is written that it actually is tested. So there's the common term in programming called unit testing where you'll write a thing that does addition. So you'll write a method or function that does addition that is takes numbers outputs the sum. Right, and then the way a unit test will work is you might have a series of numbers that you know add up to another number and you want to continually test to make sure that if you add two and two that will always equal four with this function if you had four and six at always equal 10, and so on. That's gives kind of a really simplified it sample, but you might have some developers come in and have make modifications to this method so that it does things like negative numbers or take decimal points. So then you need to make sure that you add those tests and you continually are testing both with the new test but also the old tests as you make changes to this function that adds two numbers together. So that's kind of the idea of continuous integration is as your team comes in and makes changes to different functions and methods and features within an app that the app still works based on the old code that's been written before. And typically how that's done is you might have a separate individual machine or you might use some service in the cloud that will take your code build it and make sure everything works no matter the environment that it's in and that it works on whatever you support and whatever devices you intend to support. Does that kind of make sense?[00:20:32] Theresa Jasko (Host): Yeah a little bit. I'm I guess I'm having a hard time imagining like. Do some people not tests throughout their development?[00:20:40] Leo Dion (Host): Yeah, I mean everybody "tests", but typically it's - so does it work? Like and you just kind of use the app and it works and you're fine, but there are so many outliers and different things that people do or my might do differently. And there's different kind of testing of course, but you'd be surprised how many teams don't test and don't do things like continuous integration.[00:21:03] Theresa Jasko (Host): It makes me wonder there's stuff going on at work where they developed a new system and has never quite functioned right and then they will do bug fixes and then the next day a bunch of other things have been broken and It's always kind of intrigued me like why is this happening? [00:21:21] Leo Dion (Host): Yep, and that's a lot of cases what they find is, you know, the testing is part of the thing that gets cut because if it works good enough that it works good enough and that's unfortunate in a lot of cases. [00:21:33] Theresa Jasko (Host): Yeah. So do you is this the method you use the continuous integration?[00:21:37] Leo Dion (Host): Yeah, actually last night when I was in Ann Arbor. I talked about Speculid and how I used Continuous Integration. I used a Cloud Service - Travis CI which is available for free for open source projects, which is really nice because a lot of services that do continuous integration of the cloud are expensive. Because of how much it costs you pretty much have to get a Mac machine in order to do it. So yeah last night I talked about Travis CI and how there's some customization involved. But also one of the biggest challenges is if you are building in this case the Mac app or especially if you're building an app for the App Store you have to make sure that you have certificates and keys setup so that like for instance in the case of Travis CI you might want to just upload it to the App Store as soon as your testing is verified and it works correctly.[00:22:34] So that's always something to keep in mind is to make sure that you have your environment set up correctly and you have things like certificates and provisioning profiles and all the little doodads and security stuff that Apple requires when you want to post something to app store. Or in the case that I ran into just distribute the app downloadable.[00:23:01] So there's some other services out there. There's like Mac Stadium -Where you're typically like renting a machine essentially on a monthly basis. There's Jenkins if you want to run it on site or xcode server, which but I've been playing around with lately. And the idea is you're not running it on a machine. You'll especially run into the issue where a developer has something specifically set up and it works fine on this developer machine, but then when they run out on somebody else's machine, it doesn't work.[00:23:34] Well you need to know that. Because if you're going to write a piece of software you need to know what's depending on what needs to be set up or what you're missing in your application in order to get it to work. It's really nice with iOS because you can just run it in the simulator, but even simulators have some major differences to how it works on an actual device.[00:23:54] So you want to have access to something you can reset and start from scratch and run the app and make sure it works. [00:24:02] Theresa Jasko (Host): So is this automated is this something you set up and say test every day at 10 or is it something that you do yourself or how does it work? [00:24:10] Leo Dion (Host): So there's a couple of things you could do. You can set up on a schedule so you can say I'll run hourly or daily. You can especially if you're using something like git to control code where code gets checked in you can listen for changes to the code unlike the central server and when a code change happens, you can get the code and run it on the continuous integration machine. So it's another way to do it.[00:24:37] And typically those are kind of the two main ways - run it on any code change that you listen to or run it on a scheduled basis. [00:24:45] Theresa Jasko (Host): So if you know kind of your average customer is considering a developing an app, are there certain things that they would maybe assume comes along with it, but it doesn't or just things for them to keep in mind if they start thinking about this.[00:25:04] Leo Dion (Host): So we talked about continuous integration testing - that's something that they should look into and ask questions. What kind of testing do you do? What kind of testing environment do you have? Another thing you want to ask is analytics? I don't think people think about that enough, but I think it's super important to have some analytics to know how people are using your app and what issues they have is there any sort of bug reporting that's natively built into the app something like instabug or bugsnag or some service like that. Also animations like that stuff is pretty complex. Don't make the assumption that there's any animations any custom fonts or any Custom Graphics. Those are things that you have to think about when you're building an app and then any sort of like backup support.[00:25:56] Are you going to actually own the code when it's done? What kind of services are there for maintaining the app is that baked into your contract or into your quote? So those are some things to think about when you're asking somebody to build an app for you essentially.[00:26:13] Theresa Jasko (Host): Okay. Do you offer those different things depending on what your customers want or do you kind of have a standard like I always have bug reporting and analytics or something like that. [00:26:24] Leo Dion (Host): I always ask the customer what they want because it really depends on their budget coming up for my end. I want to make sure that I stay within their budget and make sure that I'm not adding in extra services they might not need because in some cases they just need a simple app. And then which is what I usually suggest depending on the budget is like both building something simple get like not a prototype but like a usable proof of concept that you can get to your customers so they can actually start using it and then if you see like there's some issues or there some features that we really need to flush out then, you know, come back to me let's build version 2.0 and really flesh this thing out. [00:27:04] Theresa Jasko (Host): So is it easier for people to come in and kind of know how much they have to spend or is it better to have a range and then work someone like you to start to hone in on like what features they want or what's the best way to approach a project like that?[00:27:20] Leo Dion (Host): I think both I think what is the ideal app you're looking at building and then what's your budget and that gives a good idea. Because the budget really is going to give me a good idea of what kind of features are reasonable. And also of course the timeline like well how soon do you expect it to be done?[00:27:40] And that really gives me a good idea because I want to build the best app within what somebody can spend and knowing those factors really help communicate clearly to me and clearly to them what can be done within that range. I work to make my customers happy and I want them to be happy and I hate to be in a position where I over-promised and that's something I never do.[00:28:06] So, the other thing to keep in mind is sometimes what the customer wants isn't really what the customer wants. And so you know, I could do a really kind of basic estimation but if they want something more flushed out, what I like to do is kind of do a requirements analysis and get an idea of what are they really?[00:28:33] What's their end goal and then kind of design around that and maybe build a rapport that at the very least if they don't want that app, then they can they can take that to somebody else and go: "oh, you know, we had an analysis done this is kind of what we're looking at getting built and maybe take it to somebody else to have it built for them if that's much more a better fit for them.[00:29:00] So it really depends on their budget to like do they want to spend some money on a kind of report that we can take and then build an app against or do we want to put a quick estimate together and build based on that? And so that depends too is like how much of an analysis do they want beforehand.[00:29:20] Theresa Jasko (Host): Do you have any examples of someone thought maybe they wanted something but it what they really wanted was something else?[00:29:27]Leo Dion (Host): Yeah in a lot of cases. I've found that people you hear the I have a great idea for an app thing and I think I'm always surprised at how many times people haven't just looked in the App Store to see if that app already exists because a lot of times it does and in a lot of case It doesn't work very well. So that can always be a challenge. I think it a lot of cases people don't get into the specifics of the rules that they have in mind and they don't think of the weird edge cases that actually come up more often than they think so they think something is fairly simple, but then they realize that there's going to be situations where in fact it isn't that simple and that there might be a lot a situations where people are running into all sorts of issues because there are certain things that they need. for instance we had that nurse training app where we have on occasion with nurses that need certifications in multiple states. So that's a big deal because you know, that might have been built to only support one state and if you're somebody who needs to get certifications in two states you need to track those credits accordingly in both States. And this is something people didn't think about and we brought that in and so they're always situations like that. Especially what you get with somebody like me is I've been developing an apple space for almost a decade now and I understand how different UI and ux paradigms work on Apple what people expect from a app that it's on an Apple device and those are things to think about as well.[00:31:19] Theresa Jasko (Host): You had mentioned earlier one of the questions was about like who owns the code. Can you explain more what that means? [00:31:26] Leo Dion (Host): Right so you'd wall was want somebody who develops an app for you to give you a copy or access to the code or repository? I mean, I feel like that's what requirement with any app.[00:31:38] Theresa Jasko (Host): Are There people that develop stuff and then don't give it to the customer. [00:31:41] Leo Dion (Host): Exactly and that is always something to check on. [00:31:45] Theresa Jasko (Host): What would be the reason for? [00:31:47] Leo Dion (Host): Maybe in a lot of cases they don't even think about the code. They just want the app in the app store and maybe they don't want the customer to see how poorly the code is written. I always provide the code like that just makes common sense. Yeah, but you'll find situations where that isn't the case.[00:32:05] Theresa Jasko (Host): yeah definitely wouldn't have thought about that. So if someone were interested in investigating this do people offer like a free consultation or it it usually like a fee to kind of start to explore [00:32:18] Leo Dion (Host): depends on how much you want me to break down the estimate if you want something for pretty basic than I could probably do it for free, but I think it's always better to like talk to the customers start like sketching things out and of course when it gets more details than it's not a free consultation, but for a very basic app yeah, I've done free consultation certainly. [00:32:43] Theresa Jasko (Host): I just mean like if I don't even have any idea like I'm thinking I want an app. I could probably spend $5,000. I mean is that even like in the realm of reality? Like how do you even know what you need to put aside for that. [00:32:56] Leo Dion (Host): No, I think five thousand dollar app would be well below the budget at this point. Yeah, I mean it's possible to do a five grand app, but it's not going to have a lot of features quite frankly. I think like right now you're talking bass price for an app would be 10 grand and it goes up from there. And I think that yeah, so typically, you know, that's where you need to start thinking about like third-party services, analytics, offline, UI and ux complexity and things like that and that's where the price kind of increases from there.[00:33:33] Theresa Jasko (Host): So other than getting like referrals from people that have worked with folks, is there other ways to kind of tell if you know who's a good developer and if they know what they're doing. [00:33:44] Leo Dion (Host): I think look at their portfolio. I think that's a great way to look at the references and then kind of get an idea - talk to them about how a typical timeline will work and you want somebody that's going to be honest with you and tell you all the different missteps that can go along the way and all different gotchas that happen in the app development process, especially with like Apple, like something that will come up is your app gets rejected for the App Store. Now, what are you going to do and you have to think about those things and you want to developer that'll be honest with you and forthright about the different issues that could come up. Like I said, portfolio references what's on the App Store? what do they have as far as on the company website?[00:34:30] What do they have that talks about this kind of stuff that's going to give you some confidence to know that they're actually doing what they're talking about. [00:34:36] Theresa Jasko (Host): So is it safe to assume there are going to be hiccups. There are going to be speed bumps and it's just kind of matter of what they are and when they're going to happen.[00:34:45] Leo Dion (Host): Yes, exactly. Yeah. [00:34:47] Theresa Jasko (Host): So if anyone tries to tell you it's just going to be smooth sailing and nothing bad's going to happen - that's a red flag. [00:34:53] Leo Dion (Host): Yeah, I would say so it's definitely a red flag and like if they haven't given you a portfolio or a list of references, like that's a red flag as well because they probably don't know what they're talking about.[00:35:04] Theresa Jasko (Host): Yeah. So what kind of things you know, besides getting a budget are there certain things that a customer should think about beforehand or prepare in order to make the most that time.[00:35:16]Leo Dion (Host): Have regular meetings with that customer talk to them. Make sure you have a copy of the app to test around on your own machine on your own iPhone so that you can look at it get it into your hands as quickly as possible so you can see it and talk about it and look at what issues come up and I think that's a big part of it. [00:35:38] Theresa Jasko (Host): I feel like what we've talked about does make it maybe seem less scary to me, you know, if this was something I was going to be investigating for myself, which I think is a big big thing. Right? I mean a lot of technology stuff I feel like because kind of based on fear you make decisions based on fear. You don't make decisions based on fear. So, you know, I think anything that makes it a little more easier to understand is good[00:36:01] Leo Dion (Host): Going to our discussion previously about continuous integration. I think it'll be interesting to see how Mac Mini is that into other development shops and how they might employ Mac minis in their environment because you know that I think is the biggest draw of getting a Mac Mini is having a continuous integration machine you can you could format and do all sorts of stuff with and break, essentially without having to worry about you know the cost of getting into enormous machine to do it. Because this is easy to run every so often interested work. [00:36:33] Theresa Jasko (Host): Yeah. Well cool. This has been super interesting. I always learn a lot from our discussions. [00:36:39] Leo Dion (Host): Yeah. Well, thank you Teresa. [00:36:41] Theresa Jasko (Host): Yeah, great. I can't wait till next time. Yep. Talk to you later.
★ Support this podcast on Patreon ★
1/8/2019 • 36 minutes, 44 seconds
Apple Watch Series 4
I'm an Emergency Physician and wanted to talk about Apple Watch's new ECG
Watch Faces Infographic and Infographic Modular
Previous Episodes
Episode 3 : Low-Cost Macs - MacBook Air & Mac Mini
Episode 4 : iPhone Xs vs iPhone Xs Max vs iPhone Xr
Apple Developer Videos
Designing for Apple Watch Series 4
Developing Complications for Apple Watch Series 4
Using Subscriptions
Designing for Subscription Success
★ Support this podcast on Patreon ★
9/28/2018 • 28 minutes, 23 seconds
iPhone Xs vs iPhone Xs Max vs iPhone Xr
Episode 3 - Low-Cost Macs
Interview with Kevin Scott on Machine Learning
Stratechery - The iPhone Franchise
Swift Thoughts on try!Swift NYC 2018
Building Apps for iPhone XS, iPhone XS Max, and iPhone XR
★ Support this podcast on Patreon ★
9/26/2018 • 41 minutes, 35 seconds
Low-Cost Macs - MacBook Air & Mac Mini
Apple September Event 2015
Daring Fireball - Let’s Really Think About This ‘New Low-Cost Laptop to Succeed MacBook Air’ Thing
Reddit Threads
/r/Apple - Dear Mac Mini Owners... (Three Questions)
/r/MacOS - Dear Mac Mini Owners... (Three Questions)
/r/iOSProgramming - Dear Developers with a Mac Mini... (Two Questions)
/r/Swift - Dear Developers with a Mac Mini... (Two Questions)
Plex
MacRumors Buyers Guide
★ Support this podcast on Patreon ★
9/10/2018 • 15 minutes, 22 seconds
September 12th Apple Event - iPhone and Apple Watch 2018
Tom's Guide - Apple Will Launch New iPhones at Big Sept. 12 Event
iMore - iPhone Xs (2018) rumors: Release date, specs, price, and features!
Gizmodo - Apple’s Next Smartphones and Watch Allegedly Revealed in New Leak
Accidental Tech Podcast #289 - How does the budget "iPhone 9" fit?
MKBHD - The 2019 iPhone Models!
Light L16 Camera
MKBHD - Top 5 Smartphone Cameras: The Blind Test! [2018]
Original Apple Watch Event - March 2015
★ Support this podcast on Patreon ★
9/4/2018 • 23 minutes, 53 seconds
WWDC 2018 - What Does It Mean For Businesses?
In this episode, we talk about WWDC 2018 and what it means for the technology industry and businesses. It seemed like a fairly quiet conference for Apple but maybe that's a good thing.
Is Apple cleaning house?
Will iOS 12 work on your current iPhone or iPad?
Why should old people in business and tech like us care about Memoji? (Hint: AR and ML)
When is a good time to install the new OSes?
What is new with the Mac App Store?
What are the new features in macOS Mojave?
How is development changing for macOS Mojave in 2019?
Links
Pokemon Go
Memoji
WordLens
Ikea Place
★ Support this podcast on Patreon ★