HoloLens 初体验

今天公司的 HoloLens 到了,也是花的 3000 刀官网买的开发版托人带回来的,拿到真机之前从微软 HoloLens 官网 了解过一些相关信息,各种宣传视频炫酷的不得了,可是体验之后总的来说目前并不是让人很满意的一款产品。 外观 漂亮!包装精致、机身精美,打开包装盒看到机子(眼镜)的时候真的给人一种未来科幻片的感觉,镜片很有层次感,头带磨砂质感很不错。 视野 视野差!当然,如果你不开机,且暂不说佩戴体验的话,其实和一般的墨镜戴上感觉差不多;但是,感觉比较坑的就是居然视野只有正前方一个小矩形,根本不是原来所想象中的带上眼镜后整个目光能扫到的视野都能被 HeloLens 所覆盖,这算最大不爽之一。 舒适性 重!刚拿到手可能会没什么感觉,戴上个 5~10 分钟后就会往下慢慢垮,后脑勺有个卡扣可以很方便调松紧度,但终究是太重了,长时间佩戴玩耍根本遭不住,这也算是最大的不爽之一。

Swift Web 开发之 Vapor - 入门(一)

简介 Vapor 是一个基于纯 Swift 构建出的 Web 开发框架,目前可以运行在 macOS 和 Ubuntu ,用于构建出漂亮易用的网站或者 API 服务。 官方称是用的最多的 Swift web 框架,理由是因其在 IBM Swift Package CatalogBETA - Most Essential 排名第一。But 对于一些星星党并不这么觉得,Perfect 星星还是多一些的 ;]。 个人觉得对于初心者朋友们选择一款主流、优雅、更新活跃的框架学习就好了,不必太在意那些。

Jenkins for iOS 搭建日记

一直以来被 iOS 项目打包困惑,速度慢、操作复杂,深恶痛绝!于是开始寻求网络上的持续集成服务,前两天尝试了下 buddybuild、bitrise,都不太如意(可能是姿势不太对),正好公司有台空着的 Mac mini,刚好可以拿来试试搭个 Jenkins 服务器做持续集成,网络上有很多 Jenkins 安装教程,这里就不重复了,主要记录一下我在使用过程中遇到的问题和解决方法,希望未来某一天能帮到同样被困惑的人儿。 再说点闲言碎语,关于 iOS 的打包的进阶历程,最早没接触这些东西的时候是每次手动在 Xcode 上 Archive -> Organizer -> Export,必须守在电脑前,中间操作步骤也很多,特别是在 Organizer 里面签名,很容易就出现证书或者 PP(Provisioning Profiles) 文件不正确之类的问题;后来知道了 fastlane,写好脚本用 gym 一键打包,感觉生活品质上了一个量级;后来了解到持续集成,比如 Jenkins,项目丢服务器上去,推送代码自动打包、分发、推送提醒,体验更上一层楼。

iOS HOOK 注入与重签名

起因是在虾神的公众号上看到一篇文章 《Pokemon Go 锁区破解》,正好周围几个小伙伴正在玩这游戏,便仔细研究了下所谓的破解锁区。这次锁区其实是 GPS 锁区,游戏开发商为了缩小初始运营范围,在中国范围内都无法正常游戏,也就是服务端通过客户端发送的定位位置数据来判断是否让该玩家继续游戏。文章中介绍的原理就是利用 OC Runtime Method Swizzling 对原应用进行重写 CLLocation 的 coordinate 方法返回自己想要的经纬度信息,以达到欺骗服务端进行游戏,然后进行重签名打包。最让人激动的是最终的应用可以在非越狱的设备上运行,于是已阻止不了向前探索的脚步。

品尝 fastlane

打算接下来写个系列文章,就说说 fastlane 的各大神器的体验和心得 fastlane fastlane 是一套为 iOS 开发者开发的开源工具套件,代码基本由 Ruby 编写完成,最初是由 Felix Krause(@ KrauseFx) 发布和开发,后来也开始提供面向 Android 的工具。fastlane 的目标是为移动开发者提供统一和自动化的部署、发布流程。

Xcode 使用 Configuration 来配置不同的项目环境

很多项目在开发时都会经常在开发环境和生产环境之间切换,切换随之伴来的还有比如更换 App 名称、Bundle identitier、服务端接口地址等等相关参数和属性,这个时候我们就可以利用 Xcode 提供的 Configuration 来配置不同的环境,从而进行快速切换、编译等等一系列操作。 注: Xcode 中 Build Settings 的所有项都可以针对不同的 Configuration 设置不同的值

图床从SAE迁移到七牛

关于图床的又一次迁移·小记 最早博客用的国外一些支持外链的图床,担心速度和稳定性,后面利用 Migs 这个 PHP 小程序在 SAE 上搭建了一个图床,用了比较久,好一段时间前就想把SAE迁移到七牛,连图片上传脚本都写好了,一直没有对之前的图片做迁移,今天花了半天把迁移工作完成了。 迁移主要步骤如下: 导出整个 Blog 数据库备份文件 (.sql) 筛选出所有原 SAE 的图片 URL 将所有原图下载到本地 将所有下载到本地的原图批量上传到七牛的空间 对 Blog 数据库备份文件批量替换 url 中的原SAE子域名到新的七牛子域名 批量替换后的数据库备份文件上传到服务器还原 首先用 Swift 写了个简单的脚本把原有在 SAE 上的图片都下载到本地来:

给 UIProgressView 脱掉那层微弱的渐变

日常堆码中遇到一个扁平进度条的需求,需要添加一层进度条在表格中整个Cell最底层。第一反应想到了 UIProgressView,拖了一个出来看了看,不能修改高度,但是通过拉 AutoLayout 约束可以强制定高,但是会有一个警告: 效果出来大概是这样: 不仔细看发现不了,其实 UIProgressView 默认填色有一点点渐变效果,包括底色(progress tint color)。(真的看不太出来,如果你用取色计指一下,能看到几个单位的色值偏差) 于是我猜想 UIProgressView 可能是在 Layer 上绘出来的,抱着疑问,决定先把 subviews 打出来看看:

初用 CocoaAsyncSocket

Socket 如今在 iOS 里对 Socket 的应用慢慢多了起来,就一个即时通讯,很多应用都有集成,那即时通讯功能一般来说就肯定是基于 Socket 的,Socket 这个话题我一直谈论的比较少,一是由于看过一些 C/C++ 操作 Socket 的代码被吓到了一直还有心理阴影存在,二是工作里没怎么遇到相关的需求应用,所以也没有去深入研究相关内容。 还没接触过 Socket 编程肯定也会听说过这几个关键字:*包*、*握手*、*连接*、*TCP*、UDP 等等,Socket 编程的文章网上大把大把有,而作为一个初心者总是对这些 *望文生怯*,之前我也是如此,所以深有体会,希望读完本篇文章后你会对 在 iOS 平台上的 Socket 编程有一个简单的了解,那就是不要怕!

记一次 SQLite 性能优化

最早接触 iOS 开发了解到的第一个缓存数据库就是 SQLite,后面一直也以 SQLite 作为中坚力量使用,以前没有接触到比较大量数据的读写,所以在性能优化方面关注不多,这次对一个特定场景的较多数据批量读写做了一个性能优化,使性能提高了十倍。 大致应用场景是这样: 每次程序启动会从服务器拉取一些数据,对本地数据库两个表进行同步更新,不存在就写入,存在就更新其字段。数据少的时候几十条,多的上千条。 由于缓存的数据可能会存在异步同时读写,所以做了一个后台同步队列,所有的缓存数据库操作都在这个队列里面,然后我监控了一下写数据库的关键代码执行耗时,一千条数据更新到数据库就能耗时 30 秒之久,磁盘写入在 1.5M/s 浮动, 虽然没有卡主线程,这个消耗即使在后台也是不可容忍的。