





















































MobilePro #166: What’s new in React Native, iOS 18.4 and Xcode 16.3, Google redefines Android updates, GPT passes the Turing test, and more…
Hi ,
Welcome to the 166th edition of MobilePro! With WWDC 2025 around the corner, fresh SDK updates from Apple, and a landmark shift in Google’s Android strategy, this week’s headlines are brimming with momentum:
🚀 React Native 0.78 lands with React 19, vector drawable support, faster iOS brownfield integration, and a simpler React Compiler setup to boost performance and productivity.
🍏 Apple starts notifying WWDC 2025 in-person lottery winners ahead of the June 9 event at Apple Park.
🧰 iOS 18.4 and Xcode 16.3 bring smarter APIs and refined tools for developers. New StoreKit APIs, background UWB ranging, improved SwiftUI behavior, and modernized URLSession support aim to tighten your workflow.
📱 Google is redefining Android updates in 2025. With Android 16 on the horizon and update timelines now aligned with flagship rollouts, Google—backed by Qualcomm—is extending platform support up to eight years.
In our What’s Happening in AI? section, we’ll examine how GPT-4.5 fared in a modern Turing test setup and how RT-Trajectory from Berkeley’s Robot Learning Lab is teaching robots to perform full tasks from natural language. As always, stick around for our Developer Tip to sharpen your coding workflow, and don’t miss the Did You Know? segment.
Let’s dive in!
P.S.: If you have any suggestions or feedback, or would like us to feature your project on a particular subject, please write to us. Just respond to this email!
If there’s any major news in the world of mobile app dev in the last week, MobilePro has you covered.
What are mobile app developers discussing on forums and social networking sites? MobilePro brings any concerns, advice, or tutorials that mobile app developers have shared.
AI is evolving fast—are you keeping up? MobilePro brings you key discussions, trends, and expert takes in one place.
MobilePro presents the latest titles from Packt that ought to be useful for mobile developers.
Integration testing verifies the behavior of a complete app or a significant part of it, often involving multiple widgets and interactions. In this excerpt from Daria Orlova, Esra Kadah, and Jaime Blasco's Flutter Design Patterns and Best Practices, you will learn its intricacies:
In this section, we'll work on an improved version of widget testing that will interact between various components and logic to help us avoid having to use integration tests that will be run on a real device. On top of that, it will effectively validate the interactions between various parts of the app, making them closer to integration tests as defined by the Flutter documentation.
Creating a fake repository
Recall that we created FakeCartRepository at the beginning of this chapter. At this point, we also need to create a fake product repository since our tests need to validate more interactions between components. So, create a fake_product_repository.dart file in our current test folder and add the following code:
class FakeProductRepository implements ProductRepository {
@override
Future<List<Product>> fetchProducts() async {
return TestData.testProducts;
}
@override
Future<List<Product>> searchProducts(String query) async {
return TestData.testProducts.where((product) => product.name.contains(query)).toList();
}
}
The FakeProductRepository class implements the ProductRepository interface, providing hardcoded responses for fetching and searching products. This allows us to control the data that's returned during tests. To ensure we're always using the same values, we're using TestData, which we created previously.
Displaying an item in the cart test
Since we also have the product repository now, we can verify the action of showing the candy and its total pricing in CartPage after the user adds a product to the cart.
Let’s create our integration_test.dart file under the test folder. Add the following code to it:
testWidgets('should display an item in the cart', (WidgetTester tester) async {
final fakeCartRepository = FakeCartRepository();
final cartBloc = CartBloc(cartRepository: fakeCartRepository);
final product = TestData.testProductListItem;
await fakeCartRepository.addToCart(product);
await tester.pumpWidget(
MaterialApp(
home: BlocProvider<CartBloc>(
create: (_) => cartBloc,
child: const CartPage(),
),
),
);
await tester.pump();
expect(find.text('Test Bean'), findsOneWidget);
expect(find.text('Total:'), findsOneWidget);
expect(find.text('2.0 €'), findsOneWidget);
});
Now, as you go through the code, you'll see steps similar to the ones we passed in previous sections. Here, we're creating an instance of FakeCartRepository and CartBloc, adding the product to the repository, pumping it to ensure the widget tree is built, and verifying that the product’s name and price are displayed correctly in the cart.
***
There is plenty more to integration testing, which you can read in Flutter Design Patterns and Best Practices.
This week we bring you tips and best practices on building a high-performance React Native app. Head over to the React Native Insights page to unlock all the best practices and tips.
In case you have any tips to share with your fellow mobile developers, do reply to this mail and we’d be glad to feature you in a future edition of MobilePro.
Apple has been fined €150 million by France's antitrust regulator over its App Tracking Transparency tool, marking the first such penalty globally. The authority ruled that Apple's implementation unfairly hindered smaller publishers and advertisers, despite its stated goal of enhancing user privacy. While Apple expressed disappointment, it won't be required to change the tool immediately. Compliance could be delayed as similar investigations continue across several EU countries.
Sourced from Reuters.
👋 And that’s a wrap. We hope you enjoyed this edition of MobilePro. If you have any suggestions and feedback, or would just like to say hi to us, please write to us. Just respond to this email!
Cheers,
Runcil Rebello,
Editor-in-Chief, MobilePro