Here are some of the entries from Vision Hack 2024 Supercut – 61 Mind Blowing Projects (Vision Hack 2024) Pulsargeist – Immersive Survival Horror Game Prototype (Vision Hack 2024)Transform your surroundings into a dark parallel universe invaded by an evil spirit. Will you survive in your own home? Pulsargeist is an immersive survival horror game …
Continue reading "The Best of Vision Hack 2024 (so far)"
The post The Best of Vision Hack 2024 (so far) appeared first on iT Guy Technologies.
Here are the 3D movies available to be played on the Vision Pro. Note if you have the Crave, Prime or Tubi apps installed the TV app will offer to play in HD with those apps. If you want to watch in 3D I suggest you use the Search feature of the TV app. From …
Continue reading "Here Are the 3D Movies Available on Vision Pro in Canada"
The post Here Are the 3D Movies Available on Vision Pro in Canada appeared first on iT Guy Technologies.
Author’s Note: This article was originally published in Sept 2023. There was some content that was questioned but not explained. Hopefully, now that the Vision Pro has been released this edited version is ok. – March 2024 At the end of August, I took advantage of a once in a lifetime offer, to try out …
Continue reading "Hands on with Vision Pro — a Day at the Vision Pro lab at the Developer Center in Cupertino."
The post Hands on with Vision Pro — a Day at the Vision Pro lab at the Developer Center in Cupertino. appeared first on iT Guy Technologies.
I spent a few hours looking for the Editor > Fail Transaction in Xcode 15, while trying to test StoreKit2. It has moved into the StoreKitConfiguration pane under the App section.
The post Where is Fail Transaction in Xcode 15? appeared first on iT Guy Technologies.
Launched today. Embarking on a job search in 2024 can be a daunting task. Navigating through numerous job applications while struggling to receive timely feedback can be disheartening. Our app simplifies the process by allowing you to efficiently manage and monitor all your job applications. Keep detailed records of each application, update progress on interview …
Continue reading "JobLog – Application Tracker app"
The post JobLog – Application Tracker app appeared first on iT Guy Technologies.
Continue reading "Understanding SwiftUI’s Layout Principles and Declarative Nature:"
The post Understanding SwiftUI’s Layout Principles and Declarative Nature: appeared first on iT Guy Technologies.
Here’s a link to our podcast T-Shirts on Teespring
The post Swag appeared first on iT Guy Technologies.
Today I’m starting this post as I begin adding RevenueCat’s Paywall on my older apps. For the most part they are written in Objective-C but I’m adding new features with Swift and SwiftUI. I lost around 4 hours trying to work out a linker issue with the RevenueCat Swift Packages (SPM). The error message clearing …
Continue reading "Installing RevenueCat’s Paywall on Objective-C apps: Part One"
The post Installing RevenueCat’s Paywall on Objective-C apps: Part One appeared first on iT Guy Technologies.
All of the Big Mountain Studio books on SwiftUI have been updated for iOS 17. Check them out. They are my go to for visual style learning. Click Here
The post Big Mountain Studio SwiftUI books updated for iOS 17 appeared first on iT Guy Technologies.
I recently left an organization that used GSuite and used an authentication service to manage login. I couldn’t log into to my own Google services on my iPad after that. It took some digging to find out how to clear the cookies etc that were redirecting my login. Go to and choose:Settings > Safari > …
Continue reading "Clear Google Credentials in Safari on iPad."
The post Clear Google Credentials in Safari on iPad. appeared first on iT Guy Technologies.
Core Data can be a challenging and complex framework to get a good handle on. This book does a great job of demystifying some of the seemingly archaic features. Take for example Sorting and Predicates. These are dissected and individually examined and explained. I could see the pages about Predicates becoming the go to resource …
Continue reading "Learn Core Data in SwiftUI visually"
The post Learn Core Data in SwiftUI visually appeared first on iT Guy Technologies.
For fun I decided to interview ChatGPT as an iOS developer. I asked it the questions I would ask any iOS developer. ChatGPT draws upon readily available answers that are a year old, so the answers can seem a bit dated. Some of the answers are not accurate and some elements have been renamed. eg. …
Continue reading "iOS Interviewing a ChatGPT Candidate"
The post iOS Interviewing a ChatGPT Candidate appeared first on iT Guy Technologies.
iOS, the operating system that runs on Apple’s iPhone and iPad devices, has a reputation for being highly secure. This is due in large part to the strict controls that Apple places on the development and distribution of apps for its platform, as well as the use of advanced security technologies built into the system. …
Continue reading "iOS Security"
The post iOS Security appeared first on iT Guy Technologies.
The events discussed here happened 28 years ago – Sept 25, 1994 – on this day. “I still don’t like it, but I’m ok!” – Anne’s cousin, age 8. We had three ancient maple trees around our house in Oakville. They were a pain to mow around when doing the yardwork. They deposited a phenomenal …
Continue reading "The Last Happy Meal"
The post The Last Happy Meal appeared first on iT Guy Technologies.
Powered by RedCircle
The post Help Us Picard – Spockcast podcast appeared first on iT Guy Technologies.
Here’s the latest episode of spockcast Powered by RedCircle
The post The Vulcan Zoom Call – Spockcast episode appeared first on iT Guy Technologies.
Timothy A. Mitra iOS engineer, engineering manager, podcaster, x Evangelist, technical consultant, artist, lecturer, web developer, and technical writer. I spoke at the first SwiftTO conference on August 13, 2019. Here’s a link to my talk. 5 Ways to Level Up Your Mobile Development. I gave a preview of the talk at TACOW on July 9, …
Continue reading "now"
The post now appeared first on iT Guy Technologies.
Posted on July 26, 2014 by Rick_S Recently I purchased a Printrbot Simple Metal and have been learning the art of 3D printing. One thing I realized up front was the benefit of having an LCD display on the printer to show status and allow for menu driven printer control w/o using a computer host. At the time …
Continue reading "Printrboard LCD"
The post Printrboard LCD appeared first on iT Guy Technologies.
Posted on July 27, 2014 by Rick_S I did a quick design of an adapter board to take the 14 pin connector from the Printrboard to connect to the two 10 pin connectors on the RepRap Smart LCD Controller. This will give you the display and encoder functionality like in the official Printrbot LCD. The reset, buzzer, and …
Continue reading "Adapter Board for Smart LCD Controller to Printrboard"
The post Adapter Board for Smart LCD Controller to Printrboard appeared first on iT Guy Technologies.
I have modified slightly the original instructions from Michael Garron Hospital mask challenge. #1000masksThe inside pocket is to allow for a filter to be added. They suggest: Vacuum cleaner filters, coffee filters, paper towel or Kleenex.They recommend that the masks be washed daily in hot water and detergent. Face Mask PDF Download Supplies: Fabric: for …
Continue reading "Homemade Face Masks – How To Make"
The post Homemade Face Masks – How To Make appeared first on iT Guy Technologies.
App development, like art, is an expense of creative energy and effort. Once published, maintenance and upkeep takes a considerable amount of time and skill. Keeping up with changes in technology that Apple and Android add complicate a developers life. Imagine having to update a painting or redo a sculpture in a new medium because …
Continue reading "A case for the Subscription App Price Model"
The post A case for the Subscription App Price Model appeared first on iT Guy Technologies.
This one took me a minute to figure out. I had worked on a child theme in WordPress, but ran into the following error when I tried to use Live Preview: Twenty Seventeen requires at least WordPress version 4.7. You are running version 4.5.20. Please upgrade and try again. The strange thing is the version …
Continue reading "Error Previewing a Child Theme"
The post Error Previewing a Child Theme appeared first on iT Guy Technologies.
Back in February 2015, my article on Touch ID was published on raywenderlich.com. It was written in Swift for Xcode 8. Every year or so, I would update the article while I was an author on the iOS Team. Here’s a link to the latest version — How To Secure iOS User Data: The Keychain and Biometrics – Face ID or Touch ID. A few months ago, I had to update one of my own apps for iOS 13 with Apple’s biometric identification framework, Local Authentication. Incidentally, my app was also still supporting Objective-C. Here’s follow up on what I had to change. As a bonus you can also take your user to Settings in case they have disabled
First thing is to add Local Authentication at the top of the Login view controller.
#import <LocalAuthentication/LocalAuthentication.h>
Next create an action for the Touch ID method:
– (IBAction)touchIDAction:(id)sender {
LAContext myContext = [[LAContext alloc] init];
NSError authError = nil;
NSString *myLocalizedReasonString = @”Used for quick and secure access to the test app”;
//…
}
After that we need to check if the device can support biometrics with canEvaluatePolicy and have an error ready.
Inside the touchIDAction add:
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
error:&authError]) {
// 1. successful steps
} else {
// 2. Oops. There's a error!
}
Inside the canEvaluatePolicy, we’ll use evaluatePolicy:localizedReason:reply. The reply will have a block that either succeeds or fails with our error.
// 1. successful steps.
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:myLocalizedReasonString
reply:^(**BOOL** success, NSError *error) {
**if** (success) {
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(**void**){
*//Background Thread*
dispatch_async(dispatch_get_main_queue(), ^(**void**){
*//Run UI Updates*
// using a Keychain utility method to get the email and password
NSString *passwordFound = [KeychainUtils getPasswordForUsername:**self**->emailTextField.text andServiceName:@"My_app" error:**nil**];
**self**->passwordTextField.text = passwordFound;
**self**->usingSecureID = **true**; // a Bool I added to keep track
[**self** loginAction:**nil**];
[NSLog showWithStatus:@"Logging_In"];
});
});
} **else** {
*// User did not authenticate successfully, look at error and take appropriate action*
//I'm using a showAlert method to bring up a UIAlertViewController
[**self** showAlert: @"There was a problem verifying your identity." withTitle:@"Error!"];
**return**;
}
}];
What do we do if there is an error enabling Face ID/Touch ID? It could be because the user has disabled the feature. What’s new is that we can now take the user to your application settings — without a hack.
Initially you can pop up an alert to inform the user. Added to UIKit in iOS 8, UIApplicationOpenSettingsURLString lets you add a button to the alert that will take the user to your app in Settings, where they can enable Face ID/Touch ID.
*// Could not evaluate policy; look at authError and present an appropriate message to user*
NSString *title = @"Error!";
NSString *message = @"Your device cannot authenticate using TouchID.";
UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
*// do we need to return animation?*
}];
*// open your app in Settings*
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
UIApplication *application = [UIApplication sharedApplication];
NSString *settingTitle = @"Settings";
UIAlertAction* settingsAction = [UIAlertAction actionWithTitle:settingTitle style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[application openURL:url options:@{}
completionHandler:**nil**];
}];
[alert addAction:settingsAction];
[alert addAction:defaultAction];
[**self** presentViewController:alert animated:**YES** completion:**nil**];
**return**;
}
The whole method would look like this:
- (**IBAction**)touchIDAction:(**id**)sender {
LAContext *myContext = [[LAContext alloc] init];
NSError *authError = **nil**;
NSString *myLocalizedReasonString = @"Used for quick and secure access to the test app";
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {
// 1. successful steps
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:myLocalizedReasonString
reply:^(**BOOL** success, NSError *error) {
**if** (success) {
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(**void**){
*//Background Thread*
dispatch_async(dispatch_get_main_queue(), ^(**void**){
*//Run UI Updates*
// using a Keychain utility method to get the email and password
NSString *passwordFound = [KeychainUtils getPasswordForUsername:**self**->emailTextField.text andServiceName:@"My_app" error:**nil**];
**self**->passwordTextField.text = passwordFound;
**self**->usingSecureID = **true**; // a Bool I added to keep track
[**self** loginAction:**nil**];
[NSLog showWithStatus:@"Logging_In"];
});
});
} **else** {
*// User did not authenticate successfully, look at error and take appropriate action*
//I'm using a showAlert method to bring up a UIAlertViewController
[**self** showAlert: @"There was a problem verifying your identity." withTitle:@"Error!"];
**return**;
}
}];
} else {
// 2. Oops. There's a error!
*// Could not evaluate policy; look at authError and present an appropriate message to user*
NSString *title = @"Error!";
NSString *message = @"Your device cannot authenticate using TouchID.";
UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
*// do we need to return animation?*
}];
*// open your app in Settings*
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
UIApplication *application = [UIApplication sharedApplication];
NSString *settingTitle = @"Settings";
UIAlertAction* settingsAction = [UIAlertAction actionWithTitle:settingTitle style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[application openURL:url options:@{}
completionHandler:**nil**];
}];
[alert addAction:settingsAction];
[alert addAction:defaultAction];
[**self** presentViewController:alert animated:**YES** completion:**nil**];
**return**;
}
}
}
The post Refactoring: Face ID/Touch ID for iOS 13 appeared first on iT Guy Technologies.
Talk Abstract
Making successful apps is daunting. New skills must be attained. Choosing frameworks, and building safe code requires knowledge. This talk covers ways to acquire new knowledge, safe practices, and how to get the various parts of a project done. The work, as it turns out, is more than just code.
Talk Description
Being a successful developer can mean many things. You may want your apps to be used by many people—often, and with pleasure, surprise, and delight. You may also be looking to level-up your career or to teach others. Heck, you might even want to podcast about development. So, how do you get into the position to be successful?
This talk takes a look at techniques to level-up your mobile toolchain. I like to say it takes more than just code to make an app. In some ways, you need to be a multipotentialite. We’ll look at how you can use aspects of several sciences and best practices to tool-up for success. We’ll cover the reasons that make products successful, how to create a community, why it’s important to give back, and how to decide what to include (and what to cut). On the coding side, we’ll look at strategies for good code, technical debt, and project management. We’ll even look at brain science to find out how to retain all of this info and the skills you’ll need to be a success.
Notes
I am a mobile app developer, podcaster and artist. I have taught iOS dev, Swift and Objective-C. I’m currently a Development Manager – iOS at TD Bank. I also run iT Guy Technologies, a software development company in Toronto, Canada. I studied Fine Arts before there were Macs and I’ve worked for many years in software development, IT, graphic design, publishing and printing. I’m the founder, producer and host of the More Than Just Code Podcast — a podcast covering mobile app development & business and SpockCast a sci-fi pop culture podcast. Tim is also co-host of Roundabout Creative Chaos podcast.
I have given several talks over the years. I’ve spoken at 360iDev, Indie Devstock and Expo Canada. I spoken on iOS app development, developer skills as well as macOS and Unix basics.
Points:
The post Talk: 5 Ways to Level Up Your Mobile Development appeared first on iT Guy Technologies.