Apps for iPhone & iPad
All our apps are developed natively for every platform. This means that the app is tailor-made for each platform (iOS and Android). This way our apps can make optimal use of the functionalities of each device and the quality of the User Experience is guaranteed.
Native apps in Swift
All our iOS apps are developed with Apple's native programming language Swift. Swift is the language of choice for clear and productive development. Moreover, Swift is continuously developing, which means that new possibilities are constantly being created of which our apps can take full advantage.
We develop the iOS apps in Xcode, Apple's native editor. Xcode is a very extensive program, which offers many possibilities besides developing the app. For example, we can test the app on different devices by running them on simulators. These are digital versions of Apple's iPhones and iPads. It is also easy to set up different environments, such as using the staging server or the production server. With Xcode you can also profile apps, this means that you perform analyses on efficiency, memory usage, etc.
Test Driven Development
We develop iOS apps in a TDD (Test Driven Development) style. This means that we continuously and extensively write tests before the actual logic is worked out. This ensures that we save time and avoid mistakes. There are various frameworks available to test in (think of KIF, Quick or Calabash), but we mainly use Apple's own XCTest module.
CocoaPods (frameworks / pods)
Dedicated developers all over the world are working on so-called 'frameworks' that can be installed with the dependency manager CocoaPods. CocoaPods takes care of the distribution and installation of versions of these frameworks. When developing iOS apps, we use a number of frameworks. Prior to the commissioning of a framework, we first check whether the framework is actively maintained and whether it is seen as 'best practice' to use this framework. Of course, the framework must also make a significant contribution to the project (in the form of time-saving work).
A project generally uses no more than a handful of frameworks. We mainly work with Alamofire for network requests (we have written a blog about it!), Firebase for crash reporting/analytics and Texture for creating awesome Defaults.
We use TestFlight to test apps in the alpha and beta stages. This is Apple's solution for distributing apps to devices for testing. All we need from the user an email address, which is preferably linked to an iTunes Account. The tester can then install the test version of his app based on the email invitation and the TestFlight app.
Uploading new versions
Uploading a new software version involves a number of manual actions (running tests, uploading the app, 'app signing', incrementing the build number, processing git changes). During development, we deploy Bitrise to perform these actions in the cloud. By automating these steps, we can accelerate development. By no longer performing these tasks locally, we can spend more time developing the app.
Git (version control)
Git is a version control system that manages the source code in a quick and simple way. Every code change is tracked via Git and stored locally and online. This ensures that changes can be viewed by the entire team, source code can be checked, backups are available and with new 'features' a separate branch can be used.
Analytics and crash reportage
Fabric/Crashlytics as a framework has already been mentioned . In addition to providing the app analytics, this framework also offers live crash reporting. This means that if an app crashes, a notification will be sent out in almost immediately with the cause of this crash. This allows us to correct any errors in the source code and submit an update if necessary.
Swift and Xcode updates
Swift and Xcode are still subject to updates (which is a good thing). The language and the editor get major updates, especially in September. We like to work with the latest versions, because the updates usually ensure increased productivity and development fun.
Before updates are released, we are already working with beta versions to get to know the changes. More importantly; we can test the apps we've developed in the past and see if they will survive future updates from Apple or if any adjustments are needed. This way we can proactively give advice and see if changes need to be made to the source code before the actual update is presented.