by marcprux on 8/28/24, 8:44 PM with 118 comments
What it is: Skip stands in contrast to other cross-platform development tools like Flutter, React Native, and Xamarin, in that it enables the creation of genuinely native applications for both of the dominant mobile platforms. It doesn'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'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'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.
How it works: you build a Skip app using the same tools that you use to create a standard iOS app: Xcode, Swift, and SwiftUI. Skip augments this workflow with a Swift Package Manager plugin called "skipstone", which transpiles your Swift into Kotlin each time you build your app, and launches the Android app side-by-side with the iOS app each time you run the app. The transpilation works not just on your primary app module, but also transitively processes all your dependent SwiftPM modules, so you can break complex projects down into individually testable sub-modules containing business logic or UI code. In fact, this is how our own adaptor modules for the standard frameworks are structured: SkipFoundation adapts the Foundation framework and SkipUI adapts the SwiftUI framework, so the same familiar API can be used when building the app. And there's a GitHub ecosystem of open-source modules supporting popular frameworks, including SQLite, Firebase, Lottie, and many other common building blocks of modern apps.
Over the past year Skip has evolved into a fully-capable solution for creating best-in-class apps for both iOS and Android. And today we are delighted to announce the release of version 1.0, meaning that it is ready for production use.
We have a wealth of videos and documentation available at https://skip.tools, and I'll be around to field any questions that any of you might have. Thanks in advance for taking a look!
Home: https://skip.tools
FAQ: https://skip.tools/docs/faq/
GitHub: https://github.com/skiptools/
by LifeUtilityApps on 8/28/24, 10:54 PM
After testing the feasibility of other cross-platform frameworks, I landed on Skip. I LOVE that I don't have to break out of the "Swift" mental context, I just have to focus on writing an app in 1 language.
So before I commit fully I've been testing it out (building a demo app this week) and so far I am very impressed. The syntax to write platform-specific code (#if !SKIP #endif) is very easy to use once you get the hang of it.
It's amazing I don't have to learn Android to get something up and running at this speed with Skip. Hitting run in xcode and watching both emulators open feels like magic. I want to put this to the test so I plan to build a complete App with it from start to finish, ship it to both App Stores, and if all that goes smoothly I will proceed to migrate my main app using Skip.
by mad_tortoise on 8/29/24, 8:07 AM
Whereas the rest of the world is Android dominant, and there is no real reason to do this when there's multiple better frameworks for cross platform development. Flutter, React Native and Kotlin MP are and always will be miles ahead. Let alone those framework's being free whereas here there is a cost for professional development.
As someone that has written various projects in Kotlin (including multiplatform), Swift, Dart/Flutter for over a decade I don't see the point. And I would be exactly the target market for this kind of product. The transpiling is the big issue for me, you will have to tap into every single Android API, write code to transpile those and then maintain across every Android version going forward.
Let alone the denigrating of cross platform frameworks and promotion of yours due to "animations, accessibility, and future-proof evolution alongside OS updates" doesn't sound like much of a win, when the quality of these in cross platform is already at a very high level. Secondly "And there's a GitHub ecosystem of open-source modules supporting popular frameworks, including SQLite, Firebase, Lottie, and many other common building blocks of modern apps." all of which exist in cross platform and kotlin multi platform.
I'm sorry to the developers and team to knock it, but just my 2 cents coming from a more third world perspective.
by rock_artist on 8/29/24, 4:41 AM
1. Open-source, it mentions GPL forms, is there a reason MIT not mentioned? is that not considered open-source (especially with many iOS/Swift using MIT to be compliant with store distribution).
2. Packages, how does it handled packages? or the cases when you need to have branching for iOS/Android? the FAQ does not address this.
3. How Apple service APIs being handled on Android? I didn't look at the example weather app, but as an example, Apple got WeatherKit. or in my case case I use the built-in geolocation APIs.
My concrete example, I have a small app I've made. It uses geolocation from Apple (to detect country city, etc), It uses AdMob and Apple's built-in In-App / Subscription services.
I think this is a fair example of simple commercial product, and it'll be nice if you have some example for ads and in-app/subscription which might be important for closed/paid monetized projects...
by fifafu on 8/29/24, 5:54 AM
by amehregan on 8/28/24, 9:34 PM
by banashark on 8/15/24, 5:43 PM
Looking at the docs gives a good overview of how it works.
Regarding transpilation and the tradeoffs (https://skip.tools/topic/transpilation-tradeoffs/), does the limitation of certain Swift features cause any significant friction with using parts of SwiftUI or other core libraries?
Wondering how much those (understandable) limitations on the transpilation limit what a random iOS dev might be able to do compared to what they can do in iOS land.
Also, using SwiftUI cross-platform makes me think that many android libraries would be a no-go.
One of the reasons that Xamarin development was painful (other than the numerous bugs in trying to target 2 foreign platforms) was that you couldn't _really_ utilize the large native ecosystems of either platform, and you would end up spending a lot of time "rewriting" libraries in dotnet.
by wirelesspotat on 8/28/24, 10:50 PM
The issue we ran into is that we've already built a native iOS app with SwiftUI + a bit of UIKit. Integrating Skip with an existing app seemed like a significant task
Does that hold true in your experiences? Do you have any examples of small- or medium-sized existing apps that have migrated to Skip?
by flawn on 8/28/24, 10:19 PM
This fixes the big painpoint that nowadays' cross-platform frameworks come with performance tradeoffs as they have a unified presentation layer!
by happybuy on 8/29/24, 5:04 AM
For those cases, Skip's approach seems to be a range of Skip* frameworks that are minimal implementations of the Apple or Android versions. This will likely grow over time, but for most apps it would likely be very limiting at this stage.
For instance in my iOS app I use StoreKit, WebKit, SafariServices, UserNotifications and CryptoKit amongst others that have no current implementation when using Skip.
by billylo on 8/29/24, 1:08 AM
by isodev on 8/29/24, 7:50 AM
In the case of this tool, the complexity seems to move into a completely new layer of "re-implement Apple frameworks" of libraries + transpiled Swift code to Kotlin. Given that the audience for this framework is mainly iOS developers, support and maintenance for the Android side of things will become an increasing challenge.
Perhaps it's easy to get started, but I can't possibly imagine this being easy to maintain several first party releases down't the road. Also, I did a quick look into the transpiled Kotlin code, the output is not at all optimal.
by nivertech on 8/29/24, 7:06 AM
LiveView Native has good SwiftUI support on iOS[2], but only basic Jetpack Compose support on Android[3] (I'm not up to date, so things may have changed now).
Is it possible to use this project to help with conversion of LVN SwiftUI apps to Jetpack Compose?
---
1. https://github.com/liveview-native
2. https://github.com/liveview-native/liveview-client-swiftui
3. https://github.com/liveview-native/liveview-client-jetpack
by sharp11 on 8/29/24, 5:47 AM
by giamma on 8/29/24, 7:36 AM
How does it handle the different UI guidelines on the two platforms?
I have not been using Android for some years, but the first example that comes to my mind is that as far as I remember Android has a platform-level back button, while on iOS each application provides a "back" link to be tapped to go back to its previous screen. If I wanted a single code base that followed the recommended UI approach on each platform in order to be as user friendly as possible, would I need to write certain parts twice using #IFDEF or similar blocks?
by gavinh on 8/28/24, 10:22 PM
Are you sure
by badoongi on 8/29/24, 5:38 AM
by jamil7 on 8/29/24, 3:22 AM
by cmt8 on 8/29/24, 4:03 AM
by Cloudef on 8/29/24, 5:07 AM
The flutter projects usually start clean, but then these platform specific hacks start to pile up and it's ugly and annoying to update to later flutter skeleton.
by RedComet on 8/29/24, 10:24 PM
Skimming the page, it appears the answer is no, but I'll ask anyway: If all of the project's dependencies are pure Swift (+Foundation) Swift PM packages, is it possible to use them in transparently in the android project. Can they be compiled natively such that the transpiler's kotlin transparently calls into the native (Swift) libraries?
by gwbennett on 8/30/24, 6:09 PM
I have just started a new iOS app and didn't want to do the Android app in React Native, Flutter, etc! Write in SwiftUI once! Nice, Nice!
Thank you!
by langcss on 8/28/24, 10:58 PM
Been a long time since I worked on mobile (pre Kotlin!) but how does it handle differences in the UIs. Do you need "is android" directives. Are there Swift objects in your library that are android specific.
by josh_carterPDX on 8/29/24, 3:20 AM
Have you addressed that with Skip?
Looks incredible, btw. :)
by smusamashah on 8/28/24, 11:41 PM
The website is very slow to scroll on phone for some reason. Feels like scrolling has smoothing effect applied on it which does not work well everywhere and ends up slowing down scrolling (feels like 10 fps or something).
by piyushtechsavy on 8/29/24, 7:48 AM
by dkga on 8/29/24, 1:23 AM
by atentaten on 8/28/24, 11:20 PM
by charliesbot on 8/29/24, 3:23 AM
I am thinking about making an app, and we want to support the best offerings from each OS. So the dynamic colors is important on the Android side
We’ve been thinking about KMP til I read about this, which sounds promising!
by 8mobile on 8/29/24, 5:17 AM
by lawgimenez on 8/29/24, 12:22 AM
I would just like to ask, what Material version are you using?
by vinibrito on 8/29/24, 3:00 AM
by preciousoo on 8/29/24, 3:52 AM
by grounder on 8/29/24, 2:35 AM
by mariocesar on 8/28/24, 10:16 PM
by yumraj on 8/28/24, 11:51 PM
Please feel free to point to a doc that may already answer that.
by thomasswift on 8/28/24, 10:38 PM
by dilliwal on 8/29/24, 6:10 AM
by thomaskang08 on 8/29/24, 2:09 AM
by 486sx33 on 8/31/24, 1:59 PM
by neil459 on 8/29/24, 12:57 PM
Otherwise, looks like a good tool I could use.