{"id":49154,"date":"2025-09-04T15:15:22","date_gmt":"2025-09-04T19:15:22","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=49154"},"modified":"2025-09-04T15:15:22","modified_gmt":"2025-09-04T19:15:22","slug":"writing-mac-and-ios-apps-shouldnt-be-so-difficult","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2025\/09\/04\/writing-mac-and-ios-apps-shouldnt-be-so-difficult\/","title":{"rendered":"Writing Mac and iOS Apps Shouldn&rsquo;t Be So Difficult"},"content":{"rendered":"<p><a href=\"https:\/\/inessential.com\/2025\/08\/28\/easy-app-writing.html\">Brent Simmons<\/a> (<a href=\"https:\/\/indieweb.social\/@brentsimmons\/115107586220407045\">Mastodon<\/a>):<\/p>\n<blockquote cite=\"https:\/\/inessential.com\/2025\/08\/28\/easy-app-writing.html\">\n<p>A scripting language plus key bits implemented in C was more than fast enough for an app. Even all those years ago.<\/p>\n<p>[&#8230;]<\/p>\n<p>I&rsquo;m not writing this article to praise Frontier &mdash;&nbsp;I&rsquo;m talking about it to make a point, which I&rsquo;ll get to.<\/p>\n\n<p>But I wanted to bring up a second aspect to this: it&rsquo;s not just frictionless iteration that was so great, it was also the scripting language and environment.<\/p>\n<p>[&#8230;]<\/p>\n<p>I&rsquo;m not saying apps these days need to be Frontier-like in any details. But it seems absolutely bizarre to me that we &mdash; we who write Mac and iOS apps &mdash; still have to build and run the app, make changes, build and run the app, and so on, all day long. In the year 2025.<\/p>\n<\/blockquote>\n\n<p>I was just listening to a <a href=\"https:\/\/www.computerhistory.org\/collections\/catalog\/102746675\/\">Larry Tesler interview<\/a> where he talks about live editing the Xerox Alto&rsquo;s Smalltalk code in the middle of a demo to Steve Jobs. This was in 1979.<\/p>\n\n<blockquote cite=\"https:\/\/inessential.com\/2025\/08\/28\/easy-app-writing.html\"><p>And it seems retro in the worst way that we&rsquo;re still using anything other than a scripting language for most of our code. We should be using something simple and light that can configure toolbars, handle networking callbacks, query databases, manage views, and so on. And maybe with a DSL for SwiftUI-like declarative UI.<\/p><p>[&#8230;]<\/p><p>And at some point I suspect these things are going to be table stakes for any platform that wants to attract developers. If you were a new developer right now, would you pick Xcode&rsquo;s build-and-run, edit, build-and-run, edit &mdash; plus the growing complexity of Swift &mdash; over something like Electron and JavaScript?<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/www.manton.org\/2025\/08\/28\/brent-simmons-reminiscing-about-frontier.html\">Manton Reece<\/a>:<\/p>\n<blockquote cite=\"https:\/\/www.manton.org\/2025\/08\/28\/brent-simmons-reminiscing-about-frontier.html\">\n<p>I also used Frontier <em>a lot<\/em> during that time. It was great. Personally, instead of Swift, I would&rsquo;ve loved to see RubyCocoa taken to the next level.<\/p>\n<\/blockquote>\n\n<p>Frontier was great, and I was excited about Apple&rsquo;s initial embrace of PyObjC, RubyCocoa, and other bridges, but they&rsquo;ve now gone completely in the <a href=\"https:\/\/mastodon.social\/@schwa\/115140709755018994\">other direction<\/a>. AppleScriptObjC is still there, but it doesn&rsquo;t work with the newer Swift-based APIs, and the initial hopes that Swift would lead to a successor scripting language seem to have completely evaporated.<\/p>\n\n<p><a href=\"https:\/\/mastodon.social\/@iKyle\/115109850250462529\">Kyle Howells<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@iKyle\/115109850250462529\">\n<p>This idea, a higher level, live reloading, scripting language built on top a compiled, fast core language you can drop down to when needed was my hope when Apple released Swift.<\/p>\n<\/blockquote>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/06\/03\/the-automation-gap\/\">The Automation Gap<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/04\/25\/is-electron-really-that-bad\/\">Is Electron Really That Bad?<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2024\/06\/04\/swift-at-10\/\">Swift at 10<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2020\/02\/19\/larry-tesler-rip\/\">Larry Tesler, RIP<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2019\/06\/04\/scripting-languages-to-be-removed\/\">Scripting Languages to Be Removed<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2018\/04\/29\/30-years-of-frontier\/\">30 Years of Frontier<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2017\/04\/05\/frontier-diary-1\/\">Frontier Diary #1<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Brent Simmons (Mastodon): A scripting language plus key bits implemented in C was more than fast enough for an app. Even all those years ago. [&#8230;] I&rsquo;m not writing this article to praise Frontier &mdash;&nbsp;I&rsquo;m talking about it to make a point, which I&rsquo;ll get to. But I wanted to bring up a second aspect [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2025-09-04T19:15:24Z","apple_news_api_id":"42190728-c19d-4348-b98c-01baf7c703c2","apple_news_api_modified_at":"2025-09-04T19:15:25Z","apple_news_api_revision":"AAAAAAAAAAD\/\/\/\/\/\/\/\/\/\/w==","apple_news_api_share_url":"https:\/\/apple.news\/AQhkHKMGdQ0i5jAG698cDwg","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[650,1627,1505,31,2741,30,2742,71,635,515,901],"class_list":["post-49154","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-applescriptobjc","tag-electron","tag-frontier","tag-ios","tag-ios-26","tag-mac","tag-macos-tahoe-26","tag-programming","tag-pyobjc","tag-smalltalk","tag-swift-programming-language"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/49154","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=49154"}],"version-history":[{"count":1,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/49154\/revisions"}],"predecessor-version":[{"id":49155,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/49154\/revisions\/49155"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=49154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=49154"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=49154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}