我的GitHub
0%

常用三方库

一. 如何引入三方库

上次分享我们讲到我们使用npm或者yarn进行管理

我们建议使用yarn进行管理,原因上节课也说过了,有下面几点

1
2
3
4
5
1.Yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 ,我们写的RN是Facebook开源的,我们当然要用匹配的东西
2.npm很慢,因为是安装完一个package再安装下一个;yarn是并行安装,并且会生成离线库,安装过的库第二次安装都是从缓存的离线库读取,速度很快
3.yarn安装版本统一.存在yarn.lock文件去管理每个库的版本统一
4.yarn能对多注册来源进行处理:所有的依赖包,不管他被不同的库间接关联引用多少次,安装这个包时,只会从一个注册来源去装,要么是 npm 要么是 bower, 防止出现混乱不一致。
5.…………

1.常用命令符

1
2
3
4
5
6
7
8
9
#xxxx代表库名
#1.安装package.json中已经存在的库
yarn
#2.新增一个库
yarn add xxxx
#3.新增一个库到开发依赖
yarn add xxxx --dev
#4.移除一个库
yarn remove xxxx

附赠一个yarn的中文社区文档

二.常用三方库列表

三方库名称 描述
react-navigation 是RN上较为优秀的路由管理库,几乎可以说是项目必备的路由管理框架
moment 一个前端应该非常熟悉的时间库,用于前端的时间解析之类的
ESLint 一个前端应该非常熟悉格式规范库,用于规范代码编写
mobx 一个状态管理库,用于应用内部状态的统一管理
阅读全文 »

我们使用的是3.x版本,需要做如下操作

一.引入react-navigation

1
yarn add react-navigation

如图
如图,我们发现有很多warn,报的是一些依赖没满足,一般我们说程序员不看warn,肯定就直接运行了.

但是作为过来人,告诉你肯定会报错,缺少这个warn当中的一个库react-native-gesture-handler所以也别走弯路,把这些库都给加上

1
2
3
4
5
6
7
8
9
#这是一个手势库
yarn add react-native-gesture-handler
#我也不知道用来干嘛的库,大概是一些屏幕设计吧,这是它的github:https://github.com/browniefed/react-native-screens
yarn add react-native-screens

#react-native-gesture-handler又依赖如下库
yarn add react-art
yarn add react-dom
yarn add react-native-web

全都装完以后,link一下项目

1
react-native link

link警告

这里注意了,在0.59中已经提到,不建议这样做,后续会移除这个命令,必须带上包名link才行

阅读全文 »

背景

突然很想学swift…不怕死的我在完全没用过的情况下决定通过重构公司的古老项目来完成这段学习之旅….
model转json或者json转model是很常见的需求….所以这就是为什么我要用ObjectMapper了…(其实是我把# SwiftyJSON
的star数错了..我可能会趁用的还不多改成SwiftyJSON,毕竟ObjectMapper实在查不到什么资料不是吗…)

使用

初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import UIKit
import ObjectMapper

class BaseModel: Mappable {
//定义属性
var name : String? = "wuxing"
init() {
//为什么要写这个init,原因很简单,总有些时候你仅仅想初始化一个model,而非通过外部传入数据初始化
}

required init?(map: Map) {
//重写ObjectMapper的init
}

func mapping(map: Map) {
//转换规则
name <- map["name"]
}
}

如图,基本已经写得很清楚了emm

规则转换

有些时候,有的值是int或者bool,你会发现死活转换不出来…这时候就要自己写转换规则了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

import UIKit
import ObjectMapper

class BaseModel: Mappable {
var man : Bool? = true

var age : Int? = 21
init() {
}

required init?(map: Map) {
print("BaseModel初始化")
}

func mapping(map: Map) {
man <- (map["man"],transformBool)

age <- (map["age"],transformInt)
}


// 转换规则


let transformInt = TransformOf<Int, String>(fromJSON: { (value: String?) -> Int? in
if let value = value {
return Int(value)!
}
return nil
}, toJSON: { (value: Int?) -> String? in
// transform value from Int? to String?
if let value = value {
return String(value)
}
return nil
})

let transformBool = TransformOf<Bool, String>(fromJSON: { (value: String?) -> Bool? in
if let value = value {
return (value as NSString).boolValue
}
return false
}, toJSON: { (value: Bool?) -> String? in
if let value = value {
return String(value)
}
return "false"
})


}

就这样,就能转换了.

阅读全文 »

多话8说,我就记录一个聊天记录,有空了一一证实一下

##问:NSKeyedArchiver存的是什么?二进制吗?
###答:嗯


##问:NSKeyedArchiver存在哪?沙盒还是内存
###答:沙盒


##问:NSFileManager和NSKeyedArchiver 是什么关系
###答:NSFileManager是操作文件的,和NSkeyedArchiver没太大关系


##问:所以使用NSFileManager操作文件并不一定会走归档解档对吗
###答:是的,就好比你是人,你需要吃饭,但是你和饭是不同的


##问:NSKeyedArchiver归档的文件路径可指定吗?
###答:可以的,方法都提供了路径


##问:NSUserDefaults这个呢,存在内存?
###答:NSUserDefaults也是沙盒


##问:那它和NSFileManager区别在哪
###答:NSFileManager就是操作文件的,和他么有任何关系.如果你说NSKeyedArchiver和它有什么差别,一个序列化了,一个没序列化

没了

阅读全文 »

1.创建git仓库

本项目由于属于商业项目,不开源,因此使用framework方式上传。

创建完毕以后,拉到本地

2.创建trunk账号

1
pod trunk register 邮箱地址 ‘用户名’ --verbose

这里我用了自己的账号

1
pod trunk register 329106954@qq.com 无星 --verbose

需要去邮箱验证链接

完成以后

阅读全文 »

写在前面

菜鸡,半个iOS开发,js了解不深入,见解不一定正确,有错指出,意会一下这个意思就行了,大牛就没必要看了、、、

背景

以下所有是基于mac的,Windows老哥只能参考着看了

cmd = ctrl , option = alt

一、环境安装

其实官方的环境安装教程很简单,但也不排除有老哥看不懂,所以还是再赘述一下,下面是mac的傻瓜式环境安装教程(安装好了的不用看,windows老哥挑着看)

打开终端,我们开始了

1.开启任意来源

1
sudo spctl --master-disable
阅读全文 »

这篇是写给原生老哥们看的,毕竟如果是做js的老哥肯定是不用说了。。。

背景:大家代码写的格式都不一样,希望统一起来,所以引入ESLint

这东西是啥应该不用我多说,至于怎么引入,说实话,看了官网教程,也看了各种博客,反正最后我是搞得一团糟。。。。万幸最后引入还是成功了。

我是打算每个项目的标准都不同(因为有的是rn,有的是h5),所以我都是局部引入,没有全局引入。所以我接下来说的都是局部引入,会让你卸掉全局的,想全局引入的同学自己注意一小下,有些步骤就不要照做了。 目前airbnb的标准是最受推崇的,我就引入它了

环境和工具:Mac,webstrom,npm,yarn

一、检查本地是否全局安装过相关的包

打开终端

1
2
npm ls -g --depth 0
复制代码

看看全局是否安装过ESLint相关的包,如果有,卸载掉。

二、进入项目根目录

阅读全文 »

背景:相信经常有这种情况,后端定义好了接口文档,但是还没开发,这时候前端或者客户端就无法进行联调,只能通过自己伪造数据进行开发。

###伪造数据这个过程,就叫做mock
但是总是因为各种各样的情况,不能总拿死数据来开发,需要一些随机数据,这样才能更好的覆盖整个用例的可能性
mock的方法其实很多:
本地写死返回值,抓包工具断点篡改返回值,本地结果替换等等。
这次介绍的是使用mock这个开源项目进行随机返回值的替换
###Mock.js虽然名字是js,不过可不限于前端哟
###部署的方式很多,比如部署专门的服务器,或者本地部署等等
但是我比较菜,也比较懒,我就直接用别人部署好的服务器进行使用,其他的部署方式就需要各位老哥自行学习了。

先介绍一个网站
###Easy Mock

登录进去以后,创建你的第一个项目
mock首页
初始化的填写
创建完毕以后就会有一个项目出现在你的首页了,点击该项目

例如我这里创建了一个wx项目,点进去就可以看到
配置

正常在开发过程中,肯定是有正式环境、开发环境这种区分的,除了域名不一样,后面的接口拼接都是一样的,在这里也是一样的。只需要将你某个环境下的域名或者ip替换成图中的baseURL即可,至于怎么替换,在接下来会讲到。

###我们举个例子来理解一下。
我们的域名为:http://www.baidu.com
有一个获取版本号的接口为:http://www.baidu.com/common/version/ios
还有一个获取helloworld的接口为:http://www.baidu.com/helloworld
可以看到,所有的请求的baseurl都是http://www.baidu.com,接口只是在后面拼接。我们先到easymock上建立获取版本号的接口。

####点击创建接口
如图
具体的返回值的语法规则这里就不说了,直接在官网能查到,没有写的必要
语法规范
这样我们就得到了一个mock接口
###接下来就是替换域名的操作了
我们需要用到的工具是Charles
因为Charles可以对子集全部代理,所以这里我们选择charles,当然,如果你可以配置node服务进行跨域也是ok的,方式有多种,目的都是一个,替换baseURL
Charles配置

image.png
通配符
注意需要使用通配符,至于啥叫通配符就百度一下吧~~
ok,至此,Charles配置完毕,让我们看看效果。
网络请求
如图,我写了一个网络请求,地址是http://www.baidu.com/common/version/ios
在抓包中得到了什么呢
地址被替换成了mock地址

###结束语
其实很简单,不过各位该锤后台的还是要锤,毕竟前台后台,相爱相杀,hhhh

阅读全文 »

没有用过其他推送,不过应该都是大同小异的,可以参考参考。
应该有不少老哥接了推送,都存在这么一种情况。推送平台只能放一个P12,肯定要放生产的,那我开发怎么测?难道真的要打包上架去TestFlight再测?那这个风险和耗时有点太大了。

###Xcode手动管理证书要是不会配置记得用自动证书管理
###其实我们只要转变一下思路就好了。创建一个测试应用即可。(读懂了这句话的老哥就不用继续往下看了)
不过如果你要是想给特定用户推送不知道怎么做的话,推荐看:
个推-iOS特定人群推送
####准备好推送证书的p12文件
推送证书的申请乱七八糟我就不说了,网上图文教程一大堆。
接下来,推送证书分两份,这个应该也不用多说了,如果这个都不知道的开发者那就有点不太称职了。。。
钥匙串截图
导出P12文件并设置密码(怎么导出也不多说了)
这时候我们得到了两份推送证书的P12文件,一份开发环境一份生产环境。
####打开个推官网
个推官网
放开发环境的p12
剩下的和正式环境的推送一模一样了。

阅读全文 »