After moving to sunny Prague, I realized that learning a new language using ration cards or using online courses is not for a procrasticator like me. And what if you make an application without cards, courses and mechanical learning, in a context that would be interesting to me? So the idea of the application was born, which I will not talk about, but I will tell you about the difficulties I had to face. The material can be useful for people who would like to develop in the field of mobile development on iOS.
Swift or Obj-C
About what to learn from two languages, many copies are broken. I will not delve into the theory (since not a theorist). Swift's advantages: simplicity, clarity, absence of scary square brackets everywhere. The advantages of Obj-C: are used in most of the old projects of large companies, and since almost no one takes on the work of juniors, except for large companies, the chances of finding a job with knowledge of Obj-C are higher if you only know Swift. Cons Swift: if you use open source library, it is far from a fact that it will work out of the box. There was even a case that the FacebookLogin library was not compiled on one of the versions, until the developers absolutely fixed the bug. In a word, Obj-C is an ocean of stability, while Swift is a swirling sea.
Where to begin
I started by spending 10 euros on a Rob Percival course on Udemy, which is definitely worth the money. A former math teacher, Rob speaks very well and clearly about the basics of Xcode and basic programming. Along with watching Rob's videos, it would be good to read Apple 's Swift reference to get an idea of the capabilities of the language as a whole. If you study at the rate of Rob, you will need a month and a half to learn the basics. In the end, when the projects are more complicated, you need to think about your project, start thinking through the functionality and, most importantly for Apple, the design.
Design
Apple itself advises to devote to design at least 50% of the total time spent on the project. This is the golden rule, though design needs to be understood in a wider sense than most people are used to - not only as a layout, but also as a structure of all processes in an application. In the conditions of the most severe competition and large advertising budgets it is quite difficult to come up with an application with unique functionality, so design and user experience are our everything. I installed the first 10 applications with similar functionality on my phone and made an analysis on a large number of parameters, ranging from onboarding and process descriptions to the download speed and weight of the binary file (which is very important, because without Wi-Fi, applications weighing up to 150 can be downloaded megabyte). This analysis gave me an idea of how a project should be in order to get at least some downloads.
The design of existing applications can and should be rethought, after all, many Russian writers of the Golden Age rethought Europeans, such as Tolstoy did with Hugo. In this case, not the best solution is to borrow a “sugar” design with Dribbble or Behance - there are many good artists, but design is more about analytics and utility than about beauty and pretentiousness.
Ideally, it’s good to have a layout before starting to develop code, but in practice these are two parallel processes, and therefore it’s very good when the developer himself has skills in Sketch (or Affinity Designer is not so convenient, but you can also work).
Architecture
When a project is created not for oneself, but for a company, then architecture becomes one of the few outlets in which one can be creative in the narrow framework of a technical task. I analyzed more than 100 vacancies at Headhunter and concluded that large projects are increasingly inclined to VIPER with different variations. Digital agencies love to invent something of their own. But if your project is small and you are working on it alone - you should not be afraid of the banal Model-View-Controller, unless you add a separate router if the application is networked. Even if the Controller becomes massive, it’s not so bad if you are fine with the logic and naming of functions and variables. On the other hand, it is believed that the number of classes directly affects the download speed of the application.
Challenges in development
I, as a person without IT education, must admit that it was not the first time that I was able to master the fairly basic principles of delegation and handlers. Some frameworks also have surprises: for example, how to force Firebase to synchronously request data from the database? GCD does not resolve this issue, either in groups or semaphores. As a result, the problem was solved by ordinary completion handlers. Cheap and angry, but it works.
In addition, to simplify the work with debugger, I began to add to the key operations and immediately after calling the function the output of the result to the console. For a newbie, this greatly speeds up understanding at what point the build fell.
Based on the analysis of the same vacancies of the iOS developer, you can display an approximate list of the most popular frameworks, except for standard UIKit and CoreData: Alamofire, Firebase, AVFoundation, MapKit (Mapbox), CoreLocation, CoreAnimation and Crashlytics.
Sending to the App Store
Studying the language and the necessary frameworks took me 6 months in a mode of 3-5 hours a day, another 3 months for 8 hours a day I was engaged in the development of the final project. As for sending directly to the App Store, you need to keep in mind:
Source: https://habr.com/ru/post/344128/
All Articles