ReactiveCocoa 是一个符合 FRP(Functional Reactive Programming)范式的,操作和转换数据流的框架。
它可以解决三个问题:
- 开发过程中关于界面的状态信息太多,不易维护。
- 统一各种消息传递的方式。
- 绑定功能可以配合 MVVM 使用。
ReactiveCocoa 是一个符合 FRP(Functional Reactive Programming)范式的,操作和转换数据流的框架。
它可以解决三个问题:
I’m dating with a model… and a view, and a controller.
众所周知,MVC 是开发客户端最经典的设计模式,iOS 开发也不例外,但是 MVC 有让人无法忽视的严重问题。
目前 iOS 上的动态更新方案主要有以下 4 种:
前面三种都是通过在应用内搭建一个运行环境来实现动态更新(HTML 5 是原生支持),在用户体验、与系统交互上有一定的限制,对开发者的要求也更高(至少得熟悉 lua 或者 js)。
使用 framework 的方式来更新可以不依赖第三方库,使用原生的 OC/Swift 来开发,体验更好,开发成本也更低。
由于 Apple 不希望开发者绕过 App Store 来更新 app,因此只有对于不需要上架的应用,才能以 framework 的方式实现 app 的更新。
1 | self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; |
1 | [containerView layoutIfNeeded]; // Ensures that all pending layout operations have been completed |
Apple 近几年来推出了各种屏幕尺寸的 iPhone、iPad,以前只在 Android 上存在的不同屏幕尺寸的 UI 适配问题在 iOS 上也日益突出。为了解决这个问题,Apple 为开发者提供了 AutoLayout。区别于以往的手动计算 frame 的方式,AutoLayout 让开发者只需要通过设置约束(constraints)来描述需要什么样的布局,而不是如何进行布局。约束是用来描述一个 view 的布局条件或者两个 view 之间布局关系的对象。通过这种方式有效地减少了适配不同屏幕尺寸的工作量。
本文介绍的是如何处理 Xcode 无法自动 Symbolicate 的 Crash log。
如果你得到这样的 Crash log,你一定想知道其中的 0x4a000 + 37204
究竟对应哪个方法调用。
1 | 0 CoreFoundation 0x2dc73f7e __exceptionPreprocess + 126 |
Protocol Buffers 是 Google 出品的用来序列化/反序列化数据的工具。原生支持 C++、Java、Python。
如果要在 iOS 上使用 PB,可以直接使用 C++,但是编译过程很麻烦,因此这里使用的是第三方的库。
1 | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
1 | brew install automake |
对 app 进行代码签名可让用户确信它来自已知来源,且自最后一次签名之后未被修改。在您的 Mac app 或 iOS app 可以使用商店服务,安装到 iOS 设备上进行开发或测试,或者提交到 App Store 之前,必须先使用 Apple 颁布的证书对其进行签名。
在 OS X 的安全性与隐私
的设置里有一项设置是允许从以下位置下载的应用程序
,默认的设置是Mac App Store 和被认可的开发者
。
也就是说在用户不手动修改设置的情况下,用户无法打开未签名的程序。
下面就来介绍如何使用 Developer ID 为 app 签名。
注意:本文不适用于发布到 Mac App Store 的签名。