Introducing YarnBuddy

YarnBuddy, my new app for knitters and crocheters, is now available on the App Store! I’ll go ahead and get down to the deets.

Features

YarnBuddy is a project tracker and a row counter. That means its primary job is to help you keep track of all the knitting or crochet projects you’re working on (or have worked on in the past) as well as where exactly you left off on each one. Its secondary job is to help you keep an inventory of all the yarn you’ve acquired (there’s always so. much. yarn. ?).

Projects can either be “in progress” or “finished,” or you can optionally move them to the “Archived” section if you don’t want to see them in your main list.

You can import patterns from the document picker, your photo library, or a web page. I’m hoping to add the ability to import PDFs from your Ravelry library in a future release; however, I don’t really have any experience working with web APIs and OAuth, so it may take awhile for me to figure it out!

My favorite feature of YarnBuddy is the little drawer/sheet for row counters that appears at the bottom of a project’s detail view as well as its pattern view. You can add as many counters as you want, link them together, set them to repeat a range, change their color, and more. You can also expand a single counter to fill up the entire screen.

YarnBuddy allows you to add up to 10 projects and unlimited yarn for free. YarnBuddy Pro is an optional subscription that adds the ability to create unlimited projects, add tags and due date reminders, create notes with rich links for projects or yarn, add row alerts, and change the app’s icon. There is also a one-time purchase option with no expiration.

Development

YarnBuddy was built using Core Data and is almost purely SwiftUI, with the exception of a few wrapped views: UISearchBar, UITextView, UICollectionView, and UITextField (because I needed to add an accessory view with a “Done” button to dismiss the numberPad keyboard). I also had to wrap the system pickers for documents and images.

Using an app-wide gradient in the navigation bar required fiddling with the UIAppearance APIs which are also foreign to SwiftUI.

Overall, creating a new project using SwiftUI was a blast, and I highly recommend it. However, I can’t imagine completely rewriting a UIKit app in SwiftUI. The two frameworks require such drastically different mental models for data flow that I get a headache just thinking about it!

YarnBuddy on iPadOS 13

What’s Next

I’m already working on a big update for iOS 14 that will include a modern iPad UI, a watch app, and a widget (at least, that’s the plan!). I also have an enormous list of feature ideas that may or may not make it into the next release, from data export and time tracking to ways to share your progress on social media. Finally, I’m going to think long and hard about clicking that “Mac” checkbox in Xcode. If everything else is shaping up well for the fall, I would absolutely love to bring YarnBuddy to the Mac.

Well, I think that covers everything for now. If you’re in my target audience and have feature requests/suggestions, I’d love to hear ‘em!

Indie App Sticker Pack

On May 22, I tweeted about how it would be really cool to be able to order an indie app sticker pack, since developers aren’t able to exchange pins and stickers this year at WWDC.

Later that day (!), Nathan Lawrence and Sam Gold, developers of Twitter client Nighthawk, began turning that idea into a reality. What came next was a whirlwind of collecting icon assets from 90 amazing indie developers and compiling them into a beautiful set of physical stickers that you can order today, for the low low price of just $12.99. (I want to be clear: I had nothing to do with this, it was all Sam and Nathan! And also Charlie Chapman, who made the awesome intro video.)

This is an incredible collection of icon artwork. 50% of proceeds will go to the World Health Organization’s COVID-19 Solidarity Response Fund and 50% will go to the Equal Justice Initiative. Honestly, this is probably the coolest thing I’ve ever been a part of.

Decorate your gear, fight racism, fight COVID-19, gain back a little missing piece of WWDC… what are you waiting for?! It’s on sale for one week only, so head on over to indiestickerpack.com and order yourself some sweet indie swag. ❤️

Finding the Right Fit

There aren’t many knitting apps on the App Store, and I’m not sure why. There are a couple dedicated to teaching you how to knit, a couple that will help you find knitting patterns, and about eight that could be classified as knitting tools (crocheters, just replace the word “knitting” with “crochet” and everything still holds true).

Of those eight apps, exactly zero of them look like native iOS apps. They all have custom interfaces that seem hellbent on ignoring as many platform conventions as possible. One of them allows you to create a new project by tapping an ordinary tab bar item instead of using a modal view. A few of them pop up full screen ads seemingly at random as you tap around the app. Despite these annoyances, most of them have very good reviews from real people who genuinely find them helpful. But they could be so much better. So why aren’t there any beautiful, well-designed knitting apps?

I have a few theories. The first is that there aren’t really any companies that would be incentivized to build such an app. Red Heart, a yarn brand, isn’t going to hire an iOS dev team. It just doesn’t make sense. There is no software company dedicated to making digital tools for the fiber arts. And while I’d wager that there’s actually a fairly significant overlap between programmers and knitters, the overlap between knitters and independent iOS developers is extremely small, and perhaps is just me (and I don’t even know how to knit…I just crochet!).

Then there’s the possibility, of course, that there’s no demand for such a product…but I don’t believe that. Not when there’s so many reviews on similar apps. Yes, there’s a sense in which knitting and crocheting should be decidedly analog activities, but I believe there are ways that technology can help without getting in the way: think voice commands for controlling a row counter, or a row counter right on your wrist as an Apple Watch app.

One good comparison would be a recipe app where you can add notes to the recipes. That way, when you returned to a recipe to make it again, you could easily see what modifications you made last time. Knitting patterns are like that too, especially if you’re creating a garment in a particular size. Things like notes and photos can be really helpful.

There are also a handful of apps on the App Store that act as clients for Ravelry, the largest online fiber arts community. Ravelry has around a million monthly active users. People use the site to add patterns (both free and paid) to an enormous community database, catalog their yarn stash, share what projects they’re working on, and discuss all kinds of topics in the forums. It’s essentially a social network for knitters and crocheters (you have your own profile, can add friends, etc.).

When I think about where YarnBuddy will “fit” in the world of knitting, crocheting, and apps, I’m hoping to position it as a handy tool for keeping your place in a pattern as well as an offline alternative for tracking your projects and yarn stash. Of course, I also want it to eventually work with Ravelry, using its API to import pattern PDFs (I don’t think that will make the 1.0, though). Finally, I want it to be beautifully-designed and a delight to use.

I’m both excited and terrified to find out if there really is a place for an app like YarnBuddy. The anecdotal data I’ve gathered from friends and family so far has been encouraging. If I’m successful, I have the chance to become one of two or three major players in this niche, and that’s pretty darn exciting. For now I’ll just keep chugging along, making an app that I’d want to use myself and hoping for the best!

More WWDC 2020 Wishlists

Michael Tsai, the master of round-ups, has begun a list of WWDC wishlists, including mine. However, I wanted to highlight a couple of excellent wishlists that I only discovered because they linked to mine (yay for pingbacks!).

The first is by Steve O’Dell, who helps run a Girls Who Code after-school program at Bacon Elementary School in Colorado. His wishlist stems from a desire for Apple to once again become a major player in the education space.

Did you know that Apple has coding club packages that are (potentially) every bit as good as Code.org or Girls Who Code? If you don’t, it’s because the links to find it are all over the place, links to older versions haven’t been taken down yet, and instead of providing a club portal that does some of the admin for you, they aren’t much more than a PDF telling you how to get started and then leaving it up to you to execute.

I definitely did not know that. Apple has clearly committed itself to the areas of health and accessibility. Education seems like an obvious “third leg” to an overall strategy that seeks to improve global well-being. Health, accessibility, education. If I was in leadership at Apple, that’s what I would focus on.

The next wishlist I wanted to share comes from Daniel Andrews. It’s a great list; some of my favorite things are feature parity for Messages across platforms, the return of the magnification loupe, making better use of the iPad status bar, and improvements to search on iPad. He also mentions some specific improvements to Mail:

Better priority/VIP notification settings, snoozing emails etc would go a long way to making the default ‘good enough’ for most folks.

I would also add to that the ability to create Smart Mailboxes on iOS (as John Gruber mentioned), a search function that actually works (I can go to Gmail on the web and find what I’m looking for almost immediately. Mail usually comes up empty.), text formatting tools that aren’t all hiding behind a single button, the ability to easily see which email address an incoming message was sent to from the unified inbox, and yeah, something better than flags for assigning message priority.

E-mail should be so much smarter. How about a “This Week’s Newsletters” folder? How about a way to view all recent attachments? An email from the pharmacy that a prescription has been refilled and is ready for pick-up should automatically be transformed into a to-do list item in my app of choice. All of this should be possible. And that’s all I have to say about that!

Keep those wishlists coming! I’ve really enjoyed reading them.

My WWDC 2020 Wishlist

As of today, Apple’s first-ever online-only version of WWDC is 40(!) days away. As always, I’m incredibly excited to see what Apple has in store for us (although I must say, I’m really disappointed we don’t all get the chance to own a WWDC 2020 jacket and pin set…?). And since YarnBuddy is written entirely in SwiftUI, I’m particularly looking forward to the next iteration of Apple’s new declarative UI framework.

I’ll go ahead and divide my wishlist into “SwiftUI” and “Everything Else.”

SwiftUI: Missing Pieces

Most of my issues with SwiftUI boil down to 1) Missing UI elements and 2) Missing customizations. Here’s a run-down of what I’m looking for in SwiftUI 2.0:

  • A collection view of some kind
  • A multi-line editable text view
  • A search bar
  • The ability to manage which object is first responder and to resign objects as first responder
  • Accessory views for TextFields/TextViews
  • Inactive/destructive states in Context Menus
  • Context menu preview-providers (for showing a custom preview on long-press/right-click)
  • Style parity with UIKit, including the new system colors and materials, the grouped inset table style, and the appearance APIs for styling things like navigation bars,tab bars, etc.
  • Correct state restoration for TabViews and a fix for the frame delay/flash when switching tabs
  • A way to prevent modals from being dismissed by dragging (and/or a full-screen modal style)
  • A way to read the scroll position of a scroll view
  • Smoother interoperability with QLPreviewController and PencilKit

Everything Else

I would really like to see an easier way to support the native Apple Pencil mark-up tools in PDFKit. In addition, I would love to see:

  • A complete re-design of Mail. There is no perfect e-mail client, but like, maybe Apple could try or something?
  • A system-wide color picker in iOS. It’s bananas that I can’t select some text in Apple Notes on my iPad and change its color. From what I can tell, every single Mac app has access to the color picker. As the great 21st-century philosopher Shia Labeouf once said, “JUST DO IT!” ?
  • Apple Watch sleep tracking. There are great apps for this, but I’d like to see Apple’s take on it as well.
  • Some sort of IDE for iPad that would allow me to work on my Xcode projects with some limitations. If I have a project that’s SwiftUI or UIKit with no storyboards and the only third-party dependencies were installed via the Swift Package Manager, I would expect to be able to edit and preview projects in this app. Could I release them straight to the App Store? Maybe not. Could I run the apps on an attached device? Maybe not. I just want to get some work done, yo.
  • More home screen customization. Let us have an empty row at the top if we want. Give us some widgets. Allow for some chaos. Set us freeeeee.
  • De. Fault. Apps. Let me change them.
  • A way to automatically put my Apple Watch in theater mode at night so I don’t accidentally blind myself every time I move.
  • A revamped iPad multitasking system (yep, just do it again until it’s right) that isn’t big ol’ hot mess. Make it so my 4-year-old can figure it out.
  • Third-party Apple Watch faces (ahahahaha).

I think that’s all I have. If I think of anything else, I’ll throw some edits down below this paragraph. Now it’s your turn: what do you wish for this year? I always love reading everyone’s wish lists, so feel free to tweet them at me or mention me on Micro.blog.

The Great Slowdown

“Even a minute of breathing can reduce stress,” my Apple Watch says, nudging my wrist gently. I dismiss it with a huff. Who even has a minute, right? The one-year-old wants to nurse, the four-year-old wants to build a block tower—no, wait, have a snack—no, wait, turn the TV on—actually, could I get him a different shirt? The one he’s wearing got slightly wet. Or maybe it’s the wrong color. Actually, it just has a loose string…could I cut that? I didn’t cut it close enough, he can still see it. And so on and so on until I collapse into bed at night (next to the one-year-old, because we’ve decided to co-sleep).

So far, the coronavirus has not made my life any more hectic (I realize I’m in the minority here!). I’m a stay-at-home mom, married to a farmer, with two kids who are too young to go to school. My family is used to being around each other, though I’m not sure we’ve fully appreciated that until now.

Lately I’ve been feeling anxious about my new unfinished app, YarnBuddy. I’ve been dying to ship it but I can only work on it a handful of minutes per day, and that’s starting to get frustrating. A couple days ago I paused to consider why I’m in such a rush to get it done. The answer was slightly uncomfortable: I’m hoping it’ll make good money, of course, but even more so I crave the attention I’ll get for releasing an app, and the recognition I’ll attain if it’s actually any good. How silly! (And yet, how human-nature-y!)

I’m giving myself permission to slow down now. I don’t need to release this before WWDC. I don’t need to release it until it’s done. One thing I’ve learned from all of this is that a lot of things can just. freaking. wait.

A high school friend posted two pictures of her calendar on Facebook: one from last month, and one from this month. Her February squares were densely-packed with hand-written appointments and activities for her, her husband, and their three children. I noticed she had scheduled date nights for her and her husband, and a special day for family time. Partway through March, it all just stopped. A sea of blank white squares. Blessed nothingness.

For decades it seems we’ve all been screaming for a slowdown. Time flies, we say wistfully. Our children grow too fast. They don’t get enough time to just be kids, instead spending their precious childhood years rushing from one activity to the next. We’re all too busy. We need more time to spend with our loved ones. We need more time.

And now it seems the world has hit the pause button. Things are frightening, and uncertain, but also quiet. Slow. Many of us, all over the world, have been given the gift of time. You don’t have to do anything monumental. Sit on your butt, if you can. Relax, if you can. Parents, did you know that people who homeschool their kids usually only spend 2-3 hours a day on schoolwork? You don’t need to schedule every minute until the 3:15 bell rings. Play with your kids, hug them, enjoy them. Read, play games, dance.

Listen to your watch when it tells you to breathe. You have the time.

Shaken Faith

Late last night I blogged about how the general atmosphere of the Apple community has been bumming me out lately. That post garnered quite a response (much bigger than I expected!), with many expressing agreement and decrying the whole industry that seems to have been built around fashionable, clickbaity Apple hate.

My post lacked a bit of nuance, though, and I have a few thoughts I’d like to add. First, I want to make it clear that I don’t think that everyone who is hypercritical of Apple is a “hater.” It’s quite the opposite, I know. When you really love someone, you want them to be their best self. And if they’re struggling, you want to help them become their best self. Fandom isn’t a whole lot different in that respect. People just want the nerdy things that they love to continue being awesome. That’s not hard to understand.

A lot of people in the Apple news and developer community have big audiences and big opinions. They have popular apps and blogs, news sites and podcasts, and Apple employees read and listen to them. With great power comes great responsibility, right? I don’t blame these people for feeling like they should use their megaphone for good: to convince Apple to turn from its erring way, to listen to its most ardent fans, to “get its poop in a group,” as my high school theatre teacher liked to say. Personally, I’m glad these folks speak out the way they do.

The problem is, since our conversations with Apple are generally one-sided, things tend to escalate during the quiet periods between major announcements. We’ll start by calmly stating our opinion about how some OS or hardware feature is broken or missing or confusing or whatnot. And then, since we don’t know if Apple is really aware of what we’re saying (they are) or if we do, we simply don’t trust them to do anything about it (ah, there’s the issue!), we just yell louder. And more frequently. And there’s more handwringing and hyperbole and everyone just feeds off of each other until it’s just this thing, you know?

So then, there’s a lack of trust. Our faith in Apple to do what’s in the best interest of its customers has been shaken. The era of “customers would just ask for a faster horse, so it’s up to us to show them what they really want” as a business strategy is over. Apple tried that with its Mac line-up, and brought upon itself the wrath of Mac users, who, in fact, really did just want a faster horse. And they wanted it yesterday. With more ports. And an SD card slot.

I think Apple is trying to be a better listener. We can help them be their best self by writing thoughtful blog posts, having thoughtful discussions, proposing thoughtful solutions, and writing thoughtful software. Why did I say thoughtful so many times? Because there is value in infusing everything we do and say with empathy. Every word, every feature, considered.

Apple is a big ship. I’m not a sea captain, but I’m guessing it’s not easy to maneuver a big ship. To continue with this metaphor, it seems like some of Apple’s attempts at course correction have been akin to throwing deck chairs off the Titanic. They just didn’t help. Complex, systemic problems call for systemic solutions. Sometimes they call for leadership changes. The question is, does Apple think it has deep systemic problems? Or is its judgment, as I hinted at in my last post, clouded by hubris? We’ll find out one way or another eventually, I suppose.

My favorite response to my original post was this, from Matt Thomas (@mthomas): “…when I start to feel like this, I find the best resolve is to get off social media and make something.” Amen. In closing, that is my wish for all of you: that you would experience the joy of getting off social media and making something. ❤️

[As one last aside: I know I said “we” and “our” a lot in this post, but I obviously don’t mean to speak for everyone. The range of opinions in this community is huge, so yeah…you do you!]

Apple Malaise

Maybe it’s just me, but the Apple news/developer community seems to have settled into its own particular, cozy brand of misery as of late. And sure, 2020 is off to a bit of a slow, dismal start––it appears the world is going up in flames, both literally and figuratively, and the Apple rumor mill, which once brought us a bit of cheer throughout the winter doldrums, is now greeted with a general sense of weariness and indifference.

The 10th anniversary of the iPad’s unveiling really cracked open a can of worms. From John Gruber’s pointed criticism of the current iPad multitasking situation (which I agree with) and Ben Thompson’s The Tragic iPad to the more general Six Colors 2019 report card, the disappointment in the air is thick. I think it was Marco Arment who said, on a recent episode of ATP, something along the lines of “the technical foundation at Apple is rotting.” Nobody wants a rotten Apple.

And yet, here we are. Oh how I wish I could have been an Apple fan in its glory days. And how awesome would it have been to be a developer during the App Store gold rush? Alas, I’ll never know. I’m stuck with today’s Apple, a vast and unwieldy mega corporation that has all but lost sight of what made it great. What happened? How did we get here? I’m not sure, but if I had to guess, I’d say it probably boils down to hubris. Most things do. I have always felt that greatness necessitates humility. Confidence and humility are not mutually exclusive and both great design and great execution require both.

Anyway, I’ve digressed. All of this is really just to say that I’m feeling pretty bummed about all the pessimism in my favorite community. I’m not saying any of it is unjustified—just that I’m bummed. And what can we do? File radars? Write blog posts? Complain on Twitter? Yes, and these things we will continue to do, shouting passionately into the void.

I like to imagine that indie developers have an opportunity to show people what Apple used to be. That it’s up to us now to think different. To work within and around all of our crappy constraints and ludicrous App Store rejections to share something beautiful and cheerful and functional with the world. That even if Apple fails to stay true, we can somehow carry on its mission…

Well…okay. Maybe not that dramatic.

At least they fixed the damn keyboards.

~Fin~

Status

Inktober 2019, Day 31, “Ripe”

And that’s a wrap for Inktober! It was a fun addition to my daily schedule and I’m pleasantly surprised that I managed to complete it without missing a day. Now, back to coding! ?