AppDeveloperKit – reusable, configurable Swift classes for iOS

Introducing AppDeveloperKit

I’ve completed the initial release of a project I’ve been working on called AppDeveloperKit.   It is a tool for iOS developers to assist in developing reusable, configurable Swift classes.

Properties are declared in classes and coded to affect appearance and behavior. The values for these properties are stored in a property list (plist) file. A macOS app provides a UI to edit these properties in real-time as an app is actively running on a device or simulator.  An iOS framework coordinates access to the plist file and communication to the macOS app.



This is a list of the main features that AppDeveloperKit offers:

  • Edit the appearance/behavior of an app while it runs on a device or simulator.
  • Store property configuration in a plist file in your project.
  • Easily integrate with supplied iOS framework and a few lines of code.
  • Manage multiple projects/classes/properties with the macOS app UI.
  • Supported property types include UIColor, String, Bool, Double, Int.
  • Describe properties with JSON.
  • Library mode facilitates distribution of your configurable code via CocoaPods.

Looking for testers

I am looking for early testers for AppDeveloperKit. If you are an iOS developer who is interested, please contact me at


I’ve created some detailed documentation for AppDeveloperKit at

The documentation includes setup, examples and how to use the tool to create libraries of components.

There is also a video that gives a demonstration on what AppDeveloperKit can do.  It is a little long at 3 1/2 minutes, but worth watching to get a good feel for the tool.


The inspiration for AppDeveloperKit came from a couple of sources.


At my last company I created a tool called Mystique that would allow a standard (templated) app to be built in 5 minutes from the design input.   The app details were  specified with a web form front end that output a JSON configuration file.  This file was used by a Ruby script, with help from fastlane and API interaction with Bitbucket (GIT repo), to clone and setup a new app.  The JSON configuration file was also used at runtime by the app to configure functionality and appearance.

Mystique was a nice tool, but the web design form was a little rigid and app configuration was limited to what was already built-in.

Dash and DTBonjour

I use Dash extensively for iOS documentation and code snippets.   While I use Dash primarily on my Mac, there is also an iOS app that can be used.   I was intrigued with how the Dash iOS app could communicate in real-time with the macOS app.  Looking further into the Dash iOS source, I discovered it was using a project called DTBonjour.

DTBonjour is software that makes it easy to add real-time communication to your project.  It uses Apple’s Bonjour technology for device discovery and sockets for the networking layer.  DTBonjour works on both macOS and iOS and there is a blog post describing an example chat application available to help one get started.

AppDeveloperKit Concept

With AppDeveloperKit I sought to borrow and expand on the concepts I used in Mystique.   Rather than be limited to a rigid configuration space, I wanted to allow a developer to specify their own properties for configuration.

For more power and convenience in using a design form input, I decided to use a macOS app for the UI.

Instead of a JSON configuration file, I chose to use a property list file that is managed by a framework that an iOS app includes.

To allow more rapid iterations with the design configuration, I made use of DTBonjour to allow live interaction between the macOS app and the iOS app.   After instrumenting the properties that should be configurable, a developer can now quickly see changes on a running iOS app as property values are changed in the macOS UI.   This configuration can then be saved by the macOS app directly to the developer’s project directory as a plist file.


I would be happy to hear any feedback about the AppDeveloperKit concept.

You can learn more at and reach me at if you’d like to help me kick the tires!






Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s