Introduction
As 2021 draws to a close, it is an opportune moment to reflect on a transformative year for iOS development. Apple introduced significant changes across the development stack, from fundamental language improvements in Swift to new frameworks, APIs, and business model options. For Australian app developers and businesses investing in iOS applications, understanding these changes is essential for planning future development work.
This review examines the major developments that shaped iOS development in 2021 and their implications for building apps in 2022 and beyond.
iOS 15: A Feature-Rich Release

Release and Adoption
Apple released iOS 15 on 20 September 2021, following its announcement at WWDC in June. The release introduced numerous features affecting both user experience and developer capabilities. Early adoption has been steady, with approximately 60% of active devices running iOS 15 by early December, though adoption is slower than iOS 14’s rapid uptake.
Focus and Notification Improvements
iOS 15 introduced Focus modes, allowing users to filter notifications and apps based on their current activity. For developers, this means:
Notification Relevance: The new notification summary feature groups non-urgent notifications for delivery at scheduled times. Notifications marked as time-sensitive or with high priority continue to be delivered immediately. Developers should review their notification strategies to ensure important communications reach users promptly while respecting their focus preferences.
Communication Notifications: A new notification type for direct messages from people ensures that personal communications break through Focus filters when appropriate. Apps handling messaging or communication should implement these appropriately.
let content = UNMutableNotificationContent()
content.title = "Message from John"
content.body = "Are you coming to the meeting?"
content.interruptionLevel = .timeSensitive
SharePlay and Group Activities
SharePlay enables shared experiences during FaceTime calls, allowing users to watch video, listen to music, or interact with apps together. The GroupActivities framework provides the foundation:
import GroupActivities
struct WatchPartyActivity: GroupActivity {
let movie: Movie
var metadata: GroupActivityMetadata {
var metadata = GroupActivityMetadata()
metadata.title = "Watch \(movie.title)"
metadata.type = .watchTogether
return metadata
}
}
For apps with social or entertainment components, SharePlay offers compelling engagement opportunities. The ability to experience content together, even when physically apart, addresses user behaviours that became prominent during pandemic restrictions.
Live Text and Visual Look Up
iOS 15’s Live Text feature recognises text in photos and enables interaction with it. While this is primarily a system feature, apps can leverage the VisionKit framework for similar capabilities:
import VisionKit
let dataScanner = DataScannerViewController(
recognizedDataTypes: [.text()],
qualityLevel: .balanced,
isHighlightingEnabled: true
)
This enables document scanning, business card recognition, and other text extraction use cases within apps.
Weather and Maps Improvements
Apple significantly updated its Weather app with new data sources and visual design. More importantly for developers, WeatherKit APIs (currently in development) will provide access to Apple’s weather data for third-party apps, likely coming in 2022.
Maps improvements include detailed city experiences in select cities, improved navigation, and a new globe view. For apps using MapKit, new features include:
let camera = MKMapCamera()
camera.pitch = 45 // Tilt for 3D perspective
camera.altitude = 1000
mapView.camera = camera
mapView.mapType = .standard // Shows enhanced city details where available
Swift 5.5: Structured Concurrency Revolution
Async/Await Arrives
The most significant Swift development in 2021 is arguably the introduction of structured concurrency with async/await syntax in Swift 5.5. This fundamentally changes how developers write asynchronous code:
Before (Completion Handlers):
func fetchUser(id: String, completion: @escaping (Result<User, Error>) -> Void) {
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
completion(.failure(error))
return
}
guard let data = data else {
completion(.failure(NetworkError.noData))
return
}
do {
let user = try JSONDecoder().decode(User.self, from: data)
completion(.success(user))
} catch {
completion(.failure(error))
}
}.resume()
}
After (Async/Await):
func fetchUser(id: String) async throws -> User {
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode(User.self, from: data)
}
The reduction in boilerplate and improved readability is dramatic. Error handling becomes straightforward with try/catch rather than nested Result handling.
Actors for Safe Concurrency
Actors provide a new reference type that protects its mutable state from data races:
actor BankAccount {
private var balance: Decimal
init(initialBalance: Decimal) {
balance = initialBalance
}
func deposit(amount: Decimal) {
balance += amount
}
func withdraw(amount: Decimal) throws {
guard balance >= amount else {
throw BankError.insufficientFunds
}
balance -= amount
}
func getBalance() -> Decimal {
return balance
}
}
The compiler enforces that actor-isolated state is only accessed from within the actor or through awaited calls, eliminating entire categories of concurrency bugs.
Task Groups and Structured Concurrency
TaskGroup enables parallel execution with structured lifetime management:
func fetchAllUsers(ids: [String]) async throws -> [User] {
try await withThrowingTaskGroup(of: User.self) { group in
for id in ids {
group.addTask {
try await fetchUser(id: id)
}
}
var users: [User] = []
for try await user in group {
users.append(user)
}
return users
}
}
Tasks are automatically cancelled if an error occurs, preventing wasted work and resource leaks.
SwiftUI 3.0: Increasing Maturity
List Improvements
SwiftUI’s List received substantial improvements making it more capable for production apps:
Pull to Refresh:
List {
ForEach(items) { item in
ItemRow(item: item)
}
}
.refreshable {
await loadItems()
}
Swipe Actions:
List {
ForEach(items) { item in
ItemRow(item: item)
.swipeActions(edge: .trailing) {
Button(role: .destructive) {
deleteItem(item)
} label: {
Label("Delete", systemImage: "trash")
}
}
}
}
Searchable Modifier:
NavigationView {
List {
ForEach(filteredItems) { item in
ItemRow(item: item)
}
}
.searchable(text: $searchText)
.navigationTitle("Items")
}
New Focus State Management
SwiftUI now provides proper focus management for forms and text input:
struct LoginForm: View {
@State private var username = ""
@State private var password = ""
@FocusState private var focusedField: Field?
enum Field {
case username, password
}
var body: some View {
Form {
TextField("Username", text: $username)
.focused($focusedField, equals: .username)
SecureField("Password", text: $password)
.focused($focusedField, equals: .password)
Button("Submit") {
// Validate and dismiss keyboard
focusedField = nil
}
}
}
}
AsyncImage for Remote Images
Loading remote images becomes trivial with AsyncImage:
AsyncImage(url: URL(string: imageURL)) { phase in
switch phase {
case .empty:
ProgressView()
case .success(let image):
image
.resizable()
.aspectRatio(contentMode: .fit)
case .failure:
Image(systemName: "photo")
.foregroundColor(.gray)
@unknown default:
EmptyView()
}
}
Canvas for Custom Drawing
The new Canvas view provides high-performance drawing capabilities:
Canvas { context, size in
let rect = CGRect(origin: .zero, size: size)
// Draw gradient background
context.fill(
Path(rect),
with: .linearGradient(
Gradient(colors: [.blue, .purple]),
startPoint: .topLeading,
endPoint: .bottomTrailing
)
)
// Draw shapes
for i in 0..less than 10 {
let circle = Path(ellipseIn: CGRect(
x: CGFloat(i) * 40,
y: size.height / 2 - 20,
width: 40,
height: 40
))
context.fill(circle, with: .color(.white.opacity(0.5)))
}
}
Privacy Changes Continue
App Tracking Transparency Impact
The App Tracking Transparency (ATT) framework, introduced in iOS 14.5, has been in full effect throughout 2021. The impact on the advertising ecosystem has been substantial:
Low Opt-In Rates: Industry data suggests only 15-25% of users opt in to tracking when presented with the ATT prompt. This has disrupted advertising-dependent business models and forced a pivot toward first-party data strategies.
SKAdNetwork Adoption: Apple’s privacy-preserving attribution framework has become the primary method for measuring iOS advertising effectiveness. Developers must implement SKAdNetwork conversion values and understand its limitations for campaign optimisation.
Mail Privacy Protection
iOS 15 introduced Mail Privacy Protection, which loads remote content privately, hiding IP addresses and preventing senders from knowing when emails are opened. For apps with email marketing components, open rates are no longer reliable metrics.
App Privacy Report
Users can now view a detailed report of app sensor and data access. Apps accessing location, camera, microphone, photos, or contacts should ensure they only do so when genuinely needed and provide clear explanations.
App Store Developments
In-App Events
Apple introduced App Store in-app events, allowing developers to showcase timely events like competitions, premieres, or special offers directly in App Store search and browse:
Event Type: Challenge
Event Name: Summer Fitness Challenge
Short Description: Join our 30-day challenge
Long Description: Complete daily workouts and compete...
Media: Event card image and video
Date Range: July 1 - July 31
Events appear in search results and editorial sections, providing organic visibility for engaging app content.
Custom Product Pages
Developers can now create up to 35 custom product pages with different screenshots, app previews, and promotional text. These pages can be linked from specific marketing campaigns, allowing tailored messaging for different audiences.
Product Page Optimisation
A/B testing for App Store product pages enables data-driven optimisation of icons, screenshots, and app previews. Tests can run for up to 90 days with customisable traffic allocation.
Small Business Program Continues
Apple’s App Store Small Business Program, offering a reduced 15% commission rate for developers earning less than $1 million annually, has been in effect throughout 2021. This provides meaningful savings for independent developers and small studios.
Xcode and Development Tools
Xcode Cloud Announced
Apple announced Xcode Cloud at WWDC 2021, a continuous integration and delivery service built into Xcode. Currently in beta, Xcode Cloud will automate building, testing, and distributing apps when it launches fully.
Key features include:
- Integration with GitHub, GitLab, and Bitbucket
- Parallel testing across multiple simulator configurations
- Automatic TestFlight distribution
- Built-in code signing management
Xcode 13 Improvements
Xcode 13, released alongside iOS 15, brought:
Vim Mode: For developers who prefer Vim keybindings, Xcode now offers an opt-in Vim mode with common motions and commands.
Swift Concurrency Debugging: The debugger understands async/await, showing task hierarchies and making concurrent code easier to debug.
Documentation Compiler: DocC enables creating rich documentation with tutorials and articles, publishable as static websites or integrated into Xcode’s documentation viewer.
Column Breakpoints: Set breakpoints at specific columns within a line, useful for debugging complex expressions or closures.
Hardware Developments
M1 Macs and Development
The transition to Apple Silicon continued in 2021 with the M1 Pro and M1 Max chips in the new MacBook Pro models announced in October. For iOS developers, Apple Silicon Macs offer:
Direct iOS App Execution: Run iOS apps directly on Mac without a simulator, enabling faster iteration during development.
Improved Build Performance: Xcode compilation and simulator performance are dramatically faster on Apple Silicon compared to Intel Macs.
Unified Memory Architecture: The efficient memory system supports running multiple simulators simultaneously without the performance penalties common on Intel Macs.
New iPhone Models
iPhone 13 and iPhone 13 Pro, released in September, introduced:
ProMotion Displays: 120Hz refresh rates on Pro models enable smoother animations. Apps should use CADisplayLink with appropriate frame rates and test that animations feel natural at higher refresh rates.
Cinematic Mode: Video recording with depth effects creates opportunities for video-focused apps to incorporate similar techniques.
Photographic Styles: New camera processing options may influence how apps approach photo editing and filters.
Conclusion
2021 has been a year of significant advancement for iOS development. Swift’s structured concurrency represents the most substantial language improvement since Swift’s introduction, fundamentally improving how developers write asynchronous code. SwiftUI’s continued maturation makes it increasingly viable for production applications, while iOS 15’s features provide new ways to engage users.
The privacy changes that began with iOS 14 have become the new normal, requiring developers to build apps that respect user privacy while still delivering personalised experiences through first-party data.
For Australian developers and businesses planning iOS development in 2022, the key takeaways are:
-
Adopt async/await: Begin migrating asynchronous code to the new concurrency model for improved maintainability and safety.
-
Evaluate SwiftUI: For new projects, consider whether SwiftUI’s current capabilities meet your needs. For existing UIKit projects, plan incremental adoption.
-
Plan for privacy: Build user trust through transparent data practices and first-party data strategies.
-
Leverage new features: Features like SharePlay, in-app events, and custom product pages offer differentiation opportunities.
The iOS platform continues to provide a strong foundation for building high-quality applications that reach a valuable user base. The investments Apple makes in developer tools and frameworks demonstrate a commitment to enabling the app economy that benefits developers and users alike.
Planning your iOS development strategy for 2022? Contact Awesome Apps to discuss how we can help you leverage the latest iOS capabilities for your application.