Tech Talk is a series of posts that will reveal some of the inner workings of Coppice. We couldn't have built Coppice without the amazing community of developers and designers on Apple's platforms who share their knowledge with others. Tech Talk is our contribution to that pool of knowledge.
In an earlier blog post we talked about how we designed Coppice to respect your privacy. One part of this was regarding the usage statistics we collect, which are handled by an open-source framework called Sparkle.
Sparkle is a framework for performing software updates. If you've ever installed 3rd party software from outside of the Mac App Store you have likely used Sparkle. It's so widely used as a developer can pretty much drop it into their app and it will handle checking for updates and then downloading, verifying, and installing those updates.
Another thing Sparkle allows for is collecting anonymous information about a user's system. If the user has opted in, it will send the following information to a developer's server when checking for updates:
The app name & version
The CPU type & subtype (e.g. Intel, Apple Silicon, PowerPC)
The number of CPU Cores
The CPU frequency
Whether the CPU is 64 bit
The amount of RAM in the system
The model of Mac
The OS version
The system language
This is all potentially useful information for a developer. For example, if an app is particularly memory intensive then knowing how much RAM your users have in their systems can help a lot in knowing how and when to optimise. And knowing the languages people use can help you know what localisations to provide for your app.
As we talked about in our blog post on privacy, two of the most important principles are minimising the amount of data you collect and being transparent about it. We care a lot about privacy at M Cubed Software so we wanted to go above and beyond with Coppice. Unfortunately, when it came to Sparkle, this presented a few challenges.
The first challenge was transparency. Sparkle shows the information that will be collected when you first opt in to automatic updates, which is excellent for transparency. However, there wasn't a way to view this information again later.
Data minimisation was a different challenge. We don't care about certain aspects of the data Sparkle sends. The only information we really care about for Coppice are the OS version, the CPU type, the system language, the app version, and the model of Mac. Now, we could have said "that's all we'll store in our database and we'll ignore the rest" and call it a day. But that unnecessary data would still be sent, it would appear in server logs, and Sparkle would still show we collect it. So we wanted to correct that.
One of the benefits of open-source software is if something doesn't work how you want you can always change it. So we opted to make some additions to the Sparkle framework (specifically the 2.x branch). So what changes did we make?
The first is the -[SPUUpdaterDelegate allowedSystemProfileKeysForUpdater:] method. Developers can implement this delegate method and return just those keys they want to collect. That way the keys they don't care about will never be sent to their server.
The second is adding the SPUUpdater.systemProfileArray property. This allows developers to get the same data that is displayed in the initial prompt (filtered by the -allowedSystemProfileKeysForUpdater: method) so they can present it to the user themselves at a later date.
These changes have now been merged back into the Sparkle 2.x branch so are now available to all developers. These features are what allowed us to create our "Learn More" sheet, which explains in detail what we collect in Coppice and why.
(As an added bonus, we also fixed a bug when reporting CPU Type on Apple Silicon. Sparkle will now provide the correct value when running on Apple Silicon)
We hope you enjoyed this first Tech Talk. We hope to add more updates over time to show more of the tools, technologies, and processes we use to develop Coppice. If you want to stay up to date with all Coppice-related news then be sure to subscribe to the Coppice Blog, follow @coppiceapp on Twitter, and sign up to the Coppice Newsletter.
Coppice runs on any Mac running macOS 10.15 or higher, and runs natively on both Intel and Apple Silicon Macs.
We're also happy to announce that Coppice Pro is available for purchase. Coppice Pro is an annual subscription that unlocks all the functionality of Coppice for just $19.99 a year. Upgrading to Pro will unlock:
Automatic Page Linking
Canvas Themes, and
This is only the start for Coppice Pro though, and we'll be adding new features and functionality your subscription all the time.
We want to thank everyone who has helped getting Coppice to where it is now, including Matthew Skiles who created the awesome icon, Steve Troughton-Smith for his many insights and suggestions during development, and especially to all of our beta testers who have provided amazing feedback and helped us squash bugs.
But now is the time to get Coppice into your hands and to see what you can do with it. We're pleased to announce that Coppice will be released on Wednesday the 25th of November. Be sure to mark the date in your diary and get ready to start cultivating your thoughts.
When creating a new app, a developer always has two competing desires:
To add as many features as possible to make the app as powerful as it can be
To ship the app quickly
This makes the initial release of any app a balancing act, finding the earliest point at which the app has enough features to be considered useful and worth releasing. However, this means the first release is just a fraction of the vision the developer has for the app. Coppice is no exception to this.
So far we've looked at what Coppice will be at launch, but in this post we want to explore what we want Coppice to become.
Last time, we discussed how going for a subscription business model means we can release features when they are ready, rather than saving them for a big paid upgrade. The consequence of this is we want to put out small, but frequent updates to Coppice over time. These updates can be more focused, adding or improving a single part of the app at a time. This gets updates to you sooner, without overwhelming you with a mass of changes at once. It also means we can get feedback on changes sooner.
This approach of more frequent updates doesn't gel well with the traditional versioning system of 1.0, 1.1, 1.2, etc. as the change going from 1.8 to 1.9 may be the same (or bigger) than 1.9 to 2.0. So instead we will be going for a year-based versioning system. This means the first version of Coppice will be version 2020.1 (the first release of 2020).
The Far Future
With Coppice 2020.1, we have deliberately kept things simple, focusing on the core functionality of the app to provide the foundations on which to grow going forward. We have many ideas of how to improve Coppice, so want to share some of our long-term goals here for 3 of the core concepts in Coppice: Pages, Linking, and Canvases.
It's important to note that nothing mentioned here is set in stone. Features we think are a good idea now may not make sense down the road. We also expect to receive a lot of feedback from our users after release which will shape Coppice in ways we haven't even imagined.
Pages are at the core of Coppice. They hold your thoughts and ideas. Pages are relatively simple in Coppice 2020.1, with basic editing functionality and just two types: Text and Image.
Over time we want to expand both the types of pages and the editing functionality. Some examples of new page types we're considering are PDFs, Markdown, Audio, and Video. With our existing types, we want to expand the formatting options available for Text pages and provide basic editing tools for Image pages
Linking is a key feature of Coppice, letting you represent the relationships between your thoughts and ideas. Coppice 2020.1 only supports adding links to a Text Page, but our aim is to support linking in some form from every type of Page. The obvious priority here will be Image Pages, allowing you to turn parts of an image into a link.
We also want to investigate more ways of having Coppice help find these links for you, and highlight potential relationships you hadn't considered.
We want to further enhance Canvases over time to help you better organise your thoughts and ideas. Key to that is improving navigation. We have many enhancements planned to make it quicker and easier to move around your Canvas and find the pages you want.
Our vision for Canvases is for them to be more than just a place to put multiple pages. Showing links between pages is the first step, but we want to explore more ways of adding to a canvas, from less formal forms of linking pages, to drawing notes and diagrams directly on the Canvas.
Canvases are also great tools for helping others to learn about a topic, so we want to provide ways to export Canvases so you can share them far and wide.
The Near Future
While it is fun to think about the distant future, it's worth looking towards the near future for releases: specifically the rest of 2020.
First, we are hoping to announce the release for Coppice 2020.1 in the next few weeks. Be sure to subscribe to the Coppice Blog to be the first to hear about it.
Secondly, we would like to get a follow up release (2020.2) out before the end of the year. The focus here will be on some improvements to editing Text pages (in particular adding support for lists) and responding to any early feedback from the launch.
We're excited to finally be approaching the final leg of our journey in releasing Coppice, and to start work on the next journey of adding new features and functionality. We can't wait to get Coppice into your hands and start hearing what you want for the future of Coppice!