Developear
All Apps Steps+ Twitter Contact RSS
Next Generation of Xcode
June 21, 2020
WWDC is tomorrow, and there has been some rumblings about what might be coming with Xcode - this tweet really got me thinking more - about Xcode, it's future, and what technologies is Apple blessing. What would a next generation Xcode look like? We do know there have been tons of rumors and demand for Xcode for iPad. This kind of raises more questions then it answers though.Here is what I think Apple is going to do tomorrow with Xcode:
Xcode for iPad ARM
But yeah, Xcode for iPad - although I don't think it is really the point - the point is the wholistic future of the IDE and developing...Read more
WWDC 2020 wishlist
June 13, 2020
While WWDC is remote this year, I still think we will see some large new features and improvements to the developer ecosystem. To be clear, this is my wishlist and not a list of predictions 😀.
- A real Xcode extension system
- Reduce the 30% App Store cut.
It'd be awesome if we could write more kinds of extensions for Xcode instead of some of the limited things they are available for.
There is a ton of possibility here for great developer tools to improve Xcode - and a lot of other IDEs have robust extension systems which developers love.
Obviously, this would be great...
Read more
Reflection on Steps+ after 6/7 years
June 7, 2020
I've seen a decent amount of talk around indie apps and how much success they've had monetarily, so I decided to do this post outlining some reflections on how Steps+ has done over the years. What I hope here is that people can learn about certain business model decisions, learn from some large mistakes I've made, and maybe learn a bit from some of the good decisions I've made.
Some History
I built and released Steps+ at the end of 2013 as an app I mostly made for myself - I really never expected to make much from it.The app was pretty simple (and in many ways still is) - it displayed...
Read more
iOS 13 Steps+ release
September 27, 2019
It was late, but I finally released my iOS 13 release (🎉) for Steps+. There isn't too much to report, but there were some interesting things - for one I was forced finally to upgrade from the old
UIAlertView
. I knew one of these days I was going to have to do so, and I finally removed the last from the app (glad to get rid of those pesky depracation warnings). Since Steps+ isn't my full time gig - I have to be very selective about what I work on with it, and what technical debt is the most pressing. I finally was taken to technical collections, but it wasn't too painful to pay that specific...Read more
Migrating UserDefaults to App Group
June 23, 2019
Recently, I decided to work on a few features for Steps+ that essentially require a lot of my the App's data be in an App Group. I began the endeavor by doing a quick Google search, which led me to a solution that I ended up modifying slightly and shipping. Here is the snippet I found.
As for the code I ended up shipping to solve this problem, It ended up looking like this:
final class Migrator: NSObject {
private let from: UserDefaults
private let to: UserDefaults
private var hasMigrated = false
init(from: UserDefaults, to: UserDefaults) {
self.from = from
...
Read more
Default Protocol Implementations are Dangerous
February 26, 2017
This problem has been written about and discussed briefly in a few forums, so I will only go over it as briefly as I can here; and then I will jump into a way the Swift language and/or compiler could potentially mitigate this issue. Because of this, I am gonna use a pretty simple and relatively contrived example. Let's get into it.
The Problem
Default implementations in Swift protocols are a fundamental part of how the Swift Standard Library works, as well as many other systems in our applications. They can be useful for adding behavior to existing types, or providing default behavior for...
Read more
Speeding Up Compile Times of Swift Projects
December 30, 2016
There are a couple of long-winded articles around about how to do this specific technique, however I have not seen anything quick and to the point. The first thing you are going to want to do is turn on Whole Module Optimization in Debug (by default, it is only on in Release).
Here are the optimization settings:
Before:

After:

The next thing you want to do is specify -Onone in Other Swift Flags in Debug like so:

This will allow Whole Module Optimization compile the whole module at once while also not doing any optimization of the code.
By using this technique, I have seen...
Read more
RemindBot
October 15, 2016
I recently released a new open source project that allows you to automatically comment on stale GitHub pull requests - it's called RemindBot. Check it out and let me know how you like it!
Phoenix
January 31, 2016
I released an Xcode plugin in the InitializeMe repo - called Phoenix. This allows you to select a couple properties and create a custom initializer filling out those properties. My main uses for this are for creating initializers for classes that only hold data, and for constructor based dependency injection.
Phoenix supports both Objective-C and Swift.
Installation instructions are available on the GitHub repo.
If you do not want to install a custom Xcode plugin - you can simply download the Cocoa app (currently called InitializeMe), in the same repo.
Preventing subclassing in Objective-C
January 9, 2016
For those of you still using Objective-C, I found a cool attribute that allows you to basically define final
classes. The attribute is
__attribute__((objc_subclassing_restricted))
For example:
__attribute__((objc_subclassing_restricted))
@interface MyClass : NSObject
The compiler now will prevent any subclassing of
MyClass
! Page 1 of 3 Next page