记技术经理的一天

8点,起床,打开 APP,恩,一切正常,放心。。。

9点,出门了,看看头条,有篇Web缓存架构的文章不错,看完后顿感,等咱们有钱了,一定要买台 F5 玩玩硬LB,不然真是人生遗憾。

9点30,上老板直播间溜达溜达,顶顶人气。。。

10点,公司例会。

10点20,然后过了一下日活计划表

10点30,跟 HR 确认了一下 Android 新兄弟的 Offer 情况。筛选了一下 Android 简历

10点40,跟前端确认了一下录屏视频在 mate8 那儿自动给横屏了的问题。。。

10点50,日常看一下 ganglia,有一台client 挂了,上去重启下

11点,iOS 例会,一问新功能“动态贴纸”测的怎么样,负责的QA和开发都说没问题,我一听,心里就凉了半截儿。。。

11点15,小ma 那儿工作太多啦,效率低得都被童鞋吐槽了,赶紧沟通解决下。。。

11点30,跟一下 iOS 审核情况,看看马甲包的状态

12点,跟 Flash/H5 游戏外包的吃个饭,深感创业的孩儿真苦。。。

13点,眯一会儿

14点,APP 游戏房间开会,性能、安全、防刷 都揪心呀。。。

15点,还是 DAU 的事儿,找量真烦心呀。。。

15点20,筛选了一下数据挖掘简历

15点30,发个邮件看看金山那边有啥新东西同步下。。。

16点,提醒大家赶紧申请笔记本支架。。。

16点15,今天奶茶半价,太饿顺便吃个 tea,可惜今天没太阳,揪心。。。

16点30,面试一个数据挖掘,是个妹纸,有点儿胖,能力针一般,性价比太低,算了不推了。。。

17点,复试一个 Android 的同学,相当积极的小伙子,说“假如咱们这儿给机会,那明天的新东家我就不进了!”。。。HR 请病假了,揪心,这段时间也是辛苦她。。。

17点15,网宿的 Https 推拉流还没测试好,哎哟都1个月了,揪心。。。

17点30,老板说他的大APP竟然因为 scheme 暴露,被人占用了,结果就是自己的H5,拉起了别人的APP。这就很尴尬了。。。结果一想,原来咱们也是这么干,我去,赶紧准备改吧。。。

18点,连麦会议,当期的架构也是揪心,还是得把连麦服务器跟CDN搭在一起才行,推流也最好是私有 UDP。。。

19点,下班回家。看看头条,刷刷微信,唉~ 咱们产品竟然成了 3.15 联合报道者,赶紧share一下。。。

20点,晚饭慢慢吃。。。

21点,补个今天的面试评测表,整理下笔记,整理下标签

22点,学习下 Android,今年一定要把唯一一个缺憾补上。。。

23点,看一下 Hadoop 权威指南,今天同学发了一篇《从零开始安装Hadoop 2.7.4》,恩。。。

1点,洗洗睡,睡之前再上去秋一眼,恩,美女越来越多了,真好。。。

 

 

Posted in My Live, 公司 | 1 Comment

(九)iOS 开发真机运行与调试

作者:kim

时间:Apr 29, 2015

版权:非商用,自由转载,请保留原文地址

 

 

1. 经过了前面这么多的铺垫,终于到了鸡冻人心的时刻,我们要创建一个项目,并且运行到真实设备上面去!

 

2. 打开 Xcode -> File -> New -> Project 创建一个新项目。

 

AE17C7C9-068D-43D1-9AA2-8855D93A8B79

 

3. 下面项目配置中的 Bundle Identifier(Product Name + Organization Identifier)理论上最好是跟我们在创建 App ID 的时候保持一致!
Bundle ID 是可以在 Xcode -> Targets -> Info -> Bundle Identifier 里面修改的,所以我们现在可以故意随便起名!

 

C39CB2DA-BAB9-4BA8-B9FB-01F435420BF2

 

4. 项目建好大概是这个样子。

 

5366676D-8E55-40A1-94DB-F02595F8CB34

 

5. 连接好设备,假如 Xcode 这时识别不了设备,则要检查 Targets -> General -> Deployment Target 是否跟设备的一致!

 

A20B6C81-8FC3-4B2E-A7D0-96F9F08848E7

 

6. 当设备正常被识别后,这时我们先尝试耍下流氓,在 Toolbar 选择好设备,直接运行(command + R)程序开始 Building !

 

F10944BC-9EED-434C-B9EF-19DC7E682BF1

 

7. 显然,苹果是不会给你耍流氓的机会!刚开始 Build,就提示没有找到相应的 Provisioning Profiles ,故不能把程序安装到设备上!

 

8A6F62D7-8C4F-4E4A-8778-C5DF9BCABDA1

 

8. 点击 Fix Issue ,会提示我们赶紧去买个 Program 的提示,或者把已经加入了 Program 的账号添加到 Xcode !

 

88AB9945-E388-43CC-828D-CE63C5CC9795

 

9. 我们在很久之前就已经加入了 Program 了(心疼的花了$99),点击 Add 添加账号吧!

 

2E33B9FF-8AEA-4A8B-A625-7D4084930E58

 

10. 当然,我们也可以通过 Xcode -> Preferences -> Accounts 进入账号管理界面,点击左下角的 “+” 添加账号!

 

9397AA3E-375F-4DE2-AD8F-BEB05D8826F6

 

11. 选中账号,点击右下的 View Details ,可以查看账号的证书和配置文件信息!

 

F5E5AAE4-6854-48FB-A9D0-990E24351011

 

12. 在里面我们可以看到我们的 Provisioning Profile !点击 Done 并关掉 Accounts 设置。看到刚才的提示,这时已经变成自动选中我们的账号了!

 

487F3214-3BC2-4693-B7D4-D080439D7115

 

13. 点击 Choose 之后,项目就会继续 Build !当 Building 进行到 Signing product 对代码进行签名的时候,就会提示使用你的私钥对代码进行签名,这里我们点击“始终允许”!

 

6C2C0120-9A28-46B9-B725-1964DE50B7F4

 

14. 然后打开你的设备,应该就能看到 App 的运行了,当然目前还是一个空白的界面,因为里面还什么都没有!

 

15. 如果遇到一些不知名的错误,比如 Provisioning Profile 文件损坏,或者无法下载更新账号上面的配置文件,我们也可以手动添加!
选择 Window -> Decives ,或者 shift + command + 2 ,打开设备管理界面

 

E817C7E2-2E24-4F25-BFC9-481662F16053

 

16. 打开设备的 Show Provisioning Profiles 界面

 

A3835675-4D7E-4D4D-BDB8-0F8ECC93292D

 

17. 点击 “+”,把我们之前在下载的 Provisioning Profile 手动添加到 Xcode 里面!

 

53B62BAE-9DE7-4C29-9377-7A1AA0C4F59F

 

18. 开始我们的真机调试之旅吧!

 

 

Posted in iOS, Training, Xcode | Tagged , , , , , , , , | 1 Comment

(八)代码签名 CodeSigning 的原理与过程

作者:kim

时间:Apr 29, 2015

版权:非商用,自由转载,请保留原文地址

 

 

在介绍真机运行调试之前,我们先介绍代码签名的概念。代码签名是 App 之所以能够在真机上运行的基础!每个 iOS 开发者都必须跨过的坑!

 

1. 代码签名 Code Signing 也叫 App 签名,它是依靠 iOS 证书来进行的,它保证了 App 的合法性、完整性、真实性以及一致性(未被修改)。

 

2. 代码签名的核心是:证书、公钥、私钥。依赖于 X.509标准 与 公开密钥加密。

 

3. 在 Xcode 中设置代码签名非常简单,只需要设置 Targets -> Build Settings -> Code Signing Identity 设置好签名信息。
假如是正式发布的话,推荐手动设置签名证书!

 

7FA82D28-063A-40B1-8851-753F9FAE6040

 

4. 签名过程,在底层是由命令行工具 codesign 来完成的!当 Xcode 编译一个应用程序,在这个应用构建完成后就会自动调用 codesign 命令来进行签名!

 

5. 为了试验签名,我们先制作一个假的应用文件 apptest.app 做测试用。

 

61C6F48A-0388-4D70-A070-31C1F7077690

 

6. 公钥和私钥都完整可用的证书,才可以用来对代码进行签名,使用 security 命令,可以查看系统中的这类证书。这里需要记下 identity 的全称供后续使用。
$ security find-identity -v -p codesigning

 

46ABADAF-51BD-4FF1-8A24-D958AC2F27A7

 

7. 通过 codesign 命令使用上面的 identity ,对文件进行签名,期间需要授权允许使用用户本地的私钥。

 

7B299A80-C1FE-43AB-8EAF-24D60765EB85

 

8. 查看下已被签名的应用的信息。

注意,假如是一个正常的程序包,那么 Format 那里应该显示类似 “bundle with Mach-O thin (arm64)” 的信息。

 

AA966344-C361-47FA-873E-01FADC7C70BC

 

9. 检查一下当前的签名是否完美,即未被破坏。no news is good news!
$ codesign —verify apptest.app

 

10A1F858-284E-46CE-866E-E0346D8F1596

 

10. 尝试破坏一下签名,再验证,果然发现问题了!

 

D0B2474D-FAB7-4BFE-9E6D-93E31045F95B

 

11. 在实际对 App Bundle 的打包中,签名过程会在程序包中新建一个 _CodeSignature/CodeResources 的 plist 格式的文件,这个文件存储了被签名的程序包中所有资源文件的签名!

 

——————————————————————————–

 

12. 代码签名的验证主要是通过配置文件 Provisioning Profile(PP文件)与个人私钥 Private Key 共同完成。
(实际上,这个验证是通过 PP 文件里面的证书中的个人公钥 Public Key ,以及个人私钥 Private Key 共同完成的。)

 

13. 还记得我们在请求 Certificate 的时候,生成的 CSR 文件吗?这实际上是一个公钥/私钥对。私钥用于对代码进行签名,公钥用于验证。
我们可以在 Keychain 看到证书的公钥信息,以及与之配对的个人私钥(专用密钥)。

 

8237CE9F-57FF-4705-A445-8C54D1D581D5

 

14. 假如上面的私钥被删除,或者没了,那么就不能对代码进行签名,也就无法使用这个证书了。假如私钥被别人获取了,别人更可以“代替”你来发布 App 了!因此一定要保存好自己的私钥,最好是导出来保存在安全地方!

 

BDBD51D3-2DDB-4648-B617-4C3645D922FB

 

15. 选择 ”个人信息交换(.p12)” 文件格式,导出 .p12 文件!
由于 p12 文件包含个人信息,所以必须要密码。

 

F522B666-54BB-4BF9-BA38-70E3B52B2D78

 

78CA9B38-B563-4C18-95E6-26397731E382

 

16. 如果选择 “证书(.cer)” 文件格式,则导出证书文件本身!(也可以从 Apple Developer Member Center 下载)

 

433663E7-3D59-4D9A-82C9-31C016CFBBE9

 

17. 这样,如果想和别人或者其它设备共享证书时,只要把 p12 文件传给他,然后他就可以使用证书里面的私钥对代码进行签名了。

 

0AC81221-B68E-4B71-B3A2-1DA332B2EFAC

 

 

18. 代码签名:对指定信息使用哈希 Hash 算法,得到固定长度的信息摘要 Signature,然后再使用私钥 Private Key 对摘要进行加密,就得到了数字签名。

 

 

19. 代码签名的验证过程分两步:

 

第一步,验证证书本身的可信性与完整性:
1)在 iOS 系统以及其它 Mac 设备内部,都拥有苹果的根证书 AppleWWDRCA.cer,里面包含了 Apple 的公钥。
2)用 Apple 的公钥对证书(.cer)中包含的数字签名进行解密,如果成功得到(经过 Apple 使用私钥加密过的)信息摘要 Signature1,则说明了证书的可信性。
3)然后对证书内容使用证书声明的哈希算法,计算出一个信息摘要 Signature2。
4)如果 Signature1 == Signature2,则说了明证书的完整性。

 

第二步,验证代码的可信性与完整性:
1)在证书可信的前提下,成功提取出用户的真实公钥 Public Key。这个公钥就可以用于检验代码签名,或者用于加密通信。
2)用真实的用户公钥对 CodeSignature 里面所有代码/资源签名进行解密,得到一系列信息摘要 Signature-a1、Signature-b1、Signature-c1 etc.
3)假如所有信息摘要都正确被机密出来,则表明代码、资源文件是可信的,是完整的,能够合法地在该设备上运行。

 

 

Posted in iOS, Training | Tagged , , , , , , , , | Leave a comment