I'm Ricky -- 个人主页

Talk is Cheap, show me the Code. Talk LESS, Code MORE

如何优雅地编写 iOS 第三方库

iOS 经过八年多的发展,已经涌现出诸多优秀的第三方库,但怎样才算是优雅?总体来说,AFNetworking 就十分优雅,而 GPUImage 就只是可用,而不算优雅。编写优雅的第三方库,就像制作一件精美的艺术品一样,过程让人沉醉,结果令人赏心悦目。否则就是单纯的代码堆积与功能实现,过程像搬砖,完成后也没有成就感。下面就本人的一点经验,分享下如何优雅地封装第三方库。

为什么你应该开始使用 Interface Builder

众所周知,用 Xcode 开发 App Watch 应用只能使用 Interface Builder (以下简称 IB),甚至于它的 API 中都没有 -(void)init 接口,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
@interface WKInterfaceButton : WKInterfaceObject

- (void)setTitle:(nullable NSString *)title;
- (void)setAttributedTitle:(nullable NSAttributedString *)attributedTitle;

- (void)setBackgroundColor:(nullable UIColor *)color;
- (void)setBackgroundImage:(nullable UIImage *)image;
- (void)setBackgroundImageData:(nullable NSData *)imageData;
- (void)setBackgroundImageNamed:(nullable NSString *)imageName;

- (void)setEnabled:(BOOL)enabled;

@end

另外,在 Xcode 6 之后,新增了一个很强的特性 IBInspectable,它允许开发者自定义的控件使用 IB 来设置参数。

回顾计算机的发展历程,人类一直在为 WYSIWYG (所见即所得)做着不懈的努力(当然,程序员有时候会逆其道而行之,比如写文档像码代码的 LaTeX),毕竟人是视觉动物。我个人而言是十分崇尚在生产环境中使用 XibStoryBoard 的,而 IBInspectable 的出现更加坚定了继续使用它们的信心,同时也表明的苹果官方的态度,苹果希望开发者们使用 IB

接下来就说明一下 IBInspectable 可以为封装控件带来什么新的启发。

是时候使用 PDF 资源了

一年前我做了这个插件 RTImageAssets,为了解决自己在开发过 程中的一个痛点,这个痛点貌似也恰好是许多其他 iOS 开发者的痛点,那就是要不断地向美术解释如何正确切图。

于是一时间也获得了不少反馈,但这始终只是个临时解决办法。事实上从 Xcode 6 开始就已经支持使用 PDF 矢量图了。现在 iOS 设备越来越多,谁知道以后需要支持什么样的屏幕,而矢量图正是解决这一问题的良策。

UIButton 状态的新理解

UIButton 可能是 iOS 开发中使用的最多的控件之一了,它拥有极高的可定制性,通过合理的设置可以满足大部分点击响应的需求。一般认为,一个 UIButton 有四种状态,即:

  • 正常(Normal)
  • 高亮(Highlighted)
  • 选中(Selected)
  • 禁止(Disabled)

但在实际项目中发现,当用户点在一个选中态的按钮上时,按钮显示的是正常状的样式,这是为什么呢?

Gulp + Bower + AngularJS 进行 Web 开发并使用 Coding.net 搭建在线演示最佳实践

前言

随着 Coding 的迅速发展,它为国内开放者提供了越来越多的便利,其中之一便是免费、一键搭建在线演示站点。它能够自动检测项目所用的语言及运行环境,大多数情况下无需过多配置即可启动演示。本文就如何利用 Coding 提高 Web 开发者效率给出一个最佳实践。

项目初始化

本文假设读者已经具备 GulpBower 的基本知识。

首先,新建一个空目录为作您的工作目录,如:testProject。

如何生成分级的类别列表?

分类问题

最近在做一个网页时,有这样一个需求,事实上很多电商之类的网站都有这样的需求:分类。然而这种分类又可以有无穷多子类,如:

1
2
3
4
5
6
7
8
9
10
11
12
  |`- 自然科学
  |      |`- 物理
  |      |      |`- 经典物理
  |      |       `- 量子物理
  |       `- 数学
   `- 小说
         |`- 都市爱情
          `- 乡村爱情
唱片
  |`- 爵士
   `- 摇滚

自动生成低清图的 Xcode 插件

前言

随着 iPhone 6 Plus 等的发布,在普通消费者眼中,又要少两个肾,在 iOS 开发者眼中,又有两款新屏幕需要支持了。新的 iPhone 6 Plus 拥有一块 5.5 英寸的视网膜屏,分辨率为 1080x1920PPI 为 401,在程序中表现为 3x,即,对于一张代码中指定的 100x100 的图片,实际需要 300*300 的图片填充才不会产生模糊。为此开发者们及美术们又要伤不少脑筋了,开发者需要一遍又一遍地向美术解释,每张图需要切三份,每份应该怎么样。有时候少切了,或者不满足要求,程序员还得自己动手缩放。

程序员总是懒的,于是我做了一个 Xcode 插件来完成此事:RTImageAssets

Xcode 6 默认不再构建 Armv7s 指令集的代码

原文 Xcode 6 drops armv7s

最新的 Xcode 默认已经不再为 armv7s 构建可执行代码了,这到底是计划之中还是一时疏忽?

当前最新版 Xcode 6 已经将 ${ARCHS_STANDARD} 定义为 armv7arm64 了,同时当你更新 Xcode 时它会不断提醒你删除你自己的定义,让 Xcode 帮你做决定。而在你不堪骚扰按它的做之后,你会发现你的项目不再构建 armv7s 的代码了。

armv7s 的指令集运行于 Apple A6 (iPhone 5)和 Apple A6X (iPad 4)CPU 上。接下来的 Apple A7 (iPhone 5S,iPad Air,iPad Mini Retina)已经使用了 64 位的 arm64 架构。

XCode 中如何自动增长 Build 号

iTunes Connect 新步骤

随着 iOS8 的推出,苹果 itunes connect 中上传新应用多了一个新步骤:测试。

几个月前听闻 Apple 收购 TestFlight,但一直没有看到任何变化,如今 TestFlight 已经集成到新应用的发布 、审核过程中了。打开 iTunesConnect,可以看到在 Versions 旁边新 增了一个 Prerelease 标签页。原先通过 XCode 上传的应用会直接进入苹果的审核队列中,现在它会先出现 在这里,这里其实就是一个 TestFlight 的功能,你可以在 Users and Roles 中增加测试人员的 Apple ID, 然后在 Prerelease 下的 Internal Testers 中可以看到。每上传一个新的 Build,苹果会自动发邮件给 测试人员,测试人号点开邮件中的链接,在 Safari 中打开,然后 Safari 会打开设备上的 Test Flight, 开始自动下载应用进行测试。