How to use C in Swift Packages
C language is never going away. Not only is it portable, efficient and performant, but it's also very easy to find a compiler for any platform. SQLite might be one of the most well known C library, but it's not the only one. Lua scripting language. curl ...
Utilising the iOS Secure Enclave with your data
The Secure Enclave The Secure Enclave is a pivotal part of most modern Apple devices. On your iPhone, it's what keeps secure your most sensitive information. Information such as your biometric data, to use with Face & Touch ID and your payment inform...
The Composable architecture and TDD. Can you make it work?
Recently, our team's attention shifted towards The Composable architecture. This is a very powerful framework to build iOS applications. The goal of this article is to show that you can build the whole app logic without creating any UI with the help of TC...
Getting started with Swift Charts - part 2
Last time we looked at how to get started with Swift Charts. Let's pick up where we left off. We have the data, we have three ChartTypes, which show temperature (line chart), precipitation (bar chart) and wind (double line chart) and we have customized th...
Getting started with Swift Charts - part 1
Let's have a look at Swift Charts and see how we can use it to plot weather data. Apple introduced Swift Charts in iOS 16, and improved it in iOS 17, adding, among others, new chart types. If your app still needs to support iOS 15 or lower versions, you c...
Strengthening our AI knowledge on mobile apps
In today's digital age, mobile applications have become an integral part of our daily lives. From ordering food to managing finances, there seems to be an app for every need. Behind the scenes, these apps are powered by a technology that has revolutionize...
How to use SwiftUI in a UIKit app
SwiftUI was initially announced 4 years ago, and last year Apple said clearly that the best way to build an app is with Swift and SwiftUI. However, some of us are still working on codebases that were started in UIKit more than 4-5 years ago and that is po...
Empowering Mobile Applications through Blockchain: Our Journey, Part 2
Welcome back to our blog series on blockchain technology! In our previous post, we explored the fundamentals of blockchain and its potential impact on various industries. If you haven't read it yet, you can find it here. Today, we're excited to delve deep...
Empowering Mobile Applications through Blockchain: Our Journey, Part 1
Introduction In a world that is rapidly digitalizing, the need for a secure, transparent, and decentralized mode of operations is ever-increasing. Enter the realm of Blockchain, a groundbreaking technology that has revolutionized industries across the glo...
An Introduction to WeatherKit and Alternative Weather Service APIs for iOS Developers
Nowadays weather APIs are used in a wide range of applications from travel sites that help people plan their daily outdoor activities to distribution logistics where severe weather warnings can help companies plan for supply problems. Many mobile develope...
Migrating Obj-C/C++ module to SPM
Swift Package Manager(SPM) provides a powerful system of modularizing Swift projects. With SPM, you can create separate modules for different parts of your codebase and manage their dependencies in a clean and efficient way. It could be done using the old...
How to set up Firebase dSYM upload for an iOS project with multiple environments (Xcode 14)
If you ever used Firebase Crashlytics for an iOS app's crash reports, chances are you also encountered the “missing dSYM files” warning in the Firebase console. The crash reports are basically useless without these files. The Firebase Crashlytics document...
Automating tasks with SPM plugins
Swift Package Manager plugins are a great way of automating tasks, like, enforcing code conventions and style. In this tutorial we're going to learn what are package plugins and implement 2 plugins; one that outputs code statistics and another that genera...
How to implement realtime updates with Live Activities
Live Activities were introduced in iOS 16.1 as a way to display up-to-date information on the iPhone Lock screen and in the Dynamic Island. In this article, we're going to explore the Live Activity API by implementing a fake Delivery App where the user wi...
iOS Accessibility Support Within SwiftUI
Accessibility in our iOS applications is something we should all strive for. To be inclusive and have our applications available to all is a massive goal for us at Monstarlab in every project we undertake. To accommodate to each user, whatever their needs...
WWDC22 - A first look at Apple's new Augmented Reality features
Over 34 million developers are part of Apple's developers community with access to great frameworks including AR specific ones like ARKit and RealityKit. Here is an overview of what we know so far from this year's WWDC when it comes to augmented reality, ...
Information System for Storing and Analysing Qualitative Studies of Refugees
Refugee crises continue to be a major concern around the world. As of today, the number of refugees and internally displaced people worldwide has grown to almost 90 million. Due to multiple barriers like culture, language, etc., ensuring adequate access t...
ARAnchors - Bringing virtual objects into the real world
At Monstarlab we have some incredible talent when it comes to building AR experiences. Some of the work I have seen my colleagues produce has simply blown me away. Really creative, innovative experiences that can often at times blur the line between augme...
iOS: Automating the upload of DSYM files to Firebase using Fastlane & Bitrise
What was the issue? Crash reporting is something that's hugely important for all our apps. It allows us to easily find issues within our apps and can give us helpful advice on where to fix them. For our crash reporting, we use Firebase Crashlytics. For th...
UITableView DataSource Prefetching
Apple has introduced an API for prefetching the data for a UITableView or UICollectionView in iOS 10. This is a short story about how to implement the UITableViewDataSourcePrefetching protocol. Let's learn how to make our apps buttery smooth, richer, and ...
Intro to AR Foundation - Cross-Platform AR Application Development
I am glad to participate in the first edition of the MonstarHacks hackathon organized by Monstarlab. In this event, I made an Augmented Reality Panda Demo, and I will take this opportunity to introduce ARFoundation to you and take you through a small AR D...
Swift: From Protocol to AssociatedType then Type Erasure
When Swift was made, it had been the first protocol-oriented programming language. Though Swift is great for object-oriented programming, but from the way for-loops and String literals work to the emphasis in the standard library on generics, at its heart...
How to setup CI/CD for iOS App Development with Fastlane, CircleCI and Firebase App Distribution
App developers always strive to improve the product they are working on. So it is definite that either(mostly) you will be adding new features to existing products or (luckily) you will be setting up a whole new project. Either way, onboarding new develop...
WWDC21 - A first look at Apple's new Augmented Reality features
There are now over 1 billion augmented reality enabled iPhones and iPads which gives an incredible reach for your experiences. Here is an overview of what we know so far from this year's WWDC when it comes to augmented reality, with more details to unrave...
Engineering Awesome Conference 2020
We love engaging with the tech community, and we are big consumers of the awesome work that people share online. So a couple of weeks ago we hosted our first-ever online conference as a way to give back to the community. 6 experts from across our offices ...
Privacy for Photos Access
Apple always takes care of Privacy. Prior to iOS 14, for accessing photos, users were prompted with two options Don't Allow and OK. To use a feature that actually only required limited access, users still had to expose their entire photo library. This yea...
What's new in Swift
This year's "What's new in Swift" included a plethora of improvements and new add-ons. Some of the news are: better diagnostic compiler error's and hence better debugging improved and faster code completion improved auto indentation improved integration ...
Introducing App Clips
Apple introduced a new feature called app clips at this year's WWDC. It is coming to iOS 14 this fall. App clips offer a promising new way for businesses to increase the discoverability of their apps and services while at the same time eliminating the nee...
A first look at Apple's new Augmented Reality features
Apple's WWDC event is greatly anticipated in the Apple developers community every year. When it comes to the augmented reality world, we only got a quick glimpse of what is new in yesterday's keynotes. Here is an overview of what we know so far, with more...
LLDB summary
LLDB,Low Level Debugger, is a lightweight, high-performance debugger that is built into Xcode by default. Being able to use it well will make our development more efficient with less effort. We often use LLDB's po / breakpoint in development, you can get ...
How to convert 3D models to USDZ files using Apple's Reality Converter
Earlier this year, Apple released the tool any ARKit enthusiast has been waiting for: Reality Converter. Keep in mind this is a Beta Release as of the moment of this article. You can convert common 3D files like .gltf, .obj, .fbx using the Reality Convert...
Things iOS Developers should know before starting Flutter
Flutter is a cross-platform development framework that allows us to create iOS and Android apps using a single programming language called Dart, which was released by Google itself. I would like to share a few things I wish I would have known before start...
Combine networking with a hint of SwiftUI
In this blogpost we will examine what Combine is and how it can be used. Combine is a huge topic, and obviously, we will not cover everything here. So, continue reading to learn how we can use Combine to make network requests in a very general and efficie...
Animated Transitions in ViewController - Part 1
The hunger for magnificent design, animations and transitions is huge and nowadays designers are pushing developers to create beautiful views with lots of animations and smooth transitions. Based on this, I will present some basic concepts of transitions ...
Compositional Layout Basics
Even though this year at WWDC Apple introduced the new SwiftUI framework, which will redefine the way we create our app UI's from iOS 13, there were as well presented some advances in UIKit, precisely, in the way we can build an UICollectionView through t...
Supplementary Items and Decorations
The previous part of this series covered the ground base for implementing a Compositional Layout. Now that we are comfortable with the base implementation, this part of the series will focus on the Supplementary Items and Decorations that we can use in a ...
Building the App Store using Compositional Layout
In the first 2 parts of this series we learned the basics for implementing a [Compositional Layout]({{ site.baseurl }}{% post_url 2020-01-10-Compositional-Layout-Part1 %}) and how to add Supplementary Items and Decorations. With this knowledge in hand we ...
How to make an augmented reality decorating experience app with AR Quick Look
AR Quick Look provides a very powerful augmented reality experience with user interactions like moving/scaling the object, people occlusion and sharing of the model supported “out of the box”. Now, as easy as Apple makes it for us, from my experience, a b...
iOS 2019 Retrospective
Apple recently posted their annual announcement that App Store is shutting down over the holidays. At the same time Stack Overflow has announced that Winter Bash 2019 is here, giving you a chance to add a funny hat to your Stack Overflow profile because w...
An overview of watchOS complications
Complications are bits of watchOS application that can be put on the user's watch face and offer quick information, simply by looking at his/her Apple Watch, without opening the accompanying watchOS/iOS app. The Apple Watch ships with some default complic...
Nodes x Hacktober Fest 2019
Getting started with Open Source projects can be daunting some times, but we hope that our local Hacktober Fest events inspired people to get more involved in this community. We organised 5 events across 5 different locations, all with their own personal ...
NSSpain 2019
NSSpain 2019 NSSpain is one of the most well-known iOS conferences held in Europe. This year was its seventh year, and with over three hundred participants, the tickets got sold out even before a single speaker was announced. Taking place in Logroňo, a be...
Using USDZ for a better AR experience
ARKit 3.0 was officially released together with iOS 13.0 and it includes a lot of augmented reality goodies, such as people occlusion and motion capture. You can read about all the new features [here]({% if site.baseurl %} {% if site.baseurl %}{{ site.bas...
Sharing code between iOS and Vapor
Code reusability has always been one of the ultimate goals for us developers. Building your backend with Vapor not only gives you highly scalable apps with shallow memory footprint, but also the potential to share some of your backend code with your iOS a...
Google Docs viewer with Flutter
Flutter is a powerful framework when it comes to rendering complex nested widgets with countless styles and customizations. This small project will explain the basics of using Google APIs and Services, in particular Google Drive, Google Docs and rendering...
Join the dark side and implement Dark Mode in iOS
WWDC this year brought to light a lot of amazing features Apple has been working on lately. One of these features, and maybe one of the most expected, was Dark Mode support. As Apple mentioned in their keynote, Dark Mode is easy to implement and will brin...
Higher order functions in Swift
Higher order functions in Swift are extremely powerful tools to have in your developer toolkit, the only issue is that it might take some time to get comfortable with them. Before we get started, let’s have a look at some important terms to know in relati...
ARKit 3 brings more power to Apple's Augmented Reality
We can already see Apple having a big lead when it comes to augmented reality and the new version of ARKit will push them even further. There are amazing opportunities for AR as a mass market E-commerce solution and we can already see big companies taking...
Add a Swift Package to Your iOS Application
With the release of Swift 3.0, Apple introduced the Swift Package Manager, a tool for managing the distribution of Swift code. It is integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies. Though...
Create Your Own Swift Package
In Part 1, Add a Swift Package to Your iOS Application, of this Swift Package Manager series we saw how you can add an already existing package to your application. Now, you might be wondering, "How can I create my own package?" The answer is simpler than...
A dive into the Observer Pattern in iOS applications
Often when developing iOS applications with more complex requirements we may encounter the need to react to, and perform UI updates on, not so easily accessible UI components. Another example could be that we must update an object outside our currently fo...
Swift Alps
Swift Alps - as the name might imply - is a conference revolving around anything Swift related. As the name might also imply, the conference takes place in the Swiss Alps, in Crans-Montana more specifically. What sets this conference apart from many of th...
Book a test drive with Siri Shortcuts (a Siri Shortcuts intro)
Earlier this summer at WWDC 2018, Apple announced Siri Shortcuts, a new Siri feature that will allow you to extend your app's capabilities by building custom voice actions. Siri Shortcuts will be available with the release of iOS 12 later this year. Let's...
Google Cast
Today, on the App Store, you are able to find a rapidly increasing number of apps that will allow their users to watch video content. There might come a time when you will have to develop such an app, and functionality like Google Cast and AirPlay is not ...
URLComponents
When writing mobile apps, more often than not we have to communicate with a backend to get some data to present to the user. The shared language between frontend and backend is usually URLs combined with either a POST body or maybe some URL query paramete...
Making a Presentation Application with Google Nearby Messages & Firebase
Here at Nodes, we regularly run events and give presentations. We wanted to use technology to make these more accessible and enhance these events for people who attend, and smooth out the event process entirely the only way we know how; making application...
App accelerators
The competition in the mobile app industry gets bigger and bigger so we have to deliver better and better apps to keep the users hooked. Extra niceness goes a long way in user retention and introducing app accelerators is a great example because it’s not ...
Custom Gesture Recognizers
If you want to implement a gesture that is not already provided by Apple you can customise your own. However, they recommend using the standard gestures because users are already familiar with them, so take some time to consider if a custom gesture is the...
UIGestures
Gestures are the magic behind those accelerators that can make your app more user friendly. We will now show a few examples on how to implement them in your code. Swipe Gestures You can have many accelerators build with the swipe gesture as it is discrete...
Adding Peek and Pop to your View Controllers
With iOS 9, new iPhone models add a third dimension to the user interface, called force touch, or more commonly 3D Touch. A user can now press your Home screen icon to immediately access functionality provided by your app. Within your app, a user can now ...
Challenges when making Today Widgets
Apple introduced the Today extension in iOS 9, more commonly called widgets. Apple describes widgets like so: Widgets give users quick access to information that’s important right now. For example, users open the Today view to check current stock prices o...
Preparing for iPhone X
iPhone X was announced on September 12, 2017, and with that came a lot of questions about how apps will look and behave with this new phone. We as iOS developers are now accustomed to supporting a variety of screen sizes, but there are still some new chal...
What this WWDC means for us
WWDC 2017 happened at the beginning of June in San Jose, California, and Apple presented lots of exciting changes. We already covered in this article the most important iOS additions from a user's perspective, but what exactly did WWDC 2017 bring for an i...
Our experience at iOSCon 2017
iOSCon is an annual conference in London, focusing mainly on Swift development for iOS, but with talks also spreading this year to as diverse subjects as Accessibility and making the most of the time you have with no regrets. The conference was hosted at ...
Haptic Feedback makes you vibrate!
The iPhone could vibrate ever since it was launched. And so did almost all the other phones, even from before smartphones were a thing. But Apple took this function further than anyone else, by introducing the Taptic Engine in the Apple Watch, and afterwa...
Serpent - more than just another JSON mapping framework
At Nodes, we develop apps that rely a lot on complex REST APIs. The iOS team needed a fast and fully featured JSON mapping framework. We had been using our own internal parsing framework for Objective-C for a long time, but when Swift came out we decided...
Understanding code signing for iOS apps
If you're an iOS developer, most likely you've had to deal with code signing. And if you're a junior iOS developer, you might've felt a bit overwhelmed by everything going on in the "Certificates, Identifiers & Profiles" section of the developer port...
Insights from NSSpain
We've recently attended NSSpain, a developer conference focusing mostly on iOS. This was our experience, in three different perspectives. Jakob Mygind The main points that stuck out for me during the NSSpain conference were the increased focus on and need...
Continuous Integration With Deployment to TestFlight and HockeyApp
We've recently revised our development process on the iOS team and set up a continuous integration server to make and deploy our builds faster, easier and more consistently. This post should shed some light on what we chose and how we set it up. The Requi...