iOS进阶
Hi_Aaron
do
读书工作生活
while(1)
展开
-
iOS Mach 异常、Unix 信号 和NSException 异常
前言Crash的主要原因是你的应用收到了未处理的信号。未处理信号可能来源于三个地方:kernel、其他进程、以及App本身。因此,crash异常也分为三种:Mach异常:是指最底层的内核级异常。用户态的开发者可以直接通过Mach API设置thread,task,host的异常端口,来捕获Mach异常。 Unix信号:又称BSD 信号,如果开发者没有捕获Mach异常,则会被host层的方法ux_exception()将异常转换为对应的UNIX信号,并通过方法threadsignal()将信原创 2020-07-07 16:20:14 · 996 阅读 · 0 评论 -
汇编定位 objc_msgSend + 16 出错的问题
前言:本文涉及到汇编的部分基础,对汇编不懂的同学可以先看看iOS汇编入门-arm64基础这篇文章。先看下出错堆栈#0 ThreadSIGSEGVSEGV_ACCERR0 libobjc.A.dylib 0x000000018de86f30 objc_msgSend + 161 HLLCourseLive 0x0000000100318ee0 0x0000000100060000 + 28546242 AVFAudio 0x00000001a843d2a8原创 2020-06-18 15:07:03 · 1051 阅读 · 0 评论 -
iOS Crash栈的捕获和分析
在iOS应用开发和线上运行的过程中,我们总会被反馈到各种各样的崩溃。很多崩溃通过case的描述,就能很快的重现并得到修复,但是更多的崩溃也许这一辈子就发生这么一次,也许我们永远不知道它什么时候再会出现。同时,就算我们捕获到一个Crash栈,由于版本环境等种种原因,或者发生崩溃的代码我们就无法得到它详细的源码,我们往往会对着一片全是程序指令偏移量的Crash栈一脸蒙蔽。基于以上事实,我们需要从Crash栈的捕获和分析这两个角度进行深入的了解。本博客主要内容分为两部分:OC中的Crash异常的总结原创 2020-06-11 20:21:44 · 1251 阅读 · 0 评论 -
iOS 汇编入门 - arm64基础
前言iOS 中常见的架构有 armv7、armv7s、arm64、i386、x86_64 这些。其中, armv7 、armv7s 、arm 64 都是 ARM 处理器的指令集,i386 、x86_64 是 Mac 处理器的指令集这些指令集对应的机型有以下这些:arm64e: iphone XS | iphone XS Max | iPhoneXRarm...原创 2020-02-27 13:54:20 · 1700 阅读 · 0 评论 -
实现一个TODO宏
文章转自 sunnyxx 的博客:http://blog.sunnyxx.com/2015/03/01/todo-macro/实现一个TODO宏实现一个能产生warning的TODO宏,用于在代码里做备忘,效果:下面一步步来实现这个宏。Let’s do it手动让编译器报警(报错)可以用以下几个方法:123转载 2015-12-05 16:12:15 · 1204 阅读 · 0 评论 -
调节音量时隐藏系统提示框(Hide device volume HUD when adjust the volume)
有这样一个需求,在特定页面调节系统音量的时候需要隐藏系统的音量 HUD 提示框。首先想到的是肯定是找控制系统音量的那个类,查找一下有没有对应的接口提供,过了一下 MPMusicPlayerController 并没有找到我需要的接口。又 Google 了一下,找到了设置音量的类 MPVolumeView ,根据 stackoverflow 上的答案,说是这样设置MPVolumeView *原创 2016-05-02 23:07:11 · 5891 阅读 · 0 评论 -
谈谈 WebSocket
对于一些例如 IM、金融、股价、视频会议等这样一些应用来说,所需要的不过是高实时、低延时。针对于这一需求,现在有哪些比较好的可选方案呢?目前比较流行的是 socket 和 websocket。Socket首先,Socket 其实并不是一个协议。它工作在 OSI 模型会话层(第5层),是为了方便大家直接使用更底层协议(一般是TCP 或 UDP )而存在的一个抽象层。Socke转载 2016-05-26 23:26:04 · 3810 阅读 · 0 评论 -
AVAudioSessionInterruptionNotification not called
问题描述:监听了系统的打断事件,在来电的时候有收到系统打断的 AVAudioSessionInterruptionTypeBegan 通知,却没有收到 AVAudioSessionInterruptionTypeEnd 通知。[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:n原创 2016-08-01 17:39:51 · 10101 阅读 · 0 评论 -
拷贝头文件shell
简单的拷贝头文件的话其实一个命令就可以搞定了find ./ -type f -not -name "*.h" -delete然后 copy 到你想要的地方,但这样做得不够完全,会出现一些空的目录,而且每次都要手动去敲命令,还是觉得挺麻烦的。所以还是写一个脚本执行好点,如上图,想要的 copy 的是 include 里面的头文件。脚本如下:#!/bin/bashheader_path=$SRCROO原创 2017-05-03 17:03:05 · 1696 阅读 · 0 评论 -
ARC 下 C++/OC 混编计数器的问题
ARC 模式下,object-C 编写的代码的内存管理都交给了自动引用计数器了,不用我们自己再去操心内存的管理,但使用 Core Foundation 框架或者是和 C++ 混编时,代码的内存还是需要我们自己去管理的,这时候就需要注意了!Core Foundation 主要是由不透明类型(opaque type),即 C 结构体组成,语言层面并不支持继承和多态,而 Core Foundation能够原创 2017-05-16 20:54:37 · 1685 阅读 · 0 评论 -
iOS高级调试&逆向技术-汇编寄存器调用
前言本文翻译自Assembly Register Calling Convention Tutorial 序言通过本教程,你会可以看到CPU使用的寄存器,并探索和修改传递给函数调用的参数。还将学习常见的苹果计算机架构以及如何在函数中使用寄存器。这就是所谓架构的调用约定。 了解汇编是如何工作的,以及特定架构调用约定是如何工作是一项极其重要的技能。它可以让你在没有源码的情况下,观察和修改传递给函数的参数翻译 2017-07-13 18:20:50 · 8165 阅读 · 8 评论 -
重定向 NSLog 输出到文件
问题:在 iOS 的开发过程中总是离不开 Debug,调试的时候都是依靠 XCode log 输出来追踪确定问题。但如果离开了 XCode 的时候仍然想看到日志的输出,比如在调试 App 与硬件的交互的时候,这时候应该怎么办?解决思路:方法一:第一反应是,写个类似于 NSLog 的输出函数,把想要的查看的信息输出到 view 上就好了。但很快就否决了,原因有2个:每原创 2016-07-03 21:22:43 · 2173 阅读 · 0 评论 -
一次编译同时启动多个模拟器
原文 https://buildingvts.com/launch-multiple-ios-simulators-on-a-single-compile-985fd2ad5eb1 当你写完自动布局需要测试在不同模拟器上的运行效果时你是否很头疼,需要一个一个模拟器去启动运行。这时候如果可以一编译就同时启动多个模拟器那该是多么好啊。XCode 9 有一个新的特性——允许...翻译 2018-04-04 15:48:58 · 4162 阅读 · 0 评论 -
iOS 保持界面流畅的技巧
文章转自:http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/这篇文章会非常详细的分析 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互。Index演示项目屏幕显示图像的原理卡顿产生的原因和解决方案CPU 资源消转载 2015-11-19 09:41:23 · 7420 阅读 · 1 评论 -
为什么说,你纯看代码而没有碰到这个场景你就算看懂了也没法理解?(关于并发)
为什么说,你纯看代码而没有碰到这个场景你就算看懂了也没法理解?我碰到了一个什么问题?来说一个场景,打开你的Instagram,如果手机有VPN,请连接上VPN.打开搜索页面,连续输入m,i,k,e.你会发现,小菊花转了4次.可以想象,客户端向服务端发起了4个请求,搜索的字段分别是"m","mi","mik","mike".那么问题来了.这四次搜索肯定是并发的,也就是转载 2015-09-23 22:59:26 · 916 阅读 · 0 评论 -
Streaming iPod Audio Tracks From Disk With Core Audio
There are two questions that often arise for iOS developers new to Apple’s audio frameworks: (1) How do I play tracks from the iPod Library using the low level Core Audio APIs (as opposed to using an转载 2015-09-12 14:20:29 · 1218 阅读 · 0 评论 -
iOS开发者如何提高自己的水平?
(原文:Leveling Up 作者:Mark Dalrymple 译者:xiaoying )不知道你有没有参与或是旁观过iOS开发的黑客马拉松,我觉得这是非常好的事情,在这里人们几乎不睡觉,一起脑洞大开,在Objective-C运行时环境下,利用iOS的相关知识攻城略地,度过激情四射的72个小时。对于我来说,它们让人心潮澎湃,我的所有平台知识都在头脑风暴下接受考验,我的技转载 2015-05-09 12:37:25 · 1381 阅读 · 0 评论 -
基于 CoreText 的排版引擎:基础
本章前言使用 CoreText 技术,我们可以对富文本进行复杂的排版。经过一些简单的扩展,我们还可以实现对于图片,链接的点击效果。CoreText 技术相对于 UIWebView,有着更少的内存占用,以及可以在后台渲染的优点,非常适合用于内容的排版工作。本章我们将从最基本的开始,一步一步完成一个支持图文混排、支持图片和链接点击的排版引擎。CoreText 简介Cor转载 2015-06-27 17:11:05 · 3611 阅读 · 0 评论 -
跳出手掌心——如何立即触发UIButton边界事件
跳出手掌心——如何立即触发UIButton边界事件21 May 2015 • 2 min. read • 0 Comments最近在使用UIButton的过程中遇到一个问题,我想要获得手指拖动button并离开button边界时的回调,于是监听UIControlEventTouchDragExit事件,如文档所述:An event where a finger is转载 2015-05-27 17:51:58 · 1222 阅读 · 0 评论 -
基于 CoreText 的排版引擎:进阶
本章前言在上一篇《基于 CoreText 的排版引擎:基础》中,我们学会了排版的基础知识,现在我们来增加复杂性,让我们的排版引擎支持图片和链接的点击。支持图文混排的排版引擎改造模版文件下面我们来进一步改造,让排版引擎支持对于图片的排版。在上一小节中,我们在设置模版文件的时候,就专门在模板文件里面留了一个名为type的字段,用于表示内容的类型。之前的type的值都是t转载 2015-06-27 17:36:48 · 2857 阅读 · 0 评论 -
iOS测试与集成工具总结
Giovanni Lodi是来自澳大利亚的一名iOS开发者,最近他总结了iOS平台上单元测试、验收测试的工具,分析了它们的优缺点,以及支持iOS App的持续集成平台。苹果官方工具XCTest是苹果在iOS 7和Xcode5引入的一个简单而强大的测试框架,它的测试编写起来非常简单,并且遵循xUnit风格。XCTest的优点是与Xcode深度集成,有专门的Test导航栏,但因转载 2015-06-08 00:04:31 · 1434 阅读 · 0 评论 -
关联引用
关联引用允许开发者为任何对象附着键值数据。这种能力有很多用法,一种常见的用法是:1)让分类为属性添加方法。考虑 Person 类这个例子,假设你要用分类添加一个新属性,叫做 emailAddress。可能其他程序也用到了 Person,有时候需要电子邮箱地址,有时候不需要,分类就是很好的解决方案,可以避免在不需要的时候开销。或者 Person 不是你的,而维护者没有为你添加这个属性。不原创 2015-06-28 18:29:33 · 1420 阅读 · 0 评论 -
iOS应用架构谈 网络层设计方案
前言网络层在一个App中也是一个不可缺少的部分,工程师们在网络层能够发挥的空间也比较大。另外,苹果对网络请求部分已经做了很好的封装,业界的AFNetworking也被广泛使用。其它的ASIHttpRequest,MKNetworkKit啥的其实也都还不错,但前者已经弃坑,后者也在弃坑的边缘。在实际的App开发中,Afnetworking已经成为了事实上各大App的标准配置。网络层在转载 2015-08-25 22:05:37 · 1281 阅读 · 1 评论 -
iOS应用架构谈 开篇
缘由之前安居客iOS app的第二版架构大部分内容是我做的,期间有总结了一些经验。在将近一年之后,前同事zzz在微信朋友圈上发了一个问题:假如问你一个iOS or Android app的架构,你会从哪些方面来说呢?当时看到这个问题正好在乘公车回家的路上,闲来无聊就答了一把。在zzz在微信朋友圈上追问了几个问题之后,我觉得有必要开个博客专门来讲讲一些个人见解。其实对于iOS转载 2015-08-25 21:45:30 · 728 阅读 · 0 评论 -
iOS应用架构谈 view层的组织和调用方案
前言《iOS应用架构谈 开篇》出来之后,很多人来催我赶紧出第二篇。这一篇文章出得相当艰难,因为公司里的破事儿特别多,我自己又有点私事儿,以至于能用来写博客的时间不够充分。现在好啦,第二篇出来了。当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构。一般也就是这两种时机会去做View层架构,基转载 2015-08-25 21:59:39 · 807 阅读 · 0 评论 -
iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
概览随着移动互联网的发展,如今的手机早已不是打电话、发短信那么简单了,播放音乐、视频、录音、拍照等都是很常用的功能。在iOS中对于多媒体的支持是非常强大的,无论是音视频播放、录制,还是对麦克风、摄像头的操作都提供了多套API。在今天的文章中将会对这些内容进行一一介绍:音频音效音乐音频会话录音音频队列服务视频MPMoviePlayerControllerMPMovie转载 2015-07-30 17:07:26 · 856 阅读 · 0 评论 -
Xcode Server Tutorials: 1. Getting Started
This article is Part 1 of a whole series called Xcode Server Tutorials. New posts are always tweeted by me (@czechboy0) on Twitter.We all know how it works. Your iOS teammate works on a feat转载 2015-09-09 23:27:38 · 1892 阅读 · 0 评论 -
Xcode Server Tutorials: 2. Integrations
This article is Part 2 of a whole series called Xcode Server Tutorials. Check out Part 1 first if you haven't already. New posts are always tweeted by me (@czechboy0) on Twitter.Ok, time t转载 2015-09-09 23:29:17 · 795 阅读 · 0 评论 -
Xcode Server Tutorials: 3. Prebuild & Postbuild Scripts
This article is Part 3 of a whole series called Xcode Server Tutorials. Check out Part 2 first if you haven't already. New posts are always tweeted by me (@czechboy0) on Twitter.Great to s转载 2015-09-09 23:30:36 · 621 阅读 · 0 评论 -
iOS利用Runtime自定义控制器POP手势动画
文章转自:前言苹果在IOS7以后给导航控制器增加了一个Pop的手势,只要手指在屏幕边缘滑动,当前的控制器的视图就会跟随你的手指移动,当用户松手后,系统会判断手指拖动出来的大小来决定是否要执行控制器的Pop操作。nav_pop_origin.gif这个操作的想法非常好,但是系统给我们规定的范围必须是屏幕左侧边缘才可以触发,这样实际使用过程中对于有些转载 2015-06-05 11:32:30 · 619 阅读 · 0 评论