I have an app written in Swift and weights between 8-20Mb(depending on device and iOS version), which is not too far of from a typical website these days and the startup times are phenomenal(between 250-500ms, depending on the devıce).
Writing in Swift is a delight and this is the feature I was dreaming about because having the user to install the App is not easy these days(100 impressions on Appstore Search would get me about 8 installs) however the people who install it are quite happy according to the feedback.
I would imagine that the experience is similar to Apple's AR experience on Safari, which I feel can be improved but much nicer than opening the Appstore still. Let's hope that it's not too limited and can be possible to give a good feel to the user about the App's full functionality.
The article talks about letting the dev to pick which part of the App would be presented but I suspect that the actual implementation would be similar to making an App Extensions - basically creating a separate mini-app that shares the codebase and the resources.
It's hard to imagine, but some DOS apps had <100ms startup time on a 486 while coming full-featured on a 1.44MB floppy disk.
I agree that your app is small and fast compared to what others are putting out there, but compared to what software engineering could do if people cared, this is still bloated and slow.
And it had 2 squares on the screen with 10 pixel letters inside them saying 'Proceed y/n'?
What kind of a comparison is that? People do care, it's just they care about ease of use (not putting strain on your sanity) over some imperceptible startup time difference or space difference on hard drives that get cheaper every day.
I bet I can get this number lower with some lazy loading but what for? The app is loaded by the time the springboard animation ends, the user interaction isn't likely to start before that.
It's a new App that I try to iterate quickly, so I prefer to keep away of added complexity that optimizations would bring. If it feels quick enough on the lowest end device that I support(which is iPhone 6s because of iOS13) it's alright. The mobile devices are very powerful these days.
When you are used to desktop apps coming up and being useable literally in the next frame of you launching them, any interaction with mobile decices and webbpages with loading times everywhere is absolutely terrible. Makes me remember all the game consoles which would have loading time ms everywhere - it was terrible and frustrating when you were used to PCs
A large part of the bloat is from graphics assets. The icon for most apps is many times larger than these old programs and you can’t do much about that. It’s one thing people don’t realize that happens when you get these hidpi screens.
With Objective-C apps, it used to be even better, in startup and in app size. I think you can still get similar app size if you make a pure Obj-C app today.
The nature of swift itself, similar to C++, makes it create bigger binaries compared to equivalent Objective-C code. So even with no runtime included, they will still be bigger on average.
What's the status of Objective C language today? Is it fully supported forever or is it in legacy status waiting for its support to be dropped in the future?
It will be fully supported probably forever since Apple wrote a ton of their own systems in it and it has perfect integration with C and C++. The language is basically done at this point, any new features will probably be aimed at language interop.
Thanks. I'm not a vivid iOS developer, but I'm writing some apps sometimes. Swift is so fast moving target that I don't want to pursue it, while Objective C is a language that I know and actually like. It's like C vs C++, I learned C++ 15 years ago, but it's completely different since then, so my knowledge is basically useless without solid investments, while C is almost the same as it was 30 years ago.
Before Swift become a thing I look at Objective-C but it was so irritating that I stuck with JavaScript. It's probably faster but what difference it would make to open the app faster than what the user can perceive? I can use static images to give the impression that the app is already running, which is recommended by Apple anyway since the user won't be able to react before the app is fully loaded anyway.
The unnecessarily large apps probably use cross-platform tools that ship their runtime with each installation, losing out on Apple's optimizations or they have multiple ad tracking or 3rd party UI libraries.
I am not an expert in mobile dev by any means since I switched from web to native mobile development barely a year ago but when I was still resisting to learn the native way of doing things I was exploring the cross-platform solutions and libraries to "take advantage of my current skills", anything that goes beyond the demo todo list app quickly escalated in resource consumption and development complexity.
With these cross-platform tools, the moment you try to do something a little bit differently than everybody else, you find yourself stitching multiple 3rd party libraries together and these libraries add up to the binary size and loading times.
> With these cross-platform tools, the moment you try to do something a little bit differently than everybody else, you find yourself stitching multiple 3rd party libraries together and these libraries add up to the binary size and loading times.
This.
I have tons of native iOS experience.
Started with react native a little over a year ago and was shocked at how difficult some things are. Easy things are easier. Hard things are harder.
I think adding the Facebook SDK added something like 40-120MB to my app if memory serves me correct. One more reason I always use the mobile web version in a WebView every time I can get away with it. It has all of these dependencies like Bolts and what not. All to display 2-3 screens worth of login.
Hmm it might be worth you checking out capacitor, I've shipped a couple of full featured fairly complex apps under 5mb that use the same codebase for iOS and android.
I steered clear of ionic and angular developing my own framework and the apps had less than 1mb of assets bundled with them.
Writing in Swift is a delight and this is the feature I was dreaming about because having the user to install the App is not easy these days(100 impressions on Appstore Search would get me about 8 installs) however the people who install it are quite happy according to the feedback.
I would imagine that the experience is similar to Apple's AR experience on Safari, which I feel can be improved but much nicer than opening the Appstore still. Let's hope that it's not too limited and can be possible to give a good feel to the user about the App's full functionality.
The article talks about letting the dev to pick which part of the App would be presented but I suspect that the actual implementation would be similar to making an App Extensions - basically creating a separate mini-app that shares the codebase and the resources.