最近在做 Android 版本的落格输入法,在导入码表的时候我犯了难。因为落格输入法的码表是支持 utf8 和 gb18030 两种编码格式的,甚至我自己内置的码表也是混用这两种格式的。在 Swift 或者 Python 中,如果你使用错误的编码去解码文本,就会收到报错。利用这个办法,我可以轻松实现[……]
编程开发
我一直是用 rbenv 的,直到这次更新了 cocoapods 后,执行报错了,当然,目测应该是我的 ruby 环境太旧导致的,于是我尝试 rbenv install 3.0.2 ,但很遗憾,报错了,去 rbenv 的官方仓库看了看,上一个版本还是 2019年……好吧,[……]
使用 SwiftUI 的一大收益就是可以像 Flutter 那样对 App 进行热更新,改动了UI的代码,会直接反映在模拟器或者是真机中,大大提升了编写用户界面的效率,不用改1px,运行,各种点击,然后查看效果的循环往复。但现在使用 SwiftUI 还为时过早,毕竟还是有大量 iOS 12 设备在运[……]
最近落格输入法遇到了几个比较难以复现的问题——关键是它不会导致崩溃。这就让崩溃统计功能根本无效,具体表现为在某些情况下输入法会突然卡住几秒,叫人十分恼火。后来我想到,macOS自带活动管理器中,有个“采样”功能,可以看到对应进程当前的执行(调用)状态,那我是不是可以用它来分析错误原因呢?
在和[……]
Python 是个好东西,好多时候我们喜欢用它来写一些小东西……比如我服务器上的很多服务都是用 Python 写的( 使用 Supervisor 将你的 Python 程序变成服务 ),日积月累之下,竟然用到了很多依赖包。
可是,这些 Python 的依赖包并不会随着你的 [crayon-69[……]
首先说这不是一个新技术,它很老,老到几乎没人提起它。
这是苹果 MVC 模式下的产物,最早在没有 iPhone 的时候就已经诞生了,它是用来配合 Xcode 图形化设置界面用的——比如 NIB,当然,现在已经变成 XIB了,哦,还有 Storyboard。
现在如果说起要 bind 一个[……]
通常,你会在安装某个 Python 包时遇到这个错误,这个包肯定是一个包含了 C++ 代码的包。
这是由于 macOS 更新后出现的不兼容,一般来说,这个包的维护者应该已经对这个特殊情况做出了兼容:
|
1 2 |
if platform.system() == 'Darwin': extra_compile_args += ['-mmacosx-version-min=10.7', '-stdlib=libc++'] |
这样在 macOS 上就[……]
最近在做文本统计,用 Python 实现,遇到了一个比较有意思的难题——如何保存统计结果。
直接写入内存实在是放不下,十几个小时后内存耗尽,程序被迫关闭。如果直接写入数据库吧,每次写入又太慢了,本来就十几个小时了,这样下去就要往星期上数了,也不是个办法。
最后,我想到了一个两者兼顾的方案[……]
在开发 iOS App 时,很多应用都要根据当前 App 内容颜色来设置 iOS 系统状态栏 的配色,黑色或者白色——尤其是在 iOS 13 系统支持了黑色模式后。
通常,别人会告诉你这么做:
|
1 |
UIApplication.shared.statusBarStyle = .default |
但这会触发警告:[crayon[……]
最近很流行自签证书进行 HTTPS 解密,然后就有不少人通过修改苹果的内购回执实现对 App 的破解。实际上验证购买应该是 App 连接服务器,服务器来和苹果的服务器进行通信,然后将结果发送给 App 的——但不少开发者(包括个人开发者以及企业开发者)懒得去专门维护服务器,所以直接用 App 和苹果[……]
不少人在开发中都会遇到 EXC_BAD_ACCESS ,很遗憾,这一次 Xcode 不会给出任何详细的解决方案。
通常来说,这是由于内存错误造成的。简单来说就是你创建了对象 A,但在后来访问的时候,内存里 A 这块区域已经被系统挪做他用了,比如放了对象 B 在这里——你的[……]
处理时间和日期是软件开发中很常见的操作,几乎所有的编程语言都提供了对应的 API 来方便开发者对时间日期进行处理,Swift 也不例外,比如 DateFormatter ,使用它你可以将任意 Date
在此之前,我一直是这样在 macOS 上安装和使用 pip 的:
|
1 2 3 |
sudo easy_install pip3 pip3 install my_package |
后来,这个方法失效了,变成了这样:
|
1 2 3 4 |
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py pip install my_package |
终于有一天,pip 提示我它需要更新,于是:
[cray[……]
通常来讲,Swift 里的 String 是和 NSString 桥接的,比如我曾写过 NSString 和 String 究竟 有什么区别 ?,总之这里我们主要来讨论一下,String[……]
一直以来,我对仓颉和速成这对难兄难弟是很有意见的……网上流传的码表版本繁多,但名字都叫“仓颉”,和五笔对比起来,好歹五笔还分个 86 和 98,再新一点还有 新世纪 等等,但仓颉没有,不论什么版本的仓颉,都叫“仓颉”。
这就很尴尬,每个人用的仓颉码表都不一样,但不一样在哪里,他自己也不知道。
总[……]
要做一款移动设备上的软键盘,那么怎么处理用户的点击位置,就是你遇到的第一个难题,在这个问题上,我也走了很长的路。
我把落格输入法开发以来的触控逻辑大致分类为三个阶段,现在分别来讲讲设计思路,希望能够对你有所帮助。
第一代触控引擎
显然,对于一个初学者来说,没什么比系统控件更好用的了,功能全[……]
在开发落格输入法 macOS 的时候,我遇到了一个比较奇葩的问题,这个问题一直困扰我到现在——当有些地方需要垂直居中显示一排文字的时候,如何让这些字真正的“居中”?
乍看之下这似乎没什么道理,垂直居中嘛……等等,macOS 上的 [crayon-69133f10df3317[……]
在使用 Swift 进行开发落格输入法时,我遇到了一个很有意思的问题——去重。
众所周知,输入法的候选在计算出来后总会有可能是重复的选项(比如码表和词库中都有某个词,也许他们编码不同,但字是一样的之类),这时候就需要去重,但又要保持候选的先后顺序不变。
别人的解决方案
如果你去网上找,那么[……]
在两年前,我曾写过一篇名为《ios 为视障用户支持 VoiceOver》的文章,里边主要介绍了 iOS 端该如何为 VoiceOver 进行必要的支持,后来我又开发了 macOS 端的落格输入法,但很遗憾由于 macOS 自身系统 bug,第三方输入法根本无法获得 VoiceOver 焦点(主要是[……]