The Apple Mobile OS environment is challenging, but as iOS matures, it is getting easier to write programs for the devices. Even though that environment adds more and more functionality along the way, now you can program tvOS, iPadOS and watchOS using the same conventions as for the phone. I actually liked programming in Objective-C, although I mostly use SwiftUI these days. You need to know UIKit and Objective-C, however, to become a fluent programmer on the platform. But it won’t be a requirement for most of the material you find here.
Apple is careful in promoting, publishing and revising its interfaces. That you can seamlessly add an Objective-C library to your SwiftUI program view Swift Package Manager is mind-blowing. But it is a tribute to its attention to the type of detail that makes your life as a developer manageable; it is constantly adding and refining functionality to its tools.
Comments on better ways for organization of the site are always welcome. In case this material seems redundant to you, take a look at the links below for some places to get you started on your own.
Developing for the iPhone and iPad means you have a vast range of skills that go beyond Swift coding. From configuring Xcode for multiple third party packages to designing a back end to persist the data over multiple launches there really is a lot more to it than just writing some swift code.
This is my first venture into front end content, and I'm feeling my way as I go along. Obviously there is the Blog component, which for now is the majority of the content. I am working on a handful of tutorials to add to the site, based on popular demand.
Both on the web and when developing mobile apps, Front End programming is evolving rapidly as the hardware provides better performance and new capabilities and the infrastructure grows richer. Libraries and Frameworks are under constant revision and bring more to the table each year. This is even more true for mobile app development, since the phone ecosystem is developing more rapidly than the more established desktop computing environment.
In setting up this site, my primary objective is to get myself out there and interacting with others. The rapid pace of Swift development makes for a very exciting environment, but it can be overwhelming - there's a LOT of bandwidth, thanks to so much open source work going on. It's good to get a handle on what others are going through and what they find important, as well as what trips them up. If you don't already program for a living, you shouldn't have to program in an ivory tower environment, and it needn't be in the isolation of your basement "office" or bedroom. This site is one way I keep in touch with what is going on around me.
I don’t know your background, I don’t know how curious you are or what you want to achieve. So I can offer you alternatives/options. I can make suggestions on a way to do things, I can point you to online resources I have found helpful.
This site isn't about teaching you how to code. And certainly it isn't about doing things "the right way." -- whatever that means. For me, coding is a craft. I get better at it the more I do. Due to its rapidly evolving nature, Swift is constantly changing and it can be a challenge to keep up, adapt and adopt.
You have a wealth of options available to develop for a mobile phone environment. Maybe you already have a rich background in Java, Javascript, the Android ecosystem, Kotlin, C# or maybe something older and have never had a chance to see how things work in iOS
. It's possible that you only develop using Objective-C
, but know that you can't do that forever.
This site may present alternatives to coding that are different from the way you’ve been coding. Maybe you’re an ace programmer who stumbled onto Swift because your predominantly Android-based app is ready, and you want to try to branch out into the iOS world. Maybe you heard that Swift was a modern language with a lot of useful features and you want to take a look. The Swift community is an active one, and there's plenty of opportunity for those who want to get involved. What can you bring to the table?
This isn’t the place to learn how to program from scratch.
If you can’t write a complete program your eyes will be glazing over in no time, as most of the concepts discussed here don’t come up in DataStructures 101. I’m going to assume you can express yourself in Swift.
I have an extensive background in natural human languages and computer languages, living in Sweden for a year as an exchange student, Germany for two. I earned a German/Russian double major degree as an undergraduate, going on to get a Masters in Computer Science. I mention all of this to point out that we all may have different backgrounds yet can share a common path going forward. We each bring something unique to the experience.
There are a myriad of excellent resources online to help someone learn to program (you will find lists interspersed throughout the site). That’s not my focus here.
I put this site together to help those who have spent a year or two (maybe less if you’re driven, more if it’s a hobby) learning swift. There’s a big gap between knowing the language fundamentals and getting what you need onto the screen of your device. What's popular changes over time. Before the advent of Combine
it was all about Redux
and RXSwift
. More recently it's been all about Structured Concurrency
and Existentials
. These developments do not appear out of a vacuum - they are extensions of patterns that were already in use to fullfil a need that wasn't being provided elsewhere. My point here is that things are constantly changing, and I believe I can be of help pointing you to useful new developments.
I assume you are a beginner to intermediate-level programmer in Swift or SwiftUI. You know how to compile and run a program, you have changed preferences in Xcode. (how your code formats on Ctrl-I, the background color of your editor, where the compiler should place its build files, how many spaces a tab indents, etc.
My primary aim is to provide a summary of new technologies and some guidance for the curious. These pages are also here to help those who are stuck due to something out their control: a broken process that keeps them from accomplishing the immediate task at hand, or maybe help make a connection that bridges your understanding with a new topic that has been close within your grasp, but needed a fresh perspective. StackOverflow is a gift at times, but it is not for the faint of heart.
Keep in mind the ideas and suggestions presented here are guidelines, not rules. Everyone’s style is different, and hopefully evolving over time.
Total Immersion is not everyone’s cup of tea. Very often you can introduce yourself piecemeal to the concept being presented. Try the first step. When that succeeds, review the reasons why you started in the first place and see if things make more sense now. Rome wasn’t built in a day, and your career in software development can last a lifetime.
Ideally you are part of a team or have peers who can review your work. They can suggest changes that make things more understandable to them. If you make the changes yourself, you can deepen your understanding of the process by integrating their perspective with the one you already have. (does this sound like Agile programming?) By sharing your experience, you deepen your understanding of how things relate to other things. What if your partner understood the same situation differently? The more ways you can view a subject, the better you understand it, and the easier it is to remember.
I try to be consistent with the terms used, and explain them when they first occur, but it’s possible I’ve neglected to define something that I’m familiar with but you haven’t encountered. At the bottom of each page there are links to articles and resources that may go into a more appropriate depth for you. Perhaps one of these references will help fill in any gaps. Again, the pages on this site are a starting point.
I've provided a link to my email account. If you have suggestions for the site, want to request that I discuss a topic, can point out something I've written that is vague or incorrect, please drop me a line and give me an opportunity to improve my site.
I had to make a lot of decisions to determine what sort of content to provide in these pages. At each decision point I considered who will I leave behind? On this page I want to lay out my reasons for presenting the content here, and what sort of content you can expect to see.
If you’re at all curious, I hope you click around and see if anything surprises you. Maybe I talk about something you’ve always wondered how to do, but never had the time to investigate yourself.
This is the type of person I’m writing for. Someone like me. There’s a craft involved in writing good code, and once you are in a workday environment, you might lose the drive needed to forge new paths in your development.
So perhaps to you the more immediate question might be: why Swift? What are the other options? I will provide you elsewhere on this site lists of resources to turn to if you need help understanding a concept, etc. There are outstanding resources available for someone new to the iOS environment. You can find YouTube channels devoted to introductory Swift, as well as static sites or hybrids. If you’re new to Swift they’re a better fit than what you’ll find here.
Do you know what the computer language most in use these days is? Would it surprise you to learn that it is Javascript? I mention this to point out that I’m not trying to reach the largest possible audience here. For me, at least, it is about the language itself. I enjoy programming in Swift.
Which nearly brings me back to my point
I’ll have more to say about ubiquity
elsewhere on this site, but it was clear to me more than a dozen years ago that iPhones would become ubiquitous. Apple has a lot of resources under its management, and has made many canny decisions on keeping their ecosystem vibrant. (I’m mostly talking about open-sourcing Swift, but there are many more examples.)
Apple wants you to learn SwiftUI. If you want a job using SwiftUI, you are going to have to be fluent in UIKit and Objective-C as well. Nothing is ever developed in a vacuum, and established businesses build on legacy systems. Consider yourself very fortunate indeed if you're working without the constraints of supporting a legacy (pre-existing) system. (I've programmed in 8088 Assembly Language, IBM 370 Assembler, Pascal, Prolog, Python, Ruby, LISP, C++, Objective-C, Java, JavaScript, SQL, bash, and others. And I'll continue to add to the list.)
My focus here is on presenting ways to get things done using the available tools. Mostly that will be in Swift. I don’t believe in reinventing the wheel, however, and if a suitable tool involving a decent amount of complexity is available then I’m all for coming up with an interface that allows me to “set it and forget it”. By this I mean you write the majority of your code in Swift, and come up with some sort of adapter that gives you access to the functionality you don’t have time to program yourself. You might be able to turn to the Swift Package Manager for help in integrating these outside dependencies.
˙
I don't mean relationships and people. I'm talking about making the progression from seeing a concept to understanding not only how to implement it, but why you would want to. How does it fit into your existing skillset?
Not everyone starts from the same place, or shares the same background. Maybe you started as a FrontEnd designer, or a backend database administrator. Swift hasn’t been around all that long, so for most people it isn’t their first language.
If you successfully learned Swift by copying someone else’s code and making it work for you, then you already knew other computer languages. This is a great skill and it can get you far.
But wouldn’t you like to know why
a certain snippet of code works?
If you mark your View
as public
, why does the compiler immediately find errors in your code that weren’t there a minute ago? [hint: it might have to do with Protocol Conformance
]. Don't forget that mobile device development builds on the legacy desktop and even mainframe systems of previous eras.
The best way to become a better programmer is to do more programming. Try to do something you've never attempted before. Check out the announcements and upgrade notices from Apple, read the readmes to interesting projects on GitHub.
If you have some open-source code published that you would like give more visibility to, let me know. If I integrate it into one of my apps I'll provide a write-up here on this site to smoothe the installation process, and possibly show it off as well with a nice screen shot of it in actual use.
˙
I am grateful to the many people online who contribute to the Swift Community in so many ways. Here is a partial list of the people and organizations that have made my journey more exciting and perhaps a bit less bumpy.
Swift Forums
Apple Developer Forums
GitHub
StackOverflow
˙
HackingWithSwift (Paul Hudson)
Pointfree
SwiftBySundell SwiftTalk
˙
Asperi (StackOverflow) Erica Sadun
John Sundell - Twitter
Majid martin-r (StackOverflow)
Natasha the Robot - Twitter
rmaddy (StackOverflow)
Rob (StackOverflow)
Rob Mayoff (StackOverflow)
vacawama (StackOverflow)
I urge you to visit these sites, patronize and contribute where you can, become a contributor to the community as well!
˙