Majid Jabrayilov

Majid Jabrayilov

Baku, Baku Ekonomic Zone, Azerbaijan
7K followers 500+ connections

About

Proficiency in Swift and in-depth knowledge of the iOS SDK. Extensive experience in…

Contributions

Activity

Join now to see all activity

Experience

  • Majid Jabrayilov

    Baku

  • -

    Poznan, Greater Poland District, Poland

  • -

    Poznan, Greater Poland District, Poland

  • -

    Baku

  • -

    Baku

  • -

    Azerbaijan

  • -

    Azerbaijan

Education

  • Azerbaijan State Oil Academy

    -

  • -

Licenses & Certifications

Publications

  • Mastering MapKit in SwiftUI. Interactions.

    MapKit provides us with a very rich API as part of the next iteration of the SwiftUI framework. This week, we will continue the topic by learning how to handle interactions using the new MapKit API in SwiftUI.

    See publication
  • Drag and drop transferable data in SwiftUI

    Last week we discussed the new ShareLink view and the Transferable protocol powering it. The new Transferable protocol is useful for sharing your data from the app, but it also powers drag and drop in your app. This week we will learn how we can drag and drop data conforming to the Transferable protocol in SwiftUI.

    See publication
  • Sharing content in SwiftUI

    Apple introduced a brand new CoreTransferable framework and ShareLink view in SwiftUI, allowing us to share and export content from our apps very declaratively. This week we will learn how to make data transferable and use the new ShareLink view in SwiftUI.

    See publication
  • Activities and attachments in the XCTest framework

    Today I want to continue the topic of UI testing in Swift by covering another great set of tools the XCTest framework provides us. I love UI testing and protecting the primary user flows in my app. This week we will talk about the hidden gems of the XCTest framework, which are activities and attachments.

    See publication
  • Performance testing in Swift using the XCTest framework

    In Swift, we can do performance testing using the XCTest framework, which is a part of the Xcode development environment. XCTest provides a comprehensive set of tools for writing, running, and analyzing unit and performance tests for Swift applications.

    See publication
  • Mastering charts in SwiftUI. Accessibility.

    The last but not least post in the series is about accessibility. It is essential to make your app accessible to VoiceOver users. Usually, it is much harder to make your visual content accessible. Fortunately, Apple provides audio graph features allowing us to make any chart representable with sound. This week we will learn how to improve the accessibility of our graphs using the Swift Charts framework.

    See publication
  • Mastering charts in SwiftUI. Legends.

    Last week we started the topic of the Swift Charts framework customization options using a bunch of chart view modifiers. It is a vast topic that I divide into a few small posts. This week we will discuss configuring the legend view using the new Swift Charts framework.

    See publication
  • Mastering charts in SwiftUI. Customizations.

    The Swift Charts framework became a huge topic on my blog. But I decided to continue this subject to cover everything I’ve experienced with the Charts framework. This week we will learn how to customize the Chart view using a bunch of chart view modifiers provided by the framework.

    See publication
  • Mastering charts in SwiftUI. Interactions.

    The Swift Charts framework provides excellent functionality for implementing super custom charts. This week we will learn how to handle user input with gestures to build interactive charts. The Chart type is a simple SwiftUI view, which means you can attach gestures and buttons to interact with the chart.

    See publication
  • Mastering charts in SwiftUI. Custom Marks.

    The Swift Charts framework is an excellent example of composition. In the previous posts, we saw how we could use different marks on the same chart view to plot different data points. This week we will learn how to use composition to build new custom mark types and reuse them across the app.

    See publication
  • Mastering charts in SwiftUI. Mark styling.

    Last week we started a series of posts about the new Charts framework available on the latest Apple platforms. We talked about basic stuff and learned how to plot data. This week we will continue mastering the Charts framework by learning different customization and styling options available.

    See publication
  • Mastering charts in SwiftUI. Basics.

    Swift Charts is a new framework by Apple allowing us to visualize our data in a declarative way using SwiftUI. The Swift Charts framework inherits from SwiftUI its declarative nature and the power of intelligent defaults. This week we will start with the basics of the Charts framework.

    See publication
  • 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 consulting others.

    See publication
  • Building custom layout in SwiftUI. LayoutValueKey.

    During the last weeks, we covered many aspects of building custom layouts using the new Layout protocol in SwiftUI. But we still have a lot to cover. This week we will learn how to use the LayoutValueKey protocol to pass custom layout parameters while composing views in the custom layout.

    See publication
  • Building custom layout in SwiftUI. Spacing.

    Multiple layouts allow us to compose views in different ways. One crucial thing is the spacing between children of the concrete layout. This week we will learn how to build a custom layout allowing us to specify a particular spacing between views and how to respect the platform-oriented predefined spacing rules in SwiftUI.

    See publication
  • Building custom layout in SwiftUI. Caching.

    Today I’m going to continue the series of posts about the new opportunity to build super-custom reusable layouts in SwiftUI by covering the idea of caching layout information and tuning its performance.

    See publication
  • Building custom layout in SwiftUI. Basics.

    Nowadays, SwiftUI provides the Layout protocol allowing us to build super-custom layouts by digging into the layout system without using GeometryReader. This week we will learn how to use the new Layout protocol to build a flow layout in SwiftUI.

    See publication
  • Window management in SwiftUI

    One of the significant additions to the current iteration of the SwiftUI framework was window management APIs. We can open a separate window using the new environment APIs and create a menu bar app using the new scene APIs.

    See publication
  • Mastering NavigationSplitView in SwiftUI

    My final post in the new navigation APIs series in SwiftUI is about building two-three column apps. This week we will learn how to use and customize NavigationSplitView to build multi-column apps in SwiftUI.

    See publication
  • Mastering NavigationStack in SwiftUI. NavigationPath.

    SwiftUI provides us with a brand new data-driven navigation API allowing us to map a value to a destination in the view hierarchy. This week I want to continue the story of the new navigation API in SwiftUI by covering another tool. We will learn how to use the NavigationPath type to build a navigation stack with different destinations.

    See publication
  • Mastering Dynamic Island in SwiftUI

    Live activity widgets can utilize the dynamic island of the iPhone 14 Pro. In this post, we will discuss possible configurations and customization points of the dynamic island feature using the new API available in the WidgetKit framework.

    See publication
  • Displaying live activities in iOS 16

    One of the most prominent features of iOS 16 is live activity widgets. iOS 16 allows us to display the live state of ongoing activities from our apps on the lock screen or in the Dynamic Island of the new iPhone 14 Pro. This week we will learn how to build live activity widgets for our apps using the new ActivityKit framework.

    See publication
  • Customizing toolbars in SwiftUI

    Toolbars API is one of my favorite APIs in SwiftUI. It allows you to define the toolbar and its items in a very declarative way behaving differently on separate platforms. The next generation of the SwiftUI framework brings us more ways of customizing toolbars. This week we will learn about new Toolbar APIs in SwiftUI.

    See publication
  • Lock screen widgets in SwiftUI

    We can populate our lock screen with glanceable widgets. Implementing a lock screen widget is straightforward because its API shares the same code with home screen widgets. This week we will learn how to implement lock screen widgets for our apps.

    See publication
  • Conditional layouts in SwiftUI

    From the first day of the SwiftUI framework, we have primary layout containers like VStack, HStack, and ZStack. The current iteration of the SwiftUI framework brings another layout container allowing us to place views in a grid. But the most important addition was the Layout protocol that all layout containers conform to. It also allows us to build our super-custom layout containers from scratch. This week we will learn the basics of the Layout protocol in SwiftUI and how to build conditional…

    From the first day of the SwiftUI framework, we have primary layout containers like VStack, HStack, and ZStack. The current iteration of the SwiftUI framework brings another layout container allowing us to place views in a grid. But the most important addition was the Layout protocol that all layout containers conform to. It also allows us to build our super-custom layout containers from scratch. This week we will learn the basics of the Layout protocol in SwiftUI and how to build conditional layouts using AnyLayout type.

    See publication
  • Mastering grid layout in SwiftUI

    SwiftUI introduces another type of grid that immediately lays out all of its children. This week we will learn how to use the new grid layout in SwiftUI and the benefits of the new grid over the lazy version of the grid component.

    See publication
  • Content transition in SwiftUI

    The latest iteration of the SwiftUI framework brings us a new type of transition called content transitions. It allows us to apply a particular transition to the content of the view whenever it changes. This week we will learn how to use the new API to apply content transition in SwiftUI.

    See publication
  • ViewThatFits in SwiftUI

    How often did you use GeometryReader to measure layout and place different views? GeometryReader was always a great tool in our toolbox, but It is elementary to break the layout while using the GeometryReader. Fortunately, the next generation of the SwiftUI framework introduces a new way to measure available space and place different views. This week we will learn how to use the brand new ViewThatFits view.

    See publication
  • Bottom sheet API in SwiftUI

    SwiftUI introduces a new API to display a bottom sheet in a few lines of code. This week we learn the new API allowing us to present bottom sheets in different appearances.

    See publication
  • Mastering LabeledContent in SwiftUI

    One of the new SwiftUI views released during WWDC22 was LabeledContent. And it became one of my favorite views that I try to use everywhere because it fits very well into Human Design Guidelines. This week we will learn how to use LabeledContent to provide a platform-oriented experience.

    See publication
  • Background tasks in SwiftUI

    One of the exciting frameworks released along with iOS 13 was the BackgroundTasks framework. It allows you to schedule work intelligently in the background. Finally, we can handle background tasks using the SwiftUI app lifecycle. This week we will learn how to schedule and handle background tasks in SwiftUI.

    See publication
  • The power of task view modifier in SwiftUI

    Task view modifier is the key to the Swift Concurrency world through SwiftUI. It allows us to build complex async tasks by leveraging the power of cooperative cancellation and the lifecycle of a SwiftUI view. This week we will learn all the powerful features of the task view modifier in SwiftUI.

    See publication
  • What is new in SwiftUI after WWDC22

    WWDC22 brings tons of new features to SwiftUI and makes it a full-featured UI framework that we can use daily. Unfortunately, most of the new features are available on iOS 16 and macOS 13. This post will cover the most significant additions and changes to the SwiftUI framework.

    See publication
  • What is new in SwiftUI after WWDC22

    WWDC22 brings tons of new features to SwiftUI and makes it a full-featured UI framework that we can use daily. Unfortunately, most of the new features are available on iOS 16 and macOS 13. This post will cover the most significant additions and changes to the SwiftUI framework.

    See publication
  • The power of accessibilityChildren view modifier in SwiftUI

    SwiftUI provides us with a rich set of view modifiers to manipulate the accessibility tree of views. This week we will talk about the accessibilityChildren view modifier and how we can benefit from it.

    See publication
  • Mastering TimelineView in SwiftUI

    TimelineView is a SwiftUI view type that updates its body according to a provided schedule. We used to see SwiftUI views updating its body whenever the data it presents changes. TimelineView doesn’t follow this rule and allows us to build a super-custom schedule to update its content in a precise way. We will learn how to use TimelineView to create time-based views this week.

    See publication
  • Modeling errors in Swift

    The new Swift Concurrency feature doesn’t only bring new opportunities for writing safer and more maintainable async code but also changes the way we handle errors. I didn’t use throw-catch keywords too much in my legacy code because usually, I had a completion callback with the Result type handled by the switch operator. This week we will talk about modeling error types and how we will address them in Swift with throw-catch keywords.

    See publication
  • Measuring app performance in Swift

    The Unified Logging System is a great way to build a proper logging system allowing you to understand different exceptional cases happening in your app. But it is not limited only to logging. It also provides a way to measure various events in your app. This week, we will learn how to use the Unified Logging System to measure app performance.

    See publication
  • Exporting data from Unified Logging System in Swift

    We discussed building a proper logging system instead of using the print function in the previous post. Apple provides us a framework to utilize its logging system backed by on-disk persistence. This week we will talk about exporting logs from the user devices by leveraging the power of the Unified Logging System.

    See publication
  • Logging in Swift

    We encounter bugs that are very hard to catch in the debugger from time to time. For example, it might occur only after a few days of app usage. In this case, running an app in a simulator and testing a feature doesn’t make sense. We need to understand what the user has done in the application and how it responds to user actions in this situation. Logging is an excellent technique to track and understand user actions through the app. This week we will learn how to implement proper logging…

    We encounter bugs that are very hard to catch in the debugger from time to time. For example, it might occur only after a few days of app usage. In this case, running an app in a simulator and testing a feature doesn’t make sense. We need to understand what the user has done in the application and how it responds to user actions in this situation. Logging is an excellent technique to track and understand user actions through the app. This week we will learn how to implement proper logging functionality in our apps.

    See publication
  • Zone sharing in CloudKit

    Last week we talked about the basics of CloudKit. We learned how to save and fetch data from the storage in the cloud and how to sync the data between devices. This week I want to cover the only reason why I have chosen CloudKit instead of Firebase, and it is data sharing between users.

    See publication
  • Getting started with CloudKit

    CloudKit is an easy way to store data in the cloud, sync between multiple devices, and share it between the app’s users. This week we will learn how to start using CloudKit in the app to save and fetch data from the cloud and sync between multiple user devices.

    See publication
  • Functional core Imperative shell in Swift. Unidirectional Flow.

    A few weeks ago, we talked about the idea of Functional Core and Imperative shell in Swift. The goal is to extract the pure logic using value types and keep side effects in the thin object layer. This week, we will look at how we can apply this approach in an opinionated way by using unidirectional flow.

    See publication
  • State restoration in SwiftUI

    The system can shut down your app when the user leaves it. The current state of your app will lost. To avoid this kind of situation, we should provide a state restoration mechanism. This week we will learn how to implement state restoration in SwiftUI.

    See publication
  • Functional core Imperative shell in Swift

    We love value types because they provide us with safety and predictability, allowing us to reason about the code we write. But we still need objects to hold and mutate our app’s shared state. This week, we will discuss modeling our app’s logic by leveraging the value and reference semantics.

    See publication
  • Redux-like state container in SwiftUI. Swift concurrency model.

    Over the last two years, I have actively used unidirectional flow to develop my apps. I covered the approach I use in the series of posts about building Redux-like state containers. This week I want to share with you how this approach adapts to the latest changes in Swift by applying the new concurrency model.

    See publication
  • Microapps architecture in Swift. Dependency Injection.

    We covered a lot of things related to microapps architecture in Swift during the last month. I would love to finalize the series of posts by touching another essential edge of the approach: Dependency Injection. This week we will learn how to inject the dependencies into feature modules to improve testability and facilitate Xcode previews.

    See publication
  • Microapps architecture in Swift. Resources and localization.

    This week we will continue the topic of microapps architecture in Swift by touching on another essential edge of this approach. In this post, we will talk about sharing resources between modules and separating the localization of feature modules.

    See publication
  • Microapps architecture in Swift. Feature modules.

    In the first post of the current series, I talked about Swift Package Manager basics and how we can maintain the project with many Swift modules. This week we continue the topic of Microapps architecture by introducing feature modules.

    See publication
  • Microapps architecture in Swift. SPM basics.

    This week I want to start a series of posts about the new approach I use to build scalable apps in Swift. Microapps architecture allows you to reduce the compile-time and enhances the separation of concerns in your codebase.

    See publication
  • SF Symbols in SwiftUI

    Apple provides us with a set of different icons available across all the platforms called SF Symbols. SF Symbols package contains more than 3200 icons that we can use to visualize different states and actions in our apps. This week we will learn how to utilize the power of SF Symbols in SwiftUI views.

    See publication
  • Structural identity in SwiftUI

    Structural identity is the type of identity that SwiftUI uses to understand your views without an explicit identifier by using your layout description. This week we will learn how to improve performance and eliminate unwanted animations by using inert view modifiers in SwiftUI.

    See publication
  • Customizing view content shape in SwiftUI

    Usually, SwiftUI uses rectangles to render views, but we can control the shape of the view by using the clipShape view modifier. This week we will learn how to modify the interactable shape of the view during hit-testing or previewing drag and drop by using the brand new contentShape view modifier.

    See publication
  • Mastering ProgressView in SwiftUI

    Many of our apps do heavy work on background threads like networking or data processing. We usually want to display progress or the activity indicator of the ongoing work. This week we will learn how to use ProgressView to present both indeterminate and determinate progress in SwiftUI.

    See publication
  • The many faces of ShapeStyle in SwiftUI

    ShapeStyle is the protocol that we have from the very first release of the SwiftUI framework. ShapeStyle defines a color or pattern to use when rendering a shape. This week we will learn the many faces of ShapeStyle protocol and different implementations provided by the SwiftUI framework.

    See publication
  • Displaying badges in SwiftUI

    One of the many things included in SwiftUI Release 3 was the ability to display badges. SwiftUI Release 3 provides you with the badge view modifier that we can use to generate badges in lists and tabs. This week we will learn how to use the badge view modifier and customize the look and feel of badges.

    See publication
  • Managing safe area in SwiftUI

    A safe area defines the area within a view that isn’t covered by a navigation bar, tab bar, toolbar, or other views. SwiftUI views respect safe areas out of the box. But there are plenty of situations when you need to customize this behavior. This week we will learn how to manage the safe area in SwiftUI.

    See publication
  • Blur effect and materials in SwiftUI

    SwiftUI has the blur view modifier from the very first day. It allows us to build super custom blur effects quickly. On the other hand, SwiftUI Release 3 gives us the new Material type that specifies different blur effects defined in Human Interface Guidelines. This week we will learn how to use the blur view modifier and the new Material type to build translucent effects.

    See publication
  • Mastering ControlGroup in SwiftUI

    One of the new container views delivered in SwiftUI Release 3 was the ControlGroup view. The ControlGroup view displays semantically-related controls in a visually appropriate manner for the context. This week we will learn how to use and customize the appearance of the ControlGroup view in SwiftUI.

    See publication
  • Custom accessibility content in SwiftUI

    SwiftUI Release 3 brought a lot of new accessibility APIs, which we can use to improve user experience drastically in an effortless way. This week I want to talk about another new API that allows us to provide customized accessibility content using the new accessibilityCustomContent view modifier in SwiftUI.

    See publication
  • Audio graphs in SwiftUI

    Charts and graphs are one of the complicated things in terms of accessibility. Fortunately, iOS 15 has a new feature called Audio Graphs. This week we will learn how to build an audio representation for any SwiftUI view presenting a chart like a custom bar chart view or an image by using the accessibilityChartDescriptor view modifier.

    See publication
  • Accessibility focus in SwiftUI

    One of the new features of SwiftUI Release 3 is accessibility focus management. SwiftUI allows us easily handle the focus state for assistive technologies like VoiceOver and Switch Control. This week we will learn how to use the AccessibilityFocusState property wrapper to move the accessibility focus in SwiftUI.

    See publication
  • Accessibility rotors in SwiftUI

    SwiftUI Release 3 contains many new APIs that we can utilize to improve accessibility in our apps, and one of them is the new accessibilityRotor view modifier. This week we will learn how to use the accessibilityRotor view modifier to provide custom VoiceOver navigation using rotors.

    See publication
  • The power of accessibilityRepresentation view modifier in SwiftUI

    The SwiftUI Release 3 has a lot of improvements in the area of accessibility. It provides all the missing APIs like accessibility rotors, but it also gives us new ways of doing complex things efficiently. This week we will talk about the accessibilityRepresentation view modifier that allows us to replace accessibility elements of one view with another.

    See publication
  • Mastering FocusState property wrapper in SwiftUI

    FocusState property wrapper allows us to read and write the current focus position in the view hierarchy. This week we will learn how to manage focus in SwiftUI apps using FocusState property wrapper and focused view modifier.

    See publication
  • How to create a property wrapper in Swift

    Property wrapper is a Swift language feature. The main goal here is wrapping properties with a logic that we extract into a separate type to reuse it across the codebase. This week, we will learn how to create a property wrapper to read data in Keychain and be a good citizen in the SwiftUI world by reacting to data changes.

    See publication
  • Confirmation dialogs in SwiftUI

    Confirmation dialog is a widespread UI/UX pattern that we usually use to confirm some dangerous actions in our apps. For example, we might present a confirmation dialog before deleting any sensitive data from the app.

    See publication
  • Submitting values to SwiftUI view

    SwiftUI Release 3 brought us a new declarative approach for handling submitted values. Text fields, forms, search bars allow users to submit values that we can take and react to them using the new onSubmit view modifier. This week we will learn how to use the onSubmit view modifier and what benefits it provides us.

    See publication
  • Pull-to-Refresh in SwiftUI

    Pull-to-refresh is a widespread User Interface pattern that we use to request a data update in our apps. The SwiftUI Release 3 provides a brand new way to set up a pull-to-refresh action using the new refreshable view modifier. This week, we will learn how to use the refreshable view modifier and provide a super custom experience with it.

    See publication
  • Mastering AsyncImage in SwiftUI

    During our careers, we primarily build apps that work with web services to retrieve and upload data. Remote image is one type of that data that we need to download and display. SwiftUI provides us the AsyncImage type, which is a view that downloads and shows an image via URL. This week we learn how to use and customize AsyncImage in SwiftUI.

    See publication
  • The many faces of button in SwiftUI

    Button is one of the crucial components of any app. SwiftUI 3 released a bunch of new view modifiers that allow us to style buttons in different ways. The new bordered button style in conjunction with controlProminence and controlSize view modifiers can change button presentation drastically.

    See publication
  • Mastering search in SwiftUI

    SwiftUI Release 3.0 brought tons of expected features that we missed in previous iterations. One of them is the ability to provide the search feature in our apps. Fortunately, we have a new searchable view modifier. This week, we will learn about the new searchable modifier and how to build a great search experience using it.

    See publication
  • Mastering List in SwiftUI

    List is the crucial view for many apps. I can’t imagine an app that doesn’t use a list view anywhere in the view hierarchy. During WWDC21, list view became even more powerful and brought us all the needed features of UITableView. This week, we will learn how to use the list view in SwiftUI and master its features.

    See publication
  • What is new in SwiftUI after WWDC21

    WWDC21 is finally here, and there are many new things in the updated version of SwiftUI. I’m happy to share with you that many items on my wishlist have finally arrived. In this post, I will try to give you a summary of the significant SwiftUI additions of this year.

    See publication
  • Frames in SwiftUI

    SwiftUI provides us a magical frame modifier that you might think is very simple and straightforward to use. But there is a lot of complicated logic under the hood. This week we will talk about fixed and flexible frames and the frame modifier to control them.

    See publication
  • SwiftUI wishlist for WWDC21

    WWDC21 is coming pretty soon, and it is a great chance to think about the new features that I want to see in SwiftUI. This wishlist contains not only the list of the features I want to use but also possible APIs. Remember that this post is the result of my imagination, and most of the code examples don’t exist at the moment.

    See publication
  • Combining multiple Combine publishers in Swift

    I’ve already covered a few essential topics from the Combine framework story. We talked about handling errors and chaining operations, but today I want to talk about running multiple operations in parallel and handing results in a single place. This week we will learn how to use zip, merge and combine operators.

    See publication
  • Chaining publishers with Combine in Swift

    The Combine framework provides you a bunch of operators to map, filter, and chain asynchronous operations. This week I want to focus on the chaining asynchronous jobs using two main operators that the Combine framework provides us. We will learn how to use flatMap and switchToLatest operators to chain asynchronous tasks in a declarative way.

    See publication
  • Building custom Combine operators in Swift

    Combine looks like a very sophisticated framework and provides you all the needed things you might need to process your data. It comes with many valuable operators like map, filter, and reduce. This week we will learn how to build new operators that we might miss from the default package.

    See publication
  • Accessibility actions in SwiftUI

    SwiftUI provides us accessible views out of the box, and usually, you don’t need to do anything to build an accessible app for your users. But there is always room for improvements and additional functionality that you can create using Accessibility API. This week we will learn how to provide custom accessibility actions for SwiftUI views.

    See publication
  • Designing API using Combine framework

    Combine framework provides a declarative Swift API for processing values over time. It allows you to chain, transform and reduce multiple operations. This week we will learn how to design our APIs using the Combine framework to leverage all the data processing power that the framework provides us.

    See publication
  • Writing idiomatic Swift code

    Today is a great day to start learning iOS development. iOS development evolves every year and brings us new things to learn. This post should be valuable for the people who move to Swift from another programming language. This week we will talk about Swift idioms and how to write idiomatic Swift code.

    See publication
  • UI Testing using Page Object pattern in Swift

    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? This week we will talk about the Page Object pattern that allows us to build a foundation for our UI tests.

    See publication
  • UI Testing in Swift with XCTest framework

    One obvious benefit of UI testing over Unit Testing is the opportunity to write UI tests even when you have a smelling and deeply coupled codebase. This week we will learn how to write UI tests both for SwiftUI and UIKit-based projects.

    See publication
  • Mastering SwiftUI previews

    This week, I want to talk about one of the most powerful Xcode features, SwiftUI previews. SwiftUI previews allow you to look at your SwiftUI views inside Xcode without running the app in the simulator. You can also preview UIKit views and controllers by wrapping them in SwiftUI. Today we will learn about all the powerful features of previews in Xcode.

    See publication
  • FocusedValue and FocusedBinding property wrappers in SwiftUI

    Today we learned how to use FocusedValue and FocusedBinding property wrappers. One of the possible use cases for these property wrappers is commands that we can use to create the main menu for macOS apps. You can access the currently focused view’s content and implement some logic that lives in your macOS app’s main menu.

    See publication
  • GraphQL in Swift

    GraphQL is a query language for APIs. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more. This week we will learn how to use GraphQL in Swift.

    See publication
  • Phantom types in Swift

    Not every language with a static type system has so strong type-safety like Swift. Swift features like phantom types, generic type extensions, enums with associated types create an excellent foundation. This week we will learn how to use phantom types to build type-safe APIs.

    See publication
  • Building type-safe networking in Swift

    More than half of the apps I built during my career had networking code. Usually, we build apps for web services. Today we will talk about building the type-safe networking layer using Swift language features like enums, phantom types, and extensions.

    See publication
  • Redux-like state container in SwiftUI. Connectors.

    I model my AppState using dictionaries where the key is the ID and the value is a unique model. This approach allows me to have a single source of truth, but it adds the complexity of reading data for views. Let me introduce the Connector protocol.

    See publication
  • Lazy navigation in SwiftUI

    Most of our apps are more than just a single screen app. We use the navigation to connect different screens inside the app. SwiftUI provides us NavigationLink struct that we can use to link views. This week we will learn how to use NavigationLink more efficiently than before by making it lazy.

    See publication
  • Profiling SwiftUI app using Instruments

    Xcode comes with a bunch of tools you need to build, debug and release your apps. One of these tools is the Instruments app. The Instruments app is a great tool for profiling your iOS apps. It provides many profiling templates for debugging Core Data, catching memory leaks, disk read/writes, and much more. This week we will learn how to profile SwiftUI apps using the SwiftUI template.

    See publication
  • AnimatableModifier in SwiftUI

    I have already talked about animations in SwiftUI many times on this blog. But still didn’t cover all the opportunities in terms of animation. Today I want to fill another gap and talk to you about the AnimatableModifier protocol that opens new horizons for animations.

    See publication
  • Labels in SwiftUI

    We often underestimate the power of simple things. The same feelings I had during the first usage of Label view in SwiftUI. It looks straightforward, but it hides the many use cases where it works great. Today we will talk about the Label view and its customization capabilities.

    See publication
  • Hero animations in SwiftUI

    Animation is one of the powerful features of SwiftUI. I was shocked when I saw how easy we could animate changes in view hierarchy by simply mutating @State properties and attaching animation modifiers. This week we will talk about another animation type called hero animation. We will learn how we can implement hero animations using the new matchedGeometryEffect view modifier.

    See publication
  • Styling custom SwiftUI views using environment

    One of my favorite features of SwiftUI is styling. I love the idea of style protocols provided by every view and sharing them using the environment. This week we will learn how to share styling using the environment for our custom views.

    See publication
  • Focus management in SwiftUI

    WWDC 20 brings us tons of new SwiftUI APIs. One of these new APIs was the focus management API that we can use on iOS, macOS, tvOS, and watchOS. This week we will talk about SwiftUI functionality that allows us to manage the focus in our apps.

    See publication
  • Commands in SwiftUI

    This week we will learn about another new declarative API that SwiftUI provides to build your macOS app’s main menu. I hope you enjoy this declarative API that allows us to maintain a single codebase for different platforms.

    See publication
  • Keyboard shortcuts in SwiftUI

    This year Apple released the new App Lifecycle API for SwiftUI, which brings tons of new modifiers to replace AppDelegate callbacks. I have already covered most of them in previous posts. This week, we will discuss the new keyboardShortcut modifier, which allows us to assign a shortcut to any interacting view.

    See publication
  • How to use GeometryReader without breaking SwiftUI layout

    Usually, I try to avoid GeometryReader as much as I can. But sometimes, we need it to build our custom view. This week we will talk about GeometryReader. The view that allows us to read its geometry and layout child views manually.

    See publication
  • The magic of redacted modifier in SwiftUI

    Redacted modifier is the thing that has a great impact on how iOS apps will handle loading states. During WWDC20, Apple showed us the easy way of hiding the data from home-screen widgets using the redacted modifier. This week we will learn all about it.

    See publication
  • Mastering GroupBox in SwiftUI

    Styleable views is the thing I love in SwiftUI. You can separate your view logic and its style. You can easily apply different styles in different conditions whenever you need to change appearance depending on the platform or other environmental requirements. This week we will talk about GroupBox, another view container that SwiftUI provides, and allows us easily change its look and feel using a style protocol.

    See publication
  • Transactions in SwiftUI

    Animations play a vital role in SwiftUI. We saw a lot of examples of complex animations that we can easily implement in SwiftUI. The guidance for building fluid animations in SwiftUI has the only one step: mutate your state, and SwiftUI will automatically animate changes in your views. Today we will talk about transactions, which is a hidden gem of SwiftUI.

    See publication
  • Mastering ScrollView in SwiftUI

    We had a scroll view from the very first version of SwiftUI. It was quite limited. But this year changed everything when Apple released ScrollViewReader during WWDC 20. This week we will learn all about scroll views in SwiftUI. We will learn how to scroll to the particular position and read the current offset of scroll view content.

    See publication
  • Tabs and pages in SwiftUI

    This week we will talk about creating tabs and pager views in SwiftUI. TabView gained superpower during WWDC20. We can now use it across all the Apple platforms to build tabbed and paged user experiences with SwiftUI out of the box.

    See publication
  • Building widgets in SwiftUI

    This week I want to talk to you about home-screen widgets in iOS 14. I’ve built several widget collections for my apps, and it is a perfect time to share with you that experience. Today we will learn all about building and updating widgets with SwiftUI.

    See publication
  • Displaying recursive data using OutlineGroup in SwiftUI

    This week we will learn about displaying recursive data using OutlineGroup in SwiftUI. OutlineGroup is a view that enumerates tree-structured collection and renders its view representation recursively.

    See publication
  • Managing scenes in SwiftUI

    This week we will learn all about scene management in SwiftUI. We will learn how to replace SceneDelegate with Scene protocol and what benefits we gain by using scene composition in SwiftUI.

    See publication
  • Managing app in SwiftUI

    One of the most important things that Apple did release this year was the native app and scene management for SwiftUI apps. This week we will understand how to manage our apps using App protocol without old AppDelegate. We will learn how to achieve the same set of features with App protocol.

    See publication
  • Menus in SwiftUI

    This week we got another Xcode Beta that brings menus into SwiftUI world. Menus are going to replace old action sheets that have been here since iOS 8. Action sheets don’t play well with huge screens that we have nowadays. This week we will learn how to use menus to provide secondary actions or selection options in SwiftUI.

    See publication
  • Using MapKit with SwiftUI

    This year we saw that Apple started using SwiftUI across macOS and iOS to build notification center and widgets. Another great addition was a SwiftUI integration for frameworks that Apple provides us like MapKit and AVKit. This week we will talk about Map view that SwiftUI provides us as soon as you import both MapKit and SwiftUI.

    See publication
  • Sidebar navigation in SwiftUI

    We already covered master-detail navigation in SwiftUI on my blog. But today, I want to talk about new sidebar navigation that landed this year into iOS and macOS worlds. We will learn how to build a three-column navigation flow by using NavigationView in SwiftUI.

    See publication
  • Mastering toolbars in SwiftUI

    Toolbar API is another excellent addition to SwiftUI this year. Usually, we use toolbars to provide available actions. Did you remember the case where you have a button outside of the navigation bar or bottom bar? This week we will learn all about the new Toolbar API.

    See publication
  • Mastering grids in SwiftUI

    This week I want to talk about grids in SwiftUI. It was the most expected feature. Everybody has been waiting for UICollectionView alternative in SwiftUI, and finally, it arrived this year. SwiftUI provides us LazyVGrid and LazyHGrid views that we can use to build grid-based layouts.

    See publication
  • The difference between @StateObject, @EnvironmentObject, and @ObservedObject in SwiftUI

    This week I decided to share as much as I can about data flow in SwiftUI. In this post, we will discuss the difference between @StateObject, @EnvironmentObject, and @ObservedObject property wrappers. I know that this is the most confusing topic in SwiftUI for newcomers.

    See publication
  • New property wrappers in SwiftUI

    WWDC20 brought a lot of new features into SwiftUI that I will discuss on my blog during the next weeks. Today I would like to start with the main additions to SwiftUI data flow with the brand new @StateObject, @AppStorage, @SceneStorage, and @ScaledMetric property wrappers.

    See publication
  • What's new in SwiftUI

    I have been waiting for this day for the last nine months, and it has finally arrived. We saw the next iteration of the SwiftUI framework. Apple did a great job during the last year by improving SwiftUI and moving it towards by making it a standalone way for building apps for the Apple ecosystem. Today we will take a peek at all-new SwiftUI features.

    See publication
  • The magic of Animatable values in SwiftUI

    WWDC20 is already around the corner, and we are waiting for massive changes and additions to the SwiftUI framework. It is a perfect week to wrap up the season with a post about one of the strongest sides of the SwiftUI framework, which is animation. Today we will learn how to build complex animations by using VectorArithmetic protocol.

    See publication
  • SwiftUI wishlist for WWDC20

    We already started collecting our questions for Apple engineers. On the other hand, I decided to share with you my SwiftUI wishlist for WWDC20. This week we will talk about possible additions and changes in SwiftUI. I will show you also API that I expect to see during the next release of SwiftUI.

    See publication
  • SwiftUI wishlist for WWDC20

    We already started collecting our questions for Apple engineers. On the other hand, I decided to share with you my SwiftUI wishlist for WWDC20. This week we will talk about possible additions and changes in SwiftUI. I will show you also API that I expect to see during the next release of SwiftUI.

    See publication
  • Mastering images in SwiftUI

    This week I want to talk to you about another view component that we have in SwiftUI. Today we will deep dive into the image view. Image view provides us a lot of nice features that we don’t have in UIImageView like rendering mode, resizing options, interpolation, etc.

    See publication
  • Template-view pattern in SwiftUI

    Today I want to share with you a technique that I use a lot in SwiftUI. It helps me to solve the problem when I need to place a vertical or horizontal stack with equal-sized views that support Dynamic Type. I didn’t find the right name for this approach and call it template-view.

    See publication
  • Building calendar without UICollectionView in SwiftUI

    One of the most expected features of SwiftUI 2.0 is a SwiftUI alternative to UICollectionView. UICollectionView provides us an easy way to build super custom interfaces like calendar or photos grid. But today, I want to show you that we can create a calendar view without UICollectionView by using only pure SwiftUI.

    See publication
  • The magic of fixed size modifier in SwiftUI

    You might saw some examples of fixed size modifier usages while trying to fix the issue with multiline text in SwiftUI. But do you know what exactly fixed size modifier does? How does it work? Today I want to talk about all the magic and power behind the fixed size modifier.

    See publication
  • Catching errors in Combine

    The Combine framework provides us a bunch of operators for catching errors during asynchronous tasks. This week we will learn about the lifecycle of a Publisher and how to keep Publishers emitting values by catching errors using special operators.

    See publication
  • Layout priorities in SwiftUI

    This week we will talk about another core process in SwiftUI. We will learn the procedure of laying out views. We will understand how SwiftUI calculates positions and sizes of our views and how we can change that process using layout priorities.

    See publication
  • Binding in SwiftUI

    Binding is one of the several property wrappers that SwiftUI presents us to control data flow in the app. Binding provides us a reference like access to a value type. This week we will understand how and when to use binding. We will learn how to avoid common mistakes while using binding in SwiftUI.

    See publication
  • Drag and drop in SwiftUI

    Another iPadOS feature released in SwiftUI with Xcode 11.4 was the drag and drop. Finally, we can use drag and drop API not only with UIKit but also with SwiftUI. This week we will learn all about drag and drop interactions in SwiftUI.

    See publication
  • Hover effect in SwiftUI

    Last week Apple updated iPad Pro and added trackpad support to iPadOS. We finally have Xcode 11.4, which introduces the onHover and hoverEffect modifiers to help us utilize trackpad and mouse support in SwiftUI. This week we will learn how to be a good iOS citizen and add support for the trackpad to our SwiftUI views.

    See publication
  • Anchor preferences in SwiftUI

    Today we will continue mastering view preferences in SwiftUI that we touched a few weeks ago. Anchor preferences are another type of view preferences provided by SwiftUI. The main goal of anchor preferences is to pass layout data like bounds, center coordinates, etc. to its parent view.

    See publication
  • Alignment guides in SwiftUI

    Alignment guides were one of the complicated topics of SwiftUI for me. It took a while to understand how it works and how powerful it can be. Finally, I can share with you the post about Alignment Guides in SwiftUI.

    See publication
  • Customizing Toggle in SwiftUI

    This week we will continue mastering SwiftUI components by learning Toggle. Toggle is a view that we can use to allow users to toggle any boolean state in the app. SwiftUI enables us to customize toggles in a very convenient way by providing ToggleStyle protocol.

    See publication
  • TextField in SwiftUI

    This week we will learn all about the TextField component in SwiftUI. It offers us a pretty interesting set of features like raw data formatting and styling.

    See publication
  • Mastering buttons in SwiftUI

    Button is one of the regularly used components in SwiftUI. We use buttons to allow users to produce actions. That’s why it is so essential to generalize the look and feel of buttons in our apps. This week we will master buttons in SwiftUI. We will learn how to customize the look and feel of our buttons.

    See publication
  • Customizing the shape of views in SwiftUI

    SwiftUI provides us several exciting ways to change the shape of our views. It allows clipping, masking, and a few other operations on the shape of views. This week I want to talk to you about altering view’s shape in SwiftUI.

    See publication
  • Building ViewModels with Combine framework

    One of my first posts on this blog was about using the ViewModel pattern in iOS apps. I’m still using this concept in some old school UIKit projects. But I think it’s time to remaster that post. This week we will talk about building reactive ViewModels using Combine framework.

    See publication
  • Using UIKit views in SwiftUI

    SwiftUI is a great framework, but sometimes we need to reuse UIKit views that we had for years in iOS SDK. Fortunately, it is very effortless to do with help of UIViewRepresentable protocol. This week we will learn how to use UIKit views in SwiftUI.

    See publication
  • Optimizing views in SwiftUI using EquatableView

    SwiftUI provides us a very fast and easy to use diffing algorithm, but as you might know, diffing is a linear operation. It means that diffing will be very fast for simple layouts and can take some time for a complicated layout.

    I have good news for you. SwiftUI allows us to replace the standalone diffing algorithm with our custom logic. This week we will talk about optimizing our SwiftUI layouts using the equatable modifier.

    See publication
  • The magic of view preferences in SwiftUI

    This week we will talk about view preferences, which is another powerful concept of SwiftUI views that allows us to pass data through view hierarchy.

    See publication
  • Building networking layer using functions

    This week I want to talk about building a networking layer in Swift using Functional programming. Functional programming is a way of making programs using pure functions and function composition. Let’s see how we can use it to build a flexible and composable network layer.

    See publication
  • SwiftUI learning curve in 2019

    The last day of the year and I want to share with you my SwiftUI learning curve. It contains both my and other people's posts. I want to say thanks to our awesome community. Let's continue to learn SwiftUI.

    See publication
  • Building Pager view in SwiftUI

    This week I want to continue the series of posts about building custom interactive views in SwiftUI. Today we will create a pager view. ScrollView in SwiftUI support only scrolling content and doesn’t have paging behavior. That’s why we will build a pager view that supports paging mode.

    See publication
  • The power of @ViewBuilder in SwiftUI

    That’s why this week, we will talk about @ViewBuilder and its benefits while developing custom views.

    See publication
  • Building bottom sheet in SwiftUI

    This week we learn how to build interactive components in SwiftUI. I decided to start with the bottom sheet which is very popular now. Here we go! Building bottom sheet in SwiftUI

    See publication
  • Must-have SwiftUI extensions

    I have three ongoing SwiftUI projects. During my work on these projects, I find myself in copying some extension files, which are very helpful in any SwiftUI based project. That’s why I decide to share with you that small foundation of useful extensions.

    See publication
  • Combine and SwiftUI views

    Combine is one of the new frameworks released during WWDC 2019. It provides a declarative Swift API for processing values over time. Today we will talk about one of the hidden features of SwiftUI views, which is onReceive modifier. It allows views to subscribe and react as soon as the publisher emits the value.

    See publication
  • You have to change mindset to use SwiftUI

    Last week I saw that the community tries to move UIKit development patterns to SwiftUI. But I’m sure that the best way to write efficient SwiftUI is to forget everything about UIKit and entirely change your mindset in terms of User Interface development. This week we will learn the main differences between UIKit and SwiftUI development.

    See publication
  • Gradient in SwiftUI

    This week's post is an extensive guide for Gradient in SwiftUI. Let’s learn how to use LinearGradient, RadialGradient, and AngularGradient.

    See publication
  • The power of Closures in SwiftUI

    One of my favorite design patterns in UIKit development was a Delegate pattern. Delegate pattern is very straightforward, and everybody knows how to use it. In the Functional Programming world, we usually replace delegates with closures. This week we will learn how to use closures to make SwiftUI views composable and decoupled.

    See publication
  • View composition in SwiftUI

    Containers in SwiftUI has a nasty limitation for the count of children. It is limited to ten items. This restriction can sound ugly, but I think it is awesome. Let’s accept it as a rule. Whenever you reach this limitation, decompose your view into several views. Don’t be afraid to extract your complex views into small pieces and then compose them into a large view.

    See publication
  • Reusing SwiftUI views across Apple platforms

    This week we will talk about reusing SwiftUI views between Apple platforms. We will learn how to run the same views both on iOS, watchOS, and macOS without any changes. To make it possible, all we need is an understanding of the view decomposition principle.

    See publication
  • Localization in SwiftUI

    This week I want to talk about another crucial feature of any app, which is Localization. Every user expects that your app correctly uses environment features like the right-to-left layout or uses system locale to format dates or currencies. Another vital thing here is translations, and this week, we will learn which tools SwiftUI provides to add in our apps as many languages as we can.

    See publication
  • Dynamic Type in SwiftUI

    This week I want to talk to you about Dynamic Type support in SwiftUI. I think there is no way to create an excellent user experience without Dynamic Type support in your apps. SwiftUI provides Dynamic Type out of the box for any text representation and simplifies our job. But we still need to do some work, so let’s talk about it.

    See publication
  • Redux-like state container in SwiftUI. Container Views.

    This week I want to continue the topic of using a Redux-like state container in SwiftUI. I’m delighted with the new approach and already finished the refactoring of the NapBot app in this way. That’s why today I want to share with you how I use Container Views with a state container similar to Redux.

    See publication
  • Redux-like state container in SwiftUI. Best practices.

    Redux provides a single source of truth, which eliminates tons of bugs produced by multiple states across the app. This week we will talk about best practices in building Redux-based apps which allows us to keep our codebase simple and clean.

    See publication
  • Redux-like state container in SwiftUI. Basics

    This week we will talk about building a state container similar to Redux which provides a single source of truth for your app. A single state for the whole app makes it easier to debug and inspect. Single source of truth eliminates tons of bugs produced by creating multiple states across the app.

    See publication
  • Accessibility in SwiftUI

    This week I want to talk to you about Accessibility in SwiftUI. SwiftUI provides a ready to use accessibility implementation for standard User Interface elements like Text, Button, Toggle, etc. In most of the cases, you don’t need to do something additional to make it work. But I will show how you can modify the accessibility tree by using accessibility modifiers to improve your User Experience.

    See publication
  • Modeling app state using Store objects in SwiftUI

    This week I want to talk to you about modeling data layer in SwiftUI. I already finished work on my very first app, which I build entirely with SwiftUI. And now I can share with you the way of architecting model layer using store objects which I used during the development of NapBot.

    See publication
  • Composable styling in SwiftUI

    SwiftUI has pretty good and reusable styling system. By using stuff like ButtonStyle, ViewModifiers, Environment we can build composable and reusable styling components.

    See publication
  • The power of Environment in SwiftUI

    Environment is one of the unique features of SwiftUI which we didn’t have before in UIKit. Today I would like to show you all the benefits of using Environment in your apps. Let’s start with describing the idea of Environment.

    See publication
  • Building BarChart with Shape API in SwiftUI

    This week I want to show you how to use Shape API in SwiftUI. We will take a look at ready to use shapes like Circle, Capsule, Rectangle, etc. We will learn how to draw super custom shapes by using Path and GeometryReader. In the end, we will build BarChart implementation ultimately in SwiftUI.

    See publication
  • ViewModifiers in SwiftUI

    ViewModifiers play a significant role in SwiftUI. Most of the functions called on a View are ViewModifiers. It is the primary way of modifying the view instance in SwiftUI. In this post, we will take a look at some ready to use ViewModifiers, and then we will build our own custom ViewModifier.

    See publication
  • Introducing Container views in SwiftUI

    During app development using SwiftUI, you can see that your views are very coupled with the data flow. Views fetch and render the data, handle user input and actions, etc. By doing so many things views become very fat and we can’t reuse them across the app. Let’s take a look at a different way of decomposing views by using Container views.

    See publication
  • Alerts, ActionSheets, Modals and Popovers in SwiftUI

    This week I want to continue the topic with Modals, Alerts, ActionSheets, and Popovers. SwiftUI views have a dedicated modifiers for presenting this kind stuff. Let’s take a look at how we can use modifiers to display Modals, Alerts, ActionSheets, and Popovers.

    See publication
  • Navigation in SwiftUI

    This week I want to talk about Navigation in SwiftUI. SwiftUI provides a declarative way of implementing navigation in your apps. Today we will cover different navigation flows available in SwiftUI like Master-Detail and Presenting Modals.

    See publication
  • Gestures in SwiftUI

    This week's post is "Gestures in SwiftUI". We will talk about @GestureState Property Wrapper, we will try to build Tinder-like cards, and much more.

    See publication
  • Managing Data Flow in SwiftUI

    It’s time to touch the crucial aspect of every app, and it is Data Flow. All the apps have data to present or mutate. Data plays a vital role in apps using SwiftUI. Every view in SwiftUI is just a function of some state, where the state is our data.

    See publication
  • Animations in SwiftUI

    SwiftUI brings declarative and straightforward approach in building User Interfaces. We have List and Form components and Bindings. All of these things make SwiftUI so easy to use and very powerful. But today we are going to talk about another feature of SwiftUI, and it is Animations.

    See publication
  • Building forms with SwiftUI

    Apple finally released Xcode Beta 2 with an updated version of SwiftUI. The current version has a Form component which appeared on WWDC sessions. Today we are going to build form styled layout with SwiftUI. I want to show you a real-life example of the settings screen built with SwiftUI’s new Form component.

    See publication
  • Understanding Property Wrappers in SwiftUI

    Last week we started a new series of posts about SwiftUI framework. Today I want to continue this topic by covering Property Wrappers provided by SwiftUI. SwiftUI gives us @State, @Binding, @ObjectBinding, @EnvironmentObject, and @Environment Property Wrappers. So let’s try to understand the differences between them and when and why which one we have to use.

    See publication
  • Making real-world app with SwiftUI

    That is WWDC week, and everybody so excited about so many new things we have this year like SwiftUI, Dark Mode, Updateable CoreML models, etc. I will try to cover all the new stuff during the upcoming weeks. Let’s start with SwiftUI. SwiftUI is an entirely new approach to building apps for the Apple ecosystem.

    See publication
  • The power of Delegate design pattern

    Last week before WWDC and everybody so excited about new features which we will have just in a few days. However, let’s keep posts related to WWDC for next week. This week we are going to talk about my favorite design pattern Delegate. Delegate is the most straightforward and powerful pattern.

    See publication
  • Storing Codable structs on the disk

    Most of our apps are REST clients for some backends. During the development of this kind of apps, we want to keep it working offline. In this case, we have to cache data somewhere locally on the device to make it readable without an internet connection.

    See publication
  • Haptic feedback in iOS apps

    Feedback helps people know what an app is doing, discover what they can do next, and understand the results of actions. This week I am going to talk about the Haptic Feedback Engine which provided by Apple in most of the devices.

    See publication
  • Extracting presentation logic to make it testable

    This week's post is "Extracting presentation logic to make it testable." We will talk about refactoring View layer to extract Presentation logic and cover it with Unit Tests.

    See publication
  • Starting Unit Testing with Model layer

    Today we are going to touch the completely new topic on my blog, and it is Unit Testing. Most of us heard about the pros of Unit Testing. I want to show how easily you can start with Unit Testing by covering your model layer. So let’s start with the definition.

    See publication
  • Asynchronous completion handlers with Result type

    This week we will talk about Result enum, which had been a part of the standard library since Swift 5. With Result enum, we can easily describe the resulting state of an asynchronous operation. It can be success or failure at one time not both of them.

    See publication
  • Inclusive enums with OptionSet

    Enums are one of the most powerful features of Swift language. It forms Value-Oriented Programming in conjunction with Structs. Enum is the best way to describe the exclusive state in Swift, but what about the case when you need an inclusive state. Today we will talk about OptionSet protocol and how we can achieve inclusive states with it.

    See publication
  • Adapting app for iPad with UISplitViewController

    This week we discuss how easily we can adapt our apps to iPad screens by efficiently using all the space.

    See publication
  • Deep dive into Pattern matching with ~= operator

    This week's post is "Deep dive into Pattern Matching with ~= operator". We will discuss the core principles of Pattern Matching and how we can implement them for our custom types.

    See publication
  • Animating changes in UITableView and UICollectionView

    Most of our apps present lists or grids of some data by using UITableView or UICollectionView. Often users can update this list by using Pull-to-Refresh technique or by pressing the update button. Everybody knows how to update UITableView by calling the reloadData method on the tableView instance. But what about animation? ReloadData method is invalidating the current items provided by data source and draws new ones without any animation. Today we will talk about animating data changes in…

    Most of our apps present lists or grids of some data by using UITableView or UICollectionView. Often users can update this list by using Pull-to-Refresh technique or by pressing the update button. Everybody knows how to update UITableView by calling the reloadData method on the tableView instance. But what about animation? ReloadData method is invalidating the current items provided by data source and draws new ones without any animation. Today we will talk about animating data changes in UITableView and UICollectionView.

    See publication
  • Dependency Injection in Swift with Protocols

    There are a lot of third-party libraries which provide Dependency Injection for Swift apps. In my opinion, Swift has a powerful type system which gives us the ability to create type-safe Dependency Injection techniques easily. Today we will talk about creating Dependency Injection in Swift with the power of protocols.

    See publication
  • Building complex screens with Child ViewControllers

    Container view controllers are a way to combine the content from multiple ViewControllers into a single user interface. Child ViewControllers are one of the undervalued features of iOS SDK. We use it every day by use of UINavigationController or UITabBarController. But today we are going to discuss how to use this feature to build complex screens.

    See publication
  • Navigation with Flow Controllers

    Last month I started refactoring navigation flow in my pet project. I’ve been using Coordinator pattern for a while, but now I decide to switch to a more native and simple approach like Flow Controllers. Today we will talk about Flow Controllers and why it is more native than Coordinators.

    See publication
  • Hiding third-party dependencies with protocols and extensions

    This week we will talk about two techniques which help us to hide our third-party dependencies and make them easy to replace and refactor.

    See publication
  • Pattern Matching with case let

    Today we will talk about Pattern Matching, one of my favorite features in Swift. Pattern Matching is the act of checking a given sequence of tokens for the presence of the constituents of some pattern. Swift has a particular keyword for applying Pattern Matching: case let. Let’s dive into examples.

    See publication
  • Creating DSL in Swift

    This week we will talk about creating DSL in Swift. Let’s start with the understanding of DSL acronym. Domain Specific Language is a language hosted by parent language to solve any specific area. An excellent example of DSL can be HTML which is DSL for creating web page markup.

    See publication
  • Maintaining State in Your ViewControllers

    Last week we talked about extracting reusable code samples from ViewControllers into Protocols and Protocol extensions. Today I want to show you another nice use case of protocols while maintaining the state of ViewControllers.

    See publication
  • Using protocols as composable extensions

    Today we will talk about using Protocols as composable pieces for our ViewControllers. Protocols and Protocol Extensions are my second favorite Swift feature after Optionals. It helps us to create highly composable and reusable codebase without inheritance. For years we were using inheritance as a gold programming standard. But is it so good? Let’s take a look for simple BaseViewController which we used to have in every project.

    See publication
  • Make your app accessible for everyone

    Last few months I was working on implementing Accessibility support for my app. During this years WWDC I’ve visited all Accessibility related sessions and Labs to improve my knowledge and catch some best practices from Apple Engineers. So now I’m finished my work and finally ready to share with you story of my Accessibility way.

    See publication
  • Mastering MVVM on iOS

    There are plenty of posts on the internet about app architectures in the iOS development world. Today I will show some tips for using MVVM architecture while developing iOS apps. I am not going to show other architectures. The main problem of Apple MVC is mixed responsibility, which leads to the appearance of some kinds of problems such as Massive-View-Controller.

    See publication

Projects

  • FastBot - Diet-free weight loss with friends

    A powerful insight analyzer allows you to understand how different fasting stages improve your health and reduce body fat. Blood sugar analysis helps you understand how your insulin sensitivity changes during fasting intervals. FastBot provides an intelligent recommendations system that gives you hints on reducing weight and body fat.

    See project
  • SugarBot - Sugar and Food tracker

    Be aware of sugar intake and how it affects your health with SugarBot. SugarBot uses dietary guidelines to build smart recommendations by maintaining a healthy diet.

    SugarBot supports sugar and food logging and can also provide micronutrient analysis for a complete dashboard of your food intake. All of this is done with a minimal and elegant interface that makes it easy to view statistics for individual days, browse detailed timelines, and compare day-to-day changes.

    See project
  • NapBot

    - Present

    Machine Learning powered sleep tracker for your Apple Watch and iPhone
    * Sleep History. Gain insight into your full sleep history in beautifully designed overviews.
    * Sleep Tracking. NapBot uses machine learning to automatically track your sleep.
    * Detailed Sleep Analysis. NapBot presents detailed sleep phases analysis by calculating deep and light phases.
    * Environmental Sound Exposure. NapBot analyze your Environmental Exposure to understand how it affects your sleep quality.
    *…

    Machine Learning powered sleep tracker for your Apple Watch and iPhone
    * Sleep History. Gain insight into your full sleep history in beautifully designed overviews.
    * Sleep Tracking. NapBot uses machine learning to automatically track your sleep.
    * Detailed Sleep Analysis. NapBot presents detailed sleep phases analysis by calculating deep and light phases.
    * Environmental Sound Exposure. NapBot analyze your Environmental Exposure to understand how it affects your sleep quality.
    * Sleep Heart Rate. NapBot presents sleep Heart Rate summary chart based on your HR zones.
    * Sleep Trends. Track your sleep trends to understand how new habits influence your sleep.

    See project
  • CardioBot - Heart Rate Tracker

    - Present

    Apple Watch measures the heartbeat every 4 minutes during the day. With the help of the heartbeat data can be found sleep quality, the period of fat burning and high intensity during workout and more. All this can be done using CardioBot.

    See project
  • GOMEZ FASHION STORE

    -

    Browse products in a comfortable two-column or single-column view, choose your favorite categories, and thanks to the extensive and intelligent filtering system, customize the list of products to your preferences, by selecting brand, color, price and other parameters. To find more details and to make shopping faster and more convenient, use the force-touch function - drag and drop the product thumbnail to get a quick view of the details and add the product directly to the wishlist or…

    Browse products in a comfortable two-column or single-column view, choose your favorite categories, and thanks to the extensive and intelligent filtering system, customize the list of products to your preferences, by selecting brand, color, price and other parameters. To find more details and to make shopping faster and more convenient, use the force-touch function - drag and drop the product thumbnail to get a quick view of the details and add the product directly to the wishlist or cart!

    The product card in the Gomez Fashion Store mobile app will provide all the information you need to make a decision. View the product from various angles, zoom and rotate (part of the products are photographed in 360 technology). Still not sure, add the product to the wishlist, share with friends or use the recommendation system and compare the offer!

    See project
  • ShowBot

    -

    ShowBot is the best way to manage, discover and keep track of your TV show collection on iPhone and iPad.

    Features
    • Simple and Great User Interface supporting iPhones and iPads
    • Trakt.tv support gives you an ability to keep your TV show collection in sync between your devices
    • Notifications will arrive as soon as an episode airs
    • The calendar screen shows upcoming episodes in your TV Show collection
    • Powerful search gives you an opportunity to find popular and…

    ShowBot is the best way to manage, discover and keep track of your TV show collection on iPhone and iPad.

    Features
    • Simple and Great User Interface supporting iPhones and iPads
    • Trakt.tv support gives you an ability to keep your TV show collection in sync between your devices
    • Notifications will arrive as soon as an episode airs
    • The calendar screen shows upcoming episodes in your TV Show collection
    • Powerful search gives you an opportunity to find popular and anticipated​ shows.
    • Full VoiceOver support for all actions in the app
    • 3D Touch preview support

    See project
  • eFootwear.eu

    -

    Love the online shopping with efootwear.eu
    Do you appreciate fashion? Do you want to show your style? Do you want to keep an eye on the latest trends in fashion? Are you looking for the perfect footwear for an important event, for a gym, for the summer, for the winter...? In the efootwear.eu online store app you will quickly and easily find shoes for every occasion!

    See project
  • Meet Magento iOS app

    -

    The intuitive interface makes it easy to use and organise your conference plan. Our app gives you access to agenda, current information about presentations and speakers. You can choose only that events which interest you and add them to your plan divided by days.

    See project
  • Healthful Food Recipes

    -

    Healthy Food Recipes - Breakfast, lunch, dinner, smoothie and desserts app is a collection of delicious gluten-free, keto, vegan and vegetarian recipes. This app has a total of 1000+ recipes with a lot more added daily. It gives a person interested in a vegan diet, tips, and instructions on how to successfully transition to a vegan diet.

    Features:
    Enjoy yummy 2000+ recipes
    5 main categories: breakfast, lunch, dinner, smoothie, and desserts
    Details of recipes including timing…

    Healthy Food Recipes - Breakfast, lunch, dinner, smoothie and desserts app is a collection of delicious gluten-free, keto, vegan and vegetarian recipes. This app has a total of 1000+ recipes with a lot more added daily. It gives a person interested in a vegan diet, tips, and instructions on how to successfully transition to a vegan diet.

    Features:
    Enjoy yummy 2000+ recipes
    5 main categories: breakfast, lunch, dinner, smoothie, and desserts
    Details of recipes including timing, serving size, calories
    Bookmark your favorite recipes and add them to your favorite list
    Step by step instructions
    Easy user-interface and engaging design
    The number of recipes is increased every day and updated

    See project
  • InvestAZ for Android

    -

    - Manage all your FOREX, STOCK and other investment accounts on a single screen.
    - View your total assets, as free and invested capital.
    - Quick and easy deposit and withdrawal operations.
    - Add and review your Bank details as well as required Documents.
    - Quick access to Reports and Notification Center.
    - Access and update your Profile information.
    - Direct one touch MT4 Account access from the App interface.
    - Automatic 7/24 money transfer.
    - Open more than one…

    - Manage all your FOREX, STOCK and other investment accounts on a single screen.
    - View your total assets, as free and invested capital.
    - Quick and easy deposit and withdrawal operations.
    - Add and review your Bank details as well as required Documents.
    - Quick access to Reports and Notification Center.
    - Access and update your Profile information.
    - Direct one touch MT4 Account access from the App interface.
    - Automatic 7/24 money transfer.
    - Open more than one investment account to diversify your investment portfolio.

    See project
  • Bankomatic iOS application

    -

    Удобное и простое приложение с базой данных банкоматов в Азербайджане. Возможность просматривать на карте банкоматы всех банков или выбрать в меню только определенные.

    See project
  • Robird for Android

    -

    Holo styled twitter client for Android. Designed with better user experience. Very smooth and blazing fast timeline.
    * Push notifications
    * Multiple image upload and preview
    * Long tap on tweet for conversation view
    * TweetMarker sync
    * DashClock widget extension
    * TweetLonger links auto expand in timeline and posting long tweets
    * Saving tweet to drafts if sending failed and auto send when internet connection available
    * Previews for image services and navigation…

    Holo styled twitter client for Android. Designed with better user experience. Very smooth and blazing fast timeline.
    * Push notifications
    * Multiple image upload and preview
    * Long tap on tweet for conversation view
    * TweetMarker sync
    * DashClock widget extension
    * TweetLonger links auto expand in timeline and posting long tweets
    * Saving tweet to drafts if sending failed and auto send when internet connection available
    * Previews for image services and navigation betweet image with swipe left/right

    See project
  • Oxu.Az iOS application

    -

    Описание
    Oxu.Az – bu gün Azerbaycanın en oxunan saytlarından biri olmaqla yanaşı, hem de operativlik, deqiqlik, informasiyanın qerezsiz çatdırılması üzre ilk yerlerde qerarlaşmış xeber portalıdır.

    Her gün on minlerle insan bizim Azerbaycanda iqtisadiyyat, siyaset, sosial, medeniyyet, idman ve şou-biznes sahelerinde baş vermiş hadiseleri eks etdiren xeberlerimizi mehz Oxu.Az-dan oxuyur.

    See project
  • Saglam Aile iOS application

    -

    Врачи, услуги, цены, результаты анализов, видео-интервью — это и многое другое о клинике Sağlam Aile.

    See project
  • Oxu.az Android application

    -

    Самые Важные и Интересные Новости Азербайджана

    See project
  • Aztagram

    -

    This project was created in order to reunite Azerbaijani mobile users of photo social network-Instagram, and to collect pictures taken by these users in one single place. Here you can keep track of photos taken by users in different parts of Azerbaijan. Also, everyday we are going to present you a brief version of photo-news.

    See project
  • Bank Standard Android application

    -

    Searching Bank Standard ATMs is more comfortable now. Just download this application and find the nearest ATM on the map of your iPhone.
    The application automatically detects your location via GPS and displays the nearest Bank Standard ATMs to your location.
    The features include:
    ★ Automatically adding new ATMs
    ★ Easily search for nearby ATMs with GPS
    ★ View the ATMs on the map
    ★ A quick call to the bank

    See project
  • Bank Standard iOS application

    -

    Searching Bank Standard ATMs is more comfortable now. Just download this application and find the nearest ATM on the map of your iPhone.

    The application automatically detects your location via GPS and displays the nearest Bank Standard ATMs to your location.

    The features include:
    ★ Automatically adding new ATMs
    ★ Easily search for nearby ATMs with GPS
    ★ View the ATMs on the map
    ★ A quick call to the bank

    See project
  • Manat Converter iOS application

    -

    ★ КОНВЕРТЕР ВАЛЮТ №1 В АЗЕРБАЙДЖАНЕ! ★

    Manat Converter от интерактивного агентства Start — это самый простой в использовании, быстрый и в то же время функциональный конвертер валют, идеальный для каждого гостя Азербайджана. Наш конвертер позволяет выбрать свою валюту из более, чем 40 мировых и обладает красивым и удобным интерфейсом.

    ★★★

    Этот конвертер — незаменимый инструмент для каждого, кто приезжает в Азербайджан.

    ★★★

    Просто выберите вашу валюту и сразу…

    ★ КОНВЕРТЕР ВАЛЮТ №1 В АЗЕРБАЙДЖАНЕ! ★

    Manat Converter от интерактивного агентства Start — это самый простой в использовании, быстрый и в то же время функциональный конвертер валют, идеальный для каждого гостя Азербайджана. Наш конвертер позволяет выбрать свою валюту из более, чем 40 мировых и обладает красивым и удобным интерфейсом.

    ★★★

    Этот конвертер — незаменимый инструмент для каждого, кто приезжает в Азербайджан.

    ★★★

    Просто выберите вашу валюту и сразу же начинайте конвертировать цены в манатах. А конвертер будет ежедневно автоматически загружать актуальный курс обмена маната и выбранной вами валюты — абсолютно БЕСПЛАТНО.

    ★★★

    БЕЗ РЕКЛАМЫ, БЕЗ ДОПОЛНИТЕЛЬНЫХ ПОКУПОК. Manat Converter полностью бесплатен!

    ★★★

    ДОБРО ПОЖАЛОВАТЬ В АЗЕРБАЙДЖАН!

    See project
  • Baku Google Technology User Group

    -

    Baku GTUG was the part of Google's Global Developer Program. This community united high-skilled software developers of the country and IT enthusiasts under the one name - Baku GTUG.
    Google changed program's specifications and Baku GTUG stopped its activities and started with the new brand - Google Developer Group. Now it calls Google Developer Group Baku.

    Other creators
    See project
  • Beat Group Android application

    -

    Официальное приложение BEAT Group для iOS. Подробная информация о всех ресторанах и магазинах сети: Opera Lounge, 150 Bar & Grill, Sumakh Restaurant, Pakhlava Tea Room, Lilac Flower Boutique, Vivel Patisserie и т.д.
    Последние новости, специальные предложения и исчерпывающая контактная информация, включая карту проезда.

    See project
  • BEAT Group iOS application

    -

    The official application from BEAT Group for iOS. The extensive details of all restaurants and shops: Opera Lounge, 150 Bar & Grill, Sumakh Restaurant, Pakhlava Tea Room, Lilac Flower Boutique, Vivel Patisserie and other.

    The latest news, special offers and comprehensive contact information, including the map.

    See project
  • Manat Converter Android application

    -

    ★ КОНВЕРТЕР ВАЛЮТ №1 В АЗЕРБАЙДЖАНЕ! ★

    Manat Converter от интерактивного агентства Start — это самый простой в использовании, быстрый и в то же время функциональный конвертер валют, идеальный для каждого гостя Азербайджана. Наш конвертер позволяет выбрать свою валюту из более, чем 40 мировых и обладает красивым и удобным интерфейсом.

    See project

Languages

  • English

    Professional working proficiency

  • Russian

    Native or bilingual proficiency

  • Azerbaijani

    Native or bilingual proficiency

Recommendations received

More activity by Majid

View Majid’s full profile

  • See who you know in common
  • Get introduced
  • Contact Majid directly
Join to view full profile

Other similar profiles

Explore collaborative articles

We’re unlocking community knowledge in a new way. Experts add insights directly into each article, started with the help of AI.

Explore More

Add new skills with these courses