GitHub Actions makes it easy to automate software workflows and basically provides some capabilities than any common CI/CD service like GitLab, CircleCI, Bitrise etc. At work I used GitLab CI/CD to run our e2e tests so adding automation for my personal Hailakka project on GitHub Actions was a nice exercise. You can see the workflow file from the repository: ios.yml
GitHub Actions provides a macOS runner so setting up things were as simple as writing the steps you'd do manually for running the Detox tests and translating those steps to workflow. Adding a workflow for iOS and getting tests to run was easy. The result was simple pipeline on repository "push" action in pull request and master branches.
There is a workflow for Hailakka on Android but I managed it to get running only on API level 29 (or lower) on the GitHub Actions although locally it run on API level 31. Somehow the newer API didn't create any UI (empty images) for Detox to click through. Anyways the Android tests seemed more flaky even when running on local machine.
Detox tests for my simple newsreader application runs on iOS runner quickly after the app was build. The total runtime for the workflow run is around 30 minutes. As I've set the artifacts to be generated only when the tests fail the output is just a succeeded job. Maybe I should look into partial visual regression testing 🤔
You can add a badge to your readme of the workflow status ✅
Mobile application development differs between platforms and after doing couple of applications for the Sailfish OS powering Jolla phone it was finally time to see what other platforms have to provide. I develop Java applications at work so it was logical to look into iOS and learn some Swift. The Internet is full of resources of how to start developing for iOS and here’s my take to the topic. Now I just need an iPhone to run my app on a real device :)
It's also good to read Human Interface Guidelines for iOS-based devices although the guidelines don't provide any practical examples. It's a good resource to learn how iOS applications should work, tells you how your app should look and behave and how to use the UI elements that UIKit provides. As I have done apps for Sailfish OS it was good to adapt my thinking to see things in the iOS way.
In practice the best way to learn is to just write code and experiment. Getting to know XCode and Interface Builder takes some time. After using Eclipse and IntelliJ IDEA for Java development both XCode and Apple’s graphical UI editor are somewhat confusing at first.
And if you're using IRC there's #cocoa-init channel on irc.freenode.net focused on asking and answering questions for beginning developers on iOS and OS X. For more general iOS development you can join #iphonedev channel on irc.freenode.net. To join them you need to register your nick.
Development in practice
Getting started with iOS can be challenging as Swift and Objective-C are used mainly only on Apple's platform and it has its own names for almost everything. I haven't yet gathered my own good practices so it's great that you can read about iOS good practices from Futurice.
For iOS development your options with tools are somewhat limited as you need Mac computer running OS X (10.9.4 or later) for being able to run Apple Xcode and iOS SDK. The other option is to use JetBrains Appcode (99e) which is better (what I've understood). Xcode can be installed from Mac App Store and it comes with iOS SDK. Also although you can run your applications in iOS Simulator it helps to have a real device which helps you to understand how apps interact with users and what the look and feel should be. The documentation and examples gets you far but nothing beats to have first hand experience of the platform.
I found it beneficial to watch e.g. the Coding with Chris "how to make an iPhone app" series of videos for getting around XCode development environment.
Developing for iOS
iPhone applications can be written with Objective-C or with newer Swift programming language. Objective-C is built on top of the C programming language and provides object-oriented capabilities and a dynamic runtime. Swift in the other hand can be described as Objective without the C and is a replacement for the Objective-C language and works side-by-side with it. Wikipedia has good short description of Swift.
Although Swift is relatively new and what I've read isn't quite as robust as Objective-C it’s good starting point for developing iOS apps. Having used some Objective-C for OS X apps I wouldn't recommend it to anyone if you don't actually need it.
Apple's operating system for iPhone, iOS, provides many frameworks for developers and as a developer you've to decide which version to target as it affects your application and capabilities. Apple's iOS developer page provides short overview of what it has to offer. The current version is iOS 8 and i.a. Shinobicontrols has written iOS 8 Day by Day eBook which consists of 39 blog posts covering the most significant features available to developers in iOS 8.
As a developer you have to choose which version of iOS you target and whether your app is universal or only for iPhone or iPad as it affects your code and potential users. Do you need the new features in iOS 8 or is iOS 7 enough and is it worth to make solutions to fit both versions? And do you need different user interface for bigger screen in iPad or is universal version enough? iOS 8 is supported on iPhone 4s or newer and newer iPads and what I read about 72% of devices are using iOS 8 and 25% are on iOS 7. So, I think it's enough to target iOS 8 as it provides you more options how to implement your app.
One nice element of the Swift system which helps you to get hang of it, is its ability to be cleanly debugged and run within the development environment, using a read–eval–print loop (REPL). It gives you interactive properties more in common with the scripting capabilities of Python than traditional systems programming languages. It's useful to play with Swift in Xcode Playground and see what your code does.
Knowing Swift language is just one part and the bigger part in my opinion is to know how to use the UI elements that UIKit provides to create good user experience. When I started developing my app with Swift majority of time went to figuring out how to construct the user interface with Xcode UI builder and what the elements should be, not actually writing much code in Swift. User experience section in iOS Developer Library and UI Elements in iOS Human Interface Guidelines provide good starting points for reading about user experience but doesn't help you much with coding especially when the sample codes are in Objective-C. Basic UI elements like "pull to refresh", "swipe between views", "split view" and "slide-out navigation" are more easily found by googling.