热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

老司机iOS周报#52|2019-01-14

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到微软在今年6月收购了GitHub

你也可以为这个项目出一份力,如果发现有价值的信息、文章、 工具 等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

微软在今年 6 月收购了 GitHub,而在半年后,它给广大开发者带来了第一个福音 - 私有仓库转为免费且不限量。但值得一提的是,私有仓库目前最多仅支持 3 个协作者,如果超过 3 个,仍然需要购买付费服务。

另外,在个人主页,GitHub 还在本周更新了一个小 feature - 个人主页的状态管理。我们可以在自己的主页为自己设置状态,包含一个 emoji 以及一句描述。

推荐人: tyrad

在本月初举办的 Flutter Live 活动上,Flutter 团队向大家展示了一款名为 The History of Everything(万物起源)的应用,向大家展示了 Flutter 的精美的界面和优秀的性能,现在这款应用的源代码已经在 GitHub 上开源。这款应用不仅突出了 Flutter 的强大,也展示了如何高保真的还原设计师设计并保持原生的应用体验。它构建了一个精美的时间轴,你可以上下滑动以及任意缩放整个时间轴,时间轴上的历史事件会随着缩放跟着消失或者出现。

他们的 2018 年总结

2019 已经过去了2周,相信小伙伴们对于 2018 年都有自己的总结。本期同样也为大家带来了小伙伴的年终总结,希望对大家有所帮助。往期 2018 年总结可以查阅 50期 、 51期 。

  • 2018 年终总结 - 补锅匠(掘金 iOS 开发者)

文章

Frameworks 是打包资源和拆分代码的常用方式。拆分 Frameworks 的作用不仅仅是避免构建时的重复编译,合理的使用 Frameworks,可以让代码库层次清晰,提升调试效率,确保代码结构保持最大的可重用性。

第一篇文章 包含 Frameworks 相关的基础知识:

  • 静态库
  • 动态库
  • Frameworks 及其内部结构
  • 在 Xcode 中链接和嵌入 Frameworks
  • 使用 Frameworks 前要考虑的因素
  • 一些方便探索 Frameworks 的命令行工具

第二篇文章 则引导我们在逐步解决构建错误的过程中理解 Frameworks,还会介绍 Swift 和 Objective-C 混编时接口间是如何找到对方的。

这篇文章的作者是Hacking with Swift 的创始人,文中分享了 iOS 程序员找工作的一些心得,值得注意的是,现在 iOS 招聘一般都要求熟悉 Swift 相关知识。

  1. 日常做好一些找工作的准备,譬如写播客,参加外部的技术交流,参与 GitHub 项目等
  2. 写一份好的简历,让人知道你过去的工作经历和价值,注意,复制粘贴和假大空的文字描述一点用都没有
  3. 准备面试,一般最好刷一些面经,也要做好手写算法的准备
  4. 面试时平复好紧张的情绪,越紧张越回答不上来问题
  5. 一般公司的面试题在网上都可以看到类似的,不用过于担心
  6. 初级工程师和高级工程师的面试侧重点有些不一样,不过尽可能地展示一下你的知识深度是没错的
  7. 编码能力现在在面试时都考察得比较多,千万不要轻视这个事情
  8. 每次面试都做好总结,让自己在面试中成长

尽管作者的一些观点可能值得商榷,但更多的可以给我们一些指引。文末作者的高度提炼,“输出倒逼输入, 只有你真正知道自己要做什么了, 你学习的方向就会变的异常明确”,更是发人深省。

  1. 自我接纳,这是精准学习的前提
  2. 技术储备,要认识到技术只是一个工具,而工具是可替换的
  3. 动手实践,转换视角,学以致用

最近 Flutter 的文章越来越多了,也有越来越多的人去尝试了 Flutter。有更多的人参与到 Flutter 生态中来,对 Google 来说,对 Flutter 团队来说都是一件乐见之事。

本文作者在自己尝试了 Flutter 的基础上,详细说了自己的开发体验,也说了自己对 Flutter 的观点。对于还没尝试的同学来说,本文可以提供一个初步的了解。

这是一篇挺有意思的文章,讲述的是在 Swift 的 closure 多层嵌套中,何时建立弱引用而有可能出现的问题。

相信这个问题,有很多人之前曾经遇到过,或者说曾经思考过那样的情况应该怎样处理。有兴趣的同学们不妨阅读。

推荐人: ApolloZhu

这两篇系列文章讲述了 Codea (ipa lua 编辑器) 作者在 iOS 上设计一个 macOS 风格的下拉菜单。文章中,可以了解到作者一步步的思考过程,以及相关的技术细节想法,例如:毛玻璃效果,贝塞尔绘制圆角,选择交互动效果等等。同时,代码也[开源]了。( github.com/TwoLivesLef… )

推荐人: ApolloZhu

State Restoration(状态恢复)是在应用重新启动时恢复到上一次结束时的状态。当 APP 切到后台,很难保证应用不被用户或系统杀掉。在 iOS 6.0 中,Apple 为我们提供了 UIStateRestoration 来实现应用状态的保持和恢复。

本文作者通过实例 Pet Finder 向我们展示了应用如何实现状态恢复,主要有以下几个步骤:

  1. AppDelegate 中实现 shouldSaveApplicationStateshouldRestoreApplicationState
  2. 设置 views 或 view controllers 恢复标识符 Restoration ID。
  3. 在需要恢复的 views 或 view controllers 中 实现 encodeRestorableStateWithCoderdecodeRestorableStateWithCoderapplicationFinishedRestoringState 并处理相关的恢复业务逻辑。

另外文中作者也给出了恢复基于代码创建的 view controllers 实现方法,状态恢复尤其适用于恢复用户草稿状态的业务场景,有兴趣的读者可以实践一番。

原文中提供的 Demo 基于 Xcode 7.3、iOS 9.3 和 Swift 2.2,在 Xcode 10 中编译 Error 99+,编辑在实践中已对 Demo 进行更新,支持 Swift 4.2。值得注意的是 applicationFinishedRestoringState 是在 viewWillAppear 之后执行,很多资料对此描述有误。

:dog2:ARKit Pods — SCNPath

很多 ARKit 开发者的首选框架是 SceneKit,因为 SceneKit 可以访问 iOS 的原生功能。SceneKit 提供了一些默认的几何体,SCNBox、SCNSphere、SCNPyramid 和 SCNShape,但如果你想构建点不一样的东西,就要深入钻研来创建自己的几何体了。作者最新的开源框架用于根据 SCNVector3 点数组来创建路径,在这篇文章里作者用一个实际的例子介绍了如何利用开源的 SCNPath pod 来创建路径。

本文中讲述了 import 在 Swift 中的使用。

ModuleA.func ModuleB.func
import func Module.funcA
import type Module.var
import Module.subModule

本文从汇编的角度,逐步定位了 NSMutableAttributedString initWithData:options:documentAttributes:error 概率崩溃的问题,其定位问题的过程、思路和方法值得借鉴。另外文中提到的 优雅解决 iOS 8 UIScrollView delegate EXC_BAD_ACCESS 中的方法也推荐参考。

作者分享了一次排查屏幕边缘手势延迟 bug 的过程,小编觉得这个 bug 非常有意思,很值得大家花一些时间去了解它,让大家对手势有更多一点了解。

:racehorse: App thinning checklist

本文作者总结了他对 iOS 版的 Microsoft Edge 进行安装包瘦身时所用到的一些思路、方法和工具,各位可以收藏以便需要做应用瘦身时拿来参考用。文章中提到把监控包大小加入到持续集成环节中是非常值得去实践的一种做法。

本文介绍了饿了么物流团队在移动端业务可用性监控体系建设上的一些探索和实践,这为有在做可用性监控体系的朋友们提供了一些很好的参考方案和思路。他们把监控体系大致分为了四层,从大盘趋势到异常实时告警以及使用日志进行现场还原,同时还可以通过大数据分析业务健康程度。之后分享了一个排查网络层问题的实战经历来说明这套监控体系的价值。在文末他们提到了一些目前遇到的问题和接下来的发展方向。

目前网上很少有 Swift 实现 Promises 相关的文章,所以作者写了一篇文章分享了相关的内容,并且作者选择了测试驱动开发,不断地构建测试,然后再不断地调整代码满足测试,非常值得一看。

阅读技术文档是工程师必备的技能之一,但很有趣的是,阅读技术文档不只是国人入门编程的一道坎,其实很多以英语为母语的人也一样不擅长。Swift 技术网站 Hacking With Swift 过去一年收到最多的文章请求,就是帮助读者阅读和理解苹果的代码文档,所以就诞生了这么一篇文章。

作者首先帮助大家理清技术文档的内容和结构,接着以具体的例子带着大家一起“查文档”,找到对应的定义,例子和代码,最后还鼓励大家,其实苹果的文档也有很多不足的地方,大家找不到自己需要的东西的时候也不需要灰心。

本文作者比较了 iOS 中的各种存储数据以达到 App 无网正常使用的方案,根据统计,如果加载速度超过 3 秒,有 40% 的用户会放弃使用。而在美国,有 15% 的 App 使用时间是处于无网状态下。因此,一个合理的离线运行方案将会为你的 App 带来更高的用户留存率。

  • 使用数据库:Realm、Core Data、 Sqlite 等
  • KV 形式存放数据:plist、NSUserDefaults、NSKeyedArchiver、leveldb 等
  • 使用云数据库方案:Realm Platform、Firebase 等
  • 考虑一下将用户离线下的操作重放
  • 通过 React 的方式来监听数据变化

工具

Xcode 的模拟器自带有截屏功能,但是并没有录屏功能,通常我们需要使用其他的录屏工具(QuickTime、LICEcap等),但这个工具让你可以方便地直接使用 Alfred workflow 或者 CLI 去触发模拟器录屏。

代码

CoreML-in-ARKit

本项目利用 CoreML 运行机器学习模型来识别出摄像头拍到的物体,并利用 ARKit 为其加上 3D 标签,实现简单的 AR 效果。项目代码简单,创意好,非常适合入门,学习如何使用机器学习模型处理图片及如何在 AR 场景中添加 3D 标签。苹果官方也推出了一个类似的官方 Demo: Using Vision in Real Time with ARKit ,供大家参考学习。

很多尝试过前端开发 Vue 开发的 iOS 同学,都感慨用 Vue 开发前端 UI 界面的时候,非常的方便,非常的强大。优秀的布局能力/数据绑定 MVVM/模板式的开发。如果能在 iOS 里也能如此方便的进行UI开发,相信也会大幅度提供页面开发效率, GICXMLLayout 这个库就是这样的一个库。

GICXMLLayout 能干什么?有什么特点?

  • 使用 XML 来描述 UI、动画、事件绑定、数据绑定。
  • 数据绑定。
  • 支持 MVVM 模式。
  • 优秀的布局系统。
  • 模板系统。
  • 简单、优秀的自定义扩展能力。
  • 支持 Javascript。
  • HotRload & HotUpdate。

相关系列文章推荐去作者的掘金专栏, 作者从项目简介,到源码架构,再到新手项目,灵活扩展,还有两篇项目实战,总共有八九篇文章深入解析 GICXMLLayout,值得深入学习。

音视频

:star2: 一起来开发泊学 App 吧

如果你正在自学使用 Swift 做 iOS 开发,并期望找到一份相关的工作,但却苦于没有项目练手和熟悉整个 App 的开发流程。或者你十分向往成为一个独立开发者,但又不知从何开始。又或者你想看看 Swift 充当服务端开发语言时会有怎么样的表现。那小编十分推荐你看看泊学上的这个系列视频,你得到的会远比一些培训班得到的多。目前已经推出以下 4 个系列,且内容仍在持续更新中:

  • 设计 iPhone 版泊学 App :基于 Apple 官方的 iOS design guideline,我们用 Sketch 从零开始设计泊学自己的 iOS App。在这个真实的项目中,了解 Sketch 的使用经验和常用插件。
  • Vapor Up and Running:如果,你已经掌握了 Swift 编程语言,再用它学习服务端开发,就变成了一个性价比很高的事情。这个系列里,我们会从零开始,基于 Vapor,详细地讲述每一个服务端开发领域常用的技术场景。
  • Vapor Fluent:在这个系列里,我们会实现一个类似论坛的App。通过这个过程,来了解Vapor中的Fluent组件。通过它,我们就可以无需了解 SQL 的细节,而是用Swift的方式和数据库打交道。
  • 基于 MVVM 构建泊学 App :在这个系列里,我们以实现 Boxue App 举例,以一个独立开发者的视角,尽可能在代码的可维护性、可测试性、可重用性以及可协作性,达成让自己满意的实践。

这期的 Teahour,讲的是很多 程序员 很关心的算法和数据结构。特别是这一年来,国内各大公司对算法和数据结构在面试中的考察变得越来越多,重要性也越来越高。

对于 iOS 程序员来说,算法和数据结构则更应该重视。平时用不到的算法和数据结构,很可能在面试之时成为你的心头大患。有兴趣的同学不妨听听这期节目,算是能够做到有所了解。

相信绝大多数 Swift 程序员都听过泊学,泊学是一个通过视频在线学习编程的网站。这一期 ggtalk 邀请到了泊学的两个创始人来聊了聊创业,小编我听一半就完全被圈粉,秒充会员看了一波视频。从整个采访过程中可以看到泊学虽然整个过程做的很不容易,但丝毫不影响两个创始人独具匠心的打造体验超棒的视频教程。这就是典型的为了要做有意义的事情而做的创业,而不是简单想着蹭热度捞一笔。墙裂看好泊学,推荐大家从听听这期节目开始,了解泊学。

内推

  • 北京-百度网盘 持续招 iOS 开发 :社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱xuyafei01@baidu.com,暂不考虑的也欢迎微博私信@小非86 聊聊~

  • 北京-蚂蚁金服 招iOS/安卓/前端开发 :负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信@折腾范儿_味精 了解情况。

  • 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader):jasy@okjike.com,或微博@JasonYuh。

  • 杭州奇志科技招聘 iOS、前端 :奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信@没故事的卓同学 了解。

  • 深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目 :如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~

  • 北京字节跳动 iOS 团队持续招人中 :简历可以发送到邮箱raozhizhen@gmail.com,或者添加我(@AidenRao)的微信 jingmu1994 了解更多公司及岗位信息。

  • 北京百度教育事业部招 iOS 开发 :百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。

关注我们

我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。

老司机 iOS 周报 #52 | 2019-01-14

同时也支持了 RSS 订阅: github.com/SwiftOldDri… 。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 我们


推荐阅读
  • PyThon_Swift 势必取代 Python?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Swift势必取代Python?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 这篇文章主要讲解了“如何应对Android面试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何应对 ... [详细]
  • Halcon之图像梯度、图像边缘、USM锐化
    图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像卷积:1.模糊2.梯度3.边缘4.锐化1.视频教程:B站、 ... [详细]
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • 题目解析给定 n 个人和 n 种书籍,每个人都有一个包含自己喜好的书籍列表。目标是计算出满足以下条件的分配方案数量:1. 每个人都必须获得他们喜欢的书籍;2. 每本书只能分配给一个人。通过使用深度优先搜索算法,可以系统地探索所有可能的分配组合,确保每个分配方案都符合上述条件。该方法能够有效地处理这类组合优化问题,找到所有可行的解。 ... [详细]
  • 在序章二中,我们了解到Bingo是一位重度强迫症患者,对细节有着极致的追求。他不仅能在深夜专注编程,还能在假期留校进行项目布局,甚至会在凌晨骑行上山观赏日出,与朋友一同畅游钱塘江。他的性格豪爽大方,乐于与他人分享自己的经验和心得,撰写了一本名为《从零开始》的著作。 ... [详细]
  • 在 `UITableViewController` 中采用简洁的平面样式布局时,可以通过优化代码实现单元格扩展至屏幕边缘的效果,同时确保节标题以分组样式呈现,从而提升用户体验和界面美观度。通过这种方式,可以更好地组织和展示列表内容,使其更加清晰和有序。 ... [详细]
  • 在2019年寒假强化训练中,我们深入探讨了二分算法的理论与实践应用。问题A聚焦于使用递归方法实现二分查找。具体而言,给定一个已按升序排列且无重复元素的数组,用户需从键盘输入一个数值X,通过二分查找法判断该数值是否存在于数组中。输入的第一行为一个正整数,表示数组的长度。这一训练不仅强化了对递归算法的理解,还提升了实际编程能力。 ... [详细]
  • 本文深入解析了 Kuangbin 数学训练营中的经典问题——Ekka Dokka,并通过详细的代码示例和数学推导,探讨了该问题的多种解法及其应用场景。通过对算法的优化和扩展,本文旨在为读者提供全面的理解和实用的参考。 ... [详细]
  • 经过两天的努力,终于成功解决了半平面交模板题POJ3335的问题。原来是在`OnLeft`函数中漏掉了关键的等于号。通过这次训练,不仅加深了对半平面交算法的理解,还提升了调试和代码实现的能力。未来将继续深入研究计算几何的其他核心问题,进一步巩固和拓展相关知识。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了iOS开发--漫谈内存管理相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 参考资料:cocoachina的zys475481075的文章几个单词Regular[regjʊlə]adj.定期的;有规律的Expression[ɪkspreʃ(ə)n;ek-]n. ... [详细]
author-avatar
_雁火漫天_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有