-
iOS国际化实践
前言为了实现在iOS项目中的多语言切换,我们需要对工程中的各个资源、 各个模块进行相应的国际化操作。在实际的项目需求中,一般还需要进行应用内语言切换,除了默认的跟随系统之外,还要实现动态的语言版本切换。实现思路字面上理解,国际化就是对应用中出现的文字、图片资源进行翻译,然后通过键值映射的方式进行切换即可,但是在实践中需要处理的地方和注意的点还是挺多的, 尤其对于旧项目进行国际化改造时,工作量还是挺大的。总的来说,国际化就是对资源进行替换,分别涉及到了字符串国际化、图片文件等资源国际化、xi...…
-
自建IPA分发平台
前言目前iOS App的内侧分发渠道很多,包括:蒲公英、fir.im等等三方分发平台,用户注册账号后,可以直接上传Archive后的ipa文件即可通过生成的应用下载页来下载安装。但是,为了满足个性化以及品牌宣传等需求,我们需要自建H5下载页,并配置好相关数据也可以制定自定义的分发下载渠道。配置步骤首先我们需要配置一个plist文件,包含2种尺寸的icon图标、app基本信息、和ipa文件的下载地址等,下面我们就以一个例子,介绍下具体的实现步骤:1. Plist 文件# manifest-d...…
-
ReactiveCocoa 使用指南
简介ReactiveCocoa是由GitHub开源的一款函数响应式编程框架(FRP),打破了Objective-C一贯的命令式编程的风格,结合函数式编程和响应式编程思想,将iOS开发中的各种不同事件抽象成一个数据流(RACSignal),这也被称做信号,并且内部制定了统一接口,并提供了对数据流进行连接、过滤和组合的API接口。RactiveCocoa 中使用使用到的编程风格: 函数式编程(Functional Programming):使用高阶函数,例如:函数用其他函数作为参数。 响应...…
-
LLVM架构与Clang
LLVM简介LLVM是一个模块化的、可重用的编译器和工具链技术的集合。最开始是由克里斯·拉特纳(Chris Lattner)在伊利诺伊大学主导开发的一个研究项目,目的是提供一个现代的、基于SSA编译策略的,能够支持任意编程语言和动态编译的编译器和工具链的集合。后来,克里斯及其他的团队被苹果雇佣了,为实现苹果系统中的各种用途而开发LLVM系统。 克里斯·拉特纳也是Swift之父,在苹果任职期间主导研发了Swift语言,编译部分也采用了LLVM工具链技术。LLVM名称最初的由来是低级虚拟机首字...…
-
iOS代码混淆之编译优化(三)
这是iOS代码混淆系列文章的最后一篇,前两篇可以点击下方链接查看 iOS代码混淆之方法名替换(一) iOS代码混淆之资源替换(二)前言前2篇文章已近讲了对于函数名的混淆,对项目中关键信息、资源文件的修改等相关混淆手段。但是,仅仅做到这几点就能万事大吉吗,黑客仍然可以通过分析代码逻辑或伪装代码来寻找程序漏洞,那么还有其他更坚固可靠的混淆方式呢,接下来就介绍下编译器级别的加固混淆方案。iOS编译原理iOS 开发中 Objective-C 和 Swift 都用的是 Clang / LLV...…
-
iOS代码混淆之资源替换(二)
这是iOS代码混淆系列文章的第二篇,其他两篇可以点击下方链接查看 iOS代码混淆之方法名替换(一) iOS代码混淆之编译优化(三)为什么要替换项目资源在某些公司项目开发当中 ,有时候需要通过技术手段,多次上架同一款产品。这些功能类似,且界面不同的产品也称作马甲包。为了达到将同一个包,经过较少的改动,快速更改为另一个类似的产品时,在代码混淆的基础之上还需要修改项目名称、静态资源等来达到目的。需替换的资源及注意事项 工程内部:工程名称、类名前缀、BundleId、icon、启动图、静...…
-
iOS代码混淆之方法名替换(一)
这是iOS代码混淆系列文章的第一篇,后两篇可以点击下方链接查看 iOS代码混淆之资源替换(二) iOS代码混淆之编译优化(三)前言在iOS开发中,某些项目为了保护代码安全,不被黑客攻破,通常需要在上架之前对源代码进行加密混淆,下面就介绍一种简单可行的Objective-C代码混淆方案。混淆思路由于现在的逆向技术越来越高超,各种破解方案层出不穷,其中就可以使用class-dump命令行工具轻易的dump出demo.app文件中的所有头文件,代码立马回暴露在黑客面前,对项目产生了很多不...…
-
iOS页面卡顿及性能优化
卡顿产生的原因在屏幕成像的过程中,CPU和GPU的职责及CPU:负责对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics)。GPU:负责变换、合成、纹理的渲染。CPU 把计算好的数据给 GPU,GPU 来渲染,渲染后的数据放在帧缓存(缓冲区,有两块缓冲区,前帧缓存和后帧缓存,协调使用,效率高)中。然后,视频控制器从缓冲区获取渲染后的数据显示在屏幕上。图像显示原理 引用YY大神对于图像显示原理的分析一帧(或一页)数据就是...…
-
iOS数据埋点方案
代码埋点代码埋点是一种常规且直观的方案,需要开发人员在需要埋点的页面或点击事件的响应方法中注入埋点统计相关方法进行数据统计上报。也可以接入三方统计分析SDK来实现,比如友盟UMCAnalytics统计分析库。实现方式如下代码所示:// 通过在HomeViewController 中的“页面已显示”和“页面已消失”两个回调中注入统计代码实现埋点@implementation HomeViewController//...other methods- (void)viewDidAppear:(...…
-
App常见崩溃分析
前言在iOS开发调试过程中,我们会遇到很多崩溃问题,比如数组越界、容器中插入nil、或调用不存在的方法时都会出现崩溃现象。那么,为了能更好的应对并避免这些常见崩溃问题的发生,就是我们亟待需要解决的问题。下面我们将分析iOS开发中常见的几个崩溃,并结合示例给出这类问题的解决方案。NSInvalidArgumentException从字面上来看,是无效的参数异常,但是触发这个异常的场景还有很多,最常见的就是在NSArray,NSDictionary容器中插入nil时发生,例如下面代码所示://...…