Hi!

I’m Dmitry Rodionov, a macOS developer and software solution provider.

👋 Hire me

I’m available for hire!

I work in plenty of different areas: from low–level system utilities and reverse–engineering to rich user-facing Cocoa applications and Sketch plugins.

I do care about the end product and take pride an all of my work, no matter if it’s a simple script or a complex software system. Everything I do is crafted and polished to perfectly fit your business needs and make you happy, no less.

I’ve been building Mac and iOS solutions since 2011, working on dozens of projects: as a contractor for software shops (Mental Faculty, Apparent Software, ZipZapMac, farmerswife), as a collaborator with design studios (Jacob Ruiz Design, Eden Vidal, Angelo Milanetti, Lstore) and as a solution provider for a lot of companies around the globe (Upward Mobile LLC, DEVV.IT AB, LenoFX, Element TwentySix, ProtoDype Limited — just to name a few).

Drop me a message and let’s create something great together!

✨ Profiles

🤖 Projects & Experience

Keywords

Objective-C, Swift, C, Cocoa, AppKit, Sketch, Sketch Plugins, CocoaScript, Foundation, CoreData, Sandbox, Accessibility, UX, reverse-engineering, testing, Ruby (for Rake mostly), probably some Python.

Mac

Remember the dark times when Interface Builder and Xcode were two separate apps, 32–bit runtime required you to @synthesize your properies manually and all Cocoa programmers had to know when to call -autorelease on things? Yep, I was there.

Things have changed drastically since then: now we have pleasant developer tools, new awesome programming languages and a lot of documentation (well even Apple has a blog on Swift!).

But what remains (somewhat) the same is AppKit and I really enjoy working with this beautiful beast. My secret is that I always keep a disassembler window open with AppKit.framework loaded into it 🌈 This way I’m sure I know what happens under my feet; how to avoid this and work around that.

I also understand how macOS works on the low-level (multithreading, sandboxing, XPC, SIP, launchd, you name it) and this knowledge often serves me well when I build any non-trivial software system that is environment-aware.

Here’s a few public macOS projects I took part in recently:

Shotty Done Time Studies for Mac
MemoryCleaner Trickster ImageFramer
Daruma Ensembles Your project here

iOS

Sometimes I help my clients with iOS applications as well by building new features or solving puzzling issues and refactoring the codebase.

Archiver Studies for iOS File Manager
AVPlayer Your project here

Sketch Plugins

I love Sketch. But even more than that I love writing plugins for this tool because it gives me an ability to utilize my Cocoa-fu and, at the same time, to fullfil my need for a challenge: it’s a normal situation for me to spent a few hours reverse-engineering Sketch.app in order to figure out how it works internally so I can do the impossible possible.

As I just said, I prefer building Sketch plugins with the native toolchain: Objective–C (or Swift) and Cocoa. This empowers me to create any UI I need without struggling with CocoaScript’s poor (read, nonexistent) xib/storyboards support and general luck of important features. I also like types, so anything JavaScript-ish is not what I’m comfortable working with on any non-trivial project.

Here’s a few of publicly available Sketch plugins I built recently:

States 7 Columns Calendar Creator Symbol Navigator soon!
Your project here

By the way, States is open–source. I heard that some internal parts of Auto Layout for Sketch were based on its code ✨

I learned a ton from the community so it feels great to be able to give something back by sharing my knowledge and experience with others!

Reverse–Engineering & System Internals

A few years ago I was very curious about the low-level stuff: dynamic code injection, dyld tricks, function hooking, etc. I’ve also started to dig into implementations of libraries and third-party applications via reverse-engineering in order to figure out how they work and how I can replicate them, or (in case of system libraries) work around some unexpected behaviour.

Believe it or not, but the stuff I learned while doing all of this actually helps me almost every day. Especially when working on Sketch plugins where I need to know exactly how and why Sketch works internally.

I have a plenty of low-level libraries and research projects on my GitHub. Among them are:

🎓 Education

I have a bachelor’s degree in Computer Science from Tomsk State University. My thesis was on building a prototype of Ruby virtual machine bytecode decompiler.

💈 Other

I live in Saint Petersburg, Russia. Also, dogs are good.