Rating: 5.00 / 5 Based on 11 reviews
Every year, there is a new version of iOS coming out. It’s a very important time for all developers since they must comply with all the latest changes and prepare for this new version. Coincidentally, recently was also released the latest Android - version 13 with the codename Tiramisu.
Today, let’s have a quick look at what it means for maintainers of existing apps that want to fully support the newest operating systems and for developers of new apps that don’t want to be surprised with something that changed and they aren’t prepared for it. We will focus on native changes, but even if you are not a native developer and use a cross-platform solution like Flutter, it will still be a very informative guide on the latest changes since there will be multiple references to Google’s framework.
When it comes to breaking changes, there are lots of them on Android. On iOS, the situation looks completely different as Apple focused on new features in this release.
There is a new feature called Foreground Services Task Manager - it allows users to stop the app from the notification drawer. This behavior differs from a simple swipe-up, so make sure it works correctly with your application.
Starting from Android 13, media controls are based on PlaybackState. It helps show a consistent interface not only between smartphones and tablets but also between Android Auto and Android TV. If your app uses audio playback, you should look more deeply into that.
Non-matching intents are now blocked when <intent-filter> doesn’t match in the receiving app. This change was made to increase security, so if you have an exported component that can be invoked by other apps, you should correctly declare <intent-filter> in your app.
Legacy “SpeechService” is now removed. In the previous version of Android, there was a trampoline, but it is no longer present. If your app uses SpeechService, then migrate to the device's default provider as soon as possible instead of utilizing a specific implementation.
New permissions are a part of breaking changes in the latest version of Android since some of them have changed. Take a closer look at them and implement them as needed.
READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE got replaced by READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, and READ_MEDIA_AUDIO for more granular and simpler access management to the stored media files.
Until now, you didn’t need any special permissions to send push notifications. It changes now with the addition of POST_NOTIFICATIONS. Your users will see a new popup with a question of whether to grant your app those permissions or not.
There are also new permissions to handle discovering and connecting to nearby Bluetooth and Wi-Fi devices. Those permissions are called NEARBY_DEVICES and NEARBY_WIFI_DEVICES, respectively.
If your app uses body sensors that check heart rate or body temperature, you may be interested in BODY_SENSORS_BACKGROUND - it’s required if your app uses them in the background.
If you are a developer of a clock or timer app, you can use new permission that is granted automatically - USE_EXACT_ALARM. Keep in mind, though, that if your app isn't a clock/timer/calendar app, then it will be rejected.
Valid permissions are crucial for an app to work properly. If you have an app in Flutter, then you probably used or at least heard about permission_handler. Developers behind it are on their way to fully supporting all of those latest changes. At the time of writing this article, they already support POST_NOTIFICATIONS with new media-related permissions on their way. You can check the current progress of work on the page for the dedicated GitHub issue.
As mentioned earlier, there aren’t really that many changes to iOS in terms of breaking changes. Nonetheless, there are many deprecations - Xcode 14 deprecates Bitcode, iOS 16 deprecates things such as SKDownload API with the option to upload non-consumable in-app purchase assets, FTP for URLSession, or some APIs from Maps Capability. There are also more low-level changes related to CoreGraphics or Metal, but due to their complexity, you should check with your IDE whether those apply to your app.
The newest versions of both operating systems come with quite a big set of new features. To give your users the best experience, you can consider implementing them in your app if it matches your needs. Take a look at the features listed below, and maybe you will find something that suits your needs.
In the latest Android, you can opt-in to a new feature called predictive back gesture. Thanks to that, when going back with a gesture, users can see the screen they are returning to. It allows for an easier and more predictive experience. It’ll also be the default behavior on Android, starting with version 14.
Android 13 introduces a new UI for copy and paste. Users can now see what they have on the clipboard. Unfortunately, Flutter doesn’t fully support this feature as of now - sensitive content is visible when copying.
If you’ve ever had an opportunity to look at the Material 3 design system, then you probably noticed that the interfaces’ colors are adaptive - they change based on the users’ color scheme. The newest Android takes that even a step further and allows you to define themed app icons that will tint themselves to match the rest of the UI.
There is also some good news if your app supports multiple languages. Thanks to android:localeConfig and new APIs available in LocaleManager, users can now set app language preferences in a centralized location directly in the system preferences.
If you used iOS in the past 2 years, then there is a good chance that you saw their new photo picker. Now, a feature like that arrives also on Android. As it’s the case on iOS, on Android, you also don’t need any additional permissions to use that, and it’s a safe and very useful feature to provide a uniform experience across all the apps. As with other in-app interface changes, Flutter still doesn’t fully support it and awaits an update.
Many great features are coming to iOS this year. Starting with changes to StoreKit 2, you can now get purchase details, check the date of pre-orders, control when the message sheet appears in the app thanks to the StoreKit Message API and show code redemption sheet, and request App Store review within the app (limited to 3 times within 365 days). There are also new properties in the StoreKit products, such as price locale or server environment, which returns the information on which server (production, sandbox, or Xcode) the purchase occurred.
There is also a property that shows the most recent period of continuous subscription called the Recent subscription start date. Keep in mind that it includes free trials and promotional purchases and reports a gap within 60 days (10 minutes in a sandbox environment) between two subscriptions as a single subscription.
There are some new APIs for App Store Server, the most interesting probably are in-app purchase history, notification history, and the ability to send a test notification.
With iOS 16, push notifications are finally coming to Safari. Unfortunately, it will happen in 2023 as a separate update.
Passkey is a great new feature that allows users to log in completely password-less and thus avoiding any potential leaks.
Shared with You API allows you to check all the data that was shared with you.
Thanks to the Live Text API, you can extract text from any photo or video.
With the latest update, Apple also allows you to make your app adapt to users’ Focus changes. When a user changes their profile to, e.g., “Work Focus,” the iOS will call your SetFocusFilterIntent, and based on that, you can modify your app’s behavior.
There is a completely new service from Apple called WeatherKit. It allows you to retrieve weather information inside of your app and use the REST API that Apple provides. It’s awesome if you want to create a new app that is based on weather data.
From other features, there is now support for the AVIF. Surprisingly, it doesn’t mean that Apple started to support the AV1 video format on which the AVIF (AV1 Image File Format) is based.
Mac Catalyst allows for even better migration of iPad apps to Mac. You can share code and add specific features only for Mac. You can easily optimize your interface and utilize all of the standard macOS APIs.
There are also live activities and lock screen widgets that have become quite popular. Live activities are basically widgets that are supposed to be used as notifications that show currently important information. For example, Uber may use that to show where your driver is. Lock Screen widgets are quite self-explanatory. From what we have seen, those widgets are translucent to match the feel of the lock screen.
There is another change - App Clips are now up to 15 MB. It might be useful if you had issues with fitting all the features that you wanted inside a 10 MB archive. Flutter has an experimental guide on adding its rendering to App Clips, but with such a big overhead in size (currently over 11 MB), it’s a way better idea to stick with native implementation in Swift.
The two giants in the field of mobile operating systems are doing what they can to introduce new features that will help them bring new people to their platforms. As a result, developers have more work to keep up with the constantly changing APIs and functionalities. It’s not an easy task to follow all of those changes and to continuously support the latest and greatest features.
Flutter and third-party developers have already released some updates to address them, and there are many more to come. Try to keep your dependencies up-to-date to access them and check changelogs regularly. For example, audio_service fixed builds on Android 13 in version 0.18.6, and flutter_local_notifications added support for the new notification dialog in 9.8.0.
Hopefully, articles like this make it a little easier to save time you can spend on providing the best experience to your users with all of those features mentioned above.