0%

为了安全性,个人的github和公司的gitlab需要配置不同的SSH-Key。具体如下:

  1. 切换到系统的SSH目录

    1
    cd ~/.ssh
  2. 为个人的github生成SSH-Key(若还没有)

    1
    ssh-keygen -t rsa -C "your_mail@example.com" -f github_rsa

    然后,前往github添加SSH公钥。

  3. 为公司的gitlab生成SSH-Key(若还没有)

    1
    ssh-keygen -t rsa -C "your_mail@company.com" -f company_rsa

    然后,前往gitlab添加SSH公钥。

  4. 添加配置文件(若还没有)

    1
    touch config
  5. 为配置文件config添加如下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # github.com
    Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github_rsa

    # gitlab.company.com
    Host gitlab.company.com
    HostName gitlab.company.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/company_rsa
  6. 测试

    1
    ssh -T git@github.com

    输出:

    Hi YK-Unit! You’ve successfully authenticated, but GitHub does not provide shell access.

    以上表示成功连接到了个人的github。
    然后可以用同样方式测试公司的gitlab。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//代码片段摘自苹果开源的runtime代码(objc4-208版本)
//https://opensource.apple.com/source/objc4/objc4-208/runtime/objc-class.h
struct objc_class {
struct objc_class *isa;
struct objc_class *super_class;
const char *name;
long version;
long info;
long instance_size;
struct objc_ivar_list *ivars;

#if defined(Release3CompatibilityBuild)
struct objc_method_list *methods;
#else
struct objc_method_list **methodLists;
#endif

struct objc_cache *cache;
struct objc_protocol_list *protocols;
};

这是Objective-C 2.0中的类的代码,相信做iOS开发的同学都很熟悉的了。有天在查资料又看到它的时候,想到了一个好奇的问题:

methodLists 是一个二级指针,在内存中,它指向的是什么呢?(或者说,其指向的数据结构到底是怎么样的?)

Read more »

在 Mac 下写 C 的时候,如果程序并不复杂,其实蛮不愿意打开 Xcode 这个庞然大物的。为此,特意找时间解决了这个事情:Atom + Atom 插件 = C 轻量级 IDE

下面将会列出所用到的主要插件:

  • autocomplete-clang
    autocomplete for C/C++/ObjC using clang

  • build
    Build your current project, directly from Atom

  • linter
    A Base Linter with Cow Powers to visualize errors and other kind-of messages, easily

  • linter-clang
    A linter plugin for Linter provides an interface to clang

  • script
    Run code in Atom!

    在 Mac 下,按 cmd-i ,该插件就会调用 clang 编译并运行当前的 c 程序

安装完毕后,开始你的 C 旅程吧~

概述

YKPageControllerScrollView 是一个 UIViewController 容器类的滚动视图,支持 UIViewController 重用机制。YKPageControllerScrollView 类的设计参考了 UICollectionView 类,所以你会发现,其接口以及代理方法和 UICollectionView 的是很相似的,使用上也是相似的。

Read more »

前言

在 iOS 开发中,你应该会碰到以下这个问题:

如何实现 APP 内的 web 页面和 Native 页面的交互功能?
该问题的本质是:实现 JS 和 OC 的相互调用。

YKWebViewJavascriptBridge 是我针对上述问题实现的库。下面将会具体介绍该库的设计思路和具体实现。

Read more »

由于项目的正式网络环境的 host 是走域名,能支持 https ,测试网络环境的 host 是走 IP ,无法支持 https ,导致在做 ATS 支持的时候,遇到一个问题:在 debug 过程需要切换网络环境的时候,也需要手动去开启或者关闭 ATS 。为了节省这些时间,写了一个脚本去解决这个问题,让 ATS 根据网络环境的值自动去开启或者关闭。下面将会列出具体步骤。

Read more »

在为『掌拍』iOS 客户端设计数据库的时候,大幅度使用了 CoreData 中的『Entity Inheritance』这个特性,由此很好地解决了多个实体有共同 property 的问题,而特别借助实体类化(由实体生成对应的类)后的动态性,解决了数据动态传递的问题。这之后,对『Entity Inheritance』算是有了经验,但是还没有归纳总结,现在总结如下:

Read more »

从2013.6月中旬到2013.12月,连续参与设计和开发了两个产品(一个是掌拍,另一个是网球圈),并独立完成了这两个产品的 iOS 客户端开发,期间可谓获益良多,一番反省总结归纳,得益主要在『沟通』『产品设计』『技术』这三方面。

沟通

如何才能有效地沟通呢?

  1. 就事论事,理性讨论,拒绝个人情绪,特别是不良情绪。

  2. 以『发现问题,解决问题』为沟通目的。

  3. 坚决把讨论的问题限定在指定范围内,拒绝越界、跑题!

  4. 准备充分,准备好:『问题』、『论据』、『解决方案』(至少得清楚自己想讨论的是什么问题)。

以上就是我在参与第一个产品开发时,和负责人『吵架』n 次,失败 n 次后得到的经验和教训。此人是搞营销运维的,口头能力甚强,好几次和他讨论问题的时候,就被他用『偷换概念』+『跑题』这两招击败o(╯□╰)o;然后有几次是被他的市场经验打败(这招『扬长避短』甚是好用的,→_→)。。。

而最重要的教训就是发现一旦带着个人情绪进行讨论的时候,很容易擦枪走火,问题不但没解决,还让彼此都不爽。影响工作~~囧rz

产品设计

产品设计方面的感悟主要是:

  1. 从『问题』本身出发(由于想解决一个这么样的问题,所以才做了这么样的一个产品)。

  2. 做你需要的而不是做你想要的(focus on what you need rather than what you want)。

  3. 为产品设计一套完整的(最好是完善甚至是完美的)『游戏规则』。如果规则模糊不清晰,一来会导致业务流程上产生 bug,二来不利于开发人员的开发。

    PS:但是规则对用户而言应该是是友善的、简单可行的。

  4. 先确定业务,再确定功能,继而确定界面,最后根据业务、功能、界面UI等需求确定技术方案。

  5. 『和谐』。产品(主要指客户端)应该有统一的风格,一是 UI 的风格一致,如 颜色、色调、背景图、指示器、文字字体等各种元素应该有一致的风格;二是交互方式的风格一致,如统一使用一种方式(点击或者滑动)来切换视图,各种交互语言(UI 中的文本语言以及提示用户操作、网络超时、任务失败等各种提示语)的风格要一致。

  6. 『理所当然』。让用户使用你的产品的时候会觉得『理所当然,就该如此』,像在网速快的时候,一些交互操作应该可以考虑不提示用户交互的进度吧?

Read more »

我的编译环境:

Mac OS X 10.9 + Command Line Tools(XCode 4.6.3)

编译步骤:

一、安装依赖工具

  1. 安装 git、svn(不过,一般Xcode自带安装好了)

  2. 安装depot_tools

    a. 在指定目录下执行(我选择在 /Developer ):

    1
    svn co http://src.chromium.org/svn/trunk/tools/depot_tools

    b. 把depot_tools 添加到 PATH(环境变量)中:

    1
    sudo vim /private/etc/paths

    然后往打开的文件添加 depot_tools 的路径(我添加的是:`/Developer/depot_tools )

二、下载源代码以及生成项目文件

1.下载源代码

1
2
3
4
mkdir webrtc_src
cd webrtc_src
gclient config http://webrtc.googlecode.com/svn/trunk
giclaient sync —force //如果中途中断了,再次执行该命令

2.生成 iOS 项目文件

1
2
3
cd trunk
export GYP_GENERATORS="xcode" //设置环境配置
./build/gyp_chromium --depth=. -DOS=ios -Dtarget_arch=arm -Dinclude_tests=0 -Denable_protobuf=0 all.gyp

(其它生成例子:./build/gyp_chromium --depth=. -DOS=ios -Dtarget_arch=arm -Dinclude_tests=0 -Denable_protobuf=0 -Denable_video=1 webrtc/webrtc.gyp

Read more »