When testing StoreKit connected directly to XCode, you need to have your .storekit file open and then use the debug menu to test purchases.
This is the first time I realized that the menus changed what they have in them dependent on what file you have open. This also means when you go under Editor menu that also changes too.
This caused me to go in circles on why clearing Tester purchases in App Store Connect wasn’t working.
My girlfriend is part of a bowling league and every week she writes her scores down on a piece of paper. After seeing her do this for many seasons of bowling I’ve decided I would build her a simple mobile application that she can enter these scores into.
If you have a iPhone with iOS 15.6 or higher you can direct message me on twitter (with your email address, and first and last name) and I’ll invite you to the TestFlight. I’m planning on running this TestFlight beta until mid November 2022.
When you have to use UserDefaults to share data between a core app and a widget you have to do a couple of things.
Inside of the project Signing & Capabilities use the Add Capabilities button to add App Group. You need to do this while selecting both the app target and the widget target.
extension UserDefaults {
static let custom: UserDefaults = {
let appGroupId = "group.tech.justins.BowlingScoreTracker"
return UserDefaults(suiteName: appGroupId)!
}()
}
Now anywhere in the app where you set or get from UserDefaults just use .custom instead of .default. And that will synchronize across both of them.
Apple’s built in stepper allows you to only have one step increment value, I’ve designed on that allows for two different increment values. Initial version supported 1 and 10 for the step values and is tied to an integer.
When building a page with a Linear Progress bar, I thought it should have been partially filled and it wasn’t filled at all. Turns out it expected value to be between 0-100 and I was assuming it would have been 0-1. Best to check the documentation over just guessing, but we all know developers hate reading the documentation. So best do some tests to see which range it expects.
When you want to debug certain sections of code with in an environment without restarting Apache or NGINX, there’s a template I use for displaying print messages.
When you use Measurement format function in Swift it will always format the temperature to the format of the locale of the device. This is not the experience I wanted in my application. I wanted to provide the user an option to chose which scale they wanted to use, so I had to override the format operation. I used the following function to make this happen.
Some of the biggest things that bug me as a user of software is how they handle errors. Apple has been known for silently handling errors and not telling users that something went wrong, this is bad. Another example of bad user handling is how Git Kraken handles theirs, they have a toast in the lower left that disappears after a duration of time. Both of these are really frustrating to the user of the software.
The best way to handle errors is to provide clear and copy-able error messages for your user. You could provide this using an alert, clearly visible logs, or a (persistent until dismissed) toast message in the corner. How ever you do this, provide a way that the user can take the error to Google afterwards. I prefer the alert method so that I am forced to acknowledge that an error has occurred.