Majid Jabrayilov
banner
mecid.bsky.social
Majid Jabrayilov
@mecid.bsky.social
Swift Developer: iOS, watchOS, visionOS, tvOS, macOS.
https://swiftwithmajid.com
Pinned
Hi, I'm Majid. I’m an indie developer building apps for iOS, watchOS, visionOS, and all other Apple platforms.

I mostly build health-related apps like CardioBot, allowing you to understand and improve heart metrics.

I try to share my experiences by writing blog posts.

swiftwithmajid.com
Home
Majid’s blog about Swift development
swiftwithmajid.com
What’s the easiest way to make a view fit its parent? The new containerRelativeFrame view modifier lets us set the view’s frame relative to its parent. It offers many customization options, but here’s the simplest one.
swiftwithmajid.com/2025/01/28/c...
January 28, 2026 at 12:02 PM
MetricKit helped me understand my app’s background memory usage and identify reasons for system pressure terminations. I then made changes to reduce background memory usage, keeping my app active without system termination.
swiftwithmajid.com/2025/12/09/m...
January 27, 2026 at 1:57 PM
You can effortlessly create a reusable parallax header in SwiftUI using the onGeometryChange view modifier. All you need to do is track its offset and gradually slow it down as you scroll.
swiftwithmajid.com/2024/08/13/t...
January 26, 2026 at 8:33 AM
SwiftUI framework introduces a trigger value pattern across its APIs. Trigger value allows us to attach a view modifier that runs its action whenever the trigger value changes.
swiftwithmajid.com/2024/04/02/t...
January 23, 2026 at 9:57 AM
SwiftUI’s matchedGeometryEffect view modifier simplifies hero animations. Attaching it to multiple views establishes a connection, allowing SwiftUI to understand the geometry of transitions and apply shape, position, and size transformations automatically.
swiftwithmajid.com/2020/12/17/h...
January 21, 2026 at 12:44 PM
SceneStorage property wrapper stores values in the memory allocated by the current scene, creating private storage accessible only to that scene. The system manages per-scene storage, and access to data requires the SceneStorage property wrapper.
swiftwithmajid.com/2022/03/10/s...
January 20, 2026 at 2:10 PM
UIHostingConfiguration is a new type of UITableViewCell or UICollectionViewCell configuration allowing us to embed SwiftUI views into a cell, but still use the performant dequeuing capabilities of the UICollectionView.
swiftwithmajid.com/2025/03/04/s...
January 19, 2026 at 10:06 AM
Reposted by Majid Jabrayilov
If you’re not yet using worktrees - you should! Marco Haber explains why they make it super easy to switch between branches without stashing: www.marcohaber.dev/blog/git-wo...

Curated in this week's #not-only-swift
Understanding Git Worktrees
A practical guide to Git worktrees: mental model, real scenarios, and why it matters for AI-powered workflows.
www.marcohaber.dev
January 16, 2026 at 10:30 AM
Empty and error states are part of almost every app, yet they’re often an afterthought. I explore ContentUnavailableView in SwiftUI and show how it helps you design clearer, more expressive fallback states with less code.
swiftwithmajid.com/2023/10/31/m...
January 16, 2026 at 9:37 AM
That’s shame. We have framework for tips, but we don’t have an easy way to capture a photo.
January 15, 2026 at 6:43 PM
SwiftUI’s contentMargins modifier lets you inset only specific content like scrollable lists without affecting toolbars or scroll indicators — perfect for adapting layouts (e.g., centering content on iPad) while keeping UI elements where they belong.
swiftwithmajid.com/2024/04/23/c...
January 15, 2026 at 11:31 AM
Nowadays, many frameworks Xcode provides us contain SwiftUI views, including the PhotosUI framework. The PhotosUI framework provides the PhotosPicker button, allowing us to offer photo-picking functionality in our apps quickly.
swiftwithmajid.com/2023/04/25/p...
January 14, 2026 at 9:01 AM
LazyVGrid and LazyHGrid are two new view types that SwiftUI gives us to build a super custom grid-based layout. Grids allow us to create very complex and great layouts by mixing different types of GridItems.
swiftwithmajid.com/2020/07/08/m...
January 12, 2026 at 2:04 PM
SwiftUI’s alignmentGuide modifier lets us override standard alignments. We can align the bottom of Image and Text views in a horizontal stack. However, if an image has spacing inside a bitmap, it may not align well. Overriding an alignment guide will fix it.
swiftwithmajid.com/2020/03/11/a...
January 9, 2026 at 11:28 AM
SwiftUI provides you with a type called NavigationPath, allowing us to store any hashable value and map them to the destination in the navigation stack. NavigationPath erases the type of pushed values and allows us to keep values of different types.
swiftwithmajid.com/2022/10/05/m...
January 8, 2026 at 12:50 PM
We talked a lot about different design patterns, which help us maintain the codebase by solving various issues. But what about testing? What can we do to keep our UI tests in a maintainable and consistent state?
swiftwithmajid.com/2021/03/24/u...
January 7, 2026 at 10:11 AM
All we need to play haptic feedback in a SwiftUI view is to attach the sensoryFeedback view modifier with two parameters. The first defines a feedback style, and the second is a trigger value.
swiftwithmajid.com/2023/10/10/s...
January 6, 2026 at 12:20 PM
You should be careful about the order of the passed views in ViewThatFits. It uses the first view that fits the available space. It means that you should usually place your views from the biggest to the smallest.
swiftwithmajid.com/2022/07/26/v...
January 5, 2026 at 11:05 AM
The Image Playground framework brings Apple’s generative image capabilities right into Swift, making it surprisingly simple to create visuals from text, drawings, or even existing photos.
swiftwithmajid.com/2025/11/11/g...
December 31, 2025 at 11:35 AM
The task view modifier enables us to observe equatable data and execute the task whenever the data changes. By combining fields into an equatable struct, we can maintain a single task modifier that effectively cancels the task whenever any field changes.
swiftwithmajid.com/2022/06/28/t...
December 30, 2025 at 11:40 AM
2025 has come to an end, and it is a perfect time for retrospective analysis. Today I want to review trends in iOS development over the past year that I notice while building my own apps or consulting others.
swiftwithmajid.com/2022/12/27/i...
iOS development trends in review
2022 has come to an end, and it is a perfect time for retrospective analysis. Today I want to review trends in iOS development over the past year that I notice while building my own apps or…
swiftwithmajid.com
December 29, 2025 at 10:00 AM
The Swift Charts framework allows us to observe selection on a single value and a range of values. We can use chartXSelection and chartYSelection with the binding of ClosedRange type to allow range selection.
swiftwithmajid.com/2023/07/18/m...
December 26, 2025 at 9:06 AM
The safeAreaInset view modifier is another way to manage the safe area of the view. The safeAreaInset view modifier allows you to shift the safe area of the view by placing another view inside the original safe area of the view.
swiftwithmajid.com/2021/11/03/m...
December 25, 2025 at 10:09 AM
I've switched to Jujutsu VCS almost 6 months ago and never regret. JJ reimagines version control, making history manipulation effortless. It’s fully compatible with Git but offers a more flexible, fluid workflow.
swiftwithmajid.com/2025/10/15/i...
Introducing Jujutsu VCS
I’ve decided to share my experience with Jujutsu VCS — not a martial art, but a Git‑compatible version control system. I’ve switched to it for all my projects and have a lot to say.
swiftwithmajid.com
December 24, 2025 at 3:07 PM