iOS开发
文章平均质量分 56
月若无涯
我心中有猛虎细嗅蔷薇
https://github.com/YueRuo/
展开
-
iOS如何在页面销毁时优雅的cancel网络请求
大家都知道,当一个网络请求发出去之后立即退出页面,会变成无用请求,那么如何用最少的代码,更简洁的方式cancel掉这个无用请求呢?原创 2017-11-22 14:57:11 · 7237 阅读 · 0 评论 -
iOS9 JSONKit闪退解决方案
升级到iOS9之后,发现JSONKit不幸的又出现问题了,那么如何解决呢?终极解决方案: 使用系统的!! 但是使用系统JSON解析很麻烦,项目改动又比较多,尤其是一些第三方库内部也在用JSONKit,怎么办?系统JSON库如何消除换行符和空格?原创 2015-09-17 17:46:26 · 4956 阅读 · 11 评论 -
iOS 统计打点那些事
统计打点是 App 开发里很重要的一个环节,App 的运行状态、改版后的效果、用户的各种行为等都需要打点,市面上也有不少可供选择的第三方库。 假设产品有这么个需求:当用户在详情页点击购买按钮时,记录一下事件。我们实现起来大概会是这样// DetailViewController.m- (void)onBuyButtonTapped:(UIButton *)button{ //转载 2015-09-11 11:20:57 · 1262 阅读 · 0 评论 -
判断View是否显示在界面上
我们都知道ViewController有viewWillAppear和viewDidAppear等关于页面生命周期的方法,用来对视图做一些管理,比如页面出现时怎么样,页面消失时怎么样。。但是对于View,有没有类似的方法可以判断是否view出现了,view消失或者被遮挡了呢?原创 2015-07-24 18:11:44 · 8908 阅读 · 0 评论 -
iOS使用脚本批量打渠道包
最近我们接到了新的需求,需要打出类似xx001-xx100共100个这样的ipa渠道包,不需要签名。(这批ipa包后续会用企业证书签名,不会影响AppStore的) 这些包所有的功能、内容都是一样的,区别在于不同的包在统计、连接我们服务器时会提供一个不同的字符串标示。 如果按照常规的打包方式,我们需要不断的修改工程中的值,然后一个个打包。。。这种毫无技术含量的活怎么能忍受!原创 2015-06-18 14:19:05 · 5211 阅读 · 4 评论 -
WatchKit控件叠加达到类似addSubview的效果
最近在玩Watch,通过研究watch的布局后发现,其InterfaceController原生布局只有横向和竖向两种,且控件之间不能交叠,也无法addSubview那样添加子控件。但有没有办法达到目的呢?原创 2015-07-22 11:12:26 · 1465 阅读 · 0 评论 -
iOS开发容错处理--YRClassSafeCategory
YRClassSafeCategory最近发现还是有很多朋友在问类似解析时容错问题怎么解决,想了想,就把几年前做的,一直在使用的小容错库开源出来。 YRClassSafeCategory:https://github.com/YueRuo/YRClassSafeCategoryiOS开发中,经常遇到解析字典或其他转换的情况,比如原创 2015-05-25 15:25:11 · 3008 阅读 · 0 评论 -
WatchKit 的 WKInterfaceTable 简单使用
WKInterfaceTable 类似 UITableView, 其用途即展示一个表格并且用户可以与之交互。但不同的是 WKInterfaceTable 的功能更加简单,使用上也很粗暴直接。本文一步步演示了创建一个简单的包含 WKInterfaceTable 的 Apple Watch App!我们首先按照老办法,创建一个 Single View Application 模板的 iOS 应转载 2015-07-17 09:22:27 · 1391 阅读 · 0 评论 -
iOS绘图-线条旋转锯齿问题
最近在使用我的绘图控件YRBordView时,发现做旋转和抖动动画时有明显的锯齿出现,经过查资料,解决方案如下:绘制时不要紧靠控件边缘,距离各边只要留出1像素(1px)即可解决。找到方案后,顺便也把我的控件再次升级,支持通过设置contentEdgeInsets来调整绘制线条的边距。原创 2015-05-28 19:39:19 · 2449 阅读 · 0 评论 -
CocoaPods did not set the base configuration of your project 问题解决方案
[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set.解决方案如下:原创 2015-07-16 17:52:22 · 6172 阅读 · 1 评论 -
2015 Objective-C 新特性
转自sunnyxx的博客:http://blog.sunnyxx.comOverview自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然需要坚守着 Objective-C 语言的开发者们。今年的 WWDC 中介绍了几个 Objective-C 语言的转载 2015-07-29 17:31:31 · 656 阅读 · 0 评论 -
JSPatch 实现原理详解
作者介绍:bang,iOS/前端开发者,推特中文圈/伊书/JSPatch作者,博客 http://cnbang.net, 目前就职于广州腾讯。JSPatch 以小巧的体积做到了让 JS 调用 / 替换任意 OC 方法,让 iOS APP 具备热更新 的能力,在实现 JSPatch 过程中遇到过很多困难也踩过很多坑,有些还是挺值得分享的。本篇文章从基础原理、方法调用和方法转载 2015-07-28 12:38:02 · 717 阅读 · 0 评论 -
iOS开发小技巧之--WeakSelf宏的进化
我们都知道在防止如block的循环引用时,会使用__weak关键字做如下定义:__weak typeof(self) weakSelf = self;后来,为了方便,不用每次都要写这样一句固定代码,我们定义了宏:#define WeakSelf __weak typeof(self) weakSelf = self;之后,我们可以比较方便的在需要的地方:WeakSelf;...[weakSelf原创 2015-07-03 11:35:27 · 28514 阅读 · 17 评论 -
iOS通知中心的简单实现-YRSignal
iOS中原生的通知中心为NSNotificationCenter,这次用不到300行的代码,实现了类似通知的信号传递,并且功能上有进一步的扩展。 库名称为YRSignal,帮助大家研究类似通知这种,内部的机制。原创 2015-06-30 13:49:27 · 1123 阅读 · 0 评论 -
NSAttributedString宽高计算小技巧
通常对于CoreText之类自己实现绘制的控件来说,计算富文本的宽高其实需要依赖CTFramesetterSuggestFrameSizeWithConstraints这个方法。但有些时候,我们可能只是使用UILable、UITextView等系统控件,设置了他们的attributedText,此时,计算控件宽高其实可以利用系统自身的方法。原创 2015-06-30 15:32:08 · 4418 阅读 · 1 评论 -
漫谈 iOS Crash 收集框架
为了能够第一时间发现程序问题,应用程序需要实现自己的崩溃日志收集服务,成熟的开源项目很多,如 KSCrash,plcrashreporter,CrashKit 等。追求方便省心,对于保密性要求不高的程序来说,也可以选择各种一条龙 Crash 统计产品,如 Crashlytics,Hockeyapp ,友盟,Bugly 等等。是否集成越多的 Crash 日志收集服务就转载 2015-06-30 13:22:54 · 1628 阅读 · 0 评论 -
Aspects源码解读:动态Block调用(不定参数的Block)
Aspects是iOS开发中比较著名的AOP开源库,体积小巧而功能强大,其使用的时候有个地方比较有意思:usingBlock参数居然是可以写不定个数个参数的,换句话说,可以调用一个不定参数的Block。原创 2015-10-13 17:53:04 · 4839 阅读 · 0 评论 -
iOS优化项之开启Bitcode
Bitcode这项功能优化还是很明显的。简单说,以前是把所有的arm7、arm64平台的源码编译好,然后打成一个App;现在开启Bitcode之后,用户在AppStore下载到的就只有自己平台对应的那部分,自然是减少了很多不必要的浪费。原创 2015-12-30 16:05:05 · 3113 阅读 · 0 评论 -
macOS10.12下如何丝滑的使用appium?
appium是一个自动化测试的跨平台解决方案,这篇文章针对最新版的xcode 8.2和mac OS 10.12给出基本完成的部署过程,值得一看。 本文为转载,但实际操作过程中,我也遇到了几个问题,在文章开始进行了补充。转载 2017-01-20 12:20:53 · 3056 阅读 · 0 评论 -
iOS网络诊断功能 ping traceroute
有时需要排查移动客户端网络状况的情况,可能由于某些地区网络运营商的问题,导致客户端某些功能不正常,需要按情况ping某域名、traceroute某域名,那么在App内如何更好的实现呢?原创 2016-12-02 10:52:42 · 10066 阅读 · 2 评论 -
用JavaScriptCore做android和iOS都兼容的JS-NativeSDK
最近在给公司做一个JS-Native的SDK,就是用于JS和原生之间的交互。 使用场景上主要还是webView,那么原先的url拦截的方式已经不再考虑,我们使用了iOS7之后的JavaScriptCore.framework。但是android端的JS端调用需要有interfaceName,调用方式为xxname.log('arg');原创 2015-11-26 11:01:11 · 10796 阅读 · 3 评论 -
OC 自动生成分类属性方法
分类属性方法自动生成编码全过程。转载 2016-08-23 16:46:50 · 2160 阅读 · 0 评论 -
从 Auto Layout 的布局算法谈性能
如何对 iOS 应用的性能进行优化以及 Auto Layout 到底为什么会影响性能?转载 2016-09-02 10:30:39 · 6236 阅读 · 1 评论 -
ShareSDK 3.4.0 isWXAppInstalled 返回NO
升级到3.4.0版本的ShareSDK之后,发现[WXApi isWXAppInstalled]方法一直返回false,无法正常使用。初步怀疑是ShareSDK自己的bug。原创 2016-08-16 11:08:39 · 9276 阅读 · 2 评论 -
iOS10 Keychain 使用注意事项
Keychain是iOS中一直用于存储重要信息,或者删除应用后仍然想保留的数据的地方(比如存储UUID)。 今天在测试iOS10 iPad情况下时,发现数据居然无法写入,而iPhone和之前版本的iPad则都是正常的,目前还不能确认这是否是bug。 解决方案如下:原创 2016-08-15 17:13:45 · 8265 阅读 · 1 评论 -
iOS开发 十六进制颜色值转UIColor
在iOS开发中,经常有设计给到的颜色值是类似0xffaabb,或者#FFFFFF这种格式的,对于iOS内置的颜色处理UIColor来说,是无法直接处理使用的,因此需要做一个转换,转换方式如下:+(UIColor *)colorWithHexColorString:(NSString *)hexColorString{ if ([hexColorString length] <6){//原创 2013-04-15 11:48:33 · 6652 阅读 · 0 评论 -
ReactNative更换JSContext增加注入方法
对于ReactNative中JS端调用iOS的原生代码,其本质上也是利用JSContext来进行处理的,这点在看起源码后可以得到验证。 使用ReactNative调用原生方法,基本都是属于原生代码加个方法,桥接后调用起来的思路。 而本人比较喜欢直接通过JSContext注入方法调用,省去不断添加方法,并且扩展起来容易些。 可惜的是截止目前的版本0.22都不能直接访问到JSContext变量,原创 2016-03-23 16:42:53 · 3468 阅读 · 1 评论 -
关于Xcode8 iOS10下模拟器NSLog不输出的问题
昨天升级了Xcode8beta版,兴高采烈的打开工程启动模拟器后发现自己的NSLog输出在console中看不到了。什么原因?怎么解决?往下看:原创 2016-06-24 09:56:32 · 13235 阅读 · 2 评论 -
在WebView中使用webp格式图片
很早之前,我们的项目中就已经采用了webp格式,但是由于webView本身并不能解析webp格式,所以我们基于webView的文章详情页就无法使用到这项优化。 那么有没有什么办法能实现呢?当然是有的。本文介绍较为核心的处理方案,以及踩过的一些坑。希望对大家有所帮助。原创 2016-05-31 14:39:28 · 7898 阅读 · 0 评论 -
JSPatch 部署安全策略
使用 JSPatch 有两个安全问题:传输安全:JS 脚本可以调用任意 OC 方法,权限非常大,若被中间人攻击替换代码,会造成较大的危害。执行安全:下发的 JS 脚本灵活度大,相当于一次小型更新,若未进行充分测试,可能会出现 crash 等情况对 APP 稳定性造成影响。接下来说下这两个问题的解决方案。传输安全方案一:对称加密若要让 JS 代码传输过转载 2016-02-22 10:53:49 · 617 阅读 · 0 评论 -
iOS并发编程--8种加锁方式及比较
iOS开发中不可避免的会遇到加锁的情况,今天就来比较一下各种加锁方式。目前我所知道的有如下几种加锁方式: 1. @synchronized 关键字加锁 2. NSLock 对象锁 3. NSCondition 4. NSConditionLock 条件锁 5. NSRecursiveLock 递归锁 6. pthread_mutex 互斥锁(C语言) 7. dispatch_sema原创 2015-05-18 15:03:16 · 3651 阅读 · 0 评论 -
Keychains中此证书签发者无效的解决方法
最近很多人都遇到了“此证书签发者无效”这样的问题。 其实问题并不在于我们自己生成的证书,而是苹果的WWDRCA证书过期了。 解决方法如下: 1. 下载最新的苹果WWDRCA证书,下载地址:https://developer.apple.com/certificationauthority/AppleWWDRCA.cer,下完安装。 这时候可以检查是否之前的证书已经可用了,如果仍然不可用,则继原创 2016-02-16 15:36:04 · 2070 阅读 · 0 评论 -
iOS开发的2D绘制--CoreGraphics的简单使用四(UIBezierPath)
前面几篇文章简单的介绍了使用2D绘制一些简单的使用,这篇文章介绍一个CoreGraphics中比较有意思的类UIBezierPath,为什么说它有意思呢,因为理论上用这个类可以完成任何的2D绘制。它使CoreGraphics框架中,针对绘图路径的一个封装类。原创 2013-07-29 12:14:44 · 2438 阅读 · 0 评论 -
iOS开发的2D绘制--CoreGraphics的简单使用三(画文字和图片)
在iOS开发当中,有时候我们可能会自己去绘制一些文字啊图片什么的,那么如何操作呢?首先我们继续采用之前的Quartz2D方式,比如我想在界面上绘制出“你好我这句话是用自己绘制出来的哦”,怎么办呢?原创 2013-07-02 17:28:42 · 3558 阅读 · 0 评论 -
iOS开发的2D绘制--CoreGraphics的简单使用二(画图形)
上一篇给大家简单介绍了如何绘制线条,这次我们升级了,我们开始绘制图形,其实绘制图形也是很简单的,iOS的SDK给我们封装了许多好用的API,废话不多说,实战吧骚年。。。我们先来画一个圆和一个矩形,看过我上一篇文章的朋友应该会知道,首先是drawRect重写,然后获得图形上下文CGContextRef,好了,开搞:- (void)drawRect:(CGRect)rect原创 2013-07-02 15:21:57 · 2390 阅读 · 0 评论 -
IOS LocationManager定位国内偏移,火星坐标(GCJ-02)解决方法
IOS7 WGS-84转GCJ-02(火星坐标)CLLocationManager类可以实时的获得我们位置的经纬度,并且可以通过经纬度在MapView上定位:[objc] view plaincopyprint?//创建CLLocationManager对象 CLLocationManager *locat转载 2015-06-08 11:19:03 · 1022 阅读 · 0 评论 -
iOS开发中WebP格式的64位支持处理
几个月前我们项目中增加了对webp格式的处理,期间遇到了一些问题,这是其中的一个小的记录。原创 2015-06-29 13:59:43 · 1779 阅读 · 0 评论 -
iOS开发 调试 网络限速
iOS开发中的网络不同状况的模拟和调试。原创 2014-12-26 11:39:31 · 7998 阅读 · 0 评论 -
(转)dSYM 文件分析工具
以前都是手动定位处理这样的错误提示,今天看到有人做了个工具,因此转载过来。原文链接:http://answerhuang.duapp.com/index.php/2014/07/06/dsym_tool/来到新公司后,前段时间就一直在忙,前不久 项目 终于成功发布上线了,最近就在给项目做优化,并排除一些线上软件的 bug,因为项目中使用了友盟统计,所以在友盟转载 2014-12-22 16:44:50 · 774 阅读 · 0 评论 -
(转)WWDC2014之App Extensions学习笔记
转自王中周的技术博客 一、关于App Extensions extension是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补iOS的沙盒机制对应用间通信的限制。 extension的出现,为用户提供了在其它应用中使用我们应用提供的服务的便捷方式,比如用户可以在Today的widgets中查看应用展示的简略信息,而不用再进到我们的应用中,这将是一种转载 2014-12-18 14:53:14 · 731 阅读 · 0 评论