Show HN: Skip – Build native iOS and Android apps from a single Swift codebase
Skip is a dual-platform app development tool that allows native iOS and Android app creation using Swift, transpiling code to Kotlin, ensuring performance, memory efficiency, and developer code ownership.
Read original articleSkip is a dual-platform app development tool that allows developers to create native applications for both iOS and Android using Swift. By utilizing the Skip Xcode plugin, developers can build their Swift and SwiftUI apps in Xcode, which are then transpiled into Kotlin and Jetpack Compose for Android. This process ensures that the apps maintain native performance and user interfaces on both platforms. Skip offers several advantages, including genuine native app development, transparency in code inspection, and memory efficiency without additional managed runtimes. The integration with Android libraries is seamless, as Skip generates standard Kotlin and Compose code. Additionally, the tool supports continuous integration by transpiling unit tests, ensuring consistent logic across platforms. Developers retain ownership of their code, as both Swift and Kotlin outputs are accessible, allowing for flexibility without dependency on the Skip transpiler.
- Skip enables native app development for both iOS and Android using Swift.
- The Xcode plugin transpiles Swift code into Kotlin for Android.
- Skip apps are memory efficient and do not require additional managed runtimes.
- The tool supports seamless integration with existing Android libraries.
- Developers maintain ownership of their code and are not locked into the Skip ecosystem.
Related
Show HN: React Native Finisher Kit That'll Automate All the Complex Stuff
The article discusses Beplus Bootstrap Mobile, a tool for efficient mobile app development. It offers React Native app setup, Fastlane automation, Appium testing, and pre-made features like authentication and push notifications. Users praise its automation and clarity.
The Decline of Mobile Development
Mobile development for Android and iOS is becoming more challenging due to frequent OS updates, high costs, and complex requirements, prompting developers to shift towards web development for greater ease and productivity.
Show HN: Spawn – Build iOS Apps with English
Spawn is a platform for building iOS applications with a user-friendly interface, allowing drag-and-drop functionality and access to native features, with plans for future Android support.
How does it feel to test a compiler?
Alexander Zakharenko discusses the unique challenges of compiler testing, emphasizing the importance of automated and exploratory tests, collaboration with developers, and the intricacies of Kotlin/Native's compilation process.
Show HN: I built a React Native boilerplate to ship mobile apps faster
ExpoShip is a React Native boilerplate that simplifies app development with features like user authentication and payment integration, catering to both beginners and experienced developers, and offering promotional discounts.
- Many users express enthusiasm for Skip's ability to streamline cross-platform development, particularly for those already familiar with Swift.
- Concerns are raised about the handling of platform-specific features and APIs, especially for existing iOS apps that rely on various Apple frameworks.
- Users are curious about the integration process for existing projects and the potential for merge conflicts when customizing Android code.
- Some commenters highlight the learning curve associated with using Skip, while others praise its performance and ease of use once familiar.
- There is a desire for more documentation and examples, particularly regarding limitations and showcase apps built with Skip.
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.
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.
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...
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.
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?
This fixes the big painpoint that nowadays' cross-platform frameworks come with performance tradeoffs as they have a unified presentation layer!
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.
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.
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
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?
Are you sure
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.
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?
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!
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.
Have you addressed that with Skip?
Looks incredible, btw. :)
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).
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!
I would just like to ask, what Material version are you using?
Please feel free to point to a doc that may already answer that.
Otherwise, looks like a good tool I could use.
Related
Show HN: React Native Finisher Kit That'll Automate All the Complex Stuff
The article discusses Beplus Bootstrap Mobile, a tool for efficient mobile app development. It offers React Native app setup, Fastlane automation, Appium testing, and pre-made features like authentication and push notifications. Users praise its automation and clarity.
The Decline of Mobile Development
Mobile development for Android and iOS is becoming more challenging due to frequent OS updates, high costs, and complex requirements, prompting developers to shift towards web development for greater ease and productivity.
Show HN: Spawn – Build iOS Apps with English
Spawn is a platform for building iOS applications with a user-friendly interface, allowing drag-and-drop functionality and access to native features, with plans for future Android support.
How does it feel to test a compiler?
Alexander Zakharenko discusses the unique challenges of compiler testing, emphasizing the importance of automated and exploratory tests, collaboration with developers, and the intricacies of Kotlin/Native's compilation process.
Show HN: I built a React Native boilerplate to ship mobile apps faster
ExpoShip is a React Native boilerplate that simplifies app development with features like user authentication and payment integration, catering to both beginners and experienced developers, and offering promotional discounts.