SpamSieve 3.1.3 improves the filtering accuracy of my Mac e-mail spam filter. It works with the new MailMaven e-mail client and includes enhancements for notification and server junk filters, along with various other fixes and improvements.
Some interesting issues were:
The Mail extension API is only supposed to send the extension messages to filter “when it downloads a message,” but some customers were seeing it try to filter draft messages that were created locally on the Mac. Why would the user ever want those to be touched (FB17547044)?
One customer also reported that Mail sometimes doesn’t send the extension the correct message data. The headers are modified and reordered so that if SpamSieve sees the same message again later it thinks it’s a different message. There’s an experimental workaround for this, but it’s not clear why it’s only happening for this one user. There were several similar bugs in previous versions of Mail (where it would simply omit some of the message data when communicating with the extension), but those were much more widespread and easy to reproduce.
A longstanding problem, which we’ve worked around, is that sometimes Mail stops sending new messages to the extension to be filtered. I think there are multiple causes for this, but one that’s 100% reproducible is that it never works if the app owning the extension is launched after Mail itself (FB17368083).
SpamSieve uses SQLite.swift to read Mail’s database, and in rare cases it was crashing when the database wasn’t as expected. This is because there are several places where SQLite.swift is type-safe at compile time but not at runtime. It’s not safe to subscript a Row
from the database, because if the column isn’t present or is unexpectedly NULL
it will force unwrap and crash. There’s a corresponding get() throws
API that looks like it will be better because it reports errors, but to my surprise that also has some internal force unwraps. I had thought that by telling it that a column was a URL?
it would give me a nil
if the string was not a valid URL. But, actually, it does URL(string: stringValue)!
(and similarly for Date
and UUID
). I think the only safe thing to do is to read types that SQLite can natively query and convert them at the application level.
In some cases, Core Data was spending a lot of time repeatedly reading the store’s options dictionary, and this was bridged from Swift so it got bogged down in swift_dynamicCast()
. This all goes away if I give it a real NSDictionary
.
This version includes the previously mentioned local network privacy fix.
Previously:
Apple Mail Core Data Mac macOS 15 Sequoia Mail App Extensions MailMaven Optimization Programming SpamSieve SQLite Swift Programming Language
Mark Gurman (MacRumors, Hacker News, Slashdot):
Apple will announce its biggest ever software rebrand at WWDC, tied to operating system redesigns. Apple is moving from version numbers to years (like Windows in the 90s). The new OSs: iOS 26, iPadOS 26, macOS 26, visionOS 26, tvOS 26, watchOS 26.
Adam Engst:
The OS 26 updates are likely to be released toward the end of 2025, so these new version numbers are looking ahead to next year.
[…]
Given Apple’s consistency in releasing major operating system versions every year since 2007 for iOS and 2012 for macOS, I doubt we will find ourselves in a situation where a major version remains current beyond its designated year. While it may not immediately benefit those of us who regularly need to reference older versions of Apple’s operating systems, the annual numbering will gradually simplify locating each subsequent upgrade on the overall timeline.
[…]
If you’re curious, as I was, here’s how we got to where we are now[…]
Matt Ronge:
This makes sense to do with the iPhone naming as well.
The iPhone names are incredibly confusing and it’s hard to know what year a model came out.
And people get confused about the iOS version number vs. the iPhone model number, though I’m not sure whether this change makes that any better.
John Gruber (Mastodon):
Presuming Gurman is right, this is going to seem really weird at first, and then very quickly seem very natural.
One of the true oddities of Apple’s OS version numbering is that because they stuck with “10” as the leading digit of MacOS’s version numbering from Mac OS X 10.0 “Cheetah” (2001) through MacOS 10.15 “Catalina” (2019), before finally turning the dial to 11 with MacOS 11 “Big Sur” (2020), a casual observer would presume that iOS (currently at 18.5) is older than MacOS (currently at 15.5) when in fact it’s the other way around.
Tom Harrington:
Will Apple skip ahead to Xcode 26 is what I want to know.
And iWork and iLife?
M.G. Siegler:
Look, Apple has done the whole naming scheme based on years before, notably with the old iLife suite of products. They also stopped doing it a dozen years ago. Because it’s dumb. It has long been dumb for the sports videogame franchises that popularized the notion and it’s worse for software, because there aren’t actually fixed “seasons” for software. Apple has sort of forced their teams into shipping that way, but increasingly, that’s not the case. Case in point: presumably a lot of ‘iOS 26’ features are going to ship in 2025, with some shipping in 2026. So I guess ‘iOS 26’ is like an NBA season, split between two calendar years. But Apple isn’t calling it ‘iOS 25/26’, they’re calling it ‘iOS 26’.
Brian Webster:
Pick whatever number you want, just as long as I don’t have to deal with this fucking Sonoma Sequoia bullshit anymore.
Regular users get confused because the two recent “S” versions were adjacent. Yet another reason Apple should have done a Snow/Mountain/High Sonoma release.
Christina Warren:
look, windows 95, windows 98, and windows 2000 were all great names and great OSes. something about macOS 26 feels wrong tho. bring back the big cat names, cowards!
Joe Rossignol:
The rumor has since been corroborated by AppleInsider’s Marko Zivkovic.
Marko Zivkovic:
Individuals familiar with Apple’s internal operating system variants and pre-production builds of macOS 26 suggest Apple could drop support for multiple older, Intel-based Macs. […] Notably absent from this list are the 2018 MacBook Pro models, the 2020 Intel MacBook Air, the 2017 iMac Pro, and the 2018 Mac mini.
Matt Birchler:
I couldn’t resist a little snark, though, as this is a rare case of Apple adopting something Samsung has been doing for years. Samsung’s Galaxy S lineup was numbered 1, 2, 3, 4…until the Galaxy S10 in 2019. Then the next phone was the Galaxy S20, indicating it was the phone released in 2020, and they’ve iterated on that system since then.
Craig Hockenberry:
I have a sneaking suspicion that the “26” is only for marketing, much like Sequoia/Ventura/Sonoma are today, except across all platforms.
We’ll still be doing availability and other version checks against iOS 19.0, macOS 16.0, etc.
And it will be hell.
Steve Troughton-Smith:
Hate to break it to you, but the OS version numbers will probably stay the same in the APIs even if the marketing names change, or else everything might break in weird ways 😅 So we’ll likely still have to keep track of versioning per platform.
Ezekiel Elin:
I would counter that they did this for macOS a few years ago including a compatibility layer for the old format.
Scott:
The biggest issue with the rumored (absolutely moronic) decision by Apple to name OSes by year isn’t the number jump… it’s that the decision cements the 1-year dev cycle, which has proven to be a MASSIVE failure for Apple software quality.
Simon B. Støvring:
Everyone: Your yearly release cycle is making your platform increasingly lag behind.
Apple: Doubles down on a yearly release cycle with a year-based naming scheme.
Previously:
Apple Software Quality audioOS iOS iOS 19 iPadOS iPadOS 19 Mac macOS 16 Rumor Samsung tvOS watchOS watchOS 12
Ric Ford:
Website traffic is overwhelmingly dominated now by “bots” executing sophisticated cyberattacks and sucking up every scrap of content; only a tiny fraction of our traffic comes from legitimate human visitors. Unfortunately, these rampant and rising abuses and attacks drive rising server costs, and there’s no practical way to stop them — they originate from networks at Microsoft, Amazon, Oracle, Tencent, Russia, hosting companies, proxies, and limitless other networks everywhere in the world.
I personally need to stop and take a break for a while to re-assess priorities and approaches going forward. I’m putting macintouch.com on pause in an attempt to stem the rising costs, but I’ll note that tidbits.com offers an alternative with similar history and values.
I remain enormously grateful for the wonderful support and collaboration of the MacInTouch community over these past decades, regardless of the murky future we’re all facing. Thank you.
Miguel Arroz:
I’ve been following MacInTouch for… decades… I don’t even know any more. Sad to see the site being paused. I’m hoping Ric brings it back sometime in the feature, but whatever his decision is, I’m thankful for many, many years of great content about the Macintosh and Apple.
Same.
Adam Engst:
I understand all too well what he’s going through, and I wish him the best of luck in figuring out his next steps.
[…]
Our hosting plans don’t have any visit-based limits so I only worry about bandwidth, and since we use Cloudflare for caching and bot protection, that’s generally not a huge issue. The big win recently was switching to Cloudlflare’s bot prevention to block what could literally be hundreds of spambot-created accounts per day.
I’ve had intermittent problems with bots but so far have been able to avoid adding Cloudflare.
Adam Tow:
When I left The Wall Street Journal in 2014, one of my last tasks was to ensure all the article links remained active, even as the front pages redirected to WSJ’s tech section. Eleven years later, many of those links still work. Some embedded videos are gone, but the core content has largely survived.
The same cannot be said (right now) of Macintouch. With its pause, past articles, such as this one, now return 404 Page Not Found errors. It’s yet another reminder of the impermanence of the internet. Beloved, long-running sites can vanish overnight, taking decades of knowledge with them.
And don’t forget the forums.
Previously:
Artificial Intelligence Cloudflare Datacide Mac The Media Web Web Crawlers