MobilePro #159: Meet Flock, Appium vs. XCTest (UI) for iOS App Testing, Web Page Responsiveness, FTC's rule banning fake online reviews, Swarm, DeskPad.
Welcome to the mobile app development world with the 158th edition of _mobilepro!
In this edition we cover mobile development community discussions on:
Stop Relying on MediaQuery for Sizing in Flutter! Here's What to Use Instead
12 Top Flutterflow App Development Agencies for Any Use Case
A Guide to Choosing Between Appium and XCTest (UI) for iOS App Testing
In our relatively new section captures internet jibber-jabber about the mobile ecosystem:
Today's news covers release stories on Apple, Android, React Native, JetBrains and Microsoft. And if you are currently developing an iOS app, checkout this week's resources on iOS tools. Don’t miss this week’s tutorial from the book ‘C# 12 and .NET 8 – Modern Cross-Platform Development Fundamentals’ .
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 you liked this installment in our new series, fill in our survey below and win a free PDF on your Packt account.
Take the Survey Now!
Thanks,
Apurva Kadam
Editor-in-Chief, Packt
Mobile App Dev Community Speak
What are Mobile developers discussing? What are the latest tips and tricks? Shortcuts and experiments? Cool tutorials? Releases and updates? Find it all out here.
Stop Relying on MediaQuery for Sizing in Flutter! Here's What to Use Instead - MediaQuery is not the best tool for responsive design in Flutter. Actually, it's far from it. I know, it’s tempting to scale widgets based on the percentage of screen size and call it a day. But using MediaQuery for sizing, while seemingly simple, is a slippery slope that often leads to weird and problematic layouts. Unfortunately, many beginners fall into the trap of using fractional sizing because it seems like an easy solution at first. But if you’re serious about creating responsive apps, it’s time to reconsider how you approach this.
Flutter is Getting a Makeover! Meet Flock, the New Community-Driven Framework Set to Change Everything - Flutter has empowered millions of developers to build seamless, cross-platform apps, but as demand grows, cracks are beginning to show. Despite its popularity, the Flutter team is stretched too thin, facing backlogs that can leave bugs and feature requests unresolved for too long. This bottleneck frustrated users across the community and led to the birth of a new solution: Flock — a fork of Flutter developed by the community for the community. Flock represents a community-driven effort to overcome the limitations Flutter currently faces. With a more agile review process, enhanced support, and a welcoming approach to contributions, Flock aims to provide a more responsive alternative to Flutter, shaped by those who use it the most.
12 Top Flutterflow App Development Agencies for Any Use Case - This article is intended for everyone interested in Flutterflow app development. It will help you navigate this market segment and provide insights on how to choose the right partner for bringing your project to life. I will give a detailed overview of the top agencies specializing in Flutterflow app development and what makes them unique.
A Comprehensive Guide to Choosing Between Appium and XCTest (UI) for iOS App Testing - Popular testing frameworks for iOS apps with distinctive features and functionalities include Appium and XCTest (UI). For developers and testers, choosing which one to employ might be a difficult process. This blog highlights the comparison between Appium and XCTest (UI) and helps you choose the right tool for your iOS app testing needs. The blog also details the features, pros, and cons of each framework and provides insights into which one is best suited for different types of iOS app testing scenarios.
How to fix the error: DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead - In Xcode 15, Apple made a modification to the variable that points to the default toolchain location, replacing from $DT_TOOLCHAIN_DIR to $TOOLCHAIN_DIR. If your project or target relies on the previous variable, you should update it to use $TOOLCHAIN_DIR. To perform this replacement, you can add the following code snippet at the end of your project’s Podfile. This error was on a MacOS v14 (Sonoma), XCode 15.4, Swift 5.0 regarding the Firebase and Firebase Analytics Pods.
How to make your Web Page Responsive - A good well-designed responsive web page makes sure that the user has an optimal view experience and a uniform user experience irrespective of the device the user is using. Responsiveness not only enhances the user experience but also plays a major role in the SEO ranking of the website. And when it comes to adding responsiveness, the first thing that comes in mind is the media queries. In this blog, we will go through what are media queries, and how you can use them to make your web page responsive.
Mobile App Dev Repos
Check this space for new repos, projects and tools each week! This week we bring you a collection of iOS tools for media processing:
PSPDFKit - Render PDF, add/edit annotations, fill forms, add/edit pages, view/create digital signatures.
TPPDF - Generate PDF using commands and automatic layout.
FastPdfKit - A Static Library to be embedded on iOS applications to display pdf documents derived from Fast PDF.
UIImagePlusPDF - UIImage extensions to simply use PDF files.
Trending Titles
Our weekly recommendations of the best resources in Mobile App Development!
Featured: Responsive Web Design with HTML5 and CSS
If you’re tired of static websites that just don’t perform, it’s time to upgrade your skills with Responsive Web Design with HTML5 and CSS—a self-paced course designed to turn you into a responsive web design pro led by Ben Frain, the author of the best-selling book Responsive Web Design with HTML5 and CSS, 4th Edition!
With over 20 years of experience in web development, Ben Frain—currently the UI-UX Technical Lead at bet365—guides you through key techniques to help you build fully responsive websites using HTML5 and CSS.
Watch the 'Responsive Web Design with HTML5 and CSS' Video Now!
Buy eBook now at $35.99 $24.99
Mastering Kotlin for Android 14
Buy eBook now at $31.99 $21.99
Thriving in Android Development Using Kotlin
Buy eBook now at $35.99 $24.99
Internet Jibber-Jabber
Random curious musings and interesting words about Mobile Dev on the Internet.
FTC's rule banning fake online reviews goes into effect - A federal rule banning fake online reviews is now in effect. The Federal Trade Commission issued the rule in August banning the sale or purchase of online reviews. The rule, which went into effect Monday, allows the agency to seek civil penalties against those who knowingly violate it.
Swarm - An educational framework exploring ergonomic, lightweight multi-agent orchestration managed by OpenAI Solution team. Swarm is currently an experimental sample framework intended to explore ergonomic interfaces for multi-agent systems. It is not intended to be used in production, and therefore has no official support. (This also means we will not be reviewing PRs or issues!) The primary goal of Swarm is to showcase the handoff & routines patterns explored in the Orchestrating Agents: Handoffs & Routines cookbook. It is not meant as a standalone library, and is primarily for educational purposes.
DeskPad – DeskPad is a virtual monitor for screen sharing. Certain workflows require sharing the entire screen (usually due to switching through multiple applications), but if the presenter has a much larger display than the audience it can be hard to see what is happening. DeskPad creates a virtual display that is mirrored within its application window so that you can create a dedicated, easily shareable workspace.
The Internet Archive is under attack, with a breach revealing info for 31 million accounts - A pop-up message said the online archive has suffered ‘a catastrophic security breach,’ as its operators say the site has been DDoS’d for days. HIBP refers to Have I Been Pwned, a website where people can look up whether their information has been published in data leaked from cyberattacks. HIBP operator Troy Hunt confirmed to BleepingComputer that he received a file containing “email addresses, screen names, password change timestamps, Bcrypt-hashed passwords, and other internal data” for 31 million unique email addresses nine days ago and confirmed it was valid by matching data with a user’s account.
GroupTrack - Stay connected, Anywhere! - Welcome to GroupTrack, an open-source Flutter application designed to enhance family safety 👫 through real-time location sharing and communication features. GroupTrack aims to provide peace of mind by ensuring the safety of your loved ones while facilitating seamless communication regardless of their location. GroupTrack adopts a declarative UI approach with Flutter and utilizes flutter riverpod for state management. This architecture promotes a clear separation of concerns, making the codebase more maintainable, scalable, and testable. Flutter’s widget-based system allows for the creation of highly responsive UIs, while flutter riverpod ensures efficient state handling across different components, leading to a smooth and intuitive user experience.
Mobile App Development Tutorial
An excerpt from ‘C# 12 and .NET 8 – Modern Cross-Platform Development Fundamentals’ By Mark J. Price
Deleting entities
You can remove individual entities with the Remove
method. RemoveRange
is more efficient when you want to delete multiple entities.
Let’s see how to delete rows from a table:
In Program.Modifications.cs
, add a method to delete all products with a name that begins with a specified value (Bob
in our example), as shown in the following code:
private static int DeleteProducts(string productNameStartsWith)
{
using NorthwindDb db = new();
IQueryable<Product>? products = db.Products?.Where(
p => p.ProductName.StartsWith(productNameStartsWith));
if (products is null || !products.Any())
{
WriteLine("No products found to delete.");
return 0;
}
else
{
if (db.Products is null) return 0;
db.Products.RemoveRange(products);
}
int affected = db.SaveChanges();
return affected;
}
In Program.cs
, comment out the statements to update the product, and then add statements to call DeleteProducts
, as shown in the following code:
WriteLine("About to delete all products whose name starts with Bob.");
Write("Press Enter to continue or any other key to exit: ");
if (ReadKey(intercept: true).Key == ConsoleKey.Enter)
{
int deleted = DeleteProducts(productNameStartsWith: "Bob");
WriteLine($"{deleted} product(s) were deleted."); } else { WriteLine("Delete was canceled.");
}
Run the code, press Enter, and view the result, as shown in the following partial output:
1 product(s) were deleted.
If multiple product names started with Bob
, then they would all be deleted. As an optional challenge, modify the statements to add three new products that start with Bob
and then delete them.
Read the ‘C# 12 and .NET 8 – Modern Cross-Platform Development Fundamentals’ book now!
What's Happening in Mobile Development?
Your dose of the latest releases, news and happenings in the Mobile Development industry!
Apple
Apple’s all-new Mac mini is more mighty, more mini, and built for Apple Intelligence - Apple today unveiled the all-new Mac mini powered by the M4 and new M4 Pro chips, and redesigned around Apple silicon to pack an incredible amount of performance into an even smaller form of just 5 by 5 inches. With M4, Mac mini delivers up to 1.8x faster CPU performance and 2.2x faster GPU performance over the M1 model.1
Apple Intelligence is available today on iPhone, iPad, and Mac - Users can now tap into Apple Intelligence to refine their writing; summarize notifications, mail, and messages; experience a more natural and capable Siri; remove distracting objects from images with Clean Up; and more
Android
Compose Runtime 1.7.0 enhances composition locals with computed defaults, optimizes state object accessibility and composable function generation, and improves lambda invalidation and callback ordering.
Compose Material 3 Adaptive 1.0.0 provides tools and components to build adaptive Android UIs for different screen sizes and devices.
Compose Material 1.7.0 stabilizes BottomDrawer, ModalBottomSheet, and BackdropScaffold components, migrates to new ripple APIs, and improves performance by optimizing MutableInteractionSource usage.
Compose Foundation 1.7.0 significantly boosts performance in key modifiers, introduces a new Indication API for efficiency, refines clickable components, and adds new features for text, layout, and animations.
Compose Animation 1.7.0 introduces new shared element transition APIs for smoother animations, improves existing APIs with features like custom content alignment and deferred target animation, and stabilizes several APIs including AnimatedVisibilityScope and LookaheadScope.
Collection 1.4.3 enhances performance, particularly for ScatterMap and ScatterSet, and addresses a data corruption bug in those collections.
Camera 1.5.0-alpha01 introduces new APIs for dual camera video capture configuration and audio control in recordings, along with bug fixes for crashes and black screen issues.
Media3 1.4.1 addresses various issues, including handling preload callbacks asynchronously, allowing playback even with loading failures, fixing errors in MP3 and TTML handling, resolving DRM issues on API 31+ devices, and improving media control and session management.
JetBrains
IDE Services Cloud Release and Floating License Server End-of-Life Announcements - JetBrains IDE Services, the enterprise suite of products dedicated to improving developer productivity across an entire organization, is now available in the cloud! By offering a JetBrains-managed service, IDE Services Cloud simplifies license management, enhances security, and provides seamless scalability, ensuring that organizations can focus more on development and less on administration.
Microsoft
Introducing Microsoft.Extensions.VectorData Preview - We are excited to introduce the Microsoft.Extensions.VectorData.Abstractions library, now available in preview. Just as the Microsoft.Extensions.AI libraries offer a unified layer for working with AI services, this package provides the .NET ecosystem with abstractions that help integrate vector stores into .NET applications and libraries.
And that’s a wrap.
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!