【React Native】AES+Base64加密
前言在移动端App开发中,AES加密非常常用,本文主要讲解如何在React Native中封装自己的AES加密工具类及会遇到的坑。这里的AES加密是基于前端常用的加密库**crypto-js**。
安装crypto-js使用NPM或者Yarn安装crypto-js
1234# NPMnpm install crypto-js# Yarnyarn add crypto-js
注意:使用crypto-js4.0.0及以上的版本会报找不到Crypto.js的错,这可能是新版本的Bug,需要在package.json中找到crypto-js并把版本号指定为^3.3.0(与3.3.0版本兼容,相当于3.X.X, 即>=3.3.0 < 4.0.0,不改变大版本号),然后重新执行npm install:
1"crypto-js": "^3.3.0", //
创建加密工具类新建AESTool.js文件,添加如下代码:
12345678910111213141516171819202122232425262728import CryptoJ ...
使用Jenkins+fir/蒲公英持续集成iOS项目(优化版)
前言在持续集成领域,Jenkins绝对是一个神兵利器,它的插件库非常丰富,我们可以使用它代替执行很多工作中常见的繁琐重复的工作,减少我们在开发之外的不必要的时间花费,从而提高我们的开发效率。在iOS开发中,最常见的就是自动化打包。
我在最初开始接触使用Jenkins的过程中,参考了大量的Jenkins的安装使用教程,发现各有优势,但其中也有很多坑和不合理的地方。通过自己大量的使用、研究和优化,总结了这篇优化版的自动化打包教程。
在安装和使用Jenkins的过程中,很多步骤都会有几种方式实现,本文只详细讲解个人认为比较好的方式。
安装JenkinsJenkins的安装分为两类,一种是安装包安装,一种是使用Homebrew安装,推荐使用Homebrew进行安装。
安装前请确保系统已经安装了Homebrew,否则请前往Homebrew官网按照提示自行安装。
打开终端安装Jenkins
1brew install jenkins
下面安装完成后日常使用经常会用到的命令
123brew services start jenkins // 启动Jenkinsbrew services res ...
使用SonarQube静态检查OC代码质量
前言SonarQube是一个开源的代码质量管理系统,它支持包括ObjectiveC、Java、C/C++、C#、PHP在内的超过25种编程语言。它能够提供包括重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在Bug、注释的报告。它还可以与持续集成工具配合使用实现完全自动化的分析。
之前在网上搜索学习SonarQube在Mac上的集成和使用教程,发现教程都比较老,使用的都是较老版本的SonarQube,在集成最新的8.1版本时踩了不少坑。本文就是对在Mac系统上安装和使用新版SonarQube的总结。后续会继续更新使用SonarQube静态分析Swift代码及结合Jenkins进行自动化分析。
注意:SonarQube需要Java 11及以上的运行环境,在终端输入java --version即可查看系统的Java版本,如果不满足,请先自行下载和安装。
SonarQube平台架构SonarQube平台主要由四大要件构成:
数据库:存放配置数据和检测数据(7.9及以后的版本不再支持MySQL,本文使用的是PostgreSQL)
Web服务:在本地网页上查看配置数据和代码质量检测 ...
【iOS】Eureka的基本使用和自定义Cell
前言Eureka是一个纯Swift库,它能帮你快速优雅地创建一个TableView。这个库本身也提供了大量内置的不同功能的Cell,使用上也很简单。如果内置的Cell样式或功能不能满足需要,你也可以自定义Cell。
使用Eureka设置TableView的代码大概是下面这样:
123456789form +++ Section() <<< LabelRow() { $0.title = "LabelRow" $0.value = "Default Value" }.cellSetup({ (cell, row) in cell.accessoryType = .disclosureIndicator }).onCellSelection({ (cell, row) in print("cell selecti ...
【iOS】封装自己的自定义转场组件
自定义转场这个技术相信大家都用过或者听说过,不过如果你经常使用自定义转场或者自定义转场动画做得比较复杂或许会发现AnimatedTransitioning与目标控制器的交互并没有那么友好。本文旨在提供一个新思路,减少AnimatedTransitioning与目标控制器的耦合,引入封装好的类文件后,只需少量代码,就可以实现一个基础的转场动画。
首先,我们来看一下实现一个普通的转场动画的流程。
设置转场方式将转场方式设置为自定义
1toVC.modalPresentationStyle = .custom
设置转场代理这里转场代理可以设置为目标控制器,也可以是我们自定义的管理转场的类,这里设置为目标控制器
1toVC.transitioningDelegate = toVC
实现转场代理方法转场的代理方法我们需要实现以下两个方法,指定我们自定义的类来管理转场动画,关于这个自定义的类,后面会详细说。
1234567891011public func animationController(forPresented presented: UIViewController, prese ...
AFNetworking源码上传图片部分完整解析
最近在开发SDK时有上传图片的需求,这个需求用AF的话当然非常简单,多添加一句代码就可以搞定。但为避免第三方耦合并没有使用AFNetworking,这就需要自己走完上传图片的全部流程,所以仔细研究了一下AFNetworking的相关源码,梳理了整个流程,它的流程大致是这样的:
<img src=”http://ogdqxib8j.bkt.clouddn.com/image/png%E5%9B%BE%E7%89%87%E4%B8%8A%E4%BC%A0.png" title:”AFNetworking图片上传流程”>
看着有点眼花眼花缭乱是吧,没关系,接着往下看,看完这篇文章,你也可以自己封装一套图片上传网络工具类。
目录
基本原理
具体实现
创建NSMutableURLRequest并设置请求方式为POST
自定义HTTPBodyStream
对request进行参数设置
通过NSURLSession的uploadTaskWithStreamedRequest:方法发起Post请求
基本原理首先我们来看一下AF中上传图片的方法长什么样:
123456- ...
【iOS】超简单的思路实现2048游戏
最近在网上下了一个仿2048游戏的Demo,发现里面的实现思路做得比较复杂:将数字块的移动操作封装成模型并保存起来,然后根据操作模型的值对滑块逐块地进行操作,具体的实现方式可以自己下下来感受一下。
然后我分析了一下这个游戏,重新整理了一种更简单的实现思路,大体可以分为三步:
界面布局
数字块操作
按方向把所有数字块分成4组,然后进行排序
查找邻近相同数字块,计算该行(列)合并后的块数
按方向整行(列)同时移动数字块
移动块的同时随机添加数字块
游戏结束重置游戏
实现效果如下:
具体实现##界面布局界面布局是最简单的一步,主要分为三大块:分数栏,游戏背景板和数字块背景,以下是代码:
123456789101112131415161718192021private func setupUI() { let boardWH = SCREEN_WIDTH - boardLeftMargin * 2 let gameBoard = ZYGameBoard(frame: CGRect(x: 0, y: 0, width: boardWH, height: b ...
CAShapeLayer文字动画
文字动画也是CAShapeLayer图形动画的一种,巧妙运用文字动画可以实现很不错的效果,比如半糖app的下拉动画。本文就主要讲一下其实现原理。
文字动画主要分为两部分:
将文字转化为CAShapeLayer
通过更改CAShapeLayer的StrokeEnd属性值生成动画
将文字转换为CAShapeLayer将文字转换为CAShapeLayer的过程比较复杂,可以细分为以下几个步骤:
创建NSAttributedString并生成CTLineRef
使用CTLineRef生成CTRunRef数组
遍历CTRunRef数组,得到每个CTRunRef
遍历CTRunRef中每个长度为1的区间生成CGGlyph并转换为CGPath路径,将所有路径拼接起来
创建ShapeLayer并将生成的路径赋值给该ShapeLayer
以下是每个步骤的实现方式:
创建NSAttributedString并生成CTLineRef123456// 定义字体属性CTFontRef font = CTFontCreateWithName(CFSTR("HelveticaNeue- ...
CAShapeLayer的使用
简介官方文档对CAShapeLayer的定义如下:
A layer that draws a cubic Bezier spline in its coordinate space.
可以理解为CAShapeLayer是其坐标空间内绘有贝塞尔曲线的图层。使用CAShapeLayer可以制作蒙板和图层动画,它继承自CALayer,拥有CALayer的全部属性。CAShapeLayer的依赖于贝塞尔曲线UIBezierPath,它决定的ShapeLayer的形状。
StrokeStart和StrokeEnd是ShapeLayer的重要属性,它控制ShapeLayer的cgPath路径的绘制起点和终点,区间都为0~1,0代表从头绘制,1代表绘制到终点。
目录
ShapeLayer图形动画
ShapeLayer蒙版
本文demo的github地址:https://github.com/zephyrw/ShapeLayerDemo.git
使用ShapeLayer图形动画动画简介使用ShapeLayer制作动画原理是通过改变ShapeLayer的strokeEnd属性值来改变ShapeL ...
正则表达式
以下是对正则表达式学习的一些整理。
头部尾部^ 表示开始 后接字符串 ^one
$ 表示结束 前接字符串 dog$
“banana” 必须包含此字符串
限制个数* 0个或更多个 ab* (a,ab,abbb…)
+ 1个或更多个 ab+ (ab, abbb…)
? 0个或1个 ab? (a, ab)
{4} 4个 ab{4} (abbbb)
{1,} 至少1个 ab{1,} (ab, abbb…)
{3,4} 3个到4个 ab{3,4} (abbb, abbbb)
注:必须有下限,ab{,5}是错误的
或| 表示或 (a|b)e (ae, be)
字符范围[a-z] 所有小写字母
[0-9] 数字
. 任意字符
连续字符\4 连续有4个字符 (.)\4 连续4个相同字符
{1,2} 连续1个或者2个字符 10{1,2} (10,100)
{3,} 连续3个以上字符 0{3,} (000,0000)
不希望出现的字符^ 后接不希望出现的字符 @[^a-zA-Z]@ 两个@之前不能有字母
其他\d 匹配一个数字字 ...