Git-Flow 工作流程
Feature
Start a new feature
Finish up a feature
Publish a feature
Get a published feature
Track a feature on origin
Release
Start a release
Publish a release
Finish up a release
Don’t forget to push your tags
Hotfixes
Start a hotfix
Finish a hotfix
Umeng 劫持 NSSetUncaughtExceptionHandler()
APP 工程中使用了友盟统计信息,导致自己通过NSSetUncaughtExceptionHandler收集崩溃信息失败。
自定义收集崩溃信息
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
如上,通过NSSetUncaughtExceptionHandler(),参数传入函数地址。当异常发生时,就会将异常信息保存到本地(当然也可发送给后台或者发邮件)。
问题重现
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
上面的代码相当于有两个收集崩溃信息的地方 MLUncaughtExceptionHandler() 和 WMUncaughtExceptionHandler() ,但是当运行程序的时候回发现 MLUncaughtExceptionHandler() 不会收集到任何信息。因为 NSSetUncaughtExceptionHandler() 传入了两次函数地址,第一次函数的地址被替换掉了。
解决方案
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
将之前对exception处理的handle进行保存,下一次处理的时候,重新调用之前的handle,将异常抛出给他们。
Umeng 劫持 Exception 问题
Umeng 应该也是用了上述方式对异常进行的处理,但是并没有将异常进行抛出,所以,当工程中使用了Umeng进行异常统计的时候,我们自己写的异常捕获有可能会失效。如果写在Umeng统计之前就会被Umeng替换掉,异常就无法捕捉。 但是,如果写在Umeng之后,就会造成Umeng统计失效(这个没有去验证)。所以我们就需要使用上面的方式进行处理。1
2
3
4
5static NSUncaughtExceptionHandler *_umengHandler;
// 将Umeng异常处理保存
_umengHandler = NSGetUncaughtExceptionHandler();
// 设置自己处理 (UncaughtExceptionHandlerYourself 是你自己处理异常的函数)
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandlerYourself);
如上,首先保存Umeng的handler UncaughtExceptionHandlerYourself 使我们自己处理异常的handler,然后在自己处理完异常之后,调用一下之前保存的Umeng的handler1
_umengHandler(exception);
· 参考文档 ·
iOS友盟和其他崩溃收集库共存时的冲突问题
Git 札记
Git 常用命令
推送一个本地新建分支到远端
某些时候,我们为了开发某个需求,于是乎就新建了一个分支,但是这个分支是在本地的。当开发完这个需求后,其他需求没有完成,这个分支需要等待,这时候放在本地不太安全,万一明天来了电脑死球了呢,所以最保险的办法是将这个分支推送到远端,而此时远端并没有这个分支。(还有一种情况,你为了开发一个新的需求,本地新建了一个分支,而在开发期间发现别人需要在你的分支上继续开发,所以你必须把这个本地分支推送到远端),废话不多说,命令如下:
1 |
|
如上,在当前分支上运行 git push 命令,加上后面的参数, v2.4.3 就是当前的分支名字。
特殊技巧1
2
3
4
5
6
v2.4.3$ git push
fatal: The current branch v2.4.3 has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin v2.4.3
什么意思呢? git 是一个强大的交互工具,如果你忘记了这些个参数,那么直接输入 git push git 就会告诉你应该怎么做的。这里需要注意,git push 操作会影响远端,所以,粗心的我们在进行这些操作的时候一定要注意,万分谨慎,你必须要知道你要干嘛以及你干了什么事,切记切记。
获取一个本地没有的远程分支
- git branch 查看本地分支;
git branch -a 查看本地分支和远程分支
1
2
3
4
5
6
7
8
9v2.4.3$ git branch -a
242
master
* v2.4.3
remotes/origin/242
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/segment
remotes/origin/v2.4.3git checkout -b 本地分支名字 origin/远程分子名字
1
2
3
4
5
6
7
8v2.4.3 $ git checkout -b segment origin/segment
Branch segment set up to track remote branch segment from origin.
Switched to a new branch 'segment'
segment$ git branch
242
master
* segment
v2.4.3
为本地 Git 添加远程 Git 地址
开发 IDE
记录 IDE 使用方式以及配置,以备不时之需
Vim
EMACS
安装 Emacs
1 | brew install emacs --with-cocoa |
Xcode
Visual Studio Code
Sublime
Atom
在使用Atom之前,已经使用了一段时间的 sublime,这两款 IDE 功能很相似的,但是我倾向于 Atom,可能是因为 Atom 名字靠前吧!如果这么类比的话,vim VS. Emacx ,我会选择使用 Emacs,哈哈,什么毛病啊!
Atom 是 GitHub 推出的一款编辑软件
MWeb
Markdown 的写作工具,之前用过其他的,但是最终还是选择了这个,这篇博客就是用它写的。
极光开发汇总
开发了几款应用之后,大多数都用到了极光的推送,这里记录下极光的资源:
文档
极光官方文档, 这个文档里包含了
- 推送
- 统计
- IM
- 短信
- 分享
文档很全了已经
极光开发者(GitHub)
极光开发者,极光的 GitHub 里面有各种版本的 demo,算是个百宝箱吧!
集成经验
最好知道你在做什么,要达到什么效果。在集成推送的时候,遇到了好多人问我,这个怎么不起作用,这个怎么了啊 … 其实,使用别人的东西的时候一定要知道用了什么达到什么效果,否则的话真的是盲人摸象。
iOS 推送集成
- 注册极光开发者
- 创建应用
- 配置应用的证书
- 到 apple 开发者那里生成证书,主要是生成 xxx.cer 然后下载到本地,导出 pl2 文件上传到极光上去
- 创建 demo,建议通过 CocoaPods 集成,根据文档添加代码
- 在极光后台测试推送(需要demo的 register id)
Git 上获取部分文件
背景
最近在开发的时候,遇到这么一种情况,公司的设计同事将 UI 设计稿放到了 git 上,但是这个 git 库已经 5+ G了。我为了看某一个版本的 UI 设计稿,要把所有的设计稿都拽下来,之前自己的本本硬盘比较足,还是不在乎的,最近换了个 256 的Mini,我卡,不行,不能拽一些没用的下来,so … 我需要一种技能 —— git pull 的时候,每次只拉去 Git 仓库中的某个文件夹。
一言蔽之
从远程 Git 仓库获取某个目录下的内容。
操作
创建本地Git仓库目录
1 | $mkdir myGit_folder |
如上所示,如果在你当前目录下看到了隐藏 .git 目录就证明OK了。
添加远程 Git 仓库地址
1 | $git remote add -f origin < your git url,like: http://youaresogreat:3000/lawyer/ui.git > |
如果 url = http://youaresogreat:3000/lawyer/ui.git 这一行添加到了 .git/config 文件中,就证明OK了。
开启 Git 仓库 Sparse Checkout 模式
1 | $git config core.sparsecheckout true |
命令执行前:1
2
3
4
5
6
7
8
9
10
11#.git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = http://youaresogreat:3000/lawyer/ui.git
fetch = +refs/heads/*:refs/remotes/origin/*
命令执行后:1
2
3
4
5
6
7
8
9
10
11
12#.git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
sparseCheckout = true
[remote "origin"]
url = http://youaresogreat:3000/lawyer/ui.git
fetch = +refs/heads/*:refs/remotes/origin/*
如果 sparseCheckout = true 这一行添加到了 .git/config目录下,就说明OK了。
进入到 .git/info/ 配置要获取的文件夹路径
1 | $cd .git/info |
这里是在 sparse-checkout 文件中设置你要获取的文件夹目录 - /ui/HTML/2.4.0
拉取远程目录内容
1 | git pull origin master |
快速操作步骤:
这是对上面罗里吧嗦的步骤的总汇1
2
3
4
5
6
7
8
9
10
11
12$md myGit
$cd myGit
$(myGit/) git init
$(myGit/) git remote add -f origin (your git url)
$(myGit/) git config core.sparsecheckout true
$(myGit/) cd .git/info
$(myGit/.git/info) vim sparse-checkout
/one/two/three/mywantFileDir/
:wq
$(myGit/.git/info) cd ...
$(myGit/) git pull origin master
...
后记:本质就是开启git的 sparse checkout 模式,在 .git/config/sparse-checkout 文件中配置要拉取的文件夹路径。
思考:
通过写一个脚本让操作更加简单 … …
Mac 修改文件编码
Mac 修改文件编码
最近,在使用 mac iterm 中的vim查看文件的时候,出现了乱码现象。
解决 vim 查看文件乱码
1 | vim ~/.vimrc |
enca 编码转换
查看文件编码:
1
$file FileName
安装工具
1
$sudo brew intsll enca
查看当前文件编码
1
enca -L zh_CN fileName
转换
1
2
3
4
5$enca -L zh_CN -x utf-8 * #将当前目录下所有的文件都转换为 utf-8 编码
$enca -L zh_CN -x UTF-8 fileName # 将名字为 fileName 的文件转换为 utf-8 编码
$enca -L zh_CN -x UTF-8 <fileName1> fileName2 # 不想覆盖源文件