We're happy to announce the release of Coppice 2021.1, the first major update to Coppice. This release brings a raft of improvements to text editing, a canvas export feature, and numerous bug fixes. For a full list of changes check out the release notes, but we'll give you a summary below.
You can download Coppice 2021.1 by going to Coppice > Check for Updates… in Coppice's menu bar or by clicking the button below
The biggest improvements in Coppice 2021.1 are in the editor for text pages. With the initial release of Coppice we focused on implementing the core functionality you expect from a rich text editor, such as the ability to customise the font, the size, and the colour of text.
Coppice 2021.1 brings several new options for customising the layout of your text, all found in the new Paragraph Inspector. Firstly, we've given you more control over the spacing of your text with controls for changing the line height and paragraph spacing.
The big new feature though is native support for lists in text. You can now create bulleted and numbered lists, and even nest them several levels deep.
We've also fixed a bunch of bugs, including making the alignment control far more reliable.
We strongly believe that your data is your own, and part of this is allowing you to share what you create in Coppice with others and to use it in other apps. We already have full support for exporting pages from a Coppice document, but until now there hasn't been a way to export Canvases.
With Coppice 2021.1 we've start on the path to rectifying that by adding the ability to export a Canvas as an JPEG image. This is great if you have a Canvas you want to share online or with someone who doesn't have a Mac.
Improved Document Format
The last improvement is hopefully one you won't notice: future-proofing the document format. We occasionally need to change how Coppice stores your data in a document, usually to support new features. To ensure that an older version of Coppice doesn't accidentally corrupt a document, it will first check a version number in the document. If a version of Coppice encounters a newer version of document than it can handle, it refuses to open it.
This works incredibly well, but it's a fairly blunt tool. Thankfully, we've been able to make Coppice smarter, reducing the amount of times we'll need to update the document format in future, making the above dialogue a much rarer occurrence.
Unfortunately this change has necessitated updating the document version this time, so documents saved with Coppice 2021.1 won't open in version 2020.1.
What Took So Long?
Those who have followed this blog for a while may remember that we had hoped to get this release out before Christmas last year (indeed, we'd originally called this version 2020.2). So why is it only just being released in mid-February?
The answer is Lists. We had been working on the assumption that Lists would be relatively easy to add support for, as Apple's technologies actually do most of the hard work for us. We thought we'd just need to provide a UI for the existing list support and it would "just work™".
Unfortunately this ended up being way more involved than we had expected, requiring a lot more work on our end. In the coming weeks we'll be writing up a new Tech Talk article going into the details of what we had to do to get lists working, so be sure to subscribe to The Coppice Blog to get notified when that is released.
We're now looking ahead to the next release: 2021.2. We're only just getting started, but we'll be posting about our progress here and on Twitter, so be sure to follow @coppiceapp for updates.
Welcome to our first Sneak Peek post. Sneak Peek will show features that we're working on for the next version of Coppice. These features will often still be in development so are subject to change before release. In this post we'll look at the new Paragraph Styling options we're adding to Coppice.
Coppice 2020.1 already has support for text styling, allowing you to change the font, size, and colour of some text. However, the options for styling paragraphs is limited to just the alignment. Given the importance of text pages in Coppice, we wanted to focus our first update on giving you more flexibility.
When you edit a text page in the new version of Coppice, you will see a new Paragraph inspector on the right. It allows you to change 4 attributes of a paragraph.
The first is the alignment, which has been moved from the Font inspector (previously called the Text inspector). This has gained support for aligning text as justified, and has fixed a few issues with the previous implementation
Next are controls for line height and paragraph spacing. These let you adjust how much space is between lines of text or below each paragraph
Finally is full support for lists, from a simple bullet or numbered list, to nested lists with support for custom list markers.
We had actually hoped to ship these changes today as version 2020.2, but unfortunately we hit a few snags during development. So rather than rush the feature out we've decided to delay the release until next year (where it will appear as 2021.1). Giving you a quality update is more important than an arbitrary deadline
However, we were able to fix some bugs in Coppice so we've packaged those up as 2020.1.2, which you can download now using Coppice's built in software update, or from the Coppice website.
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.