iOS
文章平均质量分 64
小路恢弘
一个苦逼的iOS搬砖工
展开
-
iOS 变体包体构建
iOS导出变体包原创 2023-02-08 18:38:37 · 427 阅读 · 0 评论 -
使用RubyMine调试CocosPod和插件源码
教你如何调试pod和插件源码原创 2022-07-08 15:58:03 · 931 阅读 · 0 评论 -
【转】git worktree
团队的一个痛点:在maint版本和feature版本交集阶段,在feature版本分支开发新特性过程中,当有maint版本的Bug时,需要切换到maint版本分支修复Bug——由于2个版本分支的工程依赖环境差异较大,导致每次切换分支后,工程都都需要重新安装依赖以及做全量编译——这无疑增加了编译时间,导致开发效率下降。针对这个痛点,目前发现 git worktree 这个方案有助解决。git worktree方案可以概括为:通过创建共享版本仓库的多个工作区,实现多分支并行开发,从而实现多个工程环境的缓存原创 2020-11-23 10:40:09 · 7512 阅读 · 0 评论 -
CLANG技术分享系列四:IOS APP无用代码/重复代码分析
01 NOV 2016 . CATEGORY: TECH . COMMENTS #CLANG问题背景包瘦身,包瘦身,包瘦身,重要的事情说三遍。最近公司一款APP一直在瘦身,我们团队的APP也愈发庞大了。就想看看除过资源外,还有那些路径可以缩小包大小,直观来看,业务代码毕竟有限,各种库嫌疑很大,但是如果没有一个定量的分析,一切说辞都显得有些苍白。当然了所有的APP套路都一样,转载 2017-09-06 16:40:48 · 2159 阅读 · 1 评论 -
CLANG技术分享系列三:API有效性检查
CLANG技术分享系列三:API有效性检查01 NOV 2016 . CATEGORY: TECH . COMMENTS #CLANG问题背景 iOS API(Class/Protocol的Interface,Property,Const,Function)的start/deprecated的判断依赖两个方面: 1.获得所有的API调用,包括OC消息发送,C转载 2017-09-06 16:39:28 · 846 阅读 · 0 评论 -
CLANG技术分享系列二:代码风格检查(A CLANG PLUGIN APPROACH)
转:http://kangwang1988.github.io/tech/2016/10/31/check-code-style-using-clang-plugin.html背景一致的代码风格检查已经是老生常谈了,统一规范的代码风格不仅可提高代码的可读性,可维护性,减少问题的发生,阅读体验也是蛮不错的。 在系列一介绍了Clang插件的原理后,本文将介绍如何用Clang插件完成代码转载 2017-09-06 16:37:06 · 1493 阅读 · 0 评论 -
CLANG技术分享系列一:编写你的第一个CLANG插件
转:http://kangwang1988.github.io/blog/引子 以前遇到一个需求,检测iOS App代码中使用到的API是否存在开始支持的系统版本高于当前deploy target,或已经在当前支持的最新系统之前(包括当前系统)已经被标记为弃用(deprecated),以免发生Crash或者代码不能被调到的情况。 这个问题可以看成时两个子问题: 1.转载 2017-09-06 16:34:20 · 5702 阅读 · 0 评论 -
IM消息送达保证机制实现
一、保证在线实时消息的可靠投递1.报文类型报文分为三种: 请求报文(request,后简称为为R); 应答报文(acknowledge,后简称为A); 通知报文(notify,后简称为N)。 这三种报文的解释如下:R:客户端主动发送给服务器的报文 A:服务器被动应答客户端的报文,一个A一定对应一个R N:服务器主动发送给客户端的报文2.普通消息投递流程 用户A给用户B发送一个“你好转载 2017-05-11 17:54:45 · 7711 阅读 · 1 评论 -
AVFoundation笔记
这几天研究了下AVFoundation框架,在这里做下笔记备用一、播放先初始化一个AVAsset资源,创建AVPlayerItem用于AVPlayer播放。 要将视频显示到view上,需要AVPlayerLayer,将layer添加进view。NSURL *url = [[NSBundle mainBundle] URLForResource:@"video" withExtension:@"m4原创 2016-12-27 13:54:04 · 799 阅读 · 0 评论 -
CocoaPods安装和使用
CocoaPods安装和使用一、前期准备工作1.Ruby的默认源使用的是cocoapods.org,国内访问这个网址有时候会有问题,网上的一种解决方案是将远替换成淘宝的,替换方式如下:$ gem sources --remove https://rubygems.org/ //等有反应之后再敲入以下命令 $ gem sources -a http://ruby.taobao.转载 2015-04-28 17:49:31 · 850 阅读 · 0 评论 -
生成推送证书PEM文件
Mac上生成 Apple推送通知SSL证书 怎么生成就不说了,从开发者中心下载制作好的push证书『aps_development.cer』通过双击.cer文件将你的 cer 引入Keychain中。在Mac上启动 Keychain助手,然后在login keychain中选择 Certificates分类。你将看到一个可扩展选项,这是改证书的专用密钥右键导出p12文件『apns-dev-ke原创 2016-11-11 15:05:57 · 563 阅读 · 0 评论 -
iOS制作推送证书笔记
在Mac上生成 Apple推送通知SSL证书:登录到 iPhone Developer Connection Portal 并点击 App IDs创建一个不使用通配符的 App ID 。通配符 ID 不能用于推送通知服务。例如,我们的iPhone程序ID像这样: AB123346CD.com.serverdensity.iphone点击App ID旁的“Configure”,然后按下按钮转载 2016-09-30 12:47:12 · 405 阅读 · 0 评论 -
iOS异常处理
开发iOS应用,解决Crash问题始终是一个难题。 Crash分为两种, 一种是由EXC_BAD_ACCESS引起的,原因是访问了不属于本进程的内存地址,有可能是访问已被释放的内存; 另一种是未被捕获的Objective-C异常(NSException),导致程序向自身发送了SIGABRT信号而崩溃。 其实对于未捕获的Objective-C异常,我们是有办法将它记录下来的,如果日志记录得当,原创 2016-09-13 10:31:56 · 3577 阅读 · 0 评论 -
scrollview的自动布局约束设置
在自动布局中,scrollview的处理方式要比其他普通view特殊。 由于scrollview出了自身大小外,还需要contentSize来确定内容滚动的大小,所以使用对scrollview的内容作约束的时候,需要要能计算出确切的宽高,最终才能得到contentSize的大小。做法: 1. 添加scrollview到vc.view中,先设置scrollview跟父view的约束一般为top、b原创 2016-08-19 10:15:06 · 2316 阅读 · 0 评论 -
iOS视频播放
在iOS中处理视频播放一般可以使用MPMoviePlayerViewController或者AVPlayer一、MPMoviePlayerViewController的使用MPMoviePlayerViewController是系统封装的一个播放器控制器,其中对于视频的控制由其属性@property (nonatomic, readonly) MPMoviePlayerController *mov原创 2016-07-06 15:03:55 · 1140 阅读 · 0 评论 -
XCODE8 API文档解析
31 OCT 2016 . CATEGORY: TECH . COMMENTS #TUTORIAL背景 iOS API的start/deprecated的判断一个重要基础是获取到每个API的具体版本支持信息。 在Xcode8之前,/Applications/Xcode7.app/Contents/Developer/Documentation/DocSets/com转载 2017-09-06 16:42:06 · 911 阅读 · 0 评论 -
clang 开发应用xcode 编译检查的插件 一:构建篇
Clang是llvm的编译器前端,非常适合进行源码分析.目前开源的oclint就是基于clang进行的代码静态检查.工作中遇到了一些问题需要进行代码分析,所以学习了插件的开发流程.既然开发插件就要有合适的IDE,Mac上最合适的无疑是xcode了.本文将讲述如何使用xcode开发clang插件,在此之前请先了解clang的相关知识.一、搭建环境1.获取Clang源码由于是要使用到Xcode中,因此最原创 2017-09-15 18:19:00 · 1931 阅读 · 0 评论 -
RN环境配置
从 https://nodejs.org/en/download/ 下载安装: https://nodejs.org/dist/v6.10.3/node-v6.10.3.pkg sudo npm install -g react-native 项目目录下 npm install 启动node.js服务 npm startxcode运行期间 commd+D 调起node.js菜原创 2017-09-02 17:27:35 · 509 阅读 · 0 评论 -
Flutter iOS混合开发集成实践
背景:Flutter目前还不够成熟,仍然没勇气大范围使用,一般只是当作现有APP的一部分模块进行集成。然而,flutter的集成方案,官方提供了一套:https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps ,并不完美,native需要依赖flutter工程和flutter环境才能运行起来,对于团队开发来讲是不能容...原创 2019-06-03 14:32:34 · 2245 阅读 · 1 评论 -
flutter初探
一、安装详情见:https://flutterchina.club/setup-macos/下载Flutter SDK :https://flutter.io/docs/development/tools/sdk/archive?tab=macos#macos下载后解压,在目录下会看到./bin目录,将其路径设置进环境变量vim ~/.bash_profile添加path变量:ex...原创 2019-03-25 16:02:15 · 258 阅读 · 0 评论 -
【技巧】UIScrollerView中的UISlider优先响应
一、背景:在项目开发时遇到一个问题,我在UIScrollerView中添加了一个UISlider的组件,在手势滑动的过程中,很难滑动到UISlider这个控件,经常是滑动的时候UIScrollerView进行了滚动,而UISlider这个控件没有滑动,让人很抓狂。二、分析网上说的通过重载UISlider的 - (CGRect)thumbRectForBounds:(CGRect)...原创 2018-09-15 14:41:11 · 401 阅读 · 0 评论 -
block的定义
oc的block请原谅我到用时一直打不出来一、不定义typedef1.方法block定义:-(void)方法名:(返回类型(^)(参数))block名称;如下:- (void)action:(void(^)(UIView *tipView))action;- (void)action:(void(^)(void))action;//如果没带参数就写void2.属性定义:@pro...原创 2018-09-18 10:36:33 · 1086 阅读 · 0 评论 -
【Bug记录】懒加载的坑
一、问题最近开发过程中,遇到了一个诡异的bug: vc下有个collectionView属性,并通过懒加载方式获取:- (UICollectionView *)collectionView { if (!_collectionView) { _collectionView = [[UICollectionView alloc] initWi...原创 2018-07-24 21:26:24 · 474 阅读 · 1 评论 -
iOS 瘦身实践
经过多次版本迭代,产生不少冗余代码和无用资源。而苹果规定今年6月提交给Appstore的应用必须支持64位,32位和64位两个架构的存在使得可执行文件增加了一倍多。安装包大小优化迫在眉睫。一、资源瘦身资源瘦身主要是去掉无用资源和压缩资源,资源包括图片、音视频文件、配置文件以及多语言wording。无用资源是指资源在工程文件里,但没有被代码引用。 检查方法思路:用资源关键字(通常是文件...原创 2018-06-28 21:54:39 · 1953 阅读 · 0 评论 -
CoreText富文本
一、坐标系iOS主要有有2种坐标系,UIKity下坐标系(原点左上),Core Graphics/QuartZ 2Dy上坐标系(原点左下)。我们这里用画线和画图来解释两种不同坐标系CGContextRef context = UIGraphicsGetCurrentContext();CGContextMoveToPoint(context, 0, 2);CGContextAddL...原创 2018-04-20 20:56:27 · 656 阅读 · 0 评论 -
LLVM与Clang
我们可以把LLVM认为是一个完整的编译器架构,或者是一个用于开发编译器、解释器的库。理解LLVM时,我们可以分为狭义的LLVM 和 广义的LLVM广义的LLVM : 指整个LLVM编译器架构,包括前端、优化器、后端、函数库狭义的LLVM:后端功能(代码优化、生成)的一系列模块和库这里我们先摆出一个操作文件main.m#include #import int main原创 2018-03-14 10:19:27 · 692 阅读 · 0 评论 -
clang编译器
编译器转:https://objccn.io/issue-6-2/编译器做些什么?本文主要探讨一下编译器主要做些什么,以及如何有效的利用编译器。简单的说,编译器有两个职责:把 Objective-C 代码转化成低级代码,以及对代码做分析,确保代码中没有任何明显的错误。现在,Xcode 的默认编译器是 clang。本文中我们提到的编译器都表示 clang。clang 的功能是首先对 Objectiv...转载 2018-02-12 18:53:08 · 1561 阅读 · 1 评论 -
Mach-O 可执行文件
Mach-O 可执行文件转:https://objccn.io/issue-6-3/我们用 Xcode 构建一个程序的过程中,会把源文件 (.m 和 .h) 文件转换为一个可执行文件。这个可执行文件中包含的字节码会将被 CPU (iOS 设备中的 ARM 处理器或 Mac 上的 Intel 处理器) 执行。本文将介绍一下上面的过程中编译器都做了些什么,同时深入看看可执行文件内部是怎样的。实际上里面...转载 2018-02-12 18:51:21 · 395 阅读 · 0 评论 -
react-native + redux 实践
一、rn环境搭建看我的另外一篇文章 http://blog.csdn.net/bluefish89/article/details/77802507二、rn起步对于RN的时候,通过https://reactnative.cn/docs/0.50/getting-started.html 可知道,通过react-native引入组件,可在Component中的render方法使用JSX标签如Text、原创 2017-11-23 22:04:39 · 556 阅读 · 0 评论 -
iOS事件传递和事件响应链
参考摘录: http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=401930693&idx=1&sn=80b3fd1a9ad76451952395765b5bbe41&scene=23&srcid=0307jGTi34WitUGlrKMWPbnP#rd前言当用户对view进行触摸时,便会产生事件,执行我们的业务操作。我们的每一个事件,在iOS系原创 2016-03-08 17:02:23 · 1674 阅读 · 0 评论 -
clang 开发应用xcode 编译检查的插件 二:开发篇
1.抽象语法树AST 在实现语法检测之前,需要了解一个叫AST(抽象语法树)的东西 抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,看个例子: 语法树是编译器对我们所书写的代码的“理解”,如上图中的x = a + b;语句,编译器会先将原创 2017-09-15 18:24:03 · 1068 阅读 · 0 评论 -
JavaScriptCore使用
iOS7以前我们对JS的操作只有webview里面一个函数 stringByEvaluatingJavaScriptFromString,JS对OC的回调都是基于URL的拦截进行的操作。 iOS7后苹果在iPhone平台推出JavaScriptCore,极大的方便了我们对js的操作,可以脱离webview直接运行我们的js,使我们可以在js与oc直接切换执行代码。 JavaScriptCore原创 2016-07-16 11:52:04 · 2083 阅读 · 0 评论 -
UINavigationController的setViewControllers方法
在iOS开发中,UINavigationController是很常用的Controller,对它的一般操作就像操作一个栈,push和pop。但也经常会遇到pop和push无法优雅的完成的操作,比如退回到中间的某个VC上,或者在第一个VC之前添加一个VC等,更甚者要重新构造整个VC的顺序,这时候setViewControllers方法就排上用场了,它使对VC栈的操作不再局限于push和pop,而是构造转载 2016-07-04 15:45:56 · 5746 阅读 · 0 评论 -
使用Reveal调试UI
下载破解可以先在官网revealapp.com下载正式版本 接下要搞很牛逼的一步了,破解Reveal1.5.x通杀破解.zip_免费高速下载 (最近升级1.6.X的小伙伴,这破解方法依然有效哦)使用安装好Reveal后, 首先打开Terminal,输入 vim ~/.lldbinit 创建一个名为.lldbinit的文件,然后将如下内容输入到该文件中:command alias reveal_lo原创 2016-07-19 19:47:29 · 548 阅读 · 0 评论 -
当你产品上架AppStore可能会遇到的10个大坑【转载】
相信大家一定非常「深恶痛疾」AppStore的一系列产品上架规则。每次产品上架,一定要折腾很久,让人蛋疼。所以特此发起本期沙龙,为大家带来一些经验。以下是现在能记忆起,遇到的问题。大家对此有不清楚的地方可以提出来,我详细介绍下。● 内容含敏感话题或对苹果不友好的信息(如苹果婊);● 使用了友盟的统计SDK,获取了IDFA但是上传填写无广告;● 采用友盟IDFA的sdk,并用转载 2015-05-25 16:56:21 · 1074 阅读 · 0 评论 -
Reveal界面调试工具
界面调试工具PonyDebugger(https://github.com/square/PonyDebugger)、Reveal(http://revealapp.com/)、Spark Inspector(http://sparkinspector.com/)是三个常用的界面调试工具,可以在程序运行时动态调试iOS应用界面。PonyDebugger是免费并且开源的,后两者是收费的,不过转载 2015-05-12 14:12:16 · 688 阅读 · 0 评论 -
如何添加pch文件
Xcode6为什么干掉pch(Precompile Prefix Header)&如何添加pch文件时间 2014-11-08 10:21:52 CSDN博客原文 http://blog.csdn.net/iosdevtip/article/details/40918353一直在用xcode6开发,但项目都是在xcode5上创建的,所以一直没注意到,xcode6竟然干掉转载 2015-05-11 11:50:14 · 530 阅读 · 0 评论 -
CocoaPods详解之----进阶篇
CocoaPods详解之----进阶篇http://www.360doc.com/content/14/0309/10/11029609_358969797.shtml 一、Podfile.lock文件上文讲过,在开始使用CocoaPods,执行完pod install之后,会生成一个Podfile.lock文件。这个文件看起来跟我们关系不大,实际上绝对不应该忽略它。该文件转载 2015-04-29 11:58:07 · 516 阅读 · 0 评论 -
iOS中消息的传递机制
出自 http://beyondvincent.com/2013/12/14/2013-12-10-124-communication-patterns/注1:本文由破船译自Communication Patterns。本文目录如下所示:可用的机制做出正确的选择Framework示例小结每个应用程序或多或少,都由一些松耦合的对象构成,这些对象转载 2015-04-23 16:18:37 · 421 阅读 · 0 评论 -
ios 应用中直接跳转到指定app页面 或者 app 评价页面 的方法
1.跳转到app页面 找到应用程序的描述链接,比如:http://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8然后将 http:// 替换为 itms:// 或者 itms-apps://: itms://itunes.apple.com/gb/app/yi-dong-cai-bian/id391转载 2015-04-23 11:49:52 · 616 阅读 · 0 评论