2016 年 1 月 1 日 +
有关 objc_autoreleasereturnvalue
有的时候,在 Github 新建项目选择开源许可证是不是很困扰?查阅了资料了以后,大篇的文字也让你看的头晕眼花?
阮一峰前辈在博客中给出了Paul Miller绘制图片的中文版,但是感觉略有不同,下面给出我画的开源许可证快速选择图片。
一目了然:
class dump 是一个用于检查保存在 Mach-O 文件中的 objective-c 运行时信息的工具,攻防中最常用、实用的命令行工具。
class dump 绝对可以满足你的好奇心。你可以通过 class dump :
当前版本: 3.5 (64 bit Intel)
需要 Mac OS X 10.8 或更高版本
class-dump-3.5.dmg
class-dump-3.5.tar.gz
class-dump-3.5.tar.bz2
本文来自 chinese-copywriting-guidelines
作者:sparanoid
中文版作者:mzlogin
统一中文文案、排版的相关用法,降低团队成员之间的沟通成本,增强网站气质。
Cycript允许开发人员探讨和修改iOS和Mac OS X上运行的应用程序。
Cycript是一个理解Objective-C语法的javascript解释器,它能够挂钩正在运行的进程,能够在> 运行时修改应用的很多东西。
- 能够挂钩正在运行的进程,并且找出正被使用的类信息,例如view controllers,内部和第三方库,甚至程序的delegate的名称。
- 对于一个特定的类,例如View Controller, App delegate或者任何其他的类,我们能够得到所有被使用的方法名称。
- 能够得到所有实例变量的名称和在程序运行的任意时刻实例变量的值。
- 能够在运行时修改实例变量的值。
- 能够执行Method Swizzling,例如替换一个特定方法的实现。
- 可以在运行时调用任意方法,即使这个方法目前并不在应用的实际代码当中。
iOS攻防系列大家耳熟能详的是我们iOS女神念茜的系列文章。博主在看了之后也进行了一系列的学习和尝试。念茜的文章写的比较早,有很多文章中提到的东西已经不再适合现在使用,写的也不算详细,很多地方一笔带过,却不是那么好探索。在中间也有很多摸索的过程。
所以本系列文章算是对念茜iOS攻防系列的一个补充,中间细节的地方也会写的更加详尽。
首先要做的事,找一部越狱后的iPhone,攻防方面的探索很多需要借助越狱手机的帮助。作为平常的消遣和研究你也应该有一部越狱手机,我的越狱手机是iPhone4,比较古老,但是研究够用了。
首先是手机(前面说过了)。其次,越狱手机大家都知道一个app——Cydia,在上面可以下载所有的越狱APP,相当于越狱后的app store。对于iOS攻防,首先需要以下软件:
可能还需要的软件:
这些软件都可以在Cydia下载到,如果你搜索不到,那么你需要添加一些源
在Cydia的软件源中点击『编辑』->『添加』,依次添加以下源
不过多赘述MVC,用最通俗的方式解说MVVM。
Model
,包括数据模型、访问数据库的操作和网络请求等View
,包括了iOS中的 View
和 controller
组成,负责 UI 的展示,绑定 viewModel 中的属性ViewModel
,负责从 Model
中获取 View
所需的数据,转换成 View
可以展示的数据,并暴露公开的属性和命令供 View
进行绑定View
和 ViewModel
的同步由于
CF
有Core Foundation
歧义,更名前缀为ZLY
ZLYWaterWave是一个简单好用的iOS水波效果工具,可以让你的APP更加好看有趣
ZLYWaterWave的原理很简单,我们用Example里的工程做简介。(这里首先要感谢@hy,我敬爱的前辈,最初是从他这里学习的水波效果原理)
交互界面
和更多的功能。最近在做项目的时候,我们选择了一个可以下载 iClould 图片的三方 Picker——CTAssetsPickerController,这个 Picker 会根据不同系统版本,返回不同类型的图片资源。
iOS8 之前,访问系统照片视频使用的是 AssetsLibrary 框架,iOS8之后有了新的系统框架 PhotoKit,这一框架对 iCloud 选图有很好的支持。
AssetsLibrary 的图片资源类型是 ALAsset,而 PhotoKit 的图片资源类型是 PHAsset。
如果通过 PHAsset 获取图片资源,可以调用以下方法:
1 | [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(pixelWidth, pixelHeight) contentMode:PHImageContentModeAspectFit options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { |
JSPatch是由国内一位年轻帅气的大牛bang编写的极小的JS引擎文件
这个开源项目(主页、Github连接),让你只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C 原生方法。
我了解这个项目的原因是因为项目的大神率先用了这个Mini引擎解决了我们线上BUG的燃眉之急,当我去学习这个引擎的时候,我觉得我的移动编码观被震撼了,这绝对是有重大意义的项目,所以推荐给所有还不了解人
JSPatch可以调用一段JS替换OC原生方法。而最关键的是JSPatch调用的JS不仅可以是本地的,还可以是网络请求来的。
试想一下,当你的项目已经上线了,用户反馈给你一堆BUG,作为一个优秀的程序员,你一定会第一时间修正BUG并且在一定修复量之后发布新的版本。但是问题是:你的用户不一定会更新新版本的app。
这里暴露了移动端的一个弊端:不能像服务器端一样实时发布,即使修复了BUG用户却可以不选择更新。
而JSPatch由于可以从网络请求JS替换你原本的代码,你可以在在服务器端设置一个借口获取一个JS文件,当你的项目出现问题是,你可以通过向JS文件中编写代码来实时修复你的BUG。所以JSPatch可以完美的实时修复线上bug。
转到移动端开发后居然现在才用到Scheme真是惭愧惭愧。
相信大家都知道URL。
而://之前的部分就称为Scheme
(所以,你看,其实并没有什么难的,在这里多插一句给新人的话:不要看到新东西就觉得难,其实很多时候难的就是在于你看到新事物而不敢去研究)
也就是说http://www.apple.com的Scheme就是http。
iOS中的Scheme也是一样的,无非是定义应用自己的Scheme,然后定义一些自己的URL解析,就好像YourApp://OneController?username=xxx&userInput=xxx
有了这些URL Scheme你可以像网页跳转一样通过URL来传递参数、信息。
比如常见的分享功能,从其他应用点击微信分享,会自动跳转到微信APP的朋友圈发表动态页面,并填好相应的动态内容。你可以想象一下其URL Scheme可能是这样的:weixin://dl/moments?content=”今天在学习URL Scheme”&src=”lottyzhou.com”(我只是举个例子)
有一点需要注意的是,和Web开发不同,iOS中并不是所有的页面或者操作都有URL Schemes,这完全是由你主导的的,如果你需要,你就可以自己定义一些,并去解析。