{"id":44651,"date":"2024-08-28T15:23:10","date_gmt":"2024-08-28T19:23:10","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=44651"},"modified":"2025-11-10T13:36:29","modified_gmt":"2025-11-10T18:36:29","slug":"skip-1-0","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2024\/08\/28\/skip-1-0\/","title":{"rendered":"Skip 1.0"},"content":{"rendered":"<p><a href=\"https:\/\/skip.tools\/blog\/skip-1_0-release\/\">SKIP.tools<\/a> (via <a href=\"https:\/\/x.com\/aabewhite\/status\/1824120830306975785\">Abe White<\/a>, <a href=\"https:\/\/news.ycombinator.com\/item?id=41258356\">Hacker<\/a> <a href=\"https:\/\/news.ycombinator.com\/item?id=41384144\">News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/skip.tools\/blog\/skip-1_0-release\/\">\n<p>Skip brings Swift app development to Android. Share Swift business logic, or write entire cross-platform apps in SwiftUI.<\/p>\n<p>Skip is the only tool that enables you to develop genuinely native apps for <em>both<\/em> major mobile platforms with a single codebase. Under the hood, it uses the vendor-recommended technologies on each OS: Swift and SwiftUI on iOS, Kotlin and Compose on Android.<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/news.ycombinator.com\/item?id=41258425\">Marc Prud&rsquo;hommeaux<\/a>:<\/p>\n<blockquote cite=\"https:\/\/news.ycombinator.com\/item?id=41258425\"><p>It doesn&rsquo;t embed a separate engine or runtime into your app, but instead lets you use pure Swift and SwiftUI to create the iOS side of the app (as per Apple&rsquo;s recommended best practices for creating iOS apps), and transpiles it into a pure Kotlin and Jetpack Compose app for the Android side (which is Google&rsquo;s recommendation for building Android apps). So your application will use platform-native controls and will automatically have all the affordances provided by the platform vendor: animations, accessibility, and future-proof evolution alongside OS updates.<\/p><\/blockquote>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2021\/09\/01\/on-the-shift-from-imperative-to-declarative-ui\/\">On the Shift From Imperative to Declarative UI<\/a><\/li>\n<\/ul>\n\n<p id=\"skip-1-0-update-2024-09-13\">Update (2024-09-13): <a href=\"https:\/\/mastodon.social\/@chockenberry\/113052413796215110\">Craig Hockenberry<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@chockenberry\/113052413796215110\"><p>I love what the folks at skip.tools are doing.<\/p><p>But the deal killer for us, and I suspect many others, is the inevitability of UIKit in your SwiftUI app. No matter how hard you try, you&rsquo;ll eventually have a UIViewControllerRepresentable implementation and that&rsquo;s all code that&rsquo;s going to need a separate Kotlin\/Compose code.<\/p><p>Worse, these views tend to be a core part of the performance\/experience in the app. Like Tapestry&rsquo;s timeline.<\/p><p>And when you try to implement UIKit as a cross-platform toolkit, you quickly realize that it&rsquo;s a Sisyphean task.<\/p><\/blockquote>\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2019\/03\/04\/bringing-ios-apps-to-macos-using-marzipanify\/\">Bringing iOS Apps to macOS Using Marzipanify<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2015\/08\/17\/microsoft-winobjc\/\">Microsoft WinObjC<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2015\/07\/15\/maikit-framework-for-sharing-code-between-ios-and-os-x\/\">MAIKit: Framework for Sharing Code Between iOS and OS X<\/a><\/li>\n<\/ul>\n\n<p id=\"skip-1-0-update-2024-09-25\">Update (2024-09-25): <a href=\"https:\/\/mastodon.social\/@helge\/113181567666695676\">Helge He&szlig;<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@helge\/113181567666695676\"><p>To be honest, I&rsquo;ve long held the opinion that the @skiptools approach would work really well for doing a Web SwiftUI. I.e. having a Swift to JavaScript transpiler. This is on my long to do list, might be somewhat viable w\/ SwiftAST \/ SwiftSyntax &#x1F642;<\/p><\/blockquote>\n\n<p id=\"skip-1-0-update-2025-11-06\">Update (<a href=\"#skip-1-0-update-2025-11-06\">2025-11-06<\/a>): <a href=\"https:\/\/skip.tools\/blog\/skip-fuse-free-for-indies\/\">Skip Team<\/a>:<\/p>\n<blockquote cite=\"https:\/\/skip.tools\/blog\/skip-fuse-free-for-indies\/\"><p>Since the <a href=\"https:\/\/skip.tools\/blog\/official-swift-sdk-for-android\/\">launch of the official Swift SDK for Android<\/a> on <a href=\"https:\/\/www.swift.org\/blog\/nightly-swift-sdk-for-android\/\">swift.org<\/a> last month,\nwe have been overwhelmed by a surge of interest in building cross-platform\napps using a single shared SwiftUI codebase. Skip&rsquo;s earlier &ldquo;Lite&rdquo; mode, whereby your Swift code is <em>transpiled<\/em> into Kotlin, has been free for Indie developers for over a year, but since the launch of Skip&rsquo;s &ldquo;Fuse&rdquo; mode &mdash; which is based on the native Swift SDK for Android &mdash; it has required a paid commercial license.<\/p><p>Today we are happy to announce that Skip Fuse is now free for Indie developers as well! <\/p><\/blockquote>\n\n<p id=\"skip-1-0-update-2025-11-10\">Update (<a href=\"#skip-1-0-update-2025-11-10\">2025-11-10<\/a>): <a href=\"https:\/\/weekly.fatbobman.com\/p\/fatbobmans-swift-weekly-0110\">Fatbobman<\/a>:<\/p>\n<blockquote cite=\"https:\/\/weekly.fatbobman.com\/p\/fatbobmans-swift-weekly-0110\">\n<p>Naturally, Skip&rsquo;s definition of an &ldquo;indie developer&rdquo; comes with clear conditions: it applies only to individuals or teams of up to two people, with annual revenue below US $30,000, and it permits the release of one closed-source commercial app (open-source projects are unlimited). Even so, this policy opens the door for Swift developers to enter the Android market at virtually no cost &mdash; offering new opportunities for experimentation, growth, and revenue on a massive platform.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>SKIP.tools (via Abe White, Hacker News): Skip brings Swift app development to Android. Share Swift business logic, or write entire cross-platform apps in SwiftUI. Skip is the only tool that enables you to develop genuinely native apps for both major mobile platforms with a single codebase. Under the hood, it uses the vendor-recommended technologies on [&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":"2024-08-28T19:23:13Z","apple_news_api_id":"d8ecff2d-635e-48cc-8dbf-f3cf0a9ff8ef","apple_news_api_modified_at":"2025-11-10T18:36:32Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAABA==","apple_news_api_share_url":"https:\/\/apple.news\/A2Oz_LWNeSMyNv_PPCp_47w","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":[248,75,1525,71,1812,2660],"class_list":["post-44651","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-android","tag-developertool","tag-kotlin-programming-language","tag-programming","tag-swiftui","tag-transpiler"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/44651","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=44651"}],"version-history":[{"count":6,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/44651\/revisions"}],"predecessor-version":[{"id":49980,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/44651\/revisions\/49980"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=44651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=44651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=44651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}