
iOS
文章平均质量分 87
虚心学习的HZK
莫道先行早,更有先行人
展开
-
iOS马甲包预审分析工具
预审分析是什么,有什么用? 工具开发初衷:做马甲有几年了,每次遇到苹果各种条款、调查都是不知所措,只能改SDK,改混淆,改UI等一通乱改,所以很早就有想法要做一款模拟苹果机审的预审工具。 该工具模拟苹果审核的机审操作,能拿到机审期间获取的所有信息做对比分析,在提审前把分析出来的特征修改掉,提高过审率。工具从ipa文件、代码、网络和图像识别4个方面做分析对比,生成html预审分析报告。 如果你是iOS技术、游戏研发等,这个工具可以帮助你定位项目可能被苹果标记的特征;如果你是商务运营,那你可以直接转载 2022-05-17 16:01:45 · 3326 阅读 · 3 评论 -
Xcode 常见 CLI 工具
前言Hi Coder,我是 CoderStar!在新的一年里,祝小伙伴们工作顺利,升职加薪。在咱们日常开发中,或多或少都会用到 Xcode 内置的一些CLI工具,但是大部分小伙伴可能只是会用到一些具体的命令,今天我们就一起来聊一聊 Xcode 内置的常见Command Lines Tool。介绍的可能不全,大家可以去文中出现的路径下查看更多的工具。Command Line Tool本质是一个命令行工具包,内部有很多有用的工具,如Apple LLVM compiler、Make等等。并转载 2022-02-09 14:44:57 · 1632 阅读 · 0 评论 -
Xcode调试技巧总结
前言本来觉得调试是一件很简单的事情,但是看了很多介绍调试方法的文章,发现有些技巧并不知道,有必要对常用的Xcode调试技巧做一个总结,提高工作效率。一、调试面板上方:断点开关、继续执行、单步执行、单步步入、单步步过等命令;左边:watch窗口,负责变量信息显示,如果想查看寄存器的内容,可以将左下角的Auto切换为All右边:日志窗口,接受和显示程序日志,左下角可以选择All/Debugger/Target output二、断点1- 普通断点找到下断点的代码行,可以通过下面3种原创 2022-01-21 11:10:26 · 8849 阅读 · 0 评论 -
iOS底层原理之LLVM & Clang
iOS底层原理之LLVM & Clang前言今天开始,我们对编译器架构系统LLVM进行一个简单的了解和分析,了解完LLVM的编译流程之后,简单实现一个Clang插件玩玩。下面就开始今天的内容。研究编译器之前,先了解下解释型语言和编译型语言的区别。 解释型语言:程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。效率比较低,依赖解释器,跨平台性好。 编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使转载 2021-09-09 10:19:23 · 530 阅读 · 0 评论 -
iOS中self与super
iOS中self与super一.self关键字 OC语言中的self,就相当于C++、Java中的this指针 1.类方法中的self在整个程序运行过程中,一个类有且仅有一个类对象。通过类名调用方法就是给这个类对象发送消息。类方法的self就是这个类对象在类方法中可以通过self来调用其他的类方法不能在类方法中去调用对象方法或成员变量,因为对象方法与成员变量都是属于具体的实例对象的。 2.对象方法中的self在整个程序运行过程中,对象可以...原创 2021-01-20 11:23:52 · 287 阅读 · 0 评论 -
iOS数据埋点统计方案(附Demo): 运行时Method Swizzling机制与AOP编程(面向切面编程)
本文Demo传送门:AopTestDemo1. 场景需求统计UIViewController加载次数 统计UIButton点击次数 统计自定义方法的执行 统计UITableView的Cell点击事件工程说明,首页Test1ViewController,其中有4个按钮,点击第一个按钮打印,第二个到第四个按钮分别跳转到Test2ViewController,Test3ViewController,Test4ViewController。技术选型:手动复制统计的代码逻辑一个个地粘贴到需转载 2021-01-18 10:36:07 · 435 阅读 · 0 评论 -
iOS 最优无痕埋点方案
iOS 最优无痕埋点方案在移动互联网时代,对于每个公司、企业来说,用户的行为数据非常重要。重要到什么程度,用户在这个页面停留多久、点击了什么按钮、浏览了什么内容、什么手机、什么网络环境、App什么版本等都需要清清楚楚。一些大厂的蛮多业务成果都是基于用户操作行为进行推荐后二次转换。另一方面是以日志的作用帮助开发者分析线上问题的一种辅助手段。那么有了上述的诉求,那么技术人员如何满足这些需求?引出来了一个技术点-“埋点”0x01. 埋点手段业界中对于代码埋点主要有3种主流的方案:代码手动埋点、可视转载 2021-01-12 18:52:23 · 1149 阅读 · 0 评论 -
iOS UIWindow的详解--第二部分
查看滴滴开源的DoraemonKit以及阿里开源的youku-sdk-tool-woodpecker时, 看到启动入口均采用UIWindow来实现, 效果如下图悬浮的绿色按钮.悬浮按钮拖动悬浮按钮可以随手指一动(图上为模拟器效果), 点击悬浮按钮可以切换页面.对这种效果的实现方式, 我的第一直觉是采用在 VC 的touch事件中进行处理, 但是按钮还需要有点击效果, 这个就难以处理了. 带着疑问查看源码, 发现两个项目中的悬浮框均是采用UIWindow的方式来实现, 十分巧妙....转载 2020-12-25 09:42:53 · 605 阅读 · 0 评论 -
iOS 关于UIWindow的一些知识--第一部分
近期被一个 UIWindow 的问题坑惨了 ????,网上查了很久,没什么资料,所以仔细再次深入研究了一下。本文以问题的形式阐述,以下结论全部是看官方文档以及自己试验得出,如有错误,还望指出。UIApplication ★ keyWindowThe app's key window.This property holds the UIWindow object in the windows array that is most recently sent the makeKeyAndVis原创 2020-12-25 09:40:42 · 951 阅读 · 0 评论 -
iOS 二进制文件分析之常用命令
iOS 二进制文件分析之常用命令一、背景介绍最近新版本审核时被拒了,Apple给出的原因是使用到了Intents的功能,但是Info.plist中并未给出使用简介导致被拒。由于我们的App并不需要使用Intents等能力,所以需要排查是哪些第三方库引入的Intents.framework。下面将介绍在分析二进制文件时常用的一些命令,帮助我们快速定位问题。首先下载jenkins打好包的IPA文件,修改ipa后缀为zip并解压,在命令行中cd 进入/Payload/TestProje..转载 2020-12-03 09:18:43 · 2896 阅读 · 0 评论 -
iOS App 签名的原理 && App 重签名(一)
目录 iOS App 签名的原理 Provisioning Profile 详解 其他概念(WWDR、csr、cer、p12、AppID、Entitlements) 超级签名原理 注意 iOS App 签名的原理 代码签名的概念 代码签名(Code Signing)是对可执行文件或脚本进行数字签名以确认软件作者及保证软件在签名后未被修改或损坏的措施 iOS App 签名的目的 在 iOS 出来之前,在主流操作系统(macOS / Windows / L.转载 2020-10-15 11:58:24 · 1452 阅读 · 0 评论 -
Runtime-iOS运行时应用
Runtime-iOS运行时应用本篇将会总结Rutime的具体应用实例,结合其动态特性,Runtime在开发中的应用大致分为以下几个方面(Runtime应用图):相关文章:iOS运行时Runtime基础一、动态方法交换:Method Swizzling实现动态方法交换(Method Swizzling )是Runtime中最具盛名的应用场景,其原理是:通过Runtime获取到方法实现的地址,进而动态交换两个方法的功能。使用到关键方法如下: 1 2 3 .原创 2020-10-13 16:50:52 · 932 阅读 · 8 评论 -
XCode12模拟器编译第三方库失败
building for iOS Simulator, but linking in object file built for iOS今天升级了XCode12,发现模拟器编译报错:image.png是linker链接器报了错:building for iOS Simulator-arm64 but attempting to link with file built for iOS Simulator-x86_64原来xcode12模拟器已经用arm架构来编译项目了,而link链接.原创 2020-09-18 09:18:19 · 5615 阅读 · 0 评论 -
iOS-玩转Block(从入门到底层原理)
前方极其烧脑,建议->点赞再看还记得当初刚接触Block的时候,第一感觉就是觉得语法怪异,只知道就这么写就对了,然后稀里糊涂地用了一段时间,之后发现在iOS里,Block频繁使用,比如官方的API大量用到Block来回调做事情。经过一段漫长岁月的使用和研究才明白Block这个东西远远没有这么简单。 所以在这里总结一下我所学的关于Block的所有知识点,毕竟好记性不如烂笔头,写下来记忆会更加深刻而且写的过程会有更多的思考。我将会从以下方面来讲解BlockBlock的定义 Block的基本使原创 2020-09-03 13:47:52 · 492 阅读 · 0 评论 -
一天精通iOS Swift多线程(GCD)
一天精通iOS Swift多线程(GCD)Grand Central Dispatch简称GCD,苹果官方推荐给开发者使用的首选多线程解决方案。多线程开发涉及的细节非常多,下面我会用例子细致的讲解GCD,请一定要精读,一定要用Xcode或Playground多次运行代码去对比结果。实践出真知,练习完这篇文章,你一定会觉得精通Swift多线程原来很简单。本文前半部分,我会尽可能精简话语,降低入门门槛,随着理解的深入,后面我会循序渐进地讲详细一些。第一部分:基础篇1. 串行、并行、同步、异步原创 2020-09-03 10:25:04 · 533 阅读 · 0 评论 -
iOS 无侵入埋点组件总结
埋点方案1. 代码埋点由开发人员在触发事件的具体方法里,添加多行代码把需要上传的参数上报至服务端。2. 可视化埋点根据标识来识别每一个事件, 针对指定的事件进行取参埋点。而事件的标识与参数信息都写在配置表中,通过动态下发配置表来实现埋点统计。3. 无埋点无埋点并不是不需要埋点,更准确的说应该是“全埋”, 前端的任意一个事件都被绑定一个标识,所有的事件都别记录下来。 通过定期上传记录文件,配合文件解析,解析出来我们想要的数据, 并生成可视化报告 , 因此实现“无埋点”统计。方案选择转载 2020-09-03 10:08:43 · 608 阅读 · 0 评论 -
iOS 编译知识小结
iOS 编译知识小结简介拖更很久了,今天水文一篇。简单介绍下iOS底层编译的相关知识,帮助我们充分理解了iOS编译的过程,相信会对我们后续的开发有一定帮助。源码到可执行文件流程首先看一下iOS代码是如何从源码变成可执行文件的,有助于我们了解程序从编译到运行的全流程编译器Clang会将源码XXX.m编译为目标文件XXX.o 链接器会将目标文件链接打包进最终的可执行文件Mach-O中 点击App ICON时,动态链接器dyld会加载可执行文件以及依赖的动态库,并最终执行到main.m里,原创 2020-07-21 14:03:45 · 431 阅读 · 1 评论 -
十几个小知识点,让你理解OC到Swift的都有哪些转变
1、Selector@selector 是 Objective-C 时代的一个关键字,它可以将一个方法转换并赋值给一个 SEL 类型,它的表现很类似一个动态的函数指针。在 Objective-C 时 selector 非常常用,从设定target-action,到自举询问是否响应某个方法,再到指定接受通知时需要调用的方法等等,都是由 selector 来负责的。在 Objective-C 里生成一个 selector 的方法一般是这个样子的-(void) callMe { //...}转载 2020-07-11 11:31:26 · 365 阅读 · 0 评论 -
Swift - 属性观察者(willSet与didSet)
属性观察者,类似于触发器。用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应。有如下特点:1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet。2,给属性添加观察者必须要声明清楚属性类型,否则编译器报错。3,willSet带一个newValue的参数,表示新的属性。4,didSet带一个oldValue的参数,表示旧的属性。5,属性初始化时,willSet和didSet不会调用。只有在初始化上下文之外,当设置属性值时才会调用。6,即使是设置的原创 2020-07-11 10:43:13 · 1112 阅读 · 0 评论 -
设计模式之工厂三兄弟
????设计模式之工厂三兄弟熊二:工厂模式三兄弟,听说过没?熊大:......熊二:工厂模式三兄弟是:简单工厂模式、工厂方法模式、抽象工厂模式,这三种都是属于创建型的设计模式。之前你不是问如何进行App架构设计吗?设计模式三兄弟就是很好的例子。熊大:为什么这么说呢?熊二:因为工厂模式三兄弟可以根据功能的复杂程度,进行升级和降级;根据功能改变,这扩展性不就体现出来了吗,同时也能减小代码解耦程度,一举多得。创建型模式工厂三兄弟 脑图结构创建型模式中的 工厂三兄弟适用于创建的对转载 2020-07-10 14:19:56 · 595 阅读 · 0 评论 -
iOS探索 细数iOS中的那些锁
写在前面多线程在日常开发中能起到性能优化的作用,但是一旦没用好就会造成线程不安全,本文就来讲讲如何保证线程安全一、锁1.线程安全当一个线程访问数据的时候,其他的线程不能对其进行访问,直到该线程访问完毕。简单来讲就是在同一时刻,对同一个数据操作的线程只有一个。而线程不安全,则是在同一时刻可以有多个线程对该数据进行访问,从而得不到预期的结果即线程内操作了一个线程外的非线程安全变量,这个时候一定要考虑线程安全和同步2.检测安全3.锁的作用锁作为一种非强制的机制,被用来保证线程安全。每一个线程在.原创 2020-06-01 16:05:30 · 425 阅读 · 2 评论 -
WKWebview使用二三事
Hybrid作为古老的跨端解决方案,在很多业务中依旧有很强的生命力。在iOS13这样的大背景下,WKWebview已经成为我们Hybrid方案中官方指定Webview组件; 从UIWebview切换到WKWebview,遇到一些WKWebview上一些坑,下面简记之。一、WKWebivew调试1、利用Safari调试手机端开启Web 检查器:设置 -> 通用 -> S...转载 2020-03-23 10:38:48 · 2055 阅读 · 1 评论 -
iOS 解决WKWebView加载本地html资源文件异常处理
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; config.userContentController = userContentController; config.preferences.javaScriptEnabled = YES; config.suppressesI...原创 2019-11-20 16:23:00 · 1073 阅读 · 0 评论 -
IOS程序开发-UI基础
简单描述一下ios初级开发面临的一些问题和需要注意的事项原创 2016-05-11 20:44:30 · 250 阅读 · 0 评论 -
UI基础控件
UI基础控件的属性和资源加载需要注意的方面原创 2016-05-11 20:47:48 · 267 阅读 · 0 评论 -
iOS基础开发-九宫格显示数据页面
九宫格显示就是在界面中显示一些数据和画面,当达到某个个数就会自动换行,在新的一行中显示.例如,购物车中,你添加一个商品在界面中就显示一个,假设它只有3列,当第一行加满三个之后自动换行显示.计算这个九宫格,第一步要写的是你的最大列数,随后就是设置你要显示物品的尺寸.从而计算出商品的X值和Y值.代码显示如下: 设置列数 int maxcols = 3; 设置商品大小原创 2016-05-12 22:51:29 · 1035 阅读 · 0 评论 -
iOS基础开发-懒加载
1.在点击按钮这件事件上,如果把数据都写在按钮触发的事件上的话,你每次点击按钮都会创建一份数据,而事实上有些数据只要创建一次就可以,如果这样的话会消耗内存.不利于用户体验.所以懒加载就很有必要.所谓懒加载就是在用到的时候才去加载,并且只加载一次,不会重复加载.懒加载的核心是重写属性的getter方法.部分代码显示如下: 2.plist文件 为了不让数据写在代码中,可以原创 2016-05-12 22:57:52 · 289 阅读 · 0 评论 -
iOS基础开发-字典转模型(模型思想)
1.所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业 2模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性 3.使用模型访问属性时,编译器会提供一系列的提示,提高编码效率具体实现模型的步骤:第一步:创建一个模型,在.h文件中写上需要改变的属性@property (nonatomic, copy)原创 2016-05-12 23:05:50 · 685 阅读 · 0 评论 -
iOS基础开发-自定义控件
自定义控件,设置子控件的尺寸和位置 当系统提供的控件满足不了我们的需求,我们可以自定义一个控件,继承系统自带的控件,写一个属于自己的控件.自定义控件的好处是可以把封装控件内部的细节,不容易被外界随意修改.如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心.外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子原创 2016-05-12 23:15:02 · 577 阅读 · 0 评论 -
iOS基础开发UI界面-xib基本使用
XIB 在开发中,自定义View不一定要纯代码,还有另外的方式,就是创建xib.storyboard是从xib演化而来的,storyboard是描述整个软件界面,比较重量级,xib相对而言,是描述局部,比较轻量级.A.加载xib的两种方式:1.直接返回一个数组 NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"test原创 2016-05-13 19:35:09 · 553 阅读 · 0 评论 -
iOS基础开发UI界面-xib与代码自定义控件的区别
自定义控件的方法有两种,一种是通过纯代码添加,另一种是通过添加xib文件添加.然而两种方法都可以添加,由此可以总结出两种方法的区别和步骤一.通过代码自定义控件1>.新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)2>.在initWithFrame方法中添加子控件(保证别人在外面不管是通过init还是initWithFrame创建都能够添加子控件原创 2016-05-14 21:26:05 · 1151 阅读 · 0 评论 -
UI基础-UITableView之自定义等高cell
新建一个继承自UITableViewCell的子类,比如HZKTgCell@interface XMGTgCell : UITableViewCell@end在HZKTgcell.m文件重写-initWithStyle:reuseIdentifier:方法在这个方法中添加所有的子控件给子控件做一些初始化设置(设置字体、文字颜色等)/** * 在这个方法中添加原创 2016-05-28 20:45:25 · 272 阅读 · 0 评论 -
UI基础-UITableView之自定义不等高cell(纯代码)
给模型增加frame数据所有子控件的framecell的高度@interface HZKStatus : NSObject/**** 文字\图片数据 ****/// ...../**** frame数据 ****//** 头像的frame */@property (nonatomic, assign) CGRect iconFrame;// ...../** cell的原创 2016-05-28 20:48:45 · 579 阅读 · 0 评论 -
UI高级之UIWindow
UIWindow是一种特殊的UIView,通常在一个app中至少有一个UIWindow.iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了,一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow.加载info.plist后系统判断 在加载in原创 2016-05-28 20:51:59 · 293 阅读 · 0 评论 -
UI高级-UIApplication单例
UIApplication单例 什么是UIApplication? UIApplication对象是应用程序的象征.每一个应用都有自己的UIApplication对象,这个对象是系统自动帮我们创建的, 它是一个单例对象.一个iOS程序启动后创建的第一个对象就是UIApplication对象我们只能通过[UIApplication sharedAppli原创 2016-05-28 20:54:09 · 262 阅读 · 0 评论 -
iOS基础开发-UI基础之UIScrollview
一个手机屏幕显示的内容是有限,当内容数据多,在可是View中就展示不完全,这时候就需要用到UIScrollView控件.UIScrollView会隐藏超出内容的部分,相当于UIScrollView默认设置了clipBounds为YES.原创 2016-05-16 22:51:29 · 380 阅读 · 0 评论 -
屏幕适配
系统适配: ios7中新出来的方法如果跑到ios6上面可能会报错,报错找不到方法,所以需要判断当前系统的版本,做不同的适配.屏幕适配: 安坐手机各种屏幕都有,工作量是比较大的,自从iPhone5出来之后,屏幕就开始慢慢拉长,苹果因此需要做屏幕适配.我们都知道在iPhone4之前是没有适配的,因为那个时候的手机屏幕都是一样,所以一般哪些坐标值都是写死的代码,因为屏原创 2016-05-18 20:24:41 · 289 阅读 · 0 评论 -
用NSURLSession发送网络请求
具体代码如下:#define KfullPath [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"hzk.mp4"]#define KSizefullPath [[NSSearchPathFo原创 2016-06-30 19:44:25 · 392 阅读 · 0 评论 -
项目开发步骤
1.从零开始一个项目的步骤 需要三部分的内容1.需求文档(大概了解到需要做到一个怎样的APP)2.原型图(APP之间是怎样跳转,各层之间的关系都展示出来)3.接口文档(数据的来源,可以更新到一些活的数据,而不至于是在本地的死数据)2.项目开发独立开发1. 需求文档:描述下应用功能2. 查看原型图:描述app每个界面 和 怎么与用户交互3. 根据原型图搭建基本原创 2016-07-07 15:19:31 · 314 阅读 · 0 评论 -
多线程
1.基本概念1 进程 1)进程是指在系统中正在运行的一个应用程序。 2)每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。2 线程 1)基本概念 a.1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程); b.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行。原创 2016-06-22 21:33:26 · 316 阅读 · 0 评论