大多数浏览器和
Developer App 均支持流媒体播放。
-
良好的开发习惯
要成功开发 app,需要掌握许多不同的东西。探索可以整合到您的开发工作流程中的做法,以提高工作效率并提升 app 的性能与稳定性。了解如何改进您使用 Xcode 编写的代码的质量。从实践角度了解一些有价值的开发技巧。
资源
-
下载
早上好 我是 Josh 我是来自 Apple 技术传播团队的一员
我们的团队非常荣幸 能与来自世界各地的 像你们一样的 开发者合作
我们的目标是帮助你 创造真正优秀的 App 在与你们的对话中 我们学到了很多 我们了解到了 你工作的过程 你面临的挑战 目标 和你的抱负 我们也学习到了那些 帮你走出困境的技巧和技能 也了解了你的困难
尽管我们听到的每个故事 都有一些不同
但是大家身上 也有着诸多共通之处 无论你来自何方
当我们提到“craft”(手艺)这个词 你最先想到的可能是设计 但作为开发者和工程师 我们同样也有“手艺”
毕竟手艺的定义是 计划 制作和执行的技能 它也是用细心 技巧和独创性 来创造和生产的过程
我们用双手书写代码
它对技巧的要求也很高 在我们搭建 App 时 我们使用的技巧 我们做出的选择 都是具有独创性的 今天我想和大家谈谈 手艺和细心 将它们融入到你的代码 你的 Storyboards 和你的产品中 一开始这似乎很简单 但是 作为当今的开发者 我们面临着各种各样的需求 这有时会非常困难 特定技能是随着时间的推移 而发展起来的 这需要奉献 耐心 和专注 学习享受 到达目的的过程 就像享受目的本身一样 现在 过程的一部分 也包括把那些可能 一开始需要 集中注意力的事情 转变成习惯
与开车相似 随着经验和实践的积累 我们在开车时 必须有意识地关注的事情 会随着时间的推移而减少 因为我们把它转变成了 自然的 自动的习惯 我们可以在 App 开发中 达到同样的效果 要做到这一点 就意味着培养良好的习惯 而不是坏习惯
当涉及到构建一个 App 时 有很多细节需要注意 作为一个开发者 我们需要关注 很多的细节 然而这些努力 可能很少会被用户 直接看到 然而 它们可以 以重要的形式被感觉到 影响性能 可靠性 和稳定性
其实 细节很多 只是没有足够的时间 去全部关注到 今天我想花点时间 回顾一下一些实践 这些实践可能会丰富 作为开发者的我们 的工作内容 让我们可以将它们整合到 我们的常规工作流程中 形成主动的习惯 这样我们可以避免挫折 省去麻烦和节约时间 对于你们中的许多人 我相信你们已经在做 这些事情了 但也许有些人 还没有完全 形成习惯 也许你会受到启发 加强练习
首先 让我们梳理一下
除了是一名 App 开发者 我还是一个木工 我觉得对我而言 这是逃离现代世界的 一个很好的方式 但有一件事是肯定的 漂亮的 精致的家具 一定出自 干净整洁的商店 所以 如果你的工作台杂乱不堪 摆放混乱 就很难找到你 工作时需要的工具和材料 你必须不断地 把东西挪来挪去 为你正在做的工作 腾出空间 简而言之 每件事都比它 应该花费的时间要长得多 在这个过程中会发生更多的 事故和错误 我们的团队每年都 会看到很多 Xcode 项目 当然 保持你的工作区 干净整洁 有很多的办法 能找到激发你 最佳工作表现的 合适位置 Xcode 受益于 基于群组的结构和组织 这使得查看 App 中 每个部分中的文件 变得非常容易 当你要修复 Bug 时 它可以帮助你快速实现
群组最适合 从功能上组织你的项目 这种方式可以遵循用户与 App 潜在的进行交互的方式 我们经常看到 按文件类型分类的项目 或者根本不使用群组 当人们随后 想要快速理解这些 原文件之间的关联时 这样并不能真正帮助人们 解决问题
此外 如果你能确保 Xcode 项目结构和文件系统结构 相互匹配 将会非常有帮助 自 Xcode 9 起 当你在项目中创建新群组 它也会在磁盘上 创建一个文件夹 来存放你 该组中的文件
这意味着当你 在源代码控制中查看项目时 或者只是浏览文件系统时 结构是镜像的 这会切实帮助你 减少日后的 混淆和错误 Storyboards 是一个 非常强大的工具 可以用可视化的方式构建用户界面 但我们确实 遇到过很多项目 它们将整个 UI 构建在 一个 Storyboards 中 由于 Storyboards 的引用功能 我们不应该这样做
我们应该为 App 的每个主要部分 使用不同的 Storyboards 文件 然后使用引用功能 将它们连接在一起 你会发现 这样会使分离单个更改 变得非常容易 当与更大的团队一起工作时 它也会使事情变得简单得多 因为你可以避免 那些讨厌的合并冲突的风险 并且使解决冲突 变得更容易
就像你不会将整个源代码 放在一个文件中一样 也不要将整个 UI 放在一个 Storyboards 中
保持项目文件的更新 是确保 Xcode 能够帮助你解决问题 并避免问题积累的 重要方法 如果你经常处理的话 这些问题实际上 都算不上是问题 但如果你没有经常处理 在未来的工作中会很容易 出现问题
首先 当你更新到 Xcode 的新版本时 你也有机会让 Xcode 更新项目设置 并将项目文件 更新到最新的格式 因此 除非你有 重要的理由不更新 否则我们建议你在出现提示时选择更新 或者在问题导航器 中出现警告时进行更新 其次 要确保你的项目 使用的是 2017 年首次发行的 新版 Xcode 构建系统 它在性能 依赖关系管理方面 提供了显著的改进 这对你采用 Swift 包 绝对是至关重要的 自 Xcode 10 起它就是 默认的构建系统 你可以通过查看文件菜单 下的项目设置 来验证项目 正在使用的构建系统 木工都喜欢保留边角料 以备不时之需 直到有一天 边角料箱装满 我们没办法处理它 我们才不得不接受 这样一个事实 我们一直保留的边角料 永远也无法变成 一个真正像样的项目 作为开发者 我们也有保留碎片的习惯 但对我们来说 这个决定更简单 既然你的项目在 源代码控制之下 你的项目是在源代码控制之下的 对吧
删除那些不需要和 不使用的代码
不要只是把它注释掉 以防有一天你有用 如果你真的需要它 它也会在 历史文件中 你仍然可以把它拿回来 扔掉那些碎片吧 另一个我们不想 泛滥成灾的部分就是 警告 为此 为你自己 和你的团队 建立个没有警告的项目 永远不要在有警告的环境下 保留代码 在编写代码时 应该将警告视为错误 一边做一边修复问题
我们碰到过有 上千个警告的项目 在大多数情况下 它们积累的时间太长 以至于开发者都放弃了 根本没有时间去修复它们 此外 如果你正在 维护这样的项目 当有问题出现时 你不会看到有新的警报
这个已经整理得挺好了 保持工作空间和项目 整洁有序 这对你的 App 的长期健康和成功 至关重要 所以要使用群组来整理项目 并让这些群组 镜像文件系统结构 使用引用来分解那些 大型 Storyboards 还要确保你的项目文件 是最新的 清除旧的和废弃的代码 找到警告的根源 并在警告出现时 进行修复 做这些事情 会让的项目更加灵活 并且在整个项目的生命周期中 你的工作进展也会更加 顺畅
说到源代码控制 在设置项目时 你一定要做的事 就是启用源代码控制
我们确实遇到过很多 不使用源代码控制的项目 特别是那些 独立开发团队的项目
方便的是 当你设置 一个新的 Xcode 项目时 只需要确保 选中了一个复选框 你的项目就会用 Git 进行源代码控制了
现在 当你提交 当前的一组更改时 你可以回头查看
你在过去做了哪些更改 以及将要更改的内容 而且更容易捕捉到 任何类型的错误
因此 现在你已经 启用了 Git 为了使它更实用 更高效 你应该牢记一些事情 首先 保持小的体量 定期以小的增量 将代码签入 工作分支 并使这些更改 尽可能本地化和自包含
当你需要回头查看 或者复原时 这将为你提供 回头查看的路径 同时 它会降低 引入回归的几率 因为你的改变 都很微小
第二 写有用的提交消息 因为总有一天 我们会有一些 我们希望自己能够回答的问题 我当时到底在想什么
当你回忆某些代码 在什么情况下发生了更改 以及更改的原因 提交消息就是你 对未来自己的注释
运行源代码控制 就像在大型团队中一样 即便你是一个独立开发者 这意味着可能会 出现 Bug 和新特性 然后 一旦工作收尾 将它们压缩回 主批处理或开发批处理中 并要使用一个干净且有用的 提交消息 现在 有几个选项和模式 可以用于 源代码控制 我们建议仔细浏览它们 找到一个真正适合你的 并将其集成到 你的开发者工作流程中 这就是跟踪 源代码控制对于一个成功的 现代的 App 开发工作流 是绝对关键的 因此 将其作为项目的一部分 并将其作为 常规实践的一部分 保持这些提交短小 并编写有用的提交消息 最后 利用分支来帮助 隔离和管理这些更改 Bug 修复和特性工作
在我看来 对清晰性和可维护性贡献最大的是 代码注释和文档记录
它们是对你的队友 或未来的自己 有用的线索
有些人可能会说 我不需要注释 我的代码 是自我记录的
我一点也不相信
写得好的代码 在算法上是清楚的 在这方面 它是自我记录的 但我们并不知道原因 为什么一开始要 写这些代码呢 这段代码如何融入 更大的上下文 也没有描述 编写方法 背后的原理
我共事过的最好的开发者 不仅写出了令人难以置信的 清晰的 简洁的代码 而且他们还花时间 在整个代码中 添加了有用的注释 引导未来的读者 进入原作者的空间
初级开发者可能会 从这个过程中受益 因为你在项目开始时的经验 与在项目结束时 相差太大 你在项目开始时所做的决定 实际上可能与项目结束 时所做的决定 完全不一致
那么 怎样才能做出好的 提交消息呢 好的注释假设读者理解 所使用的编程语言 并且能够亲历 代码中的顺序和步骤
它真正关注的是 最初为什么 要编写代码 这背后的原因是什么 例如 这条注释 没有任何价值 但是 我们总是能看到它 假设你们大多数人 已经用 Swift 编写了一些代码 可以知道 我们在这里创建了一个 带值的字符串常量 但我们不知道 id 是什么 它是用来做什么的 或者为什么这个被硬编码到 App 中 通过一些注释 我们现在理解了 为什么存在这个值 以及它来自何处 但我们可以更进一步 常量和变量的名称 提供了额外的 清晰的机会 因此 如果你发现自己使用的是 m 或 i 这样的单个字母 或者 id 或 idx 这样的东西 那么可能是一个很好的机会 来选择一个更具描述性的变量名 在 Xcode 中 自动完成就像魔法一样神奇 所以 你甚至不需要再 输入任何东西 在你的代码库中 始终会清楚地知道 在任何时候使用的 特定标识符 是什么 文档的好处 与注释非常相似 但是这些可以扩展到 整个 App 甚至更远
当你编写自己的 App 时 你正在创建 一层又一层的 抽象和算法 这些抽象和算法 将代码的大段大段地编写出来 并将它们分解为整洁的 可测试的 可重用的函数
但是如果你 不记录这些函数 那么每次使用该函数时 你实际上 都在强迫自己 在头脑中重写该文档 通常 通过必须重新访问 函数的实现 查看如何 使用每个参数 并找出如何 转换它们 以提供结果 如果你不知道 在 Xcode 中生成一个存档 非常简单 只需将光标放在 函数签名的第一行 按下 Option-Comman-/ 就会自动生成 所需的所有 占位符文本 只需要填空就好了 点按该函数的任意用法 现在就会在你 熟悉并喜爱的 本机 SDK 和 Swift 标准库的上下文 快速帮助弹出窗口中 显示你自己的文档 注释和文档 要做到它们非常容易 但是非常高回报的 时间投资 它会在你的项目的 整个生命周期中 所以 在你的代码中 添加一些有用的注释 有助于将来的理解 用这些注释 把读者带入原作者的 思想空间 对变量使用描述性名称 并完整地记录 函数 属性 结构和枚举 接下来 我们来聊聊测试 特别是单元测试 为此 我想为大家 介绍 Marshall Marshall 是我们 Swift 以及 开发工具的传播者 他是个非常聪明 善良的人 他碰巧也是个 活生生的 Swift 分析机 每次我提交代码进行检查时 我都准备好接受 大量有深度的注释和反馈 以帮助我从形式和功能角度 改进我的代码 有一天 Marshall 在另一个主题上 给了我一个正确的方向 那就是单元测试
我必须承认 我在编写单元测试方面的纪录 并不完美 这并不是说 我不欣赏他们的潜在价值 也不是说我就是新手 我只是总习惯 把它留到最后 当我完成 实际代码的实现时 我最不想做的事情 就是编写单元测试 然而 前几天 在为 WWDC App 新的实验室排队功能 实现数据模型的同时 Marshall 加入了进来
当你这样做时 你最好再做一个单元测试 来确保在 Struct 和字典表示之间 往返的工作能顺利进行
现在 我的大脑 我真的不知道 将来它们会变得多糟糕 尽管如此 我还是听取了 Marshall 的意见 行了一个简单的往返单元测试
我测试了 当绿色的检查标志 显示测试通过时 我非常有满足感
所以 我提交了修改 以供审查 直到几周后 当我们想在 Struct 中加入 额外的数据时 我才再次考虑这个测试
所以对 Struct 做了一些改变 我在运行时没有发现 任何问题 我完成了 对吗
于是 我去提交修改 然后 我才想起 运行单元测试 果然 我忘了改变 字典反序列化的 工作方式 而测试捕捉到了这一点 这个 Bug 晚些会 在我们实现 UI 时出现 而且毫无疑问会 浪费我们相当多的时间 试图找出问题出在哪里
所以 谢谢 Marshall 提醒我 将单元测试 作为我常规实践的 一部分 不客气 Josh 所以 即使对于代码中 看似简单的部分 就像我当时所做的 编写这些单元测试 也是非常重要的 随着代码的可塑性 可能会引入 回归 考虑到我们似乎 从来没有足够的时间来 彻底地测试 就让我们将 Xcode 当作额外的一双眼睛 因此 将单元测试的实现 作为常规开发实践的一部分 并在每次提交之前 运行这些测试
此外 单元测试也是 持续集成的 关键组件 所以 你可以为它 做好准备 测试是一个 隐藏的细节 你的客户永远不会真正看到 但是 这可能意味着 使用你的 App 时的 绝佳体验 和重要数据被破坏时 的糟心体验 之间的对比
大家最好 将一些分析形式保留为 常规工作流程的一部分 其中一些确实需要一些 额外的时间投资 其他的事情 也可能发生在你的幕后 你甚至不需要去考虑它
一个非常有用的工具是 网络链接调节器 毕竟 App 开发 往往是在家庭和办公室进行的 对网络性能要求 非常高 但这真的不是一个 你的 App 有可能会运行的 代表环境 所以 通过启动 网络链接调节器 你可以人为地 将你的网络性能 压缩至与普通的蜂窝网络 相似的性能 甚至是一个表现不好的性能 你会惊讶于为了让你的用户不必操心 你需要解决的 加载问题 和竞争条件的数量
在你的 Scheme 设置中 还有好几个检测器和检查器 可以检查你的开发周期内的 各种问题
Address Sanitizer 会 观察如内存损坏和 缓冲区溢出等问题
内存问题经常是 安全漏洞的原因 所以使用 Address Sanitizer 首先可以帮助你 不出现这些问题
通过启用 Thread Sanitizer 它可以在模拟器中 测试并调试你的 App 你可以帮助发现这些 数据竞争
数据竞争是你有两个 不同步的线程 而它们中至少有一个 试着要编写 一个相同的数据 这些可能是非常不好的 Bug 它们可能会 有些无法预测的程序 或者它们也可能会造成 内存损坏 Undefined Behavior Sanitizer 会捕捉一些如 除零 浮点溢出 算术溢出 指针偏差等问题 当一个程序有未定义的行为 它可能会导致 崩溃 它可能会以一种 无法预测的方式表现 或者表现得像毫无问题一样 但是会毫无原因地 在不同的时间出现不同的结果 这真是令人沮丧的 Bug 检测器可以帮你们 在它们对你的项目造成大的危害前 解决这些 Bug
最后 还有 Main Thread Checker 可以保证 你没有实现 AppKit UIKit 和其他 API 的后台线程的
比如说 如果你在更新一个线程的 UI 而这个线程不是主线程 它可能会造成错过的 UI 更新 视觉缺陷 数据损坏和崩溃
有时候这些 Bug 可能很难解决 因为它们可能只会 间歇性出现 启用这个会有一个 最小化的性能影响 我们建议只要可能的话 都保持其启用状态 在调试你们的 App 时 注意性能和 资源使用 尽可能地保证你的 App 与系统资源一起 是有效率的 第一步是使用 Debug Gauges 当你构建和运行你的项目时 你就可以在 Xcode 中的调试导航中看到它们
你可以在你 App 的生命周期 检查 CPU 内存 磁盘 和网络使用 快速地了解 你的 App 是否在做 如通过网络 连接意外的服务器之类的事情 或者它只是不断地在一个末端努力 消耗很多带宽和电量 最后 你还可以更进一步 点按文件和工具按钮 可以让你运行一个 更加有深度的分析 有一个我常用的工具就是 时间分析器 这会让你查明 你代码的哪一段 占据了最多的周期 同时也让我们缩小 需要同步的 工作段落 如果我刚刚实现了一个 不可拓展的行为 分析是一个非常宽广的话题 但是我这这里提到的大部分 工具你只需要记住 打开它们即可 所以 使用网络链接调节器 来模仿典型的不理想网络 经常使用检测器和检查器 如果可以的话 只需要启动 它们即可 定期使用这些 Debug Gauges 注意你 App 的 内存占用量和性能 通过分析你的 App 使用工具 深入挖掘这些问题 用精准度处理它们 把这些努力转变为习惯 会很大程度地 改善你们 App 的 性能和稳定性
我住在多伦多的时候 我把一个车库 改成了我的 木工商店
这是一个舒适的地方 这完全属于我自己
但是自从我搬到 海湾地区 我就不再拥有一个 属于我自己的空间了 我开始使用 这片地区共享的 社区木工房 这样有时候会很令人沮丧 因为我必须 和其他人共享 工具和设备以及空间 但是有一件事我没有意识到 我会如此感激的是 我可以在店里 听取他人的意见 获得他们的意见 可以开始做一些事情
我认为 App 开发 与之类似的就是 代码审核
所以很多我过去开发的 App 都只有我一个开发者
这就好像拥有你自己的商店 感觉非常地快速和灵活 因为你的想法 决定了一切 但是缺点就是 你没有机会 向你的同事和同行 学习如何更好地 使用语言 框架和 SDK
一般来说 解决问题 有很多方法 但是总会有一个更好的办法 有些方法脱颖而出是因为 更加精准 或者有更好的 性能 可维护性或可靠性 因为如果只是因为它能运行 并不能代表 它是完全正确的 它可能可以 获得很大的提升
在 Apple 所有团队都有一个政策 那就是如果没有代码审核 那么没有一个代码能成为 一个项目 我们的团队通过 这个方法从彼此身上 学到了很多 我们的代码在风格上也更一致 更别说在可靠性上的提升了 这也保证了 我们的整个团队更了解 更广泛的代码基数 这使得我们可以 解决的 Bug 范围和特点 也更加广泛
现在 我很幸运 能加入一个拥有很多有经验的 开发者的好团队 这也让这些更加的简单 但是如果你自己开了公司 或者你们项目 只有你一个开发者怎么办呢
你可以试着 与你们地区的开发者联系 或者与世界各地的其他开发者联系 想办法和他们互相 进行代码审核 也许是调查见面会 本地会议 或者共享办公
现在你要做的就是把代码审核 作为你开发实践的一部分 那么什么是一个好的 代码审核呢 首先 它意味着 花时间了解 每一行变化的代码 如果只是快速浏览的话 就代码审核就 没有意义
其次 真正地构建这个项目 运行这个项目 不要假设 原始的作者已经 这样做过 尤其是如果 你在历史中看到的最后一个任务是合并 运行这些测试 首先 这样做会提醒你 去检查和看看 真正的测试 以及通过的单元测试 记住 仅仅是因为它构建了 不能代表它就 不会崩溃了 仔细看看这些注释和文档 我的意思是 总会有 注释和文档 对吗
然后检查拼写和语法错误
与此相似的 在变量名中寻找拼写错误 作为一个加拿大人 我一直有一个习惯 就是在如“color”等单词中添加“u” 当我的团队开始搜索“color”时 他们真的要崩溃了 保证代码基数的 一致性可以在之后 帮助寻找和使用 这些功能和变量 这还是会节省时间 所以 即便你可能会感觉 这些过程可能会 在短期内拉慢你的项目 但是长期来看 它通过减少 潜在的错误和问题 它毫无疑问会节约 你的时间 金钱和 用户成本 如果你在未来使用相似的方法 或挑战的话 你作为开发者的技能 会大受裨益
作为开发者 我们都致力于 创建精简的 准确的 可重复使用的 可测试的代码 毕竟 我们不想 不停地重新创造 相同的代码
程序包和框架 可以用更集中的方式 保留代码 同时以一种可移植的方式 提供那个性能 它不仅会通过你现在的 App 还会通过其他 可能会利用这个成就的 App 来提供
如果你的 App 包含拓展 你可以在框架中 打包你的共享代码 你的二进制大小可能会减小 因为你的主 App 和拓展都会 分享相同的框架 当然了 创造程序包会让你 有机会与 整个社群分享 你的成就 尤其是现在的 Xcode 11 对此有如此深度的集成 为了便于他人使用 你的 App 中不仅是代码 共享的框架 程序包和库 都需要很好的文档 所以 采用程序包 和框架是打散 你的代码的一个办法
这还会让你 扩大你的工作至 你可能在开发或维护的 多个 App 中 框架还可以帮你减小 二进制文件大小 然后你就可以 与社群共享你的 成就 但是请保证 其包含了很好的文档
今天我想和你们分享的 最后一点就是 依赖 明确点就是 了解它们可能会给你的项目 带来的好处和风险
使用 Swift 程序包 框架和其他函数库 会有很多好处 在你开始使用 规定的程序包前 知道里面有什么 以及它可能会 带来什么 真的很重要 你需要确保自己了解 你的依赖和数据 会产生什么 根本上来说 你需要 对你 App 的内容负责 以及它对用户数据所做的负责 确保框架没有 收集不必要的 指标和设备信息 确保它没有 从设备发送数据 注意其他的依赖 一个给定的依赖性 依靠的是什么 同时研究它们 毕竟多层依赖 现在意味着你的 App 实际上取决于 整个链的安全和成功 最后 还有另一个其他的可能性 如果框架在你这崩溃了 怎么办
如果它没有维护了怎么办 或者它就是突然不见了怎么办 当你为你的项目 引入一个新的依赖时 重要的是 有一个如何解决 这些情况的计划 毕竟 你的 App 的 未来依赖于此
所以 你要自己修复 这些公开的 Bug 吗 你要把项目带回内部 然后维护它吗 或者你计划 在之后把那个依赖 完全替换掉 与所有和那个任务一起的 必要的工作一起吗 外部依赖的使用 比如 Swift 程序包 可以让你进展更快 同时避免 重新创建在社群中 可能已经存在的工具
但是要注意它们的使用 保证它们只做 你让它们做的事情 一定要确保 它们会尊重使用你 App 的 用户的隐私
确保你有一个计划 来应对未来 如果它们崩溃 或者消失的情况 如果在你为项目 增加新的依赖时 能把问这些问题当成一个习惯 长远来看你将获得回报 同时会最大化 使用它们的好处
对于 App 开发项目来说 有时候完成它最后的 10% 似乎和最初的 90% 一样漫长 但是我认为 通过试着转变某些操作 和规则为习惯 你可以避免那种感觉 所以 有效地组织 你的工作空间 你可以 更快且更有效地 把注意力集中在代码上 借助强大的源代码控制 你可以准确地 追踪你的代码基数 减少回归的几率 加快发现可能发生的 Bug 的速度
通过写下有用的 有意义的注释和文档 你可以在未来重新访问代码 和利用你构建的 类 结构和功能时 减少理解的压力
单元测试每 11 个小时 会保存一次 通过检查引入 新回归的编码
检测器和检查器 不停地对你的代码进行分析 因为它们在后台运行 你甚至都不需要去 担心它们 传感器和工具 保证你有效地 使用系统资源 它们会让你 准确地找出性能和 其他问题
代码审核不仅仅 是一个评估你代码 风格和功能的机会 也是一个学习开发的很好的机会 它可以提升你作为 开发者的技能 与你的团队和社群分享
将你的项目 分解成更小的和可重复使用的程序包 以及框架 可以帮助你扩大你的工作 至多个项目 并让你能够分享它 对于二进制文件的大小 也有所裨益
最后 外部依赖 如 Swift 程序包的使用 可以让你进展更快 同时可以重复使用 已经在社群存在的函数 一定要认真使用 理解它们如何处理 用户数据 设定一个计划 以防止它们消失 作为 App 开发者 将这些实践作为 你工作的一部分 只会增加 你项目每个阶段的 一点点时间 但是从长远来看 它会为你节省很多时间 保证你的 App 能运行久远 我希望我今天提供给你们的 想法和建议 可以让你们思考 作为一名 App 开发者 如何更好地 提升你们的技能 你可能会养成习惯的的操作 会增加你工作的 质量和持久性 有意识的努力 可以转化为自动的习惯 它可以让你把自己的能量 用到最重要的地方 那些使用你 App 的人 会感受到你为之倾注的 关怀与爱 即便他们也说不出 为什么 你也可以为你创造出的东西 感到自豪
谢谢
[掌声]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。