在Swift中编写我的第一个iOS应用程序之前,我想知道什么

上周,我们和我的兄弟一起发布了我们在Swift中开发的第一个iOS应用程序。 在本文中,我想分享我对过程的看法。

这是从一个人的角度写的,他花了六年的时间在Ruby和JavaScript中构建各种Web应用程序(在规模和领域方面),而最近三个月一直在Swift中工作。

Objective-C死了吗?

Swift是由Apple开发的,Apple是世界上最大的公司之一。 这意味着很多事情; 首先,苹果公司不怕对其平台进行重大更改。 所谓重大变更,也是指破坏代码的更新。 您需要注意这一点。

例如,在上一个WWDC期间,他们宣布重命名了API的较大部分。 Swift本身是对iOS开发人员以前的主要语言(Objective-C)的巨大转变。 顺便说一句,对我来说,WWDC像工作一个星期一样,赶上所有有趣的演讲和公告。 即使这样,Swift还是我见过的维护得最好的开源项目之一。 只需检查存储库及其语言建议即可。

这是否意味着Objective-C已经死了,您不需要知道吗? 的种类。 我敢肯定,您可以在Internet上找到的大多数外部库和代码示例都是用Objective-C编写的。 但是,有趣的是,当我在Swift中做更多的事情时,了解Objective-C代码的问题就会减少。 我几乎可以自然地阅读它。

您需要知道的另一个事实是内部API的大小,它很大,开始浏览时可能会感到害怕。 您基本上可以构建任何东西,并且可以访问所有移动专用功能,例如摄像头,麦克风,地理位置,加速度计,触摸屏等,比在网络上容易得多。

工具集

XCode(Apple IDE)是发生魔术的地方。 它包括在iOS应用程序开发过程中需要的所有工具:代码编辑器,界面生成器,数据库管理器,调试器,检测工具等。

不幸的是,这远非完美。 特别是Interface Builder,它提供了最多的“最新动态” 。 当我开始玩它时,我真的很感动- “哇! 我可以在诸如Sketch或Photoshop之类的图形编辑器中构建整个界面”-这不是事实。 Interface Builder更像是抽象层,用于覆盖编写的代码,而不是用于设计UI的工具。

在Interface Builder中选择一个选项并不少见,但这完全不会影响您的应用程序。 那里有很多您无法猜到的东西,您只需要了解它们即可。 这样的错误约束警告,您可以通过直接单击警告描述来解决。 另外,删除插座或动作时,切记要删除情节提要中的引用。 您在编译过程中不会收到任何警告,但是如果不删除它们,您的应用将崩溃。

您需要找到最佳位置。 根据我的经验,Interface Builder可以方便地设计应用程序流程,放置内置UI元素,并在视图控制器之间(而不是在按钮和视图控制器之间)创建序列。 将所有设置存储在代码中,并使用对现有UI对象的继承来创建自定义UI元素。

当您创建iOS应用程序时,计算机图形编程比Web应用程序要多得多。 我的建议是阅读有关向量之类的基础知识或转换的工作方式。 了解这些主题非常有用,因为您将尽快而不是稍后面对它们。

始终在真实设备上测试您的界面。 单击模拟器并用手指点击真实设备的感觉完全不同。

官方的依赖项管理器尚未发布,但是您可以在两种社区驱动的替代方案之间进行选择:CocoaPods或Carthage。 我正在使用第一个,并且没有遇到太多问题。

最后一个小技巧:不要过多地依赖撤消选项。 当您按cmd + z时,XCode不会在文件之间跳转,因此您无法直观地跟踪更改。 记住要使用Git并经常进行提交。

Web和iOS之间的开发差异

创建新项目后,您会很快注意到,没有任何事情会迫使您使用任何特定的约定。 与每个项目都有类似目录结构的Ruby应用程序(不一定是Rails)相反,在iOS中,对于如何组织代码没有严格的规定。 每个开发人员都可以按照自己的意愿来构建应用程序。 老实说,我不喜欢这样。 Ruby的方法更加直观和有益,因为您可以假定在哪里可以找到特定的代码。

我的下一个观察结果是,在Web应用程序中容易完成的事情在移动应用程序中很难完成,而在Web应用程序中难以完成的事情在移动应用程序中很容易做到。 例如,元素的垂直对齐不费吹灰之力,但是,更改标签的字体开头并不是那么简单。

对于我来说,使用iOS API的所有精美的UI功能(例如动画,过渡或手势)都比使用JavaScript / CSS容易得多。

其他主要主题是有限的资源和优化。 您无法通过在基础架构中添加便宜的硬件来扩展应用程序。 设备电池还有其他限制。 使用多个CPU线程来优化程序是一种常见的做法,并且手机型号之间的性能差异非常明显。

与外部API的通信更难管理。 边缘情况更多,大多数错误(如果未正确处理)将导致应用程序冻结或崩溃。

静态类型输入和实时预编译非常有用,可以防止您犯很多错误。 我也喜欢可选方法的想法,它们确保您不会忽略未指定的内容。 我现在在依赖ActiveRecord的Web应用程序中想念它们。

另一方面,我也想念Ruby标准库中的一些内置函数。 至少您仍然可以访问map()filter()reduce(),但是各种各样的方法将很有用。 此外,您必须要小心,因为系统API设计中的不一致是正常现象。 我什至遇到了执行相同任务的具有不同名称的函数,只是其中之一的实现较旧。

发布申请

我必须指出一个事实:准备内容比编写应用程序花了更多时间! 请注意这样的事情,因为创建应用程序不仅与编写代码有关。

App Store是发布iOS应用程序的唯一官方方式,您需要向每笔交易向Apple支付30%的费用。 直到您看到销售报告时,这才感觉不错。 这很重要,当您加上所得税时,您会发现自己仅从应用程序的每个销售单位中获得一半的价格。 不包括App Store中的所有其他成本和平均价格(大多数应用程序免费或比一杯咖啡便宜),您会注意到,您需要优质的产品和良好的营销才能从中获利。

Apple没有为您提供太多工具来推广您的应用程序。 您可以提供30秒钟的视频,最多5个屏幕截图,标题,描述和搜索关键字(总共100个字符)。 其余的取决于您的努力。 我不喜欢这样的事实,即关键字统计信息不可用,您必须使用外部工具。

最后一个细节是应用程序审查所花费的时间。 将内部版本发送到Apple服务器并单击发布按钮后,您将不得不在两个队列中等待。 在第一个中,您正在等待审核。 在第二篇中,您的应用正在审核中。 因此,不要期望您的新产品或补丁第二天就可以为用户使用。

学习资料

最后,我想列出一些我从中学到的书籍和资源:

设计与代码—我从这门课程开始。 它包括五本书(三本都是关于编程的)。 对于从未使用过编码或没有图形设计背景的人们来说,这确实非常好。 它可能不是每个人的最佳选择,但是即使某些细节已过时,我仍然推荐它。 每章都有录制的视频版本。

在iTunes U上的Stanford CS 193P讲座—我认为,这是涵盖所有内容的最佳入门课程。 不适合初学者,因为它需要具有面向对象编程的经验。 它是免费且最新的(Xcode 7,Swift 2和iOS9)。 每章都以一个项目结尾,以重复并验证您学到的知识。

使用Swift进行黑客攻击-有关Swift和iOS编程的全部内容。 斯坦福大学演讲的很好的补充书。 每章都是一个微型项目,使用并解释了一个特定的API。 可能会有点太长,您可能会在结束之前感到无聊,但这仍然值得。

Pro Swift-仅涵盖Swift中的高级主题。 每章均附有视频,作者在其中用代码示例解释了该主题。 如果您想更好地了解Swift,必须阅读/观看资源。 强烈推荐。

Swift的100天-以视频形式在Swift中构建的40个现实项目。 作者展示了许多“部落知识”和有用的技巧。 它看起来像是针对初学者的,但由于缺乏对主题的解释,我不推荐他们使用。 如果您已经对Swift和iOS有所了解,则值得一看。

iOS开发者库—我现在使用的主要资源。 如果您不知道要寻找什么,就很难开始。 您可以看到Apple员工如何编写和构建代码。 请注意,示例可以用Objective-C编写或过时。 查找有关新API信息的唯一资源。