分享

Become an iOS Developer in 2021: The Ultimate Guide

 jerry_tom123 2021-04-30

移动市场正在爆炸式增长,iOS 开发人员需求量很大。

人才短缺使工资越来越高,即使是初级职位也是如此。软件开发也是您可以远程完成的幸运工作之一。这是可以理解的,然后越来越多的人想成为iOS开发人员。

当然,金钱和自由是伟大的,但它们并不是万能的。我们中的许多人制作 iOS 应用程序来创建我们引以为豪的东西,并改变许多人的生活。

不过,成为 iOS 开发人员需要付出一些努力。因此,必须专注于正确的事情,而不是把时间浪费在无用的活动上。这就是为什么我写了这个详细的,分步指南。

使用 MVC 和 MVVM 构建斯威夫特UI 应用

立即获取免费预订

内容


第一章

决定这是否适合你的职业生涯


第二章

技术要求


第三章

第一步:学习斯威夫特编程


第四章

iOS 发展的基础


第五章

更上一层楼


第六章

如何获得 iOS 开发工作

第一章:

决定这是否适合你的职业生涯

您需要决定的第一件事是 iOS 开发是否适合您。

虽然 iOS 开发人员的工资可能很有吸引力,但金钱往往不是唯一的动机。软件开发需要一定的技能和个性特征。

你一开始为什么要听我的?

正如古老的谚语所言:

那些可以,做的人;那些不能教书的人

我认为离真相再远不过了。

当然,有些老师不知道他们在说什么。没有人愿意听他们胖叔叔的健身建议。所以,你应该应用健康剂量的怀疑。

不过,如果那句谚语是真的,所有的老师都会很糟糕,我们永远学不会学到任何东西。

我用一个更直接的指标: 那个人有得到我想要的东西的证明记录吗?这并不一定使一个人成为一个伟大的老师, 但它比无知好得多。

所以,在这里,我会自我介绍,让你决定。如果,可以理解的是,你不关心我,请随时跳到下一节。您不会错过任何关键信息。

自 2015 年以来,我一直在教授 iOS 开发,并与数百名学生一起创建了高级课程。其中一位在上完我的一门课程两个月后,甚至将他的薪水增加了两倍(不,我不能保证每个人都能参加。这对我来说也是一个惊喜)。

在我开始教书之前,我在大客户中担任了几年的自由职业者。在此之前,我曾在一家为顶级公司和Facebook等荷兰社交网络制作应用程序的机构担任 iOS 开发人员(这已经不存在了)。

哦,我还有计算机科学和计算逻辑硕士学位。如果你想成为 iOS 开发人员,这没有必要,尤其是在当今市场,但它有帮助。

当我说我是iOS开发人员时,我得到的一个有趣的问题是:您是否发布了任何应用程序?虽然它不需要发布自己的应用程序是一个iOS开发人员,我有一个应用程序,使iOS应用程序(有点元,我知道)。

那么,我可以做,还是只能教书?

对我来说已经够多了让我们专注于你。

iOS 开发人员的需求和薪水很高

人们想成为 iOS 开发人员的主要原因之一是因为薪水。应用创造了一个新的经济体,预计到2021年将达到6.3万亿美元。在其网站上,苹果吹嘘说,仅在美国就创造了200万个就业机会

Apple’s website talking about jobs

每个人和他们的狗都想成为其中一员也就不足为奇了。

但是 iOS 开发人员实际赚多少钱呢?

一般来说,软件开发人员的薪水相当高。iOS 开发人员也是如此。不过,你能挣多少钱取决于许多因素。主要的是你的位置和你的经验。

幸运的是,有几个网站,你可以得到一个球场的数字。根据玻璃门,在美国,这些是iOS开发商的工资:

  • 入门级: $64.000

  • 平均: $96.000

  • 高: $140.000

iOS developer salary in the USA on Glassdoor

请务必检查您的特定位置。像硅谷这样的科技中心推高了工资,因此上述高端企业可能只能在苹果、谷歌或Facebook等大公司上市。例如,工资表显示的数字较低

iOS developer salary in the USA on Payscale

在所有薪资网站中,确实有最高的数字,平均为119.585美元,外加现金奖金、股票期权和其他福利。

iOS developer salary in the USA on Indeed

但不要把这些数字视为绝对数字,否则你会失望的。我认识一个在荷兰想要那种薪水的人,我住的地方。这是不可能的。

在这里,我从来没有听说过一个iOS开发商的工资高于€60.000,和玻璃门同意。(虽然我相信你可以谈判更高的工资。稍后将提供更多)

iOS developer salary in the Netherlands on Glassdoor

这不仅仅是钱的问题,但激情也是不够的。

虽然金钱是一个很好的激励因素,但许多iOS开发人员并没有因此而投入工作。

在过去的几年里,我花了很多时间与我的电子邮件列表订阅者互动,以了解是什么激励他们,他们有什么问题(在我的列表上)。

有些人承认他们这样做是为了钱,这没什么不对的。但经常听到许多人说,他们想:

  • 创建能够影响许多人日常生活的应用程序;

  • 增加他们的创造力;

  • 从事激动人心的项目;

  • 自己创业:

  • 独立并停止在一家大公司工作。

一般来说,开发人员以他们的手艺为荣。他们不把自己的职业当作赚钱的一种方式。

然而,我无法忍受的是那些告诉你要追随你的激情的人。

说实话吧激情被高估了

如果你想成为 iOS 开发人员,您肯定需要对软件开发感兴趣。如果你讨厌它,你就不会走得太远。但激情是短暂的。当你不可避免地失去最初的动机时,你需要别的东西来维持你前进。

无论如何,激情并不总是在开始的时候到来。通常,它只发生在你掌握技能之后。

相反,你需要的是深思熟虑,遵循一个系统,这将有助于你通过很多次,当你不想学习。像彼得森博士的未来创作这样久经考验的心理工具也比依靠"激情"和"灵感"更有帮助。

iOS 开发人员究竟是做什么的?

这可能看起来像一个愚蠢的问题,但事实并非并非这样。我能听到你们中的一些人说: "一个 ios 开发人员制作 ios 应用程序, 嗯。

是的。但是这是什么意思呢?

作为开发人员,您将花费大部分时间进行编程。这意味着在文本编辑器中键入文本。 

不要介意任何类型的文本。您用 Swift编程语言编写程序,这是您用来为计算机编写说明的正式语言。以下是斯威夫特代码的一部分外观:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Account {
private (set) var transactions: [Transaction]
var balance: Int {
var balance = 0
for transaction in transactions {
balance += transaction.amount
}
return balance
}
mutating func add(_ transaction: Transaction) {
transactions.append(transaction)
}
}

不会做的是设计 iOS 应用。这是用户界面设计器的工作,而不是开发人员的工作。

UI设计本身就是一个领域,也需要时间来研究。这是一种技能,可以帮助(很多)以后在你的职业生涯,或者如果你想使自己的应用程序。但是,如果你想做的是设计应用程序,就像你在Dribbble上找到的,你试图成为一个设计师,而不是一个开发人员。

作为开发人员,您将与负责应用视觉外观的设计师合作。相反,您将致力于其功能。这意味着你不需要学习如何使用设计工具,如素描无花果,或全草 

While you will be using some visual tools to build apps, you will spend most of your time typing code.

What does it take to be an iOS developer?

Typing code does not mean being a writer of literature or poetry, despite what some slogan might say.

The significant traits of a software developer are:

  • logical thinking and problem-solving;

  • spatial reasoning and system design;

  • abstract thought, imagination, and creativity to find solutions.

These traits are all related to intelligence. On top of that, you might also want to consider your personality.

I’m going to base this discussion on the Big Five personality model, which is the most reliable and scientific model.

Those online tests you might have done with acronyms like ENFP and INTJ are instead based on the Myers-Briggs model. Those tests have no scientific validity and can give you different results if taken more than once, so they are not reliable.

Different personality traits can be optimal for different types of work.

  • High openness is a requirement. This trait is anyway correlated to intelligence and to the intellectual characteristics I listed above.

  • High agreeableness can make you a better team player in a company or when freelancing. But low agreeableness can help negotiate a higher salary, a raise, or a promotion, or push you to start your own business to do things on your terms.

  • Conscientiousness is usually helpful in any field, being the second most significant indicator of life success (the first is IQ). Self-discipline, orderliness, and attention to detail are also going to be helpful to write, organize, and debug code. If you are low in conscientiousness, you are best suited for a job where someone decides what you should do. Otherwise, you might take on the organizational struggles of freelancing or starting a business.

  • Most developers have low extraversion. This helps with programming, which is often a solitary job. That does not mean that developers are asocial, and it does not mean you can’t be high in extraversion. If you are, running your own business might also not be the best choice, since you won’t have any colleagues.

  • If you are high in neuroticism, you should get a stable job. Low neuroticism is instead synonymous with low risk-aversion and can help you in freelancing or starting a business.

You can find free personality tests online, but I recommend this one. It’s affordable and more accurate than free tests.

Chapter 2:

技术要求

要成为 iOS 开发人员,您不需要太多。

许多软件工具,你会使用将是免费的,但得到一个新的Mac电脑和iPhone或iPad可能是昂贵的。幸运的是,有更便宜的替代品。

要了解 iOS 开发,您需要一台 Mac 计算机

虽然从技术上讲,在 Windows 或 Linux 机器上运行 macOS 是可能的,但设置起来并不简单。此外,苹果的许可证不允许这样做。

想想你想要什么, 但是, 在我看来, 从非法的东西开始不是成为 ios 开发人员 (或其他任何东西) 的最佳方式。

从长远来看,走捷径会产生有害的心理后果。如果你不投资你自己,你怎么能指望别人投资你呢?

这就是说,我知道Mac是昂贵的电脑。

但你不需要市场上最新的Mac。你可以在eBay上找到一些便宜的二手机器,像Mac迷你,价格公平。在撰写本文时,我可以看到低于 200 美元的选项。

cheap Mac minis on eBay

苹果M1处理器的Mac迷你是最好的,甚至比专业电脑还好,但它们仍然很贵。也检查苹果翻新的Mac的一些折扣。

确保您购买的 Mac 可以运行最新版本的 macOS,如果苹果已经宣布,可能会运行下一个版本。

目前,我推荐一台运行至少 macOS 卡塔利纳的计算机,以便您可以学习像 SwiftUI 这样的新技术(稍后将详细介绍此技术)。由于卡塔利娜从 2012 年开始在 Mac 迷你上运行, 应该不难找到一个。

苹果每年6月左右在其全球开发者大会(WWDC)上公布iOS和macOS的新版本,因此请留意他们的网站,以获得进一步的公告。

您使用苹果免费提供的Xcode创建iOS应用。

一旦您拥有了Mac,您将需要在上面安装Xcode。

Xcode 是大多数开发人员用于制作 iOS 应用的集成开发环境(IDE)。你可以在Mac应用商店或直接在苹果的网站上免费得到它。

xcode is the tool to make iOS apps

我建议在应用商店中获取它,因为您不需要创建 Apple 帐户(尽管您无论如何都需要它)。您还可以从应用商店获得 Xcode 的自动更新,就像在 Mac 上执行其他应用一样。

你可以在这里找到Xcode指南,但它不是一个指南,我建议现在阅读,所以保持链接,供将来参考。这是一个用户手册,所以它假设你已经知道如何使应用程序,你还不知道,否则你不会读这一节。

很难理解为什么 Xcode 的功能是有用的, 当你不知道它们是什么。在学习 iOS 开发时,最好学会使用 Xcode。

iOS 设备可能会有所帮助,但可选

最后,一个共同的问题:你需要一部iPhone还是一台iPad?

如果你已经拥有了一个,它可以是有用的。但你不需要买一个来学习。Xcode 配备iOS 模拟器,允许您运行在计算机上制作的所有应用。

我开发了我的第一个iOS应用程序只使用模拟器。我也为许多客户工作,在那里我很少,如果有的话,在真正的设备上运行应用程序。

iOS 模拟器可以满足您的大部分学习需求。在向应用商店提交应用之前,您只需要一台真正的设备才能进行最终测试。

实际上,Apple 不断向模拟器添加特色,因此您可以使用真正的设备以不容易的方式测试您的应用。例如,您可以快速更改黑暗模式或辅助功能的设置。或者,如果您创建使用 GPS 位置的应用,则可以创建带有跟踪以模拟移动的文件,这比在附近运行要好。

但有时,您可能需要测试模拟器中不可用的功能。对于多点触控、陀螺仪、相机或苹果铅笔等功能,您需要一台设备。 

这些都是高级功能,所以无论如何,你不应该在开始学习它们。(我会告诉你要学习什么,并在文章的稍后顺序)。无论如何,二手设备仍然可以是一个负担得起的选择。

确保您购买的设备可以运行最新版本的 iOS,以便您可以使用最新的功能。在编写时,即iOS 14,其中包括以前版本中不可用的功能,如小部件。

If you want to develop apps with SwiftUI, you need at least iOS 13. iOS 13 runs on devices going back to the iPhone 6S, which you can find on eBay for less than $100. I still have one as my primary device, and it works great.

cheap iPhones on eBay

If you want an iPad, get a device that runs iPadOS 13 instead.

Chapter 3:

第一步:学习斯威夫特编程

对于任何软件开发人员来说,第一个必要的步骤是学习编程。这是作为 iOS 开发人员的关键部分,因此我建议在尝试学习其他内容之前先关注它。

不要惊慌:你不会过时的

让我们澄清一些似乎让许多想成为 iOS 开发人员的人担心的事情。

苹果行动迅速,每年都发布新的东西。到现在为止,你可能听说过 SwiftUI,苹果在 WWDC 2019 发布的新 UI 框架,它从根本上改变了 iOS 应用程序的制作方式。

所以,你可能会觉得你需要快速学习的东西,或者"下一件大事"将使你现在学到的东西过时。

这不是软件世界的工作原理。

几十年来,计算机科学和编程的基础是相同的,不会很快改变。

计算机的历史确实经历了巨大的前进步骤。几十年后,我们从像房间一样大的大型大型机,到我们可以在口袋里携带的现代化、联网的移动设备。

但是,尽管技术发展很快,但软件开发的基础始终保持不变。一旦你熟悉了它们,你就可以跳到任何你喜欢的新技术。

像斯威夫特和斯威夫特UI这样的重大转变确实会发生,但每五年左右只发生一次。是的,你必须保持你的知识最新。这是 iOS 开发人员的要求。但你通常有足够的时间。

一次做一件事:约束和深入工作如何有益于你的学习

我在网上反复看到的最糟糕的事情之一是人们同时教授斯威夫特编程和 ios 开发。苹果也犯了这个罪。

他们的理由是:"既然你应该同时学习制作应用程序,为什么不一起学习呢?

我来告诉你为什么

斯威夫特编程和 ios 平台都是两个巨大的野兽。同时学习两者都很难。iOS开发是一个总括术语的许多不同的活动,我会在本文稍后讨论。

我遇到了很多人,他们按照这种方法感到困惑。他们投入了大量精力同时学习这两个主题,但他们也不明白。

这不是唯一的原因。

假设您必须了解以下五个常见的 iOS 开发主题:

  • 快速编程;

  • 用户界面框架(斯威夫特UI或UIKit);

  • 数据存储;

  • 网络:

  • 算法和数据结构。

让我们也假设他们采取每个一个月(不,他们不只采取一个月。他们可能会带你走得更多。这只是为了这个例子)。

如果你学到这个和那个位, 它最多需要你, 总共五个月。它实际上将带你更多, 因为许多这些主题假设你知道以前的。因此,您将不断跳来跳去,任务切换的成本很高。

相反,如果你一个接一个地学习它们,会发生什么?

一个月后,您可以从列表中划掉第一个。繁荣。第一个目标已完成。即时满足。

当然,你仍然没有做任何很酷的应用程序。但是,一个月后,你已经可以收获好处了。现在,你可以学习下一个主题与坚实的基础,使它更快。

这个概念被称为约束理论,在《目标:不断改进的过程》一书中被引入。你应该用它来做你生活中的一切,而不仅仅是学习iOS开发。另一个推荐的读物是《深度工作:在分心的世界中集中成功的规则》。

所以,一次做一件事。

你应该学哪种语言?斯威夫特还是客观 C?

正如我上面提到的,作为 iOS 开发人员,您将花费大部分时间编写代码。所以,你必须学习的第一件事是编程。

计算机程序是使用正式语言编写的,其中您向计算机发出指令。 

有大量的编程语言在那里,但编程大多是相同的任何平台上。这使得您的编程技能可以从一种语言转移到另一种语言,因此您首先学习哪种语言并不重要。 

不过,最好还是用你用来在iOS和其他苹果平台上制作应用程序的语言来学习编程,这就是Swift。

几年前,当斯威夫特第一次被引入以取代目标C时,有一场关于两个人中哪一个先学习的争论。斯威夫特很久以前就赢得了这场辩论。SwiftUI的推出使得这个论点更加强烈,所以如果你碰巧在网上找到关于这次讨论的文章,你可以放心地忽略它们。

无论如何,不要忘记,目标C是苹果平台几十年来的首选语言。您可能仍需要在某个时候学习它才能从事长期项目。在那之前,忘了它吧。

从 iOS 开发中单独学习斯威夫特编程

说你应该一次只学一件事 (如果你跳过那部分, 去读它), 第一个斯威夫特编程。

我的建议是集中几个星期,为这些编程概念打下坚实的基础:

  • 基础知识:数字、字符串、常数、变量和操作员。

  • 收藏:阵列和字典。

  • 控制流语句:如果其他,开关,和/而循环。

  • 类型和界面:结构和列举、函数、方法、协议和扩展。

  • 面向对象的编程概念:类、继承和多态性。

虽然我提供关于 iOS 开发的基本和高级课程,但我还没有关于 Swift 编程的任何材料。我正在创建一个免费的斯威夫特课程,但这需要一些时间。

自从我很久以前在大学学习编程以来,我没有任何书可以推荐。但大内德牧场指南似乎是一个很好的选择,许多人推荐。它只专注于斯威夫特编程,它有很好的评论,所以你可以从那里开始。

我可以告诉你,虽然它避免斯威夫特语言指南,除非你知道程序已经。这只是一个参考手册,它不教编程分步。

不要浪费时间写博客或其他多余的活动

虽然了解如何成为 iOS 开发人员很重要,但了解您不需要做什么也至关重要。

互联网文章充满了建议,如"开始博客"或"在应用商店发布自己的应用程序"。这听上去是个好建议,大家都在想:"嗯,不会疼吧?

实际上,它可以。

学习 iOS 应用程序开发本身就是一项艰巨的任务(不要相信那些告诉你你可以在几周内学会它的人)。任何妨碍你的事情都会使你更加困难,当你得不到结果时,你会士气低落。

因此,诸如开博客、播客或跳上推特之类的事情是多余的。

显然,记下你学到的东西是有帮助的。许多人以博客为借口做这样的笔记。如果你觉得你想与世界分享你学到的东西,请继续。但这不是学习,甚至找工作的要求,尽管有些人声称。

出版你学到的一切需要时间从你试图做的事情:学习。此外,使用笔和纸比在电脑上做笔记效果更好。最后,找到工作的方法比写博客更有效,我稍后会描述。

是的,我知道有些人喜欢娜塔莎。她通过在 Swift 中学到的一切写博客,在 iOS 开发领域广为人知。所以,我不是说你不应该这样做。我想说的是,你不需要这样做。

你需要的是一个计划,而不是一个博客。

Chapter 4:

iOS 发展的基础

在学习在 Swift 中编程后,下一步是学习如何制作 iOS 应用程序。

iOS 开发是一个庞大的主题,因此需要学习很多东西。但并不是每件事都同样重要。以下是您应该关注的内容。

关注构建任何 iOS 应用所需的基本要素

如果你只知道斯威夫特编程,你就不能成为iOS开发人员。之后,是时候解决 iOS 平台问题了。

iOS 幅员辽阔,充满技术、框架和设计模式。每个软件平台都是不同的,因此即使您已经是开发人员,您也必须了解 iOS 中的工作原理。

在网上,你会发现关于几乎任何主题的文章。但并非所有都很重要。您必须首先关注您将要制作的每一个应用所需的基本概念。

当然,像增强现实机器学习,或视频游戏技术的东西很酷。但是,在学习 iOS 开发的基础之前,您将无法使用它们。

在我 10 多年的 iOS 开发中,我从未接触过它们。 

现实情况是,大多数应用不是创新的,而是简单的创建-阅读-更新-删除 (CRUD)应用。

因此,您学到的一些技术将应用于您将要编写的每个应用,而有些技术可能永远不会用于您的职业生涯中。这被称为帕雷托原则

As a first step, I recommend you get familiar with Apple’s Human Interface Guidelines for iOS. That will give you an overview of the conventional iOS interface paradigms that you find in any app. After that, you can tackle the fundamental topics of iOS development, which I am going to cover next.

Should you learn to make apps using SwiftUI or UIKit?

To create the user interface of iOS apps, you need to use a UI framework. The problem is that now Apple provides two of those.

The old framework is UIKit. While it’s somewhat true that “newer is better”, UIKit has existed as long as the iOS platform. That means that the majority of iOS apps created in the past decade use UIKit. If you want to get a job as an iOS developer, you will probably need to work on one of these apps.

At WWDC 2019, Apple introduced a new framework called SwiftUI, which replaces UIKit. Since SwiftUI is more recent, it is not yet as mature as UIKit. Some of the features offered by UIKit are still not available SwiftUI.

But Apple is bridging that gap quickly. At WWDC 2020, they added to SwiftUI the most important missing features. At WWDC 2021, they will definitely close the gap further.

SwiftUI also has some other limitations you should consider. It became available only on iOS 13, so you can use it only for new apps that target the latest operating system.

Many companies have customers that are slow to update their devices. That usually means these companies target the two iOS versions before the current one. So, they will adopt SwiftUI only when iOS 15 comes out later this year. On top of that, they won’t rewrite their UIKit code from zero, so you’ll have to mix the two.

So, should you learn SwiftUI or UIKit?

Here is the obvious but unhelpful answer. Given the current state of the market, you might have to learn both.

Still, which one should you learn first?

The scale is leaning more and more towards SwiftUI. Last year, I would have recommended learning UIKit first since most companies are still using it. That might even be true when you read this article. But, as time passes, it will be less and less clear-cut.

I surveyed my 11.000+ email subscribers, and there is great excitement for SwiftUI. In the 2019 iOS Developer Community Survey, 9% of respondents already delivered apps using SwiftUI, and 60% said they would use it for any new app. In the survey for 2020, those numbers jumped to 34% and 74%, respectively. SwiftUI is growing fast.

SwiftUI also has another advantage: it works on all Apple platforms. You will be able to leverage your skills and reuse most of your code also to build macOS, watchOS, and tvOS apps.

So, while the honest answer is “it depends”, here is my advice. Go for SwiftUI. It’s better to be future-minded and invest in a growing platform than on a declining one.

If you are going to make apps for yourself, that’s all you need. If instead, you’re going to get a job as a developer, it will depend on the job. To decide, be sure to read the last chapter of this article on finding a job.

Here is what should you learn for each UI framework

One of the advantages of SwiftUI over UIKit is its simplicity (to a certain extent. Some aspects of SwiftUI are not that easy to grasp). So, if SwiftUI is your choice, here is what to learn:

  • The basics of the framework. Apple offers two free introductory tutorials that will give you a broad idea about how SwiftUI works. They a bit all over the place for my tastes, trying to teach everything at once, so I also recommend reading my introductory article to SwiftUI.

  • SwiftUI’s data flow. Once you know how to build user interfaces, you need to pick the correct way to fill them with data. SwiftUI has several data flow mechanisms, each appropriate for a different scenario.

  • The MVC and MVVM patterns. Knowing how SwiftUI is a good start, but it’s not enough. Architectural design patterns like MVC and MVVM help you structure your entire app correctly, making it more robust and easier to update.

UIKit is harder to learn. It has several complex parts, and you need to know them all to make iOS apps. Here is a quick list of the main concepts you should learn:

  • The MVC pattern and view controllers. MVC is a widespread design pattern that guides how you structure apps on several platforms. It’s not limited only to SwiftUI. UIKit’s view controllers are part of MVC and a central component of the framework.

  • The view hierarchy and Auto Layout. These are fundamental to build user interfaces that work on iOS devices with different sizes.

  • Containers and Xcode storyboards. Containers are a special kind of view controller that allows you to structure your apps’ navigation flow. Storyboards are a visual tool to design and organize such navigation flows.

  • Table views. Many, if not all, iOS apps need to manage screens with long scrolling lists. While table views are just one of the many components of UIKit, I listed them separately because they are not straightforward.

If you want a shortcut, you can get my Confident iOS Professional course. It dives deep into both SwiftUI and UIKit, covering all the other necessary topics to build any iOS app. Plus, the best practices to properly structure your code. Join my email list to know when I open it.

The second, most pervasive iOS framework is Foundation

SwiftUI and UIKit are only UI frameworks. There is more to building iOS apps than creating user interfaces. The other fundamental framework for iOS development you will need to learn with is Foundation.

Foundation is extensive and contains a plethora of features. Unlike the two UI frameworks of iOS, though, you won’t need to be familiar with everything it contains. There are parts of it I never used, and others which I only touch rarely.

In any case, you usually learn the relevant parts of this framework as you follow a book or course on iOS development. It’s not something you study separately.

Here is a short list of some of its features for your convenience. Some of these are advanced features you will need to learn later.  I will list those in the next section.

  • Foundation contains some other basic types besides the one offered by Swift. The most important ones are the URL and Data, but you usually learn how to use these when you deal with storage and networking (more on this later).

  • Many apps deal with dates and time. Foundation contains types to manage calendars, dates, time, time zones, and calendrical calculations.

  • In Foundation, you also find many formatters for numbers, currencies, person names, dates and times, and other measurements.

  • Speaking of measurements, Foundation contains many other units that are useful for conversions. If your app deals with lengths, areas, weight, mass, speed, acceleration, energy, temperature, light, or electricity, be sure to check them.

Learn Git to manage incremental changes in a project and to publish code on GitHub

I would say that the second-most-important tool for iOS developers after Xcode is Git.

Git is a version control system. You will need to learn it at some point since it’s often a job requirement, but it’s not something you should focus on at the beginning.

Version control is fundamental to track code changes on projects. It’s especially useful to coordinate the developers in a team, but it’s also helpful to keep track of code in your personal projects. There are different version control systems, but Git is the most prominent.

Sooner or later, you will also meet GitHub, a vast platform, based on Git, that many developers use to share code and coordinate projects. A less popular alternative to GitHub is Bitbucket, which also integrates with other online tools many companies use, like Jira.

Xcode has some Git integration, which is getting better with time but is still limited. You will need to learn to use Git from the command line to use all its power.

也有Git的视觉工具,如源树,和GitHub桌面,这可以让你的生活更轻松。老实说,我发现它们的通用性不如使用命令行,但您的里程可能会有所不同。

Chapter 5:

更上一层楼

学习制作简单的 iOS 应用程序已经可以为您找到入门级的工作,但这只是一个里程碑。作为开发人员,需要的不仅仅是了解单个平台的工作原理。您将需要获得其他技能才能处于游戏的顶端。

在获得坚实的基础后,您应该将知识扩展到软件开发的其他主题。

一旦您了解了 iOS 的基本支柱、编程和基础,您就可以开始扩展。

现在,您应该能够作为 iOS 开发人员获得一些入门级工作或构建自己的应用程序。并非所有作业都有相同的要求,因此请务必检查本文的下一部分。

你会知道更多关于iOS比我知道当我得到了我的第一份工作作为iOS开发人员。我不知道你在本节中找到的大部分东西, 我不得不在工作中学习它。(平心而论,我也有计算机科学硕士学位。但是现在很多公司都不需要。

在任何情况下,如果你想在你的游戏的顶部,并得到更高的职位作为一个开发人员,你需要扩大你的知识。

以下是您应该关注的一些关键主题。

将应用的数据存储在磁盘上

大多数 iOS 应用需要永久存储数据。数据存储有几个 iOS 技术,每个技术都有其利弊。以下是您需要学习的内容的简要列表。

  • 首先,要在磁盘上的应用中保存数据,您需要一种方法将其转换为二进制数据。在 iOS 中执行此操作的标准方法是使用可编码协议。iOS 中最常见的数据格式是属性列表JSON。后者最近变得更受欢迎,因为它也被用来在互联网上传输数据。

  • 一旦您拥有了二进制格式的数据,您需要一种方法来存储它。基础框架提供了一个简单的 API 来存储文件系统中的文件。这是存储用户数据的标准选项。

  • 相反,如果要存储应用的配置,Foundation 会提供首选项系统

  • 大多数数据具有分层结构。但是,有时您会有具有复杂关系的数据。为此,您可以使用核心数据。要小心,虽然这是一个巨大的框架,需要一些时间来学习。许多开发人员认为核心数据是 iOS 中唯一可用的存储解决方案。在现实中,这是最复杂的一个。

数据库和 SQL 语言

数据库是存储数据的另一种方式。它们用于许多平台,从 Web 到移动应用。

管理数据库比我上面列出的存储解决方案复杂得多,这就是为什么它值得拥有自己的部分。

iOS 使用SQLite,这是一个关系数据库。SQLite 是一种多平台技术,因此您的知识也将是可转让的。不过,你不必经常处理它。十多年来,我从事的使用 SQLite 的项目中只有几个。

首先,要处理关系数据库,您需要了解如何使用实体关系模型设计其表。

一旦您拥有了表,您使用称为SQL的特定语言管理其数据。这不是像 Swift 这样的编程语言,而是一种允许您组合和过滤数据的查询语言。

学习数据库,需要时间。您应该仅在需要时选择此选项。

Networking and REST APIs

Many modern apps get their data from the internet.

The Foundation framework offers a URL loading system, but learning to perform network requests in your apps is also not as straightforward as learning to use a few new classes.

To be able to create robust networked apps and to debug them properly, you need to learn how the internet works in general.

This includes concepts like the HTTP protocol, URLs and the DNS system, what a router and a server are, how REST APIs are designed, what a CDN is, etc.

This is again a quite broad topic, but since you’ll need it in many apps, it’s not something you will be able to avoid for long. To have a kickstart, I recommend reading my article on network requests and REST APIs in iOS.

Algorithms and data structures

We write programs to solve problems. While many of these are simple, there are complex problems that require specific solutions.

When you learn to program, you learn simple data structures like arrays and dictionaries. In some cases, you need more sophisticated ones.

Some examples are stacks and queues, bloom filters, linked lists, skip-lists, trees, and graphs. Which one you need depends on the problem you are trying to solve.

Each of these structures has specific algorithms to read, add, and remove data, so you need to learn those as well. And these are not the only algorithms you might need to learn.

There are many algorithms to solve common problems not related to specific data structures. Some examples are greedy algorithms, constraint satisfaction problems, linear programming, the simplex algorithm, A*, and other AI and machine learning algorithms.

These algorithms are relatively complicated, so you don’t need to know them by heart. You can always look at their implementation when required. But you should at least know that they exist.

And finally, be sure to have a look at Swift’s packages for collections, algorithms, and numerics to see if a particular solution you need has already been implemented.

Architectural design patterns, software design principles, and paradigms

 You can get away with the basics of iOS development only in small apps. As a project grows, you need more tools in your bag to handle their inevitable complexity.

For these, you will need to learn common design patterns, principles, and paradigms. These are unrelated topics, even though I am listing them all in the same section.

Some examples are unit testing, the SOLID principles of object-oriented programming, memory management with ARC, functional programming, protocol-oriented programming, and concurrency, just to name a few.

I have an advanced course that teaches all these, but beware that it’s only for iOS developers that already have some experience.

You don’t need to study the code of other apps

Some of the worst advice see online is to look at the code of other apps. Occasionally I also get requests to share the code of my courses, as if looking at it will give you some magical insight.

While you can learn something from anything, reading the undocumented code of other people is the least efficient way to learn iOS app development.

Would you learn drawing only by looking at finished paintings? Or would you get a book, course, or private teacher? You don’t have infinite time. Don’t spend it on endless activities with a little return on the investment.

You will soon realize that even reading and understanding your old code is time-consuming and not fun at all. Reading code of other people, when you have no idea what it does or why, is just an exercise in frustration, especially when you don’t have the skills to do it.

Also, who tells you that the piece of code you are reading is written correctly and solves a problem in the best way? You might just be picking up the worst habits of another developer.

从受信任的来源学习,而不是从您在网上找到的随机代码中学习。

合并或火力基地呢?

随着你教育和事业的进步,你会读很多流行语。迟早会弹出的两个最常见的是组合和火力基地。

这是两件完全不同的事情。我把它们放在一起只是因为他们经常被提及。

组合是苹果提供的众多框架中的另一个。它是一个功能性反应编程(FRP) 框架,可随着时间的推移管理数据和事件。

作为一个初学者,你不需要担心组合。FRP,像我上面列出的其他范式一样,是一个先进的概念。在你对其他重要话题有扎实的了解之前,你不应该关心任何进步的东西。

随着时间的流变,你会遇到一些开发人员,他们会试图说服你,合并是有史以来最好的事情之一。

事实并非并非。

组合只是另一种工具。无论有没有应用程序,您都可以制作应用程序。当你有足够的经验去理解它提供什么时,你会自己决定它是否有用。

我是在营地的人,根本不使用它。我可以告诉你,在线开发人员可以非常大声,给你一个扭曲的视角。

现实情况是,如果你看数据而不是意见,大多数开发人员不使用组合。

组合和 SwiftUI 同时问世,然而,前者关于堆栈溢出的问题数量比后者少一个数量级(而且组合不容易理解)。

为了完全公平起意,2020 iOS 开发人员社区调查显示了更多的兴趣。但请记住,只有1.229人填写了它,大部分来自特定的时事通讯。这不是一个统计学意义的集。

相反,Firebase是 Google 为您的应用管理后端的产品。我从来没有用过它,所以我没有太多的话要说。他们的主页上有一个两分钟的视频,可以快速显示它有什么用。

不过,我可以告诉你的是,作为一个初学者,这也不是你应该担心的事情。您还没有管理复杂应用的技能。

此外,并非所有应用都需要后端基础结构。许多公司确实有他们的自定义解决方案, 不使用火基地。

所以,最后,我的建议是相同的组合和火力基地。忽略它们,直到您到达可以评估它们是否适合您或您的工作需要它们的地步。

Chapter 6:

如何获得 iOS 开发工作

如果你想找到一份开发人员的工作,你的搜索应该比你想象的要早得多。重要的是要看看市场提供什么来指导你的学习。尽早与公司联系也可以使您在竞争中获得优势。

您不需要构建应用组合,也无需在应用商店中发布自己的应用。

是的,没有什么能比得上经验。我不是反对的。尝试构建某些东西将突出您还不知道的内容。

但是构建一个足够好的应用程序来发布需要很多时间。并不是你做的每件事都是一个学习的机会。软件开发主要包括重复的任务,不会教你任何东西。

此外,应用组合不如人们想象的有用。我从来没有因此被录用过。我听从了这个建议,我的投资组合被留下收集灰尘。

雇主知道如何识别熟练的开发人员。

如果你想做你自己的应用程序,是我的客人。我建议你用真实的代码弄脏你的手, 而不是只是复制和粘贴从书籍和课程的代码。

但要记住,你是在优化学习,所以在可能的时候把不必要的任务放在一边。

从市场上的现有商品中挑选您想要的工作

每个人只有在你准备好面试时才谈论申请工作。我会给你一些不同的建议。

更早开始查看 iOS 开发工作,即使您尚未准备好申请。

首先,这将迫使你看看市场上有什么,而不是梦想一个不存在的工作。

还记得我提到的那个想在阿姆斯特丹得到硅谷薪水的家伙吗?不仅如此,他还希望获得专门的报酬来构建一个新的编译器。这种工作并不存在。想要不可用的东西只会导致失望和浪费你的时间。

此外,最好有一个广泛的选择,以符合你的口味,而不是申请一个随机的工作,只是因为你不知道更好的东西存在。

你可以在董事会寻找工作,如LinkedIn工作堆栈溢出工作。我相信你可以在谷歌上找到更多。

这也将给你一个关于不同职位的工作要求的想法,你可以用它来挑选什么先学习。这就是为什么你必须尽早进行搜索。

这也将为您提供下一步的公司列表。

在您希望工作的公司进行非正式面试

下一步没有人会告诉你,当你还不需要工作或不能申请工作时,要尽早与公司联系。

是的,我明白。对于内向的开发人员来说,这不是最好的建议。但它的工作原理。

不过,不要联系管理求职申请的人。这些人只对候选人感兴趣,可能是人力资源部门的一部分。

相反,您需要的是与拥有类似您想要的工作的开发人员取得联系。这将为您提供与竞争对手相比的几个优势:

  • 您可以获得有关工作要求的更多信息。有些可能比你想象的要不必要。其他可能在招聘广告中未提及。例如,他们是否关心您是否在应用商店中发布了应用,或者 GitHub 帐户中是否具有开源代码?

  • 如果你喜欢这家公司及其文化,你就会明白。这些东西在任何地方都没有写,只有当你与真人接触时,你才会发现。 

  • 你一只脚在门上。没有人告诉你的是,大多数工作从未在工作板上发表过。公司大多通过网络填补职位空缺。当我想雇人帮我做生意时,我总是先联系我的学生。这些是你永远找不到的工作。

  • 当您在有联系人的公司申请工作时,您将能够绕过人力资源筛查,并在其他人无法获得面试时获得面试。此外,许多公司会向员工提供推荐奖金,因此将激励他们帮助您。在我的第一份工作,我们得到了5000英镑,如果我们引进了一个新的员工。

如果您想要有关流程和电子邮件脚本的更多详细信息以联系您不认识的人,请查看来自 Ramit Sethi 的这篇文章在这里,你可以找到什么问题问,一旦你得到一个接触。

如何写一份很棒的简历

在某个时候,你会准备好申请一份工作。即使您通过个人联系,您也经常需要写简历。

但是你应该穿上什么呢?简短的回答:雇主希望看到什么。

我知道 我知道。说起来容易做起来难。

如果你听从我之前的建议(你可能跳过了),你就会知道他们想要什么。这已经是一个巨大的优势,比你的竞争。但这里有一些一般的指导方针,因为我知道你无论如何也不会听我的。

没有人关心您的简历格式或您使用的字体。不要把时间浪费在那无用的东西上。重要的是内容。

你需要在所有其他申请人中脱颖而出。如果你像其他人一样列出一堆事实, 猜猜看, 你会看起来像其他人。

要脱颖而出,你需要制作一个故事,让人们记住你。要了解如何做到这一点,请观看此视频:

你应该学习常见的面试问题吗?

有一件事我从来不明白,那就是那些通过研究常见的iOS开发面试问题来准备面试的人。

我不是说你不应该准备面试。你绝对应该.是的,面试官喜欢问一些常见的问题。为这些准备一个好的答案。

但我在互联网上看到的iOS问题没有任何意义。我刚刚在谷歌上搜索了"iOS面试问题",我发现这让我迷惑不解。

  • 显然,每个人都声称给你"顶级的iOS面试问题",但每个人都有不同的设置。如果这些是最常见的问题,难道每个人都不应该同意吗?

  • 在参加的采访中,我从未见过的大多数问题,我也不会问我正在面试的人。

  • 其中一些是有道理的,但你不能回答他们与罐装的反应。你也不知道他们到底是哪一个

我可以判断这些问题,因为我已经在iOS开发13年,21在软件开发。如果你正在阅读这篇文章,你没有这样的经历。

研究这些问题是浪费时间。首先,有这么多的问题,你可以问,你不能记住他们所有。

但是,更重要的是,问题是为了测试你对平台的理解。如果你有,你可以回答任何问题。如果你不这样做,学习罐装答案不会带你走远。

让我们来看看一个例子。"什么是内存泄漏?"可以是一个很好的问题要问。但看看我在网上找到的答案:

内存泄漏是一种资源泄漏,当计算机程序错误地管理内存分配时,不会释放不再需要的内存。在面向对象的编程中,当对象存储在内存中但无法通过运行代码访问时,可能会发生内存泄漏。

什么?

那只是一个词沙拉。如果你在面试中回答这个问题,你得到的最好的东西就是茫然的凝视。

然后,他们会要求你解释你刚才说的话,你会被抓的。我花了一篇完整的文章来解释什么是内存泄漏,以及如何避免它们,你不能只用两句话来回答这个问题。

结论

您需要数年时间才能成为 iOS 专家开发人员。每个承诺的人都是在撒谎。

但它不需要花很长时间来获得你的第一份工作或制作自己的应用程序。我的许多学生在完成我的基本课程后得到了他们的第一份工作,这大约需要两个月的时间才能完成(但它只涵盖iOS,并要求你已经认识斯威夫特)。

所以,如果你正在考虑职业转变,或者你有兴趣制作iOS应用程序,我鼓励你开始。几个月后,你可能有你想要的工作。

使用 MVC 和 MVVM 构建斯威夫特UI 应用

将一些代码拼凑在一起很容易制作应用程序。但是,如果没有最佳实践和强大的架构,您很快就会获得难以管理的意大利面条代码。在此指南中,我将向您展示如何正确构建 SwiftUI 应用。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多