旧的本式通行证已被卡片式的取代了,直接在上海出入境网站上预约即可办理。现场直接刷身份证打印申请表、采集出入境证件电子照,然后取号窗口办理。证 80 元,签注一次 15 元,可以扫码支付。
收到取卡短信通知后,去现场可自助取卡,当然也可以选择快递上门。
因为是周六去香港,预约周六营业的银行网点。招商永隆银行尖沙咀分行(加拿分道 4 号),周六营业时间是上午 9 点到下午 1 点。在线提交开户申请后,会拿到一个诸如 BK1905045960 这样的预约编号。我约的是 12:30 大概 12:15 去的现场。
只需要身份证、通行证、住址证明,至于网上说的收入证明、工资流水、入境小票等等,统统不需要。住址证明可以采用招行寄送的纸质信用卡账单。
开户后直接存入 1 万港币(海关允许携带的现金上限是两万 RMB),这样可以豁免账户管理费(每月 100 HKD)。
按照约定时间到达即可,到早了也不会给你提前办理。因为我一上来就亮明是该银行合作券商的客户,所以整个过程没有被「客户面谈(KYC)」,仅仅是核对了下材料。等了十来分钟就拿到了卡片、密码器等,然后去柜台存钱。
网银密码是登录手机 APP 后需要修改的,ATM 取款密码暂时用不到。手机上就可以激活密码器,这个在银证转换登记服务时会用到。
积累的几点经验:
在大陆银行卡购汇,然后跨境汇款到香港银行账户。平安银行当天到账,而且手续费减半(25 RMB)、电报费 80 RMB。不过到达永隆银行账户时少了 200 HKD,想必是永隆收了 50、中间行(渣打)收了 150 HKD,下次(如果有下次)改用招行借记卡试试。
从香港银行账户将钱转到证券账户,优先选用银证转换(快&免费)。具体方法及通道,参考券商的官方教程(通常都非常详细)。建议入金的时机选择在该券商的活动期间,通常入 1 万多港币会返现几百块。
目前选择的是多账户申购、开盘当天 11 点前卖出的策略。有些券商是以公司名义提交打新申请、有些是提交身份证号的。对于上报身份证的券商,建议只选一家,无论其上报身份证的后几位。
不同券商的费率差别很大,互联网券商通常在获客期间有较大的优惠,不要错过。
打新的收益预期,我目前设定在 -15% 到 30% 之间。
开完户将近下午 1 点,排队办业务的人还不少,柜台的工作人员看起来也蛮着急的。我离开银行后,直奔尖沙咀码头,花 3.7 港币搭天星小轮到湾仔。然后坐地铁到铜锣湾,在希慎广场诚品书店买了本余英时回忆录(约 100 RMB,好贵)后再坐地铁到中环皇后广场。从中环坐回尖沙咀,逛完星光大道后坐地铁到落马洲回深圳。
坐在香港地铁上,迎面而来的列车从右手边驶过,真切的感受到和大陆交通规则的差别。但逛街时大量靠右的行人分分钟教会你随大流是多么的必要。
-EOF-
]]>一如既往,我学习的主要形式是读书。今年读了几本以 1976 年前后数十年时代为背景的传记、回忆录等;技术类的翻过一点但读的并不够细,数量也不足。
这本书非常适合成年人看,看完后过一年再读一遍效果或许更佳。
陈梦家,总让我想起往事并不如烟里的张伯驹。
作者中学读的南开,大学读的燕京,1930年代留学英国就读于伦敦政治经济学院。未来计划再读一遍作者用英文写的原版。
通过一个特殊家庭展示了中国从封建社会到新时代的剧变。
作者在介绍每个案例时都从零开始一步一步的贴代码,真心没必要。不过作为入门教程,快速掌握 ARKit 开发框架还是不错的。
个人涉猎 Web 端开发技术的第一本技术书,力荐。
仅仅读了一两份开源的代码,就不好意思列出来了。这一块 2019 年做些加强,技术的精进还是离不开对优秀代码的深度研读的。
玩了几年的 P2P 理财,今年算是掉坑里了。现在还有不少钱陷在两个平台里,到期了但债转不出去。除了放宽心,也别无他法,耐心等待吧。总不至于,拉横幅讨债去?人,还是要讲点体面的。
文章发出的第二天早上,其中一个车贷平台的债权转让终于成功,本息安全收回。另一个 A 股上市公司全资控股的平台,前景依旧不明朗。
在互联网金融备案这事儿尘埃落定前,应该不会再投入。
作为股市的新韭菜,市场待我确实不薄,连续中了两次新股。刚进场时的 3200 跌到现在的 2500 点,我还能坦然面对,应该和新股赚的四万块是密不可分的。遥想刚入股市时,跌了五个点,就有只无形的手托着我的爪子去点卖出、割肉。
撇开新股的收益,一年下来亏了七八个点(写作此文时仅亏三个多点),相对于市场的中位数还是很说的过去的啦。
来年继续采用控制单只股的仓位加上网格交易的策略,目前整体仓位 70% 多些,一直按着计划在执行。
这一块采用无脑跟投长赢计划的方式,既然对该策略及其主理人选择了信任,就坚信下去,虽然目前亏损 10 多个点。
指数基金,会成为个人长期的一个投资品种。
上半年转到新成立的部门,负责移动端团队的建设和一期项目的研发。新部门对价值观(无脑加班)的重视程度,若能匀一丢丢到管理水平的提升上,或许这个产品还能走的远一些。很多事情的发展,不是个人能决定的。在一期上线后迅速调整了战场。
每一段经历,都是人生的一笔财富。我有幸参与了公司绝大部分的移动项目,而且很多线上 iOS APP 还是我从零搭建的。
今年点亮的个人技能貌似只有 AR。年初产品同事就有规划做个 AR 小工具,年尾在新部门动工并顺利完成。有点遗憾的是,在做 AR 阶段工作汇报时未能按计划将构思的脉络植入到现场领导的脑中。
对既往开发工作成果提炼后申请了四项发明专利,其中三项极有可能给我带来一笔不菲的奖金。
年底终于在公司内找到契机,去推动筹谋许久的 Ping An React Native 技术建设及应用实践。早在 2016 年就尝试游说领导,2018 年中在向部门领导汇报移动端技术时也推销过。
好事多磨,本周终于 kick off 了!
本周末是我在平安四周年的纪念日,四年里送别一波又一波的同事、连饭搭子都换了好几茬。工作遇到坎坷时,总能看开,想必也是这几年自己心智越发成熟的表现。
多年来不变的是糟糕的情绪管理。只要一来劲,敢把皇帝拉下马。这一点不知道何时才能有实质性的改变,急。
]]>APP 没有被拒绝,但是 Apple 提醒下次更新时修改相关 API 名称。
然而多年前,广为使用的 Three20 里包含和私有 API 重名的方法,导致很多使用该框架的 APP 审核不通过。
Apple 发现 APP 使用了非公开的方法 allowsAnyHTTPSCertificateForHost:
,拒绝的同时还提供开发者自查的方法。
未执行到的私有 API 调用
Qzone 中曾自定义接口 _define:
但是并没有调用过,结果也被 Apple 发现并拒绝上架。UITextView
导出的头文件中有该方法。
Uber 使用私有 API获取设备的序列号,苹果 CEO 严厉斥责该行为并威胁要下架。
1
|
|
因为私有 API 没有暴露出来,编译会报错。可以添加匿名 Category
声明下私有方法。
1 2 3 |
|
1 2 3 |
|
1 2 3 |
|
用 nm
, otool
等工具导出二进制包的函数符号表,以检查私有 API 的调用。缺点是无法检测字符串拼接方法的私有 API 调用。
动态扫描需要应用运行起来,每当调用方法时就判断是否是私有 API,但是效率会很低,而且不能保证代码完全覆盖。
在对二进制文件反汇编结果的基础上,进行静态分析:
performSelector:
,以及调用对象的类如何推导,请阅读加拿大 Laval University
发表的题为 Static Analysis of Binary Code to Isolate Malicious Behaviors
的论文。如果拼接字符串由服务端下发,依旧可以避开检查。
从 Github
下载 iOS-private-api-checker 后,可使用 WEB 的方式上传一个 IPA
进行扫描。我们可以使用 virtualenv 创建一个虚拟环境,来安装所需的依赖库,以免影响系统级的 Python 环境。
1 2 3 4 5 6 7 8 9 10 11 |
|
工程的 app/templates/main/index_page.html
里介绍了检查的原理:
class-dump
导出 Frameworks
及 PrivateFrameworks
的头文件,分别设置为集合 PU 和 PRclass-dump
反编译 ipa 中的 APP 文件,然后和 PRAPI 集合取交集即可获得但是,项目根目录下的 README.md
写道:
私有的api = (class-dump Framework下的库生成的头文件中的api - (Framework下的头文件里的api = 有文档的api + 没有文档的api)) + PrivateFramework下的api
我第一眼看到这个公式,对其中每一个运算项的含义不是非常肯定,对括号里写上等于号也是有疑问的。另外,这个公式里还提到了 Framework 下的头文件里的 API,而在 index_page.html 中完全没有提到。所以,建议先无视这个公式,对 index_page.html 里的文字也不要纠结。
阅读 build_api_db.py
时,看到方法 rebuild_private_api
中的注释里写道:
set_E private api
undocument_api = set_B - set_C
set_E = set_A - set_C - undocument_api = set_A - set_B
if include_private_framework: set_E = set_E + set_D
单从集合运算的角度看 set_E = set_A - set_C - undocument_api 和 set_A - set_B 能不能划等号?讲道理,应该是 set_E = set_A - (set_B + set_C) 吧。这里的 +
是套用原作者的简化写法,指集合的 ∪
运算。所以,建议无视这个注释。
注释表述的虽有问题,但通读代码发现实际实现的逻辑是没有问题的。现根据 build_api_db.py
及相关的代码所对应的构建私有 API 库的原理做一简要阐述:
.framework
文件 dump 出的头文件解析出的 API 集合。对应 ios_private.db
中的 framework_dump_apis
表记录。.framework
文件中的头文件解析出的 API 集合。对应 ios_private.db
中的 framework_header_apis
表记录。ios_private.db
中的 document_apis
表记录。.framework
文件 dump 出的头文件解析出的 API 集合。对应 ios_private.db
中的 private_framework_dump_apis
表记录。framework_private_apis
中的记录,表 private_apis
中的是加上 set_D 的记录。rebuild_sdk_private_api
函数的第二个参数是 False
则 set_D 不会被加入到 private_apis
表中。在 api_utils.py
中已经封装好了使用 class-dump
导出 .framework
的头文件。所以不需要 DumpFrameworks.pl
这类的外部脚本,而且 DumpFrameworks.pl
生成的头文件目录结构和本项目不吻合。也不需要下载 Nicolas Seiot 基于 RuntimeBrowser 导出的头文件。
我们需要做的是,保证目标系统 (比如 8.1) 的模拟器在本机已经安装,并且知道 Frameworks 及 PrivateFrameworks 的路径。
1
|
|
需要注意的是,上述路径 iOS 和 8.1 之间存在一个空格。这个空格会引起执行 class-dump 的脚本出问题,具体如何修复后面会给出建议。
根据我的实验结果,将上述路径的 8.1 改成 9.3 或者 10.3 即为不同系统下的路径。iOS 11.4 的路径是:
1
|
|
我们不需要记住这些路径,需要的是掌握获取路径的方法,用 find 命令也是 OK 的。
Frameworks 路径已经在构建集合 A 的部分介绍过,api_utils.py
中 framework_header_apis
方法就是用于构建 Frameworks 目录下所有的 .framework
文件中的头文件解析出的 API 集合。看出和集合 A 的区别了吧?一个是直接处理 .framework
中包含的头文件,一个是从 .framework
中的 Mach-O 文件导出对应的头文件。
构建集合 A/D 其实就比构建集合 B 多一步,即 dump 的过程。这也是为何在 dump 时,导出头文件的目录和系统 framework 文件内部结构一致,这样使得接下来的构建集合过程的代码可以通用。
生成 documented API 集合的主要障碍在于,本机缺乏 docSet。本文写于 2018 年 9 月初,我的工作机上只有 Xcode 9,而新版本的 Xcode 已经使用新的文档格式并直接集成在 Xcode 中。其实苹果官方提供了一个包含各版本文档链接等信息的 XML,将该 XML 下载到本地即可从中找到 iOS 8.1 等的文档下载链接。
1 2 3 4 5 6 7 8 |
|
安装下载下来的 dmg 后,在 Mac OS 根目录下便出现 docSet 文件了,你可以随意挪位置。docSet 内部的 Contents/Resources/docSet.dsidx 是我们获得集合 C 的数据源。
本人习惯使用 SQLPro for SQLite 工具查看 sqlite 数据库文件,将 docSet.dsidx 重命名为 docSet.sqlite 即可双击打开。其中 ZTOKENTYPE
表中的 func,instm,clm,intfm,intfcm 五种类型是我们要关注的:
凭感觉猜测 intf 是 interface 的缩写,interface 即 OOP 的接口而不是 Obj-C 定义类的那个 interface
至于最新版 iOS 的 documented API 怎么获得,本人没有研究。既然 Dash 的作者能生成 Apple API Reference 那理论上讲应该是可以生成 dsidx 文件的。记录有些许价值的 Dash Release Notes 作为日后研究的线索:
“Xcode 8 doesn’t come with docsets anymore and that means Dash won’t automatically support the iOS 10, macOS 10.12, watchOS 3 and tvOS 10 docs. I’m working on a version of Dash that supports the new docs and will release an update as soon as possible.” – Jun 14th, 2016
“Apple API Reference Support. Apple has new API docs. You can use them in Dash by installing the Apple API Reference docset.” – Jul 2nd, 2016
“The Apple API Reference docset now reads the docs from within Xcode 8. This reduces disk space usage while also allowing me to modify & improve the docs at display-time. Thanks a lot to the Xcode team at Apple for helping me understand the new documentation format!” – Oct 25th, 2016
同构建集合 A,路径的 Frameworks 改成 PrivateFrameworks 即可:
1
|
|
以 set_A 为处理对象:
_
开头的方法,全部加到 set_E 中;build_api_db.py 中 rebuild_sdk_private_api(sdk_version, False),需改成 True
build_api_db.py 中 if include_private_framework
之后应该是把 private_framework_apis 插入到数据表中,而不是 framework_dump_private_apis
api/api_utils.py 中 all_headers_path += iterate_dir(framework, "", os.path.join(framework_folder, header_path))
应该改成 all_headers_path += iterate_dir(framework, "", header_path)
db/dsidx_dbs.py 中 sql = balabala 需要确认 dsidx 文件中五种 TOKEN 类型对应的 ID
比如我从 Apple 下载下来的 8.1 docSet 对应相同 ZTOKENTYPE
的 ID 不是 (3,9,12,13,16) 而是 (11,13,1,8,19)。
如果你是从百度网盘等地方直接下载别人的 ios_private.db,请打开这个 db 检查下 document_apis 表中的数据真的都是 API 么。
另,原作者写 (3,9,12,13,16) 是因为当时 iOS 7.0 docSet 里确实是这几个 ID,这一点我通过往前翻 commit 记录得到了确认。所以灵活一点的写法是根据 ZTYPENAME
筛选数据。
dump/class_dump_utils.py 中 ret = subprocess.call(cmd.split())
健壮性不够
我在 Xcode 9 安装 iOS 8.1 模拟器后看到 Frameworks 路径是带空格的,经过 split 就会导致路径被拆分成两段。改成 ret = subprocess.call([class_dump_path, ‘-H’, frame_path, ‘-o’, out_path]) 应该就可以规避该问题。
阅读 iOS_private.py
梳理出识别 APP 中私有 API 的主要逻辑如下:
strings
工具从 Mach-O 文件导出字符串,按空格拆解得到集合1otool -L
从 Mach-O 文件获得用到的 Frameworks 及 PrivateFrameworks 列表class-dump
从 Mach-O 文件导出的头文件信息,解析出类名变量名集合2、方法集合3framework_private_apis
中按 api_name, class_name 分组得到类名方法名组合的集合5步骤2 的结果可以作为步骤5 的部分条件。白名单表 whitelist
里的数据,会从结果集中排除,对应到代码逻辑上也是在步骤5 被过滤掉。
因上述步骤6 中是按 api_name, class_name 的组合做匹配条件的,故原始代码的 SQL 语句中 group by 不仅要有 api_name 还应该加上 class_name 这个字端。
直接使用网易方案大概率是发现不了私有 API 的。检测逻辑只考虑了 api_name, class_name 全匹配,局限性太大。
在私有 API 数据库的建设上,TSRC 实验室的做法是进一步增加条件,比如一些纯小写字母的 API,大多是一些 C 函数,再过滤掉一批
在扫描算法的设计上,如果步骤5 只 group by api_name,步骤6 只匹配 api_name,同时在源代码中存在 @selector(XXX)
这样的字符串,基本可以认定该 api_name 为私有 API
对于静态拼接或者加解密的 API,可以通过动态 hook 的方式进行识别,但也存在一些局限性
prefs:
及 App-Prefs:
协议的扫描苹果审核提出使用了不该用的某某 API,那么我们势必要支持筛查该 API 用在何处,是我们的 APP 还是第三方 SDK 中。在代码工程根目录,执行:
1
|
|
在研读网易游戏的开源方案时,对于 iOS 10+ 如何构建 documented API 数据集这个问题直接跳了过去,后续可进一步调研。
[ 1 ] Arming Lee. 腾讯 Qzone 工程师. iOS私有API扫描工作总结. 2014~2015
[ 2 ] 刘笑江. 腾讯 WeRead 工程师. iOS 私有 API 调用检测机制探讨. 2017.08.23
[ 3 ] 郑文明. iOS状态栏操作. 2016.01.07
[ 4 ] KFAaron. 导出系统库的头文件. 2016.05.18
[ 5 ] Friedrich Markgraf. LegacyDocsets. 2017.05.11
[ 6 ] 林桠泉. 腾讯安全应急响应中心. 浅谈 iOS 应用安全自动化审计. 2016.06.23
[ 7 ] Rumin Shah. How do I check where my app is using IDFA. 2015.08.03
[ 8 ] Zuik. 使用私有 API 跳转到设置界面. 2016.10.10
本文介绍了摩根斯坦利做的一项调查,92% 的现有 iPhone 用户有兴趣在接下来的一年内购买新的 iPhone。相比于一年前类似调查的 86% 忠诚度,形势喜人!
RAC 中的这个 weakify 版本脱胎于 libextobjc 项目。如果想自己实现一个简化版(只接收一个参数),可以参考 Arek Holko 的文章。
BeeHive 是阿里去年开源的一个 iOS APP 模块化框架。文中介绍的基于 Annotation 的标记实现方案,很不错。我参考实现了一个将好房 APP 的 ViewController 和页面 URL 映射在一起的宏。
这是一个 iOS 开发辅助软件,查看 App 产生的文件,也可以快速将 Archive / Build 等文件删除。总的来说,类似之前推荐过的 SimPholders。
最近一段时间,移动端开发好像不像以前那么吃香了,招的人少了,要求更高了,给人一种感觉:这个行业是不是不行了?这个行业没出问题,只是更加理性了。
@end
]]>第二季度财报会议上,库克表示 Apple Watch、AirPods 和 Beats 产品的销量收入现在已经是财富 500 强公司的规模。不过,不少大型主流 APP 正在移除对 Apple Watch 的支持。
近期苹果买下了好几款 APP,比如 Workflow。本周又收下了名为 Beddit 的睡眠追踪应用及相关设备。
本文针对 Swift 的多种异常处理手段做了介绍,分别适用于何种场景。
为什么说 Swift 相比较于 Objective-C 会更加快 ?为什么在编译 Swift 的时候这么慢 ?如何更优雅的去写 Swift ?可以听听本文作者的介绍。
本周精读了这种基于 Target / Action 以及 Runtime 的组件化方案,思路确实非常棒!
微软继推出 VS Code 后,又发布了 Mac 版的 Visual Studio,支持 Xamarin 和 .NET Core 开发移动应用和网页等。
这种同事并非医学上的精神病患者,而是善于玩弄权术、爱撒谎、自负的人。他们评价别人是根据别人的行为,评价自己是根据自己的动机。
文中提到一种实践,叫 the Delta File:自己创建一个秘密的只有自己才能看到的文档,记录下你的同事、上司表现出的让你很反感的行为;将来你处于他们那个位子了,对比 the Delta file 中你所记录的行为,你会怎么做?他们当时那些行为是合理的吗?
@end
]]>苹果拥有的 2570 亿美元现金储备中,有 1480 亿美元投资了企业债,530 亿美元投资了美国政府国债,210 亿美元投资了抵押债券和资产担保债权。
本文记录了 React Native 在 Glow 的实践经验,并主要从 iOS 角度展开一些细节实现。
Uber 的 iOS App 拥有 5k 个文件,共 50 万行代码。为了提高构建速度,拆分出 70 多个组件。为了不影响启动时间,在 build 后把各 framework 中的文件合在一起。
这是一款将 Mac 菜单栏的一部分工具图标收起来的免费小工具。喜欢 Bartender 但不愿付费的朋友可以尝试下。
本文详细介绍了如何为 React Native 开发配置 VSCode 各种插件以提高生产力。
不只是面试,在很多社交场合都需要介绍自己,介绍自己做过的事,要会讲故事、让人有兴趣听下去。
@end
]]>从 5 月 1 号开始,苹果将实行新的佣金规则,所有跟 App 相关的消费行为(比如购买应用、应用内购)将会降至 2.5%,其它类型的内容(音乐、电影、书、电视剧)返利比例则保持 7% 不变。
图片解压缩的过程其实就是将图片的二进制数据转换成像素数据的过程。了解这些知识,将有助于我们更好地处理图片,管理好它们所占用的内存。
作者曾在百度工作四年,写了六年 Objective-C 代码。主要实现了美团的四个一级页面(团购、附近、订单、我的),以及部分二级页面(团购详情、Web 页面)。
在 Mac 上计算你写了多少行代码的一款小工具。
本文主要会基于一些开源代码和个人实践,对 iOS 端的自动化测试原理做一个简单介绍。
作者之前和微博干过口水仗,关于 Affiliate link 的事情。我也是从这个新闻才开始了解到 App Store 联盟计划这么个东西的。
苹果公司这份声明虽然简单但含义明确:赞赏功能并非是苹果逼停的。微信本可以像其他开发者一样,选择App内购方式给公众号运营者;App Store 生态对所有开发者的要求均是一样的。
天弘·爱理财在前端后端使用的阿里蚂蚁金融云平台。第一个 iOS 版本是在传统的MVC的架构基础上封装了一个网络服务层构建而成。从 2.4 版本开始逐步重构采用 MVVM + 分层架构模式解耦。
去年 11 月我总结过在好房移动架构团队做 Framework 开发中的一些经验。本文作者对静态库、动态库、Framework 等基础概念作了介绍。
在 Code Review 时,我们可能经常要去检查各种事情,有时我们会忘记,而 Danger 可以友好地完成。其配置非常简单,很容易集成到现有 CI 中。
本文从集成、测试、发布、运营四个子平台来展开分享携程是如何一步步打造无线持续交付平台的。
讲得不算很深的科普文章一篇。看懂后,你就会明白公司下发的标装机多不安全了吧。即使是 HTTPS 请求的内容,也被监控得体无完肤!
苹果已经获得加州的许可,可以在该州测试无人驾驶汽车。
Uber 基于 React Native 技术构建的 Restaurant Dashboard 应用为送餐业务 UberEATS 提供支持。本文介绍了决定使用 React Native,以及确保为餐厅提供可靠、稳健的用户体验过程中所进行的权衡和考虑。
随着前端开发的兴起,QQ也逐渐演变为Web与原生终端混合的开发模式。QQ 团队除了采用动态 CDN、后台渲染等全栈手段优化体验,也构建了围绕速度、成功率、页面异常等维度的监控体系来保障服务质量。
微软 Skype 团队开源的跨平台框架, 目前支持 web (React JS), iOS (React Native), Android (React Native) and Windows UWP (React Native) 等平台。
本文对比了 Xcode Server, Jenkins, Travis 以及 fastlane 等多种持续集成工具。
作者在微软服役 21 年离职后写就的长文,其中有句话很受欢迎:
The deepest learning happens when you struggle with truly hard problems.
@end
]]>苹果资深副总裁 Phil Schiller 透露,新 Mac Pro 将采用模块化程度更高、扩展性更强的设计,与之配套的专业显示器也在计划中,明年发布。
本篇文章是作者基于一次组内分享整理而成,包含 Objective-C 与 JavaScript 交互、内存管理、多线程等方面的内容。
本文为回答一位朋友关于 MVC/MVP/MVVM 架构方面的疑问所写,旨在介绍 iOS 下这三种架构的设计思路以及各自的优缺点。
来自 Facebook 的 Instagram 终于来强势支持了一把 React Native。快速迭代、代码复用、减少人力,这么多优点是否值得你去学习甚至在公司项目中引入 React Native 呢?
Google 的 Protocol Buffers 在数据编码的效率上似乎被神化了,一直流传性能是 JSON 等本文格式 5 倍以上,本文通过代码测试来比较 JSON 与 PB 具体的性能差别到底是多少。
刚出的一本关于 RxSwift 的技术书籍,Ray 家出品。
@end
]]>苹果推出红色 iPhone;iPad Air 2 退休,代之以 A9 芯片的新 9.7 寸 iPad;iPhone SE 和 iPad mini 4 的存储也有变化;还更新了 Apple Watch 表带。
本文提供了支持广告图的循环滚动方案,如果你没有亲手写过而只是用别人的组件,很可能忽视了其中的玄机。
网易的 iOS 工程师在参考同行的讨论和之前的 LDBusBundle 方案基础上,提炼出了一个适合中小型应用的 LDBusMediator 中间件。
我实现新版二手房首页的轮播图效果,很大程度的参考了作者的布局代码。
包含正则表达式测试工具、useragent 分析、时间戳转换…
并不是每个人都有赶上时代与公司风口的洞察力,或者是运气。
@end
]]>如题。用 Jonathan 自己的话来说,跟一群有共同语言的人一同来捍卫用户隐私是一件关涉到良知的事情。
设置 masksToBounds 会导致离屏渲染,但 iOS 9 只在设置圆角的视图够多时才反应出性能问题。主要的优化方法是用 Core Graphic API 生成一个 UIImage 再插入到 UIView 的子视图中,对于 UIImageView 则是直接将其 Image 裁剪成圆角。
synchronized 最慢,OSSpinLock 最快。OSpinlock 效率奇高主要原因是,并没有进入系统 kernel,使用它可以节省系统调用和上下文切换,如果临界区的执行时间过长则不建议使用。
作者 95 年的,就职于百度。对 HTTPS 的理解程度远超我身边的绝大部分同事。
平常浏览 Github 时,常常需要在代码目录里切来切去,非常麻烦。安装此浏览器插件后,省时省心。
iOS 签名机制挺复杂,各种证书,Provisioning Profile,entitlements,CertificateSigningRequest,p12,AppID,概念一堆,也很容易出错,本文尝试从原理出发,一步步推出为什么会有这么多概念,希望能有助于理解 iOS App 签名的原理和流程。
@end
]]>苹果给开发者发的一封邮件激起了千层浪,使用 JSPatch 的同学得注意了。还好我给公司设计并开发的 PAHotfix 是去年上线的,否则 KPI 可能要归零。
其中最大的变化就是基于了 HTTP/2 协议,采用了长连接设计,并提供 HTTP/2 PING 心跳包功能检测、维持当前 APNs 连接,解决了老 APNs 无法维持连接的问题。
本文介绍了 Instagram 开源的 IGListKit 如何使用。一月份的周报里提到过一篇从 UITableView 迁移到 IGListKit 的文章,不知你看了没有?
一个做动画及原型的工具,有人评价说:犹如 Sketch 遇上 After Effects 遇上 Keynote 呢。
组内对于 React Native 的实践已经快一年了,我们组主要负责的是美团外卖 M 端的前端业务。本文将总结和回顾一个纯 WEB 前端团队使用 React Native 完成一个应用的整个过程。
@end
]]>据 Business Insider 援引瑞士银行的一份研究报告称,分析师 Steven Milunovich 表示,苹果的下一个重大产品创新将与 AR 技术有关。
根据凯基证券分析师郭明池的预测,苹果今年将要发布的三款 iPhone,包括旗舰级 OLED iPhone 8 仍然都会配备 Lightning 接口。不同的是,苹果今年会为 Lightning 接口加入快速充电功能。
很多开发者在 iOS 10 上遇到了一类堆栈为 nano_free 字样的 Crash,也有很多人向 Bugly 客服反馈遇到了这类问题,但并没有好的解决方案。正当大家都束手无策的时候,微信强大的技术团队针对这类Crash进行了深度研究,并提出了一个解决方案。
为了解决前端埋点的准确性、及时性、开发效率等问题,业内各家公司从不同角度,提出了多种技术方案。美团在原有代码埋点方案的基础上,演化出了一套轻量的、声明式的前端埋点方案,并且在动态埋点、无痕埋点等方向做了进一步的探索和实践。
Twitter 开源的 TIP 框架用于图片的加载与缓存,据称已内部迭代两年。其 Android 团队采用的是 Facebook 开源的 fresco 框架。
最近有一些开发朋友问我应该怎样提升自己的能力,回想起来做了这么久 iOS 开发,我也有过那种『让我做一个功能实现个需求我会做,但接下来怎样提高我不知道。』的时期,这里尝试列一下 iOS 开发的相关技术,再说说在学习进阶上我的一些想法。
@end
]]>根据以色列周报的报道,苹果用数百万美金收购了一家以色列的面部识别创业公司 Realface。该公司曾发布过一款名为 Pickeez 的应用,它能帮助用户在多个社交平台中找出用户的最佳照片。
文章罗列的主要是组件化架构中 Cocoapods 如何用,对于组件化的架构设计本身并没有涉及。
近期团队做了很多 AB Test 的业务需求,在这种需求日益见多的情况下,我们不得不提升我们的代码组织方式,以适应或更好的在此类需求上维护我们的代码。本文主要阐述了业务团队在做 AB Test 的一些想法和思路。
这是 macOS 出现删除应用按钮的最快捷方式了吧?
之前一直在用 Sublime,现在逐渐换成 Atom 了。最近在读 BNR 出品的 Front-End Web Development 一书,配置了 emmet / autocomplete-paths / linter 等插件后 Atom 算是把利器。
Qunar React Native 是去哪儿网基于 React Native 定制的一套框架,让 RN 用起来更方便快捷,2016 年 3 月上线后已在公司内部大规模应用。透过 QRN 的大规模实践我们可以看到如何更好地去使用 RN。
@end
]]>iOS 10.3 和 macOS 10.12.4 开始,每个 app 每年只能发三次「求评价」弹窗,用户点评不必离开 app,可以一键关闭所有求点评弹窗,开发者可以直接回复用户的评价。
最近,美国零售巨头沃尔玛将它们的官方 App 从 Hybrid 转向了 React Native,获得了非常不错的结果,来看看他们是怎么做的。
PS: Walmart App 背后原来有数百名工程师啊!!!
本文的目的:一是简要分析下对服务器身份验证的完整握手过程,二是证书链的验证,三是探索下 iOS 中原生库 NSURLConnection 或 NSURLSession 如何支持实现 https。
对我最有用的信息是:通过 ar -x 解包 .a 文件,再对解出来的 __.SYMDEF SORTED 内容分析发现,其中没有 Category 的目标文件信息,或许这就是静态库中含有 Category 时为何需要专门配置 other linker flag 选项。
作者虽是学生,但思路清晰,很不错的。
今年的行情虽然没有去年火热,但是你仍应该拾掇拾掇一下你的简历,万一机会来了呢?
@end
]]>供应链消息称,苹果将会在今年的下半年对外发布、销售三款新平板电脑。新推出的 9.7 英寸将是廉价版本,主要针对教育市场。
关于 app 运行时的 crash,我们是不是可以做的更多?是否可以做到实时抓取 app 运行时产生的 crash,然后直接自动修复它,从而不让 app crash 呢?
本文介绍百分点如何由原来的手动写代码的埋点,发展出不需要写代码的无埋点技术。也介绍了实践中遇到的一些问题和解决方法。
现在应用的导航栏的颜色不再是单一颜色,还有些需要隐藏 navigationBar 的需求。该项目实现了开发部分提到的网易云音乐导航栏的效果。
类似于之前推荐过的 SimPholders 工具。除了访问模拟器应用沙盒,还能访问 Core Data 数据文件等。
资深工程师何以为资深,都需要哪些基本素养?很不错的一篇文章,以作者梳理的各项标准对照自己,提升自己的 Soft Skills,岂不快哉。
@end
]]>Chris Lattner 在邮件里说对 Swift 项目的发展没有影响,自己依旧会是该项目的积极贡献者。
本文介绍了如何从 UITableView 迁移到 Instagram 开源的 IGListCollectionView 方案。
读完此文,你便会理解为何多张图片上传使用多个请求比放在一个请求的好处,你也会理解 AFN 源码中 Request Serializer 设计 throttleBandwidthWithPacketSize:delay: 这个方法的背后考量。
作者总结了 5 大 crash 问题,解决了这 5 大 crash 问题,基本上你的 app 就相对健壮许多。其余的崩溃问题就需要具体问题具体分析了。
本文罗列了我在 iOS 及 macOS 上常用的约四十个软件。其中很多工具之前都有推荐,此次做了个小结。
使用 Chrome 试用了下该服务,提供 24 台 Android 设备及 28 台 iOS 设备供测试 APP。测试期间的操作会记录在 Session 日志里,对应时刻的屏幕也可自动截图保存。自动化测试方面支持 Appium 和 Selenium 框架,目前我没有进一步尝试。
经常在 TechCrunch 上看到某某公司融资数千万、估值几个亿。本文解释了啥是融资、啥是估值、为啥不贷款、N 轮融资是啥意思、巨额融资算是创业成功吗等。
@end
]]>官方客户端其实挺好的,但是广告实在太多太不吸引我(如果像 YouTube 视频广告的水准,我完全可以接受的)。但 Tweetbot 对 RT 的显示效果没有官方的赞。
微博官方客户端同样的广告太多太低劣,Moke 的制作水准相当高。
非常棒的音乐播放软件,特别是长按在专辑之间滑动,可以快速预览(准确的说应该是预听)。
同事一起吃饭,互相转账用用;去小店买买东西,也会扫扫二维码支付。
和老婆孩子视频;去小店买买东西,也会扫扫二维码支付。
一百来块钱可以看一年专享文章,但是 APP 的制作水准大不如前,推送频率也很讨厌。
上网必备工具,用起来确实方便。
天气应用竟然能在 App Store 里独立一栏,一直不大能理解。选择这款应用是因为对下雨的时间段有较为细致的播报。
记录每天的消费,月底向老婆报账。
自从发现了几个很赞的频道后,YouTube 成了我的主要娱乐平台。
改版之后,质感的确提升很多。周末叫个外卖啥的,都喜欢用点评。
地铁或者临睡前,这些不适合 Kindle(硬件)的时候可以用 Kindle 这个 APP。缺点是阅读位置同步难得会正确一次。
用来查看公司新来的领导是啥背景。
随手记录一些零碎的文字,比如个人理财策略啥的。
首选的文本(包括代码)编辑器,用了很多年。
之所以在 Mac 上选择 PDF 格式的技术文档来阅读,而不是 ePub 或 azw 之类的,完全是因为 PDFExpert 太棒了。你可以在文档上直接写写画画,做做笔记。
首先的 MarkDown 编辑器。一直没有买新版,因为足够用了。
RSS 客户端,配合 Feedly 用起来还是不错的。
我使用的是 ZSH 而不是默认的 BSH,配置和插件管理由 On My Zsh 负责,其中主题是用的 Honukai。
上网必备工具,用起来确实方便。
查看模拟器里的 APP 沙盒位置。
管理 Git 工程。
虽然 Dash 的源代码可能没有那么优雅,但这个软件确实提供了方便。至少我打开 API 文档的概率提高了很多。
虽然 Evernote 在走下坡路,但还没有找到合适的替代品。
为了在公司网络下正常使用,我特地写过一篇文章。如果想屏蔽广告,可以看看 reddit 上的讨论。
挂代理,抓包,看 APP 的 API 接口。
画流程图的首选。
最好的 API 测试工具。
在 Mac 上查看 SQLite。
Hack 别人的 APP 或者分析 UI 的设计时,不可或缺的利器。
免费的 MySQL 客户端。
当在 YouTube 上看到不错的视频,想下载下来怎么办?使用 Ummy 出的这个小程序即可,就是 20 刀有点贵。
iPhone 镜像到 Mac 端的 AirServer,这样即使没有专门的连接线也可以在投影仪上演示 APP 的功能。
支持的视频格式比较全面。
虽然可以直接把软件拖到回收站,但一些相关的配置文件还是残留在系统里的。使用 CleanMyMac 能够干净的清理不必要的文件。
本来是想用 Sketch 作应用设计的,但全职从事 iOS 开发后几乎没有做过个人产品。
屏幕颜色吸取器。
免费好用的解压缩软件。
Mac 上使用 Windows 或 CentOS 或 …
]]>苹果于 1 月 3 日放出一则清新醒神的优惠大消息:苹果红色星期五正式回归,优惠力度可能是多年来最强的一次。
微信开源的通信库 Mars,其中有一个高性能的日志模块 xlog。本篇文章将带领大家将 xlog 模块抽取出来,作为一个单独的模块来使用。
LUNTutorialViewController 这个引导页效果在很多 APP 里都能看到身影,本文详细介绍了其设计与实现。
正如官网介绍的那样,The simplest YouTube downloader for Mac,诚不欺也。看到 Youtube 上好看的节目,我还是喜欢下载下来到电视上播放。
这是一个 Chrome 插件,方便下载 Tumblr 上的视频用的。
针对八类问题分别给出了最常见的十道算法题及其解答,适合年后准备面试的同学。
@end
]]>