14 ms·
I replaced my native iOS app with a cross platform web app and no-one noticed
- dkobia 4y agoI love to build both native and hybrid apps and while you have a pretty good write up you’ve made some pretty bold claims for a handful of app installs. I did try out your apps and to be quite honest they do feel very webby (non-native). For the use case however I suppose it works.
- fakethenews2022 4y agoThe crash statistic may be an invalid indicator. Problems in your app will no longer manifest themselves as crashes in your native code because the only native code running is iOS's.
- cosmotic 4y agoThat's a good point; the crashes are now empty white screens without notice.
- chris_nielsen 4y agoHi, author here. Yeah that's a great point. With Capacitor when the browser crashes you just get this white screen and it wouldn't get picked up as an exception by iOS and reported on the App Store. I ended up having to add in custom JS crash reporting to catch browser exceptions, but I'm not 100% happy with it. Let me know if anyone has a recommendation.
- leodriesch 4y agoYou should be able to use regular JavaScript tools like sentry.io
- 0x0100 4y agoI can see this not being an issue today. Most phones have a ton of memory and a good gpu thus making performance issues harder to detect
- jitl 4y agoThe average Android phone is still potato slow: https://mobile.twitter.com/slightlylate/status/1233275220275818498?lang=en https://mobile.twitter.com/slightlylate/status/1233275220275... I think a simple app like this should be no problem for most devices, but Notion (the app I work on) really struggles on those low-end Androids.
- mamcx 4y agoYeah, Android is slow at all dimensions: IDE, Emulator and actual execution. We have embarked in a costly rewrite to fully native because even today, most androids phones are noticeable slow to my customers...
- henning 4y ago> Not brilliant, but hey, it’s a cheap Android tablet, what can you expect? People on cheap Android tablets deserve the same experience as anyone else. You aren't rendering 3d graphics, you're displaying a few hundred characters of text. There are hundreds of millions of users around the world with low-end Android devices. There are people in the world who are not rich white tech people living in suburbia, believe it or not. > Are native apps dead? Not yet… but they’re going to be. You don't have a crystal ball. What happens to all the legacy Java, Kotlin, Objective-C, and Swift code? That all just gets rewritten in JavaScript overnight? Right. > You see as humans we’re comfortable with 60fps of animation performance. We don’t need 70fps Bullshit. This person has never used a 144hz monitor. I'm never buying another 60hz display. > Our reaction time is ~200ms, we don’t need 100ms Our reaction time may be about this, but we perceive times much shorter in duration, which will matter if the tablet has a high refresh rate display like many of the iPads.
- jamra 4y agoIn terms of the 60 fps, he’s referring to apps on mobile devices, not your FPS game running on a PC. I think you’re being a little hard on the author.
- thies226j 4y agoHave you used an iPad with ProMotion and one without? Seriously try it, you can’t tell me that there’s no perceivable difference between the two when scrolling through something or writing with a pen.
- zamadatix 4y agoGP is being a little hard on the author but high framerate applies as much to apps on mobile devices as it does an FPS game on a PC, particularly if you have touch based interaction. Even just simple scrolling will feel janky if you're only hitting 60 FPS on a high refresh rate mobile device.
- jasonlotito 4y ago
- Meai 4y agoDoesn't Apple forbid publishing web apps on the app store? How is it then possible that something like ionic framework and react native still work? Unless they literally translate all html features to native components but I seriously doubt it. Edit: This is a "talk to sales" framework and ionic is 50€ per month as the absolute cheapest option. This is essentially an ad then.
- vore 4y agoI'm pretty sure Apple is OK with web apps: https://ionic.io/resources/case-studies/sworkit https://ionic.io/resources/case-studies/sworkit Also Ionic is definitely free and open source: https://ionicframework.com/framework https://ionicframework.com/framework
- peterburkimsher 4y agoWasn't the original plan for the iPhone 2G (pre-app store, iPhone OS 1) to use web apps for everything? https://9to5mac.com/2021/06/03/remembering-apples-sweet-solution-for-iphone-apps-before-the-app-store/ https://9to5mac.com/2021/06/03/remembering-apples-sweet-solu...
- masklinn 4y agoYes. That turned out to be nowhere near possible, especially for things like games. Hence the appstore.
- skinnymuch 4y agoWas it just games? WebOS’s apps were as good as any other platforms apps and were PWAs unless I’m mistaken.
- masklinn 4y ago> Was it just games? It wasn't only games, but having been there the cambrian explosion following the appstore's release was very much 95% games (much to Jobs' dismay). > WebOS’s apps were as good as any other platforms apps and were PWAs unless I’m mistaken. They were built out of "web technologies" (HTML and javascript) but they were not PWAs as they were significantly augmented with native components and concepts, none of which were part of the browser (even as proprietary extensions). That's like calling Firefox a PWA because it's built out of XML and Javascript (or was, not sure that's still the case). iOS' first draft (pre appstore) was pretty much just web pages you pinned to your springboard (which you can still do). There were a few allowances for removing browser chrome and the like, or providing a few icons, but for the most part it was exactly what you'd run in a browser.
- brundolf 4y agoThe main thing that makes a non-native app stand out today isn’t performance, it’s all the little UI inconsistencies. And not just the shapes and colors; the font sizes, the types of transitions that happen between screens, the “pressed” and “loading” states on buttons (or lack thereof), etc. The modern web gives you everything you need to do all these things, but you don’t get them for free. And many devs don’t think to implement these details, and even if they do give them attention and make the experience good, it may still be inconsistent with the host platform. That’s what’s hard. For this app it makes total sense, because it already seems to have a pretty custom look and feel; there’s nothing that needs imitating. Many others out there are probably in a similar boat, but certainly not all of them.
- nicolas_17 4y agoThe number of "native" apps where I discover I can select and copy UI elements because it's all actually HTML...
- brundolf 4y agoYeah. You can prevent that too with a CSS property, but again, it’s not the default; you have to have enough time and attention to detail to go out of your way and handle it
- hedora 4y agoMy favorite feature in recent iOS is that you can defeat that CSS property by taking a screenshot and letting the phone OCR the image, then copy paste from the result. Disabling copy is abused by all sorts of apps. (Yelp street addresses are a prime offender.). I’m not convinced allowing it to be disabled is a net positive.
- brundolf 4y agoIt’s fairly essential for things like buttons and tabs that get tapped all the time and have mostly non-content text. But it does need to be used sparingly
- yesimahuman 4y agoIonic co-founder and Capacitor creator here: thanks for sticking with us on the journey. The stack has actually been really successful for us. We've been able to build a significant business on top of web native apps because they work really damn well for a whole class of data-driven apps. We've also seen a renaissance of sorts recently with this new generation of web developers realizing they can use their favorite web stack to build for mobile. A lot of them didn't "grow up" with bad phones and Cordova being the only option in town, and coming into the space with fresh eyes to see all the progress that has been made. We are excited about seeing better UI tools and frameworks that raise the bar for mobile experiences with web tech. When we started Ionic Framework, there were few quality options. Today, there are a lot more, and we're thrilled if people want to use their favorite stack on mobile with our Capacitor project.
- chris_nielsen 4y agoAuthor here, just wanted to say thanks for making Capacitor. It's been an absolute pleasure to use. Something about the plugin architecture just really clicked for me. I hope I wasn't too negative about Ionic at the start of the post, I get a little carried away while writing sometimes. Love your work, and thanks again. :)
- peppertree 4y agoSave your 3 minute read. No one noticed because there are hardly any users - just his kids.
- azinman2 4y agoI don’t have kids but this app looks great. I love the creativity with the design and the kid appeal. I can imagine this being very useful!
- ComradePhil 4y agoYou should re-title this to "Why I never tried Flutter and why I will never know what I missed".
- pantulis 4y agoIn fact, if you consider "native" to mean "using the standard platform frameworks", then the stated proposition "Are native apps dead? Not yet… but they’re going to be." will be realized by Flutter.
- jamil7 4y agoSo far, Flutter is jankier than a webapp on iOS and on the web.
- pantulis 4y agoYou could say the same when comparing native iOS apps vs web apps, and these days almost nobody cares. This jankiness will be solved --wether it is by optimizing flutter's core rendering engine or just because mobile devices will receive more powerful CPUs. One way or another you will be able to build hugely successful multiplatform apps just using Flutter.
- jamil7 4y agoI hope so, it would be quite compelling if it was but so far I've been unimpressed and there's a lot of resources being pumped into the project.
- jeroenhd 4y agoHas Flutter fixed its horrendous web application performance yet? Every time I go back and give it a shot I'm appaled at how laggy the web backend is. The mobile backend isn't very power efficient either if I'm being honest, but at least the resulting experience is acceptable in terms of smoothness and responsiveness.
- null_object 4y ago> Are native apps dead? > Not yet… but they’re going to be. This post makes very big claims based on a very basic application that doesn't seem to be much more than a few toggle buttons and a couple of animations thrown in, and some 'statistics' that don't appear to be based on any actual facts. I work in a team developing an app that has around 5million users, and we abandoned an Ionic first version 5 years ago, after a couple of years of nightmarish development, where (after the first implementation, which went reasonably well) we spent most of our development time fixing inexplicable bugs, chasing native features, getting inconsistent UI problems, broken builds from package updates and a myriad other problems that just drained our energy and were generally dispiriting. I personally felt the entire experience was a horrible professional dead-end. Luckily our management decided to switch to a native application, and learning Swift has been the most fulfilling part of my entire career. The application is faster, more reliable, the bugs are locatable and fixable; the entire framework feels solid and professional. The application itself is immeasurably better now. We attracted better-qualified colleagues who have been a great learning resource. And the app itself went from an appstore rating of (iirc) around 2.8 stars to its current rating of 4.6. We would never dream of going back to the nightmare that developing a complex and performant app with Ionic was in my experience.
- mchusma 4y agoI have used Ionic for about 7 years now? 5 years ago it was sort of still a painful beta-like product. Not the case today. We ship and maintain 2 different apps to web, iOS, and android each, with only 3 developers. These are highly complex apps , although not games. Ionic really got great about 3 years ago. I suspect that if you had experienced Ionic a bit later in it's cycle, you would have been happy. Hard to tell, and I do think there are genuine cases for building to specific platforms. However I think it's the exception (outside gaming), not the rule.
- jbverschoor 4y agoI've used ionic in the past. It was ok to get something out, ok for many things (gyro data, charts etc), but it started getting in my way a lot. I like react-native and nativescript's approach a lot more.. They use native UI elements. Nobody noticed in the app of OP because it looks almost like a game. No native UI behaviors.
- shisisms 4y agoThis is a great app! Well done, and you’re right barely any difference. That said, raising compliant kids is sooo boring :)
- thealistra 4y agoIs there an app store link anywhere?
- deleted 4y ago[deleted]
- alex_suzuki 4y agoInteresting read, thanks. Have you considered going „full web“ with a PWA, foregoing a native container completely? That was my expectation when I saw the headline. I have a couple of business apps implemented as offline-capable PWAs and the experience has been so-so. Still hoping for better browser support especially on iOS. Customers love that they can instantly push updates and are not bound by arbitrary rules enforced by the gatekeepers (App Store, Play Store). Bit of course some crucial things are missing. App discovery through the platform app store for instance is something that just doesn’t need to be explained to users. Also the absence of push notifications hurts.
- marstall 4y agoagree! my iOS/web cross-platform stack looks like smallish swift shim > WebView > react-native-web In the end there are minimal "tells" and it is such a joy to be able to deploy small and large things to both platforms with a single push to GitHub. (https://www.shelf.fm https://www.shelf.fm if you want to take a peek)
- skinnymuch 4y agoLooks neat! Too bad I don’t use Apple Music. How much more time would getting this to work on Android take if hypothetically you had to do so? Edit: I didn’t notice you wrote “react-native-web”. Didn’t realize that was a thing. Another neat thing.
- marstall 4y agohard to estimate as most of the 1000 or so lines of swift code was there to talk to the native iOS Apple Music APIs for auth and playback - which wouldn't be a thing in Android. If anyone ever starts using this app I'll probably take a look lol
- deleted 4y ago[deleted]
- jeroenhd 4y ago> Our reaction time is ~200ms, we don’t need 100ms. Our reaction time doesn't matter when it comes to the look and feel of an application. You can clearly feel the difference between an old DOS computer with a CRT putting characters on screen nearly instantaneously and a modern text editor having a whole UTF-8 rendering pipeline to deal with first. We've all slowly been growing accustomed to these high latencies and the bar of acceptable performance has been lowered, but that doesn't mean such latencies don't matter. Personally, I find browsers noticeably less responsive unless developers go out of their way to reduce latency and overhead. Leveraging things like CSS animations makes a huge difference because even on slow hardware they feel snappy, but there are many other optimisations that you need to get the job done. That said, if the web version was already reasonably fast then I don't see a problem with porting it to mobile If a mobile browser can operate a website with tolerable performance, then why not stuff it into a platform native webview and he done with it. You'll be fighting the terrible built-in browser engines of your user's devices (I've seen people refuse to update the Webview on Android because they don't know what it is) but your app just got a whole lot tinier and easier to update. It would probably work the other way around just as well (Flutter to web, or maybe even Kotlin Multiplatform to web and iOS, I haven't tried the latter) if your port source is of good enough quality.
- lifeplusplus 4y agoReaction time and perception are different things not sure why author mixes them.. as a gamer having a ping of 14ms vs 90ms literally ruins competitive gaming. Pro players actually switched countries and cities to have better ping. Heck even getting a keyboard with less travel distance for each keys make a difference, just like how getting a mouse that has response rate of at least 1000hz. I have gone from typical desktop user to hardcore gaming user and each time latency improved it has helped by kd ratio directly. Even 5ms gains matter because worse case scenarios become less worse.. I notice everything above 20ms, but I used to not. One day I bought 140hz monitor it felt little better but not ground breaking I was almost disappointed. But then a week later I got to look at regular monitor, it looked like it was lagging constantly... Now I don't use my laptop because it looks so laggy now. I got used to faster frame rate.
- Mizza 4y agoI'm a strong believer in web-apps-as-mobile-apps (at least for my current use case), but I'm curious what the best way to package a WebView into a mobile app is these days. This article recommends Capacitor, but although they say "drop Capacitor into any existing web app" - they actually mean any JavaScript application. I have an Elixir app, I just want to put it in a WebView and cut iOS/Android versions. What's the best way to do this in 2022? I've stumbled upon "Jasonette", but have no idea if it's the right way to do things these days. Does anybody have any recommendations they could share?
- klohto 4y agoYou mean Phoenix LiveView by an Elixir app? There is a thread on elixirforum[0] [0]https://elixirforum.com/t/what-is-the-best-easiest-way-to-convert-a-phoenix-liveview-app-into-an-ios-and-android-app/37159/10 https://elixirforum.com/t/what-is-the-best-easiest-way-to-co...
- fearface 4y agoIf this is the app: https://apps.apple.com/ch/app/school-morning-routine/id1606853166?l=en https://apps.apple.com/ch/app/school-morning-routine/id16068... The I notice quite few things: - low fps animations - delay until the keyboard popups - no support to save the password or use e.g. an Apple account to login - no scrollbars in the modal and the back button out of view So in general, this would not make the cut for the native apps my employer produces. Especially the low fps is a deal breaker. Tested on an iPhone XR
- s_dev 4y agoI find the claim "No one noticed" a bit hyperbolic. It's more like "and my change was easily tolerated". I certainly notice these things and I'll pay a premium for software that feels "snappy" any looks good.
- lalopalota 4y agoYeah, the title says "no one noticed" while the article says "my kid didn't notice" + no users complained. Which makes sense because this is an app that parents are making their kids use. The parents don't use the app and the kids have to. Who is going to complain that the interface changed?
- joshstrange 4y agoI’ve been writing cross platform apps for many years now and a huge change that I don’t think people have noticed or understand is Cordova vs Capacitor. I put up with Cordova but always felt like I was on the edge of my builds breaking. The process to create the native project in the fly was always very inconsistent in my experience. The first debugging step for a failed Cordova app build was “try it again?”, that’s a horrible way to develop/live. Then comes along Capacitor. I assumed “Ok, it’s just the newer version of Cordova”, I couldn’t have been more wrong. Things that were a huge pain with Cordova (building the native project from scratch, any changes to the native project for things like capabilities/permissions, the version of Google apis conflicting, etc) are gone. You now commit the Xcode and Android Studio projects to your source tree. This makes builds so much easier (throw fastlane into the mix and you’ve got something really awesome) and makes writing native code super easy. I didn’t think I’d ever want to write native code for a cross platform app but Capacitor makes it stupid-simple to drop down to native code whenever you want. No more packaging your code in a plug-in (if you don’t want to at least), just add a class with the right annotations or extending the right class and you are calling native code from JS in no time at all. Native used to be scary or hard to work with in Cordova, that’s no longer the case in Capacitor. It gives me a ton of freedom and finally makes me feel in control of my builds and my app as a whole. If you’ve slept on Capacitor I urge you to give it a shot, it’s quite nice to work with and fixes all the major pain points I’ve had over the years with Cordova.
- jordanmoconnor 4y agoI think this type of decision comes down to resources available for development - if you're a one-person (or very small) team, managing one code-base and one deployment stack is way better and more reliable. On the other hand, native app performance is second to none when done well, and if you have dedicated developers to manage a separate deployment from the web interface then you're going to have a better time going native.
- calsy 4y agoWhy do supporters of exclusive native development have to act all pretentious about it. You are developing mobile apps, get over yourself. Guaranteed you could not tell if 10 randomly chosen apps were developed natively or cross platform. I'm sure you will say you can though.
- briandear 4y agoI certainly can tell with Slack.
- jamil7 4y ago> Guaranteed you could not tell if 10 randomly chosen apps were developed natively or cross platform. Depends, if it's React Native it's actually getting hard to tell with all the work they've done to UI performance and animations etc. Flutter or a wrapped web site on the other hand are immediately obvious to me, in fact there's a certain flavour of Flutter jank in lists that is an obvious tell. I can also tell when an app's using SwiftUI due to the presence of a particular navigation bug so "native" toolkits don't get a pass here either. I'm not sure it's pretentious it's just those developers are close to the topic and have opinions about it - you see it in other areas of software development too.
- bob1029 4y agoWe are doing this right now. We run iOS in an enterprise B2B setting and Apple made it shitty enough for us to look at more open paths. Our strategy for webapp involves nearly 100% raw vanilla javascript and some very unconventional techniques. One of my team members is about to demo it to a client.
- noduerme 4y agoThere used to be this thing called AIR where you could build a game and... oh never mind. Turned out the big problem wasn't cross-platform compiling, it was dealing with Apple randomly telling you that your game was removed for some totally random reason and forcing you to upgrade it and submit it again every couple weeks. Like, great, you compiled something for iOS. See how far that goes haha.
- ChrisMarshallNY 4y agoEh, Ionic is good. I’ve retired native apps that I wrote, in favor of Ionic apps that someone else wrote, and felt fine about it. But that “someone else” is a very good engineer, that did a great job. Good software is always gonna be difficult and expensive; regardless of the tools and platforms. Good engineers are expensive, and take the time to do things right. No shortcuts. No free lunch. We get all hung up on the tools, as if they make us good. It’s like someone with money, buying a top-of-the-line PRS guitar, and playing Smoke Over the Stairway to Freebird. If a tool makes it easy to do something cool, and, suddenly, we can do something we couldn’t, before, that’s nice. Enjoy it while it lasts. Some kid will blow us out of the water, using the same tool, shortly. Native will always give the best UX, if done by expert native developers, but, in many cases, this may not make financial sense. Also, bad native developers will do bad work; even though they are using top-shelf tech (Smoke Over…).
- lawgimenez 4y agoI have been in the mobile dev industry for over a decade and I can tell many have claimed that native development will eventually die. Here we are still working on native Kotlin and Swift. It all depends on the company, client and budget. So nothing will die, hybrid development won’t die and so do native.
- KaylaEverett 4y ago
- KaylaEverett 4y ago