![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS开发面试
文章平均质量分 92
iOS大鑫
这个作者很懒,什么都没留下…
展开
-
由美团文章“一款可以让大型iOS工程编译速度提升50%的工具”引出的.hmap文件(下)hmap落地
前言上篇文章由美团文章“一款可以让大型iOS工程编译速度提升50%的工具”引出的.hmap文件探索介绍了什么是hmap,有什么用!文章结尾我说会进行落地,然后就比较坑了,感觉不落地,这以后都没法交代,没法继续写文章了!后面不再写这样的话了,坑!结果展示1.创建个项目工程,如下图所示,红框为自己写的组件2.Pod目录3.使用写的插件,生成我们需要的hmap4.文件变化发现pod的xcconfig的HEADER_SEARCH_PATHS添加了hmap路径此时我们.原创 2021-08-11 14:19:31 · 688 阅读 · 0 评论 -
由美团文章“一款可以让大型iOS工程编译速度提升50%的工具”引出的.hmap文件探索(上)
前言前段时间,本鑫看了一篇美团的文章:《一款可以让大型iOS工程编译速度提升50%的工具》,一看标题就觉得惊讶,为什么呢?因为它能让编译速度提示50%且不是通过组件二进制化实现,我们日常的提升编译速度就是将组件编译成二进制文件导入项目。本着不清楚的就去了解的原则,就来看看怎么实现的。探索编译耗时原因在项目中我们会引入头文件,例如下图:我们在ViewController中引入了Person的头文件在我们引入头文件的时候,引入的是头文件的名称Person,那么Xcode是怎么找到这个Person文.原创 2021-08-07 18:40:53 · 857 阅读 · 1 评论 -
Swift属性参考!
属性 提供了更多关于声明和类型的信息。在 Swift 中有两种类型的属性,一种用于声明,一种用于类型。例如,required 属性-当用于类的指定或者便利初始化声明时-指明每个子类都必须实现它的初始化函数。noreturn 属性-当用于函数或者方法的类型时-指明函数或者方法无需返回值。你可以用字符 @ 加上属性名和属性参数来指定一个属性:@属性名@属性名(属性参数)含有参数的声明属性可以为属性指定更多的信息,可以用于特殊的声明。这些属性参数&n原创 2021-07-12 14:58:09 · 213 阅读 · 0 评论 -
同时使用Swift和Objective-C,怎么做?
Swift 与 Objective-C 的兼容能力使你可以在同一个工程中同时使用两种语言。你可以用这种叫做 mix and match 的特性来开发基于混合语言的应用,可以用 Swfit 的最新特性实现应用的一部分功能,并无缝地并入已有的 Objective-C 的代码中。Mix and Match 概述Objective-C 和 Swift 文件可以在一个工程中并存,不管这个工程原本是基于 Objective-C 还是 Swift。你可以直接往现有工程中简单地添加另一种语言的源文原创 2021-07-02 14:25:36 · 297 阅读 · 0 评论 -
如何运用Swift与C语言交互编程,建议收藏!
作为一种可与 Objective-C 相互调用的语言,Swift 也具有一些与 C 语言的类型和特性,如果你的代码有需要,Swift 也提供了和常见的 C 代码结构混合编程的编程方式。基本数据类型Swift 提供了一些和 C 语言的基本类型如char,int,float,double等价的 Swift 基本数据类型。然而,这些 Swift 的核心基本类型之间并不能隐式的相互转换,如 Int。因此,只有你的代码明确要求它们时再使用这些类型,而 Int 可以在任何你想使用它的时候使用。C 类型原创 2021-06-29 15:40:48 · 511 阅读 · 0 评论 -
在Swift中采用Cocoa设计模式,怎么操作?
使用 Cocoa 现有的一些设计模式,是帮助开发者开发一款拥有合理设计思路、稳定的性能、良好的可扩展性应用的有效方法之一。这些模式都依赖于在 Objective-C 中定义的类。因为 Swift 与 Objective-C 的互用性,所以你依然可以在 Swift 代码中使用这些设计模式。在一些情况下,你甚至可以使用 Swift 语言的特性扩展或简化这些 Cocoa 设计模式,使这些设计模式更强大、更易于使用。委托(Delegation)在 Swift 和 Objective-C 中,委托通常由一个定义原创 2021-06-28 14:44:41 · 160 阅读 · 0 评论 -
如何使用iOS原生语言编写Swift类?
互用性(互操作性)使开发者可以定义融合了 Objective-C 语言特性的Swift类。编写 Swift 类时,不仅可以继承 Objective-C 语言编写的父类,采用 Objective-C 的协议,还可以利用 Objective-C 的一些其它功能。这意味着,开发者可以基于 Objective-C 中已有的熟悉、可靠的类、方法和框架来创建 Swift 类,并结合 Swift 提供的现代化和更有效的语言特点对其进行优化。继承Objective-C的类在 Swift 中,开发者可以定义一个子类,该原创 2021-06-24 15:18:25 · 182 阅读 · 1 评论 -
iOS开发-Swift进阶之值类型 & 引用类型!
本文主要介绍为什么结构体是值类型,类是引用类型值类型图片看不了请前往简书前提:需要了解内存五大区,,如下所示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XFIDtehX-1622094844717)(//upload-images.jianshu.io/upload_images/2251862-fa758fb4cd141db2.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/467/format/webp)]原创 2021-05-27 13:56:22 · 431 阅读 · 1 评论 -
iOS开发-Swift进阶之类、对象、属性!
本文主要介绍以下几点,文章最后会总结。通过SIL来理解对象的创建Swift类结构分析存储属性 & 计算属性延迟存储属性 & 单例创建方式SIL在底层流程中,OC代码和SWift代码时通过不同的编译器进行编译,然后通过LLVM,生成.o可执行文件,如下所示SIL-1OC中通过clang编译器(clang可以参考这篇文章iOS-底层原理 31:LLVM编译流程 & Clang插件开发),编译成IR,然后再生成可执行文件.o(即机器码)sw原创 2021-05-26 15:49:15 · 550 阅读 · 2 评论 -
iOS开发-Swift进阶之源码编译!
编译环境MacOS Big Sur 11.0.1Xcode 12.2Python 2.xbrew install cmake ninja编译步骤准备工作新建一个文件夹,命名为swift-source由于拉取资源过程中,需要访问外网,所以需要梯子(各位童鞋自行解决)第一步:clone swift源码这里编译的是swift-5.3.1-Release。可以自行在官网找到对应的分支,需要注意的是:swift源码版本需要与Xcode版本匹配(官方编译文档有说明)git clo原创 2021-05-25 14:06:50 · 942 阅读 · 5 评论 -
iOS逆向之Mach-O文件(下)
本文主要介绍Mach-O文件的内部结构的演示Mach-O内部结构因为MachO文件本身是一种文件格式,所以我们一定需要了解其文件内部结构。Mach-O 的组成结构主要分为三部分Header 包含该二进制文件的一般信息字节顺序、架构类型、加载指令的数量等。使得可以快速确认一些信息,比如当前文件用于32位还是64位,对应的处理器是什么、文件类型是什么Load commands(加载命令) 一张包含很多内容的表内容包括区域的位置、符号表、动态符号表等。Data(数据) 通常原创 2021-05-24 15:28:07 · 430 阅读 · 0 评论 -
iOS逆向之Mach-O文件(上)
本文主要介绍Mach-O文件格式以及通用二进制文件Mach-O文件概述Mach-O其实是Mach Object文件格式的缩写,是mac以及iOS上可执行文件的格式, 类似于windows上的PE格式 (Portable Executable ), linux上的elf格式 (Executable and Linking Format)Mach-O是一种用于可执行文件、目标代码、动态库的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性。Mach-O文件格式常见的Mac原创 2021-05-22 16:09:18 · 371 阅读 · 1 评论 -
iOS逆向之代码注入!(下)
本文主要是以WeChat为例,讲解如何破坏WeChat注册、以及如何获取登录密码引子在进行WeChat实践操作时,首先需要了解一个概念:Method Swizzing(即方法交换)Method Swizzing(即方法交换)是利用OC的Runtime特性,动态改变SEL(方法编号)和IMP(方法实现)的对应关系,达到OC方法调用流程改变的目的,主要用于OC方法。在OC中,SEL和IMP之间的关系,类似与一本书的目录,是一一对应的SEL:方法编号,类似于目录中的标题IMP:方法实现的真实原创 2021-05-21 13:47:36 · 221 阅读 · 0 评论 -
iOS开发逆向之代码注入(上)
本文主要讲解代码注入的两种方式:FrameWork注入、dylib注入代码注入一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等三方库的方式注入。查看Mach-O文件在了解注入前,我们首先需要了解ipa包中的静态库是如何注入的,有以下两种方式查看Mach-O可执行文件1、终端命令:otool -l WeChat2、MachOView 二进制文件分析工具(注:分析时可能出现无法分析的情况,可以通过 CMD + o 打开)Mach-O文件中主要看原创 2021-05-20 14:53:21 · 707 阅读 · 0 评论 -
iOS开发逆向之应用重签名(下)
本文主要介绍通过shell脚本进行应用重签名补充知识在利用shell脚本重签名之前,需要了解以下知识:脚本常用命令+权限相关脚本执行相关命令Shell是一种特殊的交互式工具,它为用户提供了启动程序、管理文件系统中文件以及运行在系统上的进程的途径。Shell一般是指命令行工具。它允许你输入文本命令,然后解释命令,并在内核中执行。Shell脚本,也就是用各类命令预先放入到一个文本文件中,方便一次性执行的一个脚本文件。切换bash 和 zshchsh -s /bin/bash原创 2021-05-19 14:26:10 · 240 阅读 · 0 评论