Architectures 与 Valid Architectures 在 Xcode 中的设置

关于这几个设置项,先看官方说明:

  1. Architecture:
    Space-separated list of identifiers. Specifies the architectures (ABIs, processor models) to which the binary is targeted. When this build setting specifies more than one architecture, the generated binary may contain object code for each of the specified architectures.

  2. Vaild Architecture:
    Space-separated list of identifiers. Specifies the architectures for which the binary may be built. During the build, this list is intersected with the value of ARCHS build setting; the resulting list specifies the architectures the binary can run on. If the resulting architecture list is empty, the target generates no binary.

  3. Build Active Architecture Only:
    Boolean value. Specifies whether the product includes only object code for the native architecture.

Read on →

在OpenWRT上搭建ssh代理

首先为何要用ssh代理,而不是ShadowSocks或VPN:GFW会针对ShadowSocks或各种VPN协议做解析,却不一定有勇气禁止全部ssh连接(国家曾经有次物理断开到国外的全部网络连接造成了巨大经济损失)。

前段时间开发了SSHMole,用作OS X上的ssh代理客户端。然而MAC给iPhone开ssh代理,或在iPhone上直接开ssh代理还是很麻烦的。所以在家里路由器上开了个ssh -D。

0. 首先要有一台VPS

没有的话到vpsadd买一台。

1. OpenWRT上安装ssh-client, openssh-keygen

登录到OpenWRT,移除ssh到dropbear的软连接

1
2
mv ssh dropbear-ssh
mv scp dropbear-scp
Read on →

安装指定版本的CocoaPods

在同事机器上,pod 工作的很正常,到了我的机器上,就 link error,原因是他的 pod 自动生成的.a 和我的 pod 自动生成的 .a 带的前缀不一样。

Read on →

WWDC 2015 带来的新玩法

WWDC 2015 更新了五大产品线:OS X EI,iOS 9,watchOS 2,Xcode 7,Swift 2.

1. OS X EI

Metal APIs

Metal是一个开销极低的一种访问 GPU 的框架。
Metal framework 提供了 GPU 加速的先进的3D渲染和数据并行计算能力。
Metal 提供了流水线式的 API(streamlined API),预编译着色器(precompiled shaders),以及高性能的多线程支持。这些 features 可以帮助你把你的游戏或 app 的性能提升一个档次。
Metal 最主要的目标是把一部分的CPU 工作交给 GPU 做。

相关资源:
Metal Home Page
Metal Programming Guide
Metal Shading Language Guide
Metal Framework Reference

Read on →

OSX各种实现毛玻璃效果窗口的方式与比较

毛玻璃窗体是10.10中新增的效果. 比如Finder的左边栏.
本文只对10.8, 10.9, 10.10三个版本进行讨论. 我的App未对10.6和10.7做任何支持, 此处也不予讨论.

第一种方式: NSVisualEffectView

这是10.10中新开放的API, 只能在10.10的runtime上使用.
如果需要上架App Store, 这也是在10.10上完成毛玻璃效果的唯一方式.
首先为NSView增加扩展:

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
@interface NSView (Vibrancy)

//Returns NSVisualEffectView
- (instancetype)insertVibrancyViewBlendingMode:(NSVisualEffectBlendingMode)mode;

@end

@implementation NSView (Vibrancy)

- (instancetype)insertVibrancyViewBlendingMode:(NSVisualEffectBlendingMode)mode
{
    Class vibrantClass=NSClassFromString(@"NSVisualEffectView");
    if (vibrantClass)
    {
        NSVisualEffectView *vibrant=[[vibrantClass alloc] initWithFrame:self.bounds];
        [vibrant setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
        [vibrant setBlendingMode:mode];
        [self addSubview:vibrant positioned:NSWindowBelow relativeTo:nil];

        return vibrant;
    }
    return nil;
}

@end
Read on →

如何优雅的使用60%键盘—-在所有App中使用Control+P、N、B、F代替上下左右

最近新宠是各种GH60,都没有独立方向键,按FN组合键是非常远的,刷固件修改按键也颇为不便,用软件修改就方便多了。
经常有软件不支持Control+P、N、B、F做上下左右操作,于是想到直接把Control+P、N、B、F改为上下左右。

OSX上可以用Karabiner自定义按键,可定制程度非常高,其前身是Keymap4MacBook,已开源在https://github.com/tekezo/Karabiner

首先从官网下载一个最新版并安装好。我需要将将control+P、N、B、F修改为上下左右,在预置中找不到相应设置。直接在Misc & Uninstall页面点击Open private.xml,修改这个配置文件可以完成各种高度可定制化改键。

Read on →

HHKB布局的GH60

很喜欢HHKB的键位,但是静电容的手感不是太喜欢,type-s一直在吃灰。于是萌生了做一把HHKB布局的GH60的想法。
GH60富有富玩法,穷有穷玩法,这次是最穷的玩法。200块钱的洋垃圾键帽,60块钱的poker2外壳,改好弹簧的内胆400块钱,35块钱的屏蔽滑块,总共700搞定。

Read on →

热熔胶修改键帽菊花

最近很流行复古灰白色键帽,流行到几乎每把客制化键盘都要用,好像不用复古灰白色就不是客制化一样。
通常来说选择有以下几种:
1. 较高档的进口键帽比如GMK要上千而且不一定能买到,逼格是非常高的;
2. 其次是原厂洋垃圾拆机热升华灰白套、二色灰白套键帽,一套要700左右,逼格也是非常高的;
3. 更便宜的是G80拆机薄的pbt键帽,菊花大部分兼容现代键盘,一套要200左右,逼格还算说的过去;
4. 再便宜的是太豪二色,复古色140搞定,带7键增补(7x空格、1.75x shift、阶梯capslock)一般键盘都能用,但是逼格太低;
5. 最便宜的是G81拆机键帽,在100以内就能淘到,但是G81定位比较廉价,键帽大多只兼容平衡杆,并不像现代键盘是卫星轴平衡杆双兼容,这个逼格也是说的过去的。

于是很多人买G81的拆机键帽改菊花给现代键盘用,有逼格又便宜,就是改菊花比较麻烦。
网上搜到几篇AB胶改菊花的经验贴,本人手残党,对使用AB胶完全没有信心。而且AB胶粘歪了想抠下来是非常麻烦的。
于是这次摸石头过河尝试了热熔胶改菊花,操作简单效果好,和我一样同样是手残党的朋友可以尝试一下。
此法改pbt键帽出错的话,可以吹风机吹掉热熔胶,于是可以无限重试,并不像AB胶那样重试会非常麻烦。如果改abs二色要重试的话吹风机吹下键帽变形的危险性比较大,最好是有局部加热工具拿掉热熔胶。话说回来,AB胶改ABS二色键帽出错更难重试,因为AB胶失去粘性需要200摄氏度的温度,出错就只能用刀抠了。
先上张效果图:

Read on →

Apple Watch人机交互指南

翻译自官方文档 - Apple Watch Human Interface Guidelines

文档主要分为三部分:
1. 为Apple Watch设计软件的注意事项。包括介绍了watch软件的特点、watch独有的新的交互方式、Glances、Notifications、Modal Sheets、布局、颜色与排版、动画、app品牌化,也穿插了一些设计原则;
2. 各种控件的使用与设计原则。包括labels、images、groups、tables、buttons、switches、sliders、maps、dates、times和menus。虽然控件种类不多,但是和以往相比区别还是比较大的;
3. Icon、image和menu image的设计原则。

苹果的人机交互文档不只是给码农看的,也是给PD与设计师看的。建议PD和设计师们也读一读。

为Apple Watch设计软件的注意事项:

Apple从未有过的穿戴式设备

  1. Personal: 一方面更隐私,另一方面更个人化。带有心率等其它传感器,可以得到比以往设备更多的个人信息。由于是苹果的首个穿戴式设备,从未有过一款设备像apple watch一样如此与使用者紧密相连,这一点在设计应用时要多加注意。
  2. Holistic: Apple watch是软件与硬件的结合。新的交互方式包括Digtal Crown(表冠)、Taptic Engine(触觉反馈+细微声音反馈)和Force Touch(压力感应触摸屏),官方相关介绍传送门。设计App时应当把以上交互体验一并考虑在内。
  3. Lightweight: Apple watch上的软件定义为轻量级的,要求能快速启动,交互简洁、UI简单。iPhone的人机交互文档也是这么要求的,可惜遵守的人不多。这次苹果重新指出了这一点。

UI架构与交互方式

UI类型

App有两种基本样式,基于继承的,和基于平行页面的。

  1. Hierarchical:更像iOS上的导航模式。有推入推出。适合处理复杂的业务逻辑。

  1. Page-based:几个页面横滑切换的模式。苹果希望并列的页面能尽量少。适合处理简单的业务逻辑。

这两种基本架构不允许同时存在,只能二选其一。

用户交互

  1. Action-based:单击操作。在各种各样的控件上点的事件都是。
  2. Gestures:竖滑、横滑、左边缘右滑后退、点击。
  3. Force Touch:大力按下时系统会弹出context menu,作用类似pc上的右键菜单。App内当使用此menu显示上下文可以操作的actions。
  4. The Digital Crown:第三方应用仅可以使用表冠卷动来支持滚动长页面。
Read on →

处理iPhone6、6+标准视图和放大视图 & 新增的[UIScreen nativeScale]方法

标准模式与放大模式

iPhone6和6+的设置(Settings)->显示与亮度(Display & Brightness)->显示模式(View)都带有标准模式(Standard)和放大模式(Zoomed)。
这个功能被引入后,依赖[UIScreen bounds][UIScreen scale]并不能完全确定屏幕分辨率是多大、用户选择了放大试图还是标准视图。比如放大模式下iPhone6读到的这两个属性和iPhone5是一模一样的,而放大模式下iPhone6+的[UIScreen bounds]属性和标准模式下iPhone6的一样。

iOS8中苹果引入了[UIScreen screenScale],可以用来区分不同的显示模式。

Read on →