Mark Eschbach

Software Developer && System Analyst

iOS

iOS is mobile oriented derriative of the NextStep platform owned and tightly controlled by Apple. The principal difference between iOS and OSX was from the application standpoint is a shift towards touch input and strictier requirements on memory usage. Originally continuing with the tradition of Objective-C as a first class citizen, beginning in 2014 Apple shifted towards their new language, Swift, as being on equal footing as Objective-C.

The official build system for iOS is Xcode which is written an maintained by Apple. There are several commercial cloud-based build systems for CI/CD needs. Apple does produce Xcode Server however I haven't heard much about it.

ReactiveCocoa

iOS is mobile oriented derriative of the NextStep platform owned and tightly controlled by Apple. The principal difference between iOS and OSX was from the application standpoint is a shift towards touch input and strictier requirements on memory usage. Originally continuing with the tradition of Objective-C as a first class citizen, beginning in 2014 Apple shifted towards their new language, Swift, as being on equal footing as Objective-C.

Development notes

  • Migrating iOS App Through Multiple Environments -- An interesting article on building for multiple environments.
  • If you happen to have multiple targets (frameworks, apps, applications, etc) within a single project then take care not to give those modules the same name. Even when just using Objective-C these module names drive intermediate and output artifacts. Due to the nature of the build system this will cause random failures at various points in a build. Even worse this will cause builds to succeed, then rebuilds without modifying any code to fail.
  • Swift supports internal functions and curried functions. This results in a some awesome possibilities to DRY code.
  • With ReactiveCocoa you really have two choices with SignalProducers: (1) start and handle all events; (2) startWithSignal and finish the chain yourself. I was hoping for an interface where I could start and receive a singal, attaching additional observers.
  • When using a switch statement you need to provide a body for each case clause. If you need an empty clause just provide break.
  • Using a framework on your iOS application: http://jaanus.com/how-to-correcty-configure-building-private-slash-embeddable-os-x-frameworks/
  • If you get random errors around touch -c touching build artifacts without additional output or exit code 65, I've encountered this repeatedly in parallel builds in both TravisCI and CircleCI. I don't have a good solution yet.
  • To properly support equality for enumeration in Swift the enumeration must extend Equatable and a global function public func ==( lhs : EnumType, rhs: EnumType ) -> Bool.

    Xref
    StackOverflow discussion regarding this.
  • Enumeration behavior is a little un-natural, you define a method with a switch statement of self and define all the labels you are interested in.

    Xref
    Some great examples of using enumerations