老司机 iOS 周报 #41 | 2018-10-29

栏目: IOS · 发布时间: 6年前

内容简介:老司机 iOS 周报,只为你呈现有价值的信息。你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到对于 Swift 开发者来说,Swift 标准库的开源可以说是很值得高兴的事情,因为我们可以在标准库中学到很多优秀的设计以及了解具体的实现逻辑。当然,很多人可能和我一样,不知道如何在本地搭建一个可编译的 Swift 标准库。这篇文章就提供了一个很通俗易懂的教程,如果你对阅读源码感兴趣,可以借助这篇文章,在自己的电脑搭建一个 Swift 标准库项目,然后在闲暇之余看一看里面的代码。

老司机 iOS 周报,只为你呈现有价值的信息。

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

小专栏

对于 Swift 开发者来说,Swift 标准库的开源可以说是很值得高兴的事情,因为我们可以在标准库中学到很多优秀的设计以及了解具体的实现逻辑。当然,很多人可能和我一样,不知道如何在本地搭建一个可编译的 Swift 标准库。这篇文章就提供了一个很通俗易懂的教程,如果你对阅读源码感兴趣,可以借助这篇文章,在自己的电脑搭建一个 Swift 标准库项目,然后在闲暇之余看一看里面的代码。

文章

:star2: :dog2:iOS 内存管理研究

来自周报编辑 Jason Yu 同学的大作。

虽然现在 iOS 设备的内存容量越来越大,很多时候开发者也不再需要去考虑内存占用的问题。但是,当产品越来越大,功能越来越复杂的时候,内存优化依然会成为一个避不开的问题。

本文介绍了 iOS 内存管理的一些基本知识,同时也涵盖了在解决 OOM 问题时候的一些小技巧。若是你对 iOS 的内存优化依然存在一些问题,相信读完文章能让你有更加清晰的了解。

在 App 开发阶段,涉及到导航栏样式改变的需求时,经常会遇到转场效果不佳或者与预期样式不符的“小问题”。本文由美团技术团队出品,详细讲解了 UINavigationBar 的生命周期、导航栏样式转换的时机,同时给出了相关最佳实践,建议仔细阅读。

UI 自动化测试是非常不好做的,如果拿捏不准很容易导致它变成投入产出比低、维护成本高、稳定性差的一个失败项目。所以在使用自动化测试验证产品功能的同时,也要投入人力在解决技术本身的问题上做深入研究。本文就描述了他们在使用自动化测试时遇到的问题,以及如何解决的。可以看出他们在处理测试场景失败率高和测试效能低这些问题上有自己的最佳实践,特别是对网络请求这块问题的处理思路,非常值得借鉴。要想把自动化测试做好或者正打算做自动化测试的团队可以仔细研读参考下。

Flutter 可以说是 2018 年移动开发领域最热的技术, 不论是跨平台+独立渲染的工作机制,还是 Google 积极推广的下一代移动 OS:fuchsia 的核心开发框架,都为 Flutter 赚足了眼球。而闲鱼作为国内第一个认真使用 Flutter 的团队, 为 Flutter 社区带来了非常多有价值的内容。本文介绍了闲鱼目前正在践行的“三端一体化开发”概念。什么意思?就是不仅通过Flutter 实现 iOS,Android 端都用Dart 来开发,而且还使用 Dart 来构建微服务的胶水层,由客户端开发同学自己构建需要用到的服务与接口,并且通过一系列工具链的完善提升开发效率。当然,任何听起来过于优雅的方案都免不了会踩坑,不过可以预见的是这套架构在绝大多数场景下能够显著提升整个业务迭代的效率。(麻麻再也不用担心客户端和后台 debug 时互相甩锅了)。

当然,这样“胶水层”要 work 的前提是,有一套很优雅鲁棒稳定的底层服务与接口,能够让胶水层中各种组合与调用,这一点对于目前国内很多野蛮生长的互联网公司来说还是挺难的。

:racehorse:Flutter瘦身大作战

这篇文章依然是闲鱼团队带来的 Flutter 使用经验,从 iOS 的编译产物构成角度,深度探讨了如何对 Flutter 项目进行瘦身优化。从文章中可以看出,除了一些常规的编译指令优化,符号文件移除,资源精简等方面,显示的进行类型转换也会导致包大小的增加,看起来主要是编译系统自动增加的一些异常处理导致的。

本文介绍了基本的 API 被逆向的实例,提醒开发者需要多注意安全防护。 常规的 API 安全,需要做好安全保护,见招拆招,加大逆向难度:

  • Android 必须混淆加固,防止源码简单被逆(iOS混淆作为可选项)
  • 请求使用 HTTPS ,防止内容被抓包,安全要求高的,可以开启 双向校验 ,需要注意证书的 过期 问题,做好 证书更新功能 。证书内容最好以 字符串 的方式写入到程序内,以防止文件容易被解压得到
  • 请求携带 签名签名 算法通常使用 token + params + 盐值 进行算法计算,算法最好使用 C/C++ 编写,并且混淆加固,防止被轻易破解进行篡改或者伪造请求
  • 异常请求 进行限制,如: ip 在短时间内大量访问,请求重复提交
  • 通过 Cookie Session/OAuth/JWT 等方式进行鉴权校验,进行权限管理(可阅读下方链接深入了解)

延展阅读:

在 Xcode 项目中配置不同环境,很多人会选择添加 Target,但这并不是一个很好的方法,太重了,你需要维护多个 Target 及它们的 Info.plist。最好的策略是添加新的 Configurations,然后给其设置该环境下的 xcconfig 配置文件。还能在 Build Settings 里为 Configuration 设置不同的 bundle identifier、产品名称,应用图标,使它们能同时运行在一个手机上,并得到很好的区分。

原文: Porting a 75,000 line native iOS app to Flutter

吐槽一下翻译文的标题,浓浓的国内枪文的感觉。但是,讲回来这篇文章本身的质量还是非常不错的。

文章作者是澳大利亚的 Easy Diet Diary App 的作者。他们之前有 iOS 版本,也一直计划出一个 Android 版本,鉴于两个代码库的复杂度一直没有施行。

在进行了 Flutter 重构之后,作者发现代码量相对于之前 Objective-C 和 Swift 混编有了很明显的下降。大部分少掉的代码量来自于 Storyboard 被 Widget 替换,这也是 Flutter 从一开始就在设计上的一个优势。

文章对还没尝试过 Flutter 的开发者来说,是个可以借鉴的参考。

本文主要介绍了一个简易 App 的构建流程。

其并非一个纯理论的构建描述,而是将整个过程分解成多个步骤,主要分为编译源文件、编译&拷贝资源文件、拷贝 Info.plist、拷贝 Swift 运行库、签名和安装。文中作者有心地附注了相应脚本以及相关原理,读者可以跟着作者,完整实验作者的每一个步骤,更加深刻地了解到一个 App 整体的构建流程。另外,在文末作者留了几个可继续实验钻研的方向,可供读者继续深入探究。

文章对于未了解过 App 构建流程的开发者来说,是个不错的参考。

虽然在 iOS 中,Foundation 库是不开源的,但是可以通过一定的方法,取得其编译后的汇编指令,对于有一定汇编知识的人来说,可以大致推断出某些接口的大体实现细节。本文作者通过开发中遇到的一个问题,刨根问底,对于 NSClassFromString 这个方法的具体实现进行了细致的分析。

诚然,iOS 的各种官方闭源框架里,我们不可能一个一个接口去推断其实现。但当遇到具体困扰我们的问题时候,我觉得我们正需要本文作者那样,可以深入研究的精神。通过阅读本文,相比于知道 NSClassFromString 的实现细节,了解如何通过汇编来推敲接口的实现细节更加重要一些。

:dog2:Swift​Syntax

libSyntax 是 Swift 项目的工具库,目前被用于 Swift 项目的迁移工作。通过直接操作 AST 的方式,生成结构化的代码。而 SwiftSyntax 则是 libSyntax 的封装,为我们提供了 Swift 类型安全的方式,来操作和生成代码。

Mattt 在文章前半部分主要讲了什么是 AST 以及 Swift​Syntax 如何通过 AST 生成代码,在文章后半部分描述了如何通过 Swift​Syntax 生成 Swift 代码、如何通过 Swift​Syntax 替换 Swift 代码以及如何通过 Swift​Syntax 实现 Swift 代码高亮的功能。

文章重点介绍了各系统下如何安装 Swift toolchain、不同版本的 Swift 如何共存?以及各执行文件之间的关系,如 swift-build , swift-packageswift-run

:dog2:Using PromiseKit

当你需要连续地执行多个异步过程时,总会无可避免的出现地狱回调。为此,PromiseKit 是一个不错的解决方案。本文从实际的案例出发,为你深入浅出的讲解了如何优雅的使用它,建议阅读。

这篇文章介绍了作者在封装数据库时遇到的问题——如何处理 public 类型的 internal 属性,让外部调用者可以在无法得知 internal 属性的同时生成这个 public 类型的实例。在暴露必要接口的同时隐藏实现细节,是一件不容易做对的事情,文章很简短,希望大家看完之后可以更好地处理类似的接口设计问题。

Xcode10起,苹果摒弃了对 libstdc++ 库的支持转而支持 libc++ 库。本文对 Xcode 中的 C++ 标准库进行了深入的研究。值得对编译器话题和 C++ 有兴趣的读者阅读。

如果在处理自定义布局时遇到需要远程加载的图片,很容易出现先有鸡还是先有蛋的问题——需要为图片预留出合适的空间,但不下载图片就无法知道它的尺寸。如果一边下载一边调整布局,这些元素就会出现和 web 一样胡蹦乱跳的滑稽效果,直到下载结束才能停下来,从而导致糟糕的 UX/UI 体验,让用户大感失望。在这篇文章里,作者会教你如何在显示图片之前预加载图片的尺寸信息,以便用在 UICollectionView/UITableView 的 pre-fetching 方法中。

工具

通常 iPhone 上的一些应用需要支持多国语言,这要确保所有内容都已翻译,任何语言都不能丢失任何字符串,这是一件比较痛苦的事情。而 iOSLocalizationEditor 是一款在 macOS 上帮助用户编辑和管理 app localizations 的图形化工具,它会显示每种语言的所有本地化版本,并能方便快捷的找出你缺失的 key 。如果想要试试看的朋友,也可以参考下这篇文章: Checking for missing translations in iOS projects

代码

MVCTodo

我们曾在 17 期周报中推荐过 - A Better MVC 的文章和视频,现在时隔半年,作者为这篇文章提供了一个简单的 demo,帮助读者去理解和实践他推荐的 MVC 架构。强烈建议阅读下这个 repo 的 readme,作者很有心地列出了这个 demo 你应该重点看哪些,略过哪些东西。

内推

  • 北京-百度网盘 持续招 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。

关注我们

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

老司机 iOS 周报 #41 | 2018-10-29

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


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

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人人都在说谎

人人都在说谎

赛思·斯蒂芬斯--达维多维茨 / 胡晓姣、张晨、左润男 / 中信出版集团 / 2018-11 / 58

有多少人买了书真正看完了? 你朋友的酒量有他说的那么大吗? 父母是否暗自喜欢男孩儿多于女孩儿? 电影里暴力镜头增多会导致犯罪率升高吗? 种族歧视在现如今的美国还严重吗? 特朗普的胜利有征兆吗,什么促成他赢得了大选? …… 你知道问题的答案吗,直觉会怎样告诉你? 作者赛思·斯蒂芬斯--达维多维茨是一位前谷歌数据科学家和专栏作家。他的研究发现,世界充满了......一起来看看 《人人都在说谎》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器