Skip 1.0 released: build iOS and Android apps from a single Swift codebase

After over a year of early access releases and beta testing, we are delighted to announce the release of Skip 1.0! Build your native iOS app in Swift and SwiftUI, and the Skip Xcode plugin translates it into a native Kotlin and Jetpack Compose app for Android. The same Swift code powers both sides of the app, while still enabling a truly platform-native user experience.

Many thanks to the members of the community who have helped beta test Skip over the past months, and especially those who have contributed to our ecosystem of open-source frameworks that integrate Android and iOS functionality.

If you are new to Skip, check out the video tours and documentation to get started. And feel free to message me, or check out our community forums, if you have any questions.

Happy Skipping!

35 Likes

How does it handle permissions and permission reasons?

Ok i will Skip this due to the 99$ month license. What’s the point of open source.

Skip will create a standard Xcode project for the Swift side of the app, and a standard gradle project for the Android side of the app. For, say, the camera permission, on the iOS side, you will edit the Info.plist to add the NSCameraUsageDescription key, and on the Android side you will edit the AndroidManifest.xml file and add <uses-permission android:name="android.permission.CAMERA" />.

One example of how to configure and use permissions can be seen in the skip-kit framework, which is an optional package that provides camera and media library handling for your Skip app.

1 Like

There's a free Indie license option.

2 Likes

Amazing achievement @Marc_Prud_hommeaux!
Your pricing is fair when you consider how much time/money this could save a business through a write once, deploy twice approach.
Thank you for offering an indie free plan to experiment with as well.

I did have a question around integrating with specific Android frameworks. For example if a developer wanted to add In App Subscriptions from both Apple and Google, is there an ability to do that? (apologies if this is already documented, going through the website slowly).

1 Like

Thank you for the positive feedback, Patrick.

Skip has a core set of open-source compatibility frameworks, like skip-foundation and skip-lib for adapting the low-level Darwin foundation APIs and the Swift standard library to Android, and skip-ui for translating SwiftUI into Jetpack Compose. In addition, there is an ecosystem of community frameworks for optional functionality, such as skip-firebase for adding Firebase capabilities to both the iOS and Android side of your app.

We don't yet have anything for payments or in-app purchases, but it is something that has been discussed by the community, and is likely to be high up on the list of priorities now that Skip 1.0 is released.

In the meantime, you can always add custom integration into your project by dropping some Kotlin code into an #if SKIP block for the Android side, and adding iOS code for the other side, as per the platform customization docs. I believe some of our users have already done this for their own payments needs.

1 Like

This looks awesome, congratulations!

I'm interested in understanding how you handle the difference between value types (in Swift) and reference types (in Kotlin), since it's something I had a lot of trouble with when writing my own transpiler. For instance, if we type something like this in Swift:

var array = [1, 2, 3]
var copy = array
copy[0] = 10
print(array)

Swift prints [1, 2, 3], but a naïve translation to Kotlin (say, using MutableList) would print [10, 2, 3]. I couldn't figure out how to transpile it without forcing a bunch of unnecessary copies, but from your site's playground I see you're using your own Array class in Kotlin. Does that fix this issue in some way?

Would this answer your question @Vinicius_Vendramini? It details how structs are handled.

Thanks @Marc_Prud_hommeaux, I'll forward any discussion to that same link for In App Related queries.