Founders have several reasons to pay close attention to every aspect of their product, including the technology stack. Some might think the technical side isn’t too important when it comes to the proof of concept or the MVP. They instead think the primary focus should be on functionality and speedy launch. However, development never stops there. In the long run, a founder will want to maintain their product, add new features, perform experiments and scale it. Having a good technical foundation will make the work leaner and faster, instead of forcing the team to re-work existing code, and will ultimately minimise costs.
At Tapptitude, we have spent years perfecting our methods while building amazing mobile products for our clients. In this process, we gained a lot of insights on both iOS and Android app development. We always enjoy the challenges of starting with an idea or concept and bringing it to life, and we’ve come to learn how important it is to use the right technology and the right tools tailored to each client’s needs.
A technology stack is a set of tools that is used not only for developing mobile and web products, but also for any IT software. It essentially serves as a toolkit which comprises programming languages, frameworks, libraries, UI/UX tools and various other development tools.
In the early stages of development, choosing the right combination of tools is crucial. This is also the reason why there is always an important conversation with the founder on this particular topic. When choosing a framework, both parties must agree on whether the best solution is using a native framework, or a cross-platform one like React Native app development, Flutter, or an alternative option.
We have refined our iOS app development process through experimentation and testing of various tools and technologies and determining what suits each client best and what doesn’t. We don’t believe in the ‘one process fits all model’. While you’ll find us reaching into the same toolkit, you’ll also notice us adapting and customising the tools to align with the specific needs of the client we’re currently working with. We’ve hung on to a handful of tools that proved to be efficient, robust and secure, and which optimise our development process significantly.
Check out our full iOS tech stack below.
There are two main programming languages used in iOS mobile app development, namely Swift and Objective-C. Given that nowadays Objective-C is mostly used in legacy projects, we recommend opting for Swift for any project we work on, be it a new project or an existing one.
Swift is a powerful and robust programming language developed by Apple and the open-source community and was launched in 2014. Writing Swift code is interactive and intuitive; the syntax is concise but also expressive, and includes a multitude of modern features.
Tapptitude’s iOS mobile app development Toolkit includes XCode, Charles, Proxyman, Postman, curl.
With continuous updates from Apple, Xcode is a complete set of tools designed to create apps for Mac, iPhone, iPad, and other Apple devices. Xcode shines when it comes to coding, testing and debugging, user interface design and it ultimately sets the bar in terms of reliability, being officially provided and endorsed by Apple.
Developed by Apple, the software development kit is used for mobile app development on Apple’s iOS operating system. The iOS SDK, combined with Xcode, allows us to use the Swift and Objective-C programming languages in the development process. Xcode also comes with a device simulator for testing purposes. Furthermore, it offers Previews, which is a tool that enables developers to have a real time visual representation of the user interface that is currently being built.
For the user interface building process, iOS SDK provides two different frameworks, namely UIKit and SwiftUI. Our development team is proficient in both. However, to make an informed decision on whether to use SwiftUI or UIKit it’s essential to understand their designated usage. SwiftUI enables fast UI implementation for simple to medium-complexity interfaces, making it ideal for prototyping and testing new ideas, or creating straightforward user interfaces. It does all of this while being able to function the same on all the operating systems (iOS, iPadOS, tvOS, watchOS). Conversely, UIKit is suitable for building more complex interfaces with advanced functionality. It allows developers to exercise more control over the UI. This further enables the creation of custom or advanced user interactions.
When comparing SwiftUI to UIKit, the choice of framework mostly depends on the complexity of your application. In spite of that, one should not feel stuck with their choice, as migrating functionality between the frameworks is rather trivial.
Tapptitude developers use a wide variety of stability tracking tools to monitor, diagnose and fix app issues effectively. These tools have multiple functionalities, such as performance monitoring, as well as alerts for key events such as crashes or freezes that include crucial information about the cause and place of the issues.
Depending on the use case, budget and scaling intentions, we can pick from a wide variety of tracking tools.
The following are some of the stability tracking tools we’ve successfully used in the past to achieve great results when developing mobile apps for iOS.
- Firebase Crashlytics & Analytics
- Amplitude Analytics
- Google Analytics
- Mixpanel Analytics
- Flurry Analytics
- Appsflyer Analytics
Some of these platforms offer free subscriptions that include the stability tracking component (e.g. Firebase) but that may not always be enough for every scenario.
For more advanced user behaviour analysis, we have UXCam. It provides a solution that can automatically track user actions, and map them to particular app flows. UXCam also gives a valuable output in the schematic representations of the screens visited by the user during each application session.
Here at Tapptitude, we’ve created mobile apps for a wide variety of devices, so we know precisely which development route to take when it comes to your unique product.
Here are all the types of devices we’ve worked on:
- iPhone, iPad, Apple Watch, Apple TV
- Smart TVs
- Smart home devices
- DJI Drones
- TV set boxes
- Car infotainment systems
- Mobile devices that have barcode scanners attached
- IoT devices like smart lighting systems, food lockers, BLE devices and much more
Our app integration assistance includes services related to social media platforms, payment platforms, cloud systems, and much more. Our work doesn’t end once the development process is complete: we make sure that your iOS mobile app always performs well across all devices and user channels, and that it’s fully integrated into the online ecosystem.
Here some of the tools we like to work with:
- Payment platforms: Apple Pay, Stripe, PayPal, GPay and Square Payments;
- Social logins: Facebook, Google and Apple;
- Mapping technologies: Apple Maps, Google Maps and Mapbox;
- Cloud messaging systems (push notifications): Firebase Cloud Messaging and others;
- Real-time socket-based data capabilities: Sendbird, yellow.ai, socket.io and others;
- Audio & video communication: Vonage (ex. Tokbox), Quickblox and others;
- Media playback integrations: Spotify and others;
Developer communities are an essential part of any development team. Knowing very well how much we have benefited from open source code written by others, we have made an objective from contributing to the community.
Be it a contributor, or a simple beneficiary, the proper way to use distributed code is by using the power of dependency management tools. Xcode provides our developers with a robust set of tools and features. These help us in efficiently managing external libraries, frameworks, and packages that the projects rely on. There are two main ones that we use:
- Swift Package Manager
- Cocoapods (mostly for legacy projects)
Cocoapods is mature, offers stability, and provides an almost exhaustive selection of libraries. Swift Package Manager, on the other hand, has been integrated and tailored to the nooks and crannies of Xcode, and is rapidly approaching its older competitors in terms of coverage. For the time being, a combination of the two is what we have on most projects. The aim, however, is to completely migrate towards the Apple patented solution.
CI/CD stands for continuous integration and continuous delivery (or continuous deployment) in its full form, and is considered the backbone of modern-day DevOps. Our developers use these tools to bridge the gaps between development and operation activities and, by enforcing automation, in building, testing and deployment of our iOS mobile applications. Monitorization and maintenance is crucial for any mobile app.
These are the tools we work with:
- Xcode Cloud
The tools we use daily for distributing release candidates, as well as beta testing builds are TestFlight and Firebase App Distribution.
Deciding between the two solutions is highly influenced by the requirements and destination of the project. However, for a while Apple has been steadily improving the capabilities of Testflight, offering solutions such as the Enterprise Program, and Unlisted App Distribution mechanics, and upgrading. This means that we now have an out of the box, proprietary solution to start with, and only consider others in special scenarios.
The source code managing workflow our team uses is called gitflow. Based on our internal usage, as well as the popularity of the approach, we determined this to be the best fitting for mobile CI/CD. We even integrated the QA department into the source code merging process, by adding their approval as a mandatory step in our workflow. This maximises the chances of spotting issues way before the code reaches the production environment, thus making the post integration testing leaner.
Depending on the budget and timeframe constraints, our CI/CD process may also include the standard Unit Testing most projects have, as well as User Interface Testing, both streamlined by Xcode.
All things considered, the tools and technologies presented in this article represent a good solution to our current needs. Nonetheless, we have come a long way in properly defining a toolset. Throughout the years, we have experienced all sorts of changes, from programming language all the way to insignificant 3rd party tools. With every iteration we reached a new plateau of favorable conditions, at least for a while. In the end we advise everyone to take our recommendations with a grain of salt. The software world is one of many changes, so we are open to receiving them, and incorporating new or different solutions into our stack, as long as they help us deliver better quality products to our customers.