使用 sed 匹配和替换字符串
sed 可以方便的进行批量替换文件中字符串操作
1 | sed "s/ww2/ws3/g" *.m |
以上命令就是将当前目录下所有 .m 文件中的 ww2 替换为 ws3,并打印出来。
sed 中 如果需要覆盖当前文件,可以加上 -i 参数
例如:
1 | sed -i "s/ww2/ws3/g" *.m |
sed 可以方便的进行批量替换文件中字符串操作
1 | sed "s/ww2/ws3/g" *.m |
以上命令就是将当前目录下所有 .m 文件中的 ww2 替换为 ws3,并打印出来。
sed 中 如果需要覆盖当前文件,可以加上 -i 参数
例如:
1 | sed -i "s/ww2/ws3/g" *.m |
Jenkins 中想对某次构建中的 Git 的日志进行过滤后使用,首先需要拿到上次构建成功的 Git HASH 值,Jenkins 提供了这样的一条链接,可以拿到上次构建成功时的一些信息:
1 | http://<host>/job/<job_name>/lastSuccessfulBuild/api/xml |
可以使用 curl 拿到 XML 文件的内容:
1 | curl --silent --user $USER:$API_TOKEN $URL | grep "<lastBuiltRevision>" | sed 's|.*<lastBuiltRevision>.*<SHA1>\(.*\)</SHA1>.*<branch>.*|\1|' |
在 UI 开发中,时不时需要把几个按钮或者 UILabel 并排着排列,在以前用坐标系布局时都是靠算,很麻烦还容易出错,现在 Autolayout 这么方便,能不能使用 Autolayout 完成这个布局工作呢?试试看。
Autolayout 的布局规则是写 View 与 View 间的相对关系,我们来分析一下,如果要使 3 个 View 在一个容器 View 中均分需要满足哪些条件。
之前写了一篇 持续集成那点事 其中后半部分只讲了下简单的安装步骤,后来我又在另一台电脑上安装的时候,又遇到了几个坑,这里记录一下,供可能遇到同样情况的人参考。
注:下文中以安装 Jenkins LTS 2.7.2 为例
Jenkins 的安装方式有几种:
其中使用 pkg 安装虽然是一键,但是比较坑的是安装在 Shared 用户下,这样的话很多本机的配置如 SSH key 等会有一些权限问题,环境变量使用也不是很方便,一些配置需要在 Shared 用户上单独配置,好处是干净,但是 Xcode 已经是在当前用户下了,Shared 用户的配置只能干净一部分吧,干脆点,安装在当前用户,不用 Shared 用户了。这样很多配置是不用在 Jenkins 中配置的,如上方所详的 SSH key,以及各种环境变量都是在当前用户下,配置好后在 Jenkins 中不需要再配置。
iOS 设备的尺寸正在变的越来越多,在 iOS App 开发初期,只需要处理 3.5 寸 屏幕的布局,那个时候使用 frame 布局是唯一的方式,后来多了 4 寸屏幕 和 iPad 的 9.7 寸,iPad 上的 App 界面一般单独开始,写死坐标问题依旧可行,到再后来,iPad mini (7.9 寸),iPhone 6(4.7 寸),iPhone 6 plus(5.5 寸)紧跟着出现,写死坐标的布局方式的弊端开始显现,在多种尺寸上如何布局成了问题,这个时候苹果在 iOS 6 的时候推出的 Autolyout 布局方式变的流行,相对于写死坐标的布局方式,Autulayout 通过定义控件与控件之间的相对位置约束,在运行时根据不同的屏幕尺寸,得到不同的布局,更加灵活,可以更好的适应多种尺寸的设备。写一套约束,可以不同尺寸的设备上达到不同的布局效果,何乐而不为呢。
开发中,我们经常遇到一些奇怪的问题,比如本地可以编译成功的代码但是同事们更新代码后编译出错,或者在项目有多个 Target 的时候,资源文件只添加到了当前的 Target,另外一个 Target 这个时候是不能正常编译的,再比如写的工具类,被同事改了,或者自己有改动,很多地方用到了,怎么保证这个类的行为没有发生变化而影响到项目中的其他模块呢?诸如此类。
那么这些问题原因在哪,可不可以避免呢?当然是可以避免的,如果代码有新的改动,提交到版本库中的时候,有一个人帮我们检查必要事项,然后做做测试不就好了,这个当然是可以的,前提是老板同意专门招一个这样的人。
引起各种奇怪问题的原因有很多,比如开发环境比较复杂,不干净,IDE 的 bug (Xcode 的各种奇怪表现就是一个很大的坑),提交前有一些必要的检查需要做,但是开发的时候因为各种原因没做,这些机械重复的事情我们可以找一个工具来帮我们完成,而且这个工具跑在一个专门的服务器上,该服务器的环境相对干净,可以运行一些自动化的操作,如自动编译,代码检查,测试等环节,那么这种东西,就是接下来讲的「持续集成」。
iOS 开发中我们经常用 CocoaPods 来安装第三方库,CocoaPods 可以帮助我们处理依赖,管理版本等等,还是挺方便的,如果我们公司内部有一个比较独立的组件,不想开源但是又想用 CocoaPods 来管理,可不可以呢?当然是可以的,CocoaPods 也提供了比较好的支持,可以自定义源,这样只要我们把 Pods 源和组件的源代码的权限放到私有的空间里,其他和公开仓库的作法是类似的。下面就简单说一下怎么创建私有的 CocoaPods 仓库。
今天使用 RAC 注册通知时,遇到一个不是很明显的 retain cycle 问题,使用场景是在一个 ViewController 中注册一个通知,代码如下:
1 | - (void)viewDidLoad { |
用 Markdown 写博客经常需要上传图片,最开始的时候用微博图床 Chrome 插件,如果需要上传图片,需要截图或者复制文件,打开 Chrome,找到插件,打开插件,粘贴,得到 URL,在 Markdown 编辑器中插入,步骤烦琐,大部分需要鼠标操作,效率低。后来发现了一个 Alfred Workflow,markdown-img-upload,这个 workflow 可以读取剪切板中的图片并上传到七牛,得到 URL 后复制,整个上传过程精简了许多,但是有一个问题,如果用自己的域名,需要备案,如果用七牛提供的测试域名,哪天不提供了,或者换了咋办,服务稳定性(这里指域名)是个问题。昨天又发现了一个图床服务,天喵是个好图床,用的是天猫的资源,有 Alfred workflow,需要激活 File Action 才可以上传,另外,不知道天猫的接口,上传图片要经过这个网站,倒闭了怎么办。综上,三个服务的优缺点如以下图表: