置顶文章

9.5k 9 分钟

# 为什么要做 CLI 命令行工具 CLI (command-line interface) 是开发者必不可少的工具之一,编写命令行工具来处理一些工作上的事情也是开发者必备的技能。对于一些重复性的工作,使用命令行脚本可以将任务自动化,这将极大的提升我们的工作效率。同时也能避免因为人为的因素导致错误。比如批量处理一些文件、表格等,在 APP 开发中持续集成的概念也是建立在一些列的自动化命令行脚本的基础之上。 # 为什么使用 Swift 命令行的开发语言有很多,比如最基本的 shell脚本 ,还有常见的 Python 、 Go 、 Ruby 等。而 iOS 开发者工作中最常用也是最熟悉的就是...
8.2k 7 分钟

本 Session 讲了为了让你的应用包体积更小,运行更快,启动速度更快,我们对 Swift 和 Objective-C 运行时做了怎样的优化。同时通过本 Session 你将发现如何通过高效的协议检查,更小的消息发送,以及优化后的 ARC 机制,来提高你的 App 性能。

精选分类

文章列表

4.4k 4 分钟

# 0x1 为什么要做 Crash 防护

在产品开发过程中 Crash 率是一个很重要的指标,也是一个团队中几乎所有的部门都应该关注或者去参与提升的一个指标,他不仅代表着整个产品的质量,也是一个团队整体技术能力的体现。更低的 Crash 率不但能让产品获得更好的用户口碑,在整个流程中也能让团队成员获得更多的成长,加深对 iOS 系统底层的理解,为今后的开发带了更大的帮助。

2.9k 3 分钟

# 技术?管理? 在程序员的职业生涯中一直逃不开的一个话题,也是网上议论最多的话题就是 “35 岁之后的码农的职业规划该走技术路线还是管理路线”,尤其是在疫情时代,大环境不好,各个公司各种各样的 “毕业典礼”...
7k 6 分钟

# 背景 逆向工程相对于正向的开发,可能关注的没有那么高,尤其是相比于安卓或者其他平台,苹果的安全机制更严格,逆向的流程也会更繁琐,除了有 ASLR(地址空间布局随机化),还有 FairPlay DRM 的 iPA 加密方式,也就是我们俗称的壳。这个给逆向工作带来了更多的挑战。但是 更好更安全的加密方式也只是增加破解的成本,并不是绝对的安全 ,这也是逆向的前提。 最近也正在做一些调研的工作,需要从技术层面去分析其他 App 的一些底层逻辑,要用到 iOS 的逆向相关的技术,但是由于笔者做这些工作的时候正处于 MacOS、iOS、Xcode...
8.4k 8 分钟

# 背景

Apple 于北京时间 2022 年 6 月 7 日举办了 WWDC2022,作为一名 Apple 开发者,不仅仅是为了保持技术敏感度,同时也希望在第一时间将新的内容呈现在大家眼前。本文对发布会内容做了整理归纳,并着重对 iOS 的新内容进行分析。希望这篇文章对大家有所帮助的同时也给我们的产品带来更多的可能性。

9690f67c1bc2cc62bd8729e5182ef19a

10k 9 分钟

# 1:背景

2019 年苹果推出 苹果登录(Sign in with Apple)方式,要求 2020 年 4 月之后运行在 iOS13 及以上系统的 APP 如果使用第三方或社交登录服务(如 Facebook、谷歌、 Twitter、Linkedln 或亚马逊等),必须向用户提供 “以苹果账号登录” 服务的选项。其中苹果的审核细则 4.8 也明确的规定了这一点。

5.2k 5 分钟

# 0X1 前言:

其实很早就想写这篇文章了,当时晋级答辩之后本想趁热打铁,把自己的一些经历和想法分享出来和大家一起探讨,但是工作上的事情七七八八,再加上拖延症犯了,所以导致直到今天大家才能看到这篇文章。不奢求大家看过文章后晋级答辩就能一路绿灯,只是希望能在答辩季这关键时期给需要的人些许的启发或者能与大家产生一些共鸣,更主要的是希望本文能起到抛砖引玉的作用,大家都可以将自己的经历和想法分享出来。

4k 4 分钟

# 0x1: Previously

上篇 中讲到了 Crash 处理流程分为四个环节,也分析了 Crash 防护的方法,本章来讲下其余三个环节。

# 0x2: Crash 的拦截

所有的未被防护住的 Crash 最终会走到这里,在这里我们必须要保证拦截的 全面性稳定性 尽可能多的拦截到所有类型的异常,同时拦截逻辑本身不能产生异常。那么我们需要通过以下几个方面去考虑。

8.8k 8 分钟

# 汇编和栈

当一个函数传递了六个以上的参数时,多余的参数将通过堆栈传递。但是在堆栈上传递到底是什么意思呢?现在该通过深入研究一些 “与堆栈相关的” 寄存器以及堆栈中的内容,来深入探讨从程序集角度调用函数时的情况。当您进行逆向工程程序时,了解堆栈的工作方式非常有用,因为当没有可用的调试符号时,您可以帮助推断出在某个函数中正在操纵哪些参数。在下一单元中,您将使用本章中的知识在 LLDB 中构建命令,该命令将通过在内存中抓取函数来发现一些有趣的事情。让我们开始吧


8.5k 8 分钟

# 汇编和内存

你已经开了汇编学习的旅程,并且在前几章中你已经学习了汇编调用的一些黑魔法,你现在知道了,当一个函数被调用,他的参数和返回值是如何传递的。但是您还没学到的是将代码加载到内存后如何执行代码。

在本章中,您将探索程序的执行方式。 您将看到一个特殊的寄存器,该寄存器用于告诉处理器应该从何处读取下一条指令,以及不同大小和内存分组如何产生截然不同的结果。

12k 11 分钟

# 汇编寄存器的规则

在本章中,您将了解到 CPU 使用的寄存器,并研究和修改传入函数的参数。您还将了解常见的苹果计算机架构,以及如何在函数中使用它们的寄存器。这就是所谓的架构调用约定。