I tweeted about the 2.5.3 release of Marked 2 a couple of months ago. Overall, it’s been a popular update, but a mysterious crash for a non-trivial portion of users consumed some time. I’ve finally solved it1, and pushed out the 2.5.4 update to direct customers. A note for MAS customers in a bit.

Update: Marked 2.5.4 is now approved in the MAS as well. (Feb 13, 2016)

New stuff

In addition to the major features of Marked 2.5, the latest version adds a few new ones:

  • An option to include/exclude image captions from word count
  • Error navigation (next/previous) for spelling/grammar add-on
  • Shows the text zoom level in title bar when not at 100%
  • A MARKED_CSS_PATH environment variable for custom processors
  • Option to detect and style RTL text per-paragraph in document

That last one is handy, as it allows a document to contain both Arabic and Latin sections in the same document. RTL paragraphs have some default styling applied to them, but also receive a class of .rtl which can be used in custom styles and global CSS to adjust them per theme.

Fixed stuff

There are also some fixes/improvements to note:

The new spelling/grammar checker (In App Purchase) handles language detection per-paragraph — a feature that was well-received — but UK users were getting shafted because it would default to US spelling (e.g. “colour” would show up as a spelling error). This is fixed! The default language now properly recognizes the system region settings.

For advanced users writing their own pre-processors, there was an issue where the preprocessor would run before included files were compiled. This is fixed now, so a multi-file document can be pre-processed in its entirety.

There are some improvements to Outline Mode, primarily the ability to export an outline to HTML and PDF properly.

I had also caused some slowdown in link validation (yes, Marked can check all urls in your document to make sure they’re valid) when I worked on improving its flexibility with edge cases. The latest update restores the speed and alleviates blocking, so long checks run in the background without freezing the scroll or beachballing.

For security, all update-related endpoints in the direct version are now secure HTTPS connections.

MAS Users

Version 2.5.4 has been submitted for review. Apple had approved 2.5.3, but after discovering the crash in the direct version, I pulled it from release. It took me longer than I thought to fix the issue, but the versions should reach parity soon.

The first 2.5.4 build I submitted was immediately rejected (well, once it moved out of a 3-day “Waiting for Review” period) for having a “temporary exception that we’ve deemed unnecessary.” It was something that I’d added multiple versions ago and that had always been approved without issue. I’ve had a few builds rejected over the years, and they’re almost always for inconsistent reasons. That’s another post.

System Integrity Protection and Custom Processors

The main issue that the App Store version has developed – as of El Capitain – is that binary custom processors such as Pandoc and MultiMarkdown cannot be executed by Marked without disabling System Integrity Protection. Because I absolutely do not want to require users to remove security features system-wide, I’m offering a free cross-grade to the direct version, which doesn’t face this issue. Script-based custom processors and Ruby/Python libraries still work2, but if you’re using a binary, feel free to contact me about moving your license to the non-Sandboxed version.

Thanks to all the Marked users who offer feedback and suggestions, and especially to those who were so helpful in tracking down the cause of the crashing bug.

Next Up

When I’m not working on the successor to nvALT (which will be called BitWriter, and there will be a beta list available for signup soon), I’m dedicated to finishing the rewrite of Marked 2’s RTF export capabilities. Hopefully I’ll be able to juggle both and get them out sooner than later…

Marked is currently on sale for $9.99, and if you purchase on the MAS now, you’ll get the above feature updates for free as soon as it’s approved!

  1. In fixing recognition of en_GB settings, I had changed a CFStringRef to a bridged release without removing the following CFRelease on the pointer, all in a background thread that made crash logs less than helpful. 

  2. Just set your custom processor to a system interpreter (e.g. /usr/bin/ruby) and set the path to your script in the argument field (with spaces escaped).