macOS 运行和训练 Moses

Moses 官网其实是有 macOS 二进制包的,你不需要从源代码编译它们。但总之,由于 Moses 开发者已经不再用 Mac,所以他没办法更新,这导致了目前最新版(4.0)的代码中有一个bug,使得二进制文件不能直接使用,作者说“反正从源码编译也不是很难……”但总之,从 BigSur 上编译 Moses 已经几乎是不可能的了,各种奇怪的报错,令人头疼。

其实,我们是可以直接修正二进制文件中[……]

点击跳转以继续阅读

使用 Packages 创建支持 Apple M1 芯片的 pkg 安装包

使用高级设置修改 Packages 默认参数

苹果发布 M1 芯片设备已经有一段时间了,虽然我当时第一时间申请了 DTK 设备,但由于一些原因,直到苹果回收设备,我也没能亲手摸到。总之,落格输入法 macOS 还是成功靠盲打支持了 Apple 架构,即 arm64,根据用户反馈,效果还行。

直到有用户说虽然 app 是支持 m1 芯片的,但安装包不行——当运行 pkg 安装包时,系统弹出了 Rosetta 2……

虽然其实并不影响[……]

点击跳转以继续阅读

macOS 使用 atos 命令解析任意崩溃记录和采样数据

最近落格输入法遇到了几个比较难以复现的问题——关键是它不会导致崩溃。这就让崩溃统计功能根本无效,具体表现为在某些情况下输入法会突然卡住几秒,叫人十分恼火。后来我想到,macOS自带活动管理器中,有个“采样”功能,可以看到对应进程当前的执行(调用)状态,那我是不是可以用它来分析错误原因呢?

在和用户沟通后,我得到了一个类似这样的采样报告:
[crayon-693adca394a0246979[……]

点击跳转以继续阅读

快速更新 Python 包

Python 是个好东西,好多时候我们喜欢用它来写一些小东西……比如我服务器上的很多服务都是用 Python 写的( 使用 Supervisor 将你的 Python 程序变成服务 ),日积月累之下,竟然用到了很多依赖包。

可是,这些 Python 的依赖包并不会随着你的 apt upgrade  进行更新,许久之后的今天,我发现某个我正在用的包[……]

点击跳转以继续阅读

Cocoa Binding 实用教程

首先说这不是一个新技术,它很老,老到几乎没人提起它。

这是苹果 MVC 模式下的产物,最早在没有 iPhone 的时候就已经诞生了,它是用来配合 Xcode 图形化设置界面用的——比如 NIB,当然,现在已经变成 XIB了,哦,还有 Storyboard。

现在如果说起要 bind 一个 Storyboard 中的对象到代码中,你可能查到的都是这样的:

在左侧栏点击鼠标右键打开小窗口[……]

点击跳转以继续阅读

Xcode 插件丢失不显示的解决办法

在系统偏好设置中,Xcode 扩展插件不显示了

在之前的一篇文章中我为大家介绍了一个同时安装多个版本 Xcode 的工具使用 xcode-install 来管理 Xcode 版本但当你的系统中同时存在多个 Xcode 时,就会导致系统困惑,让 Xcode 的插件无法被识别,主要的体现就是系统偏好设置中根本看不到 Xcode 插件的选项——就好像你完全没安装过它们一样。

总之,我在这里找到了答案

首先执行命令:
[crayo[……]

点击跳转以继续阅读

在 macOS 上无驱动使用第三方鼠标

启用对罗技鼠标的管理

众所周知,macOS 对第三方鼠标挑剔的很,如果是普通的办公鼠标,那几乎还能凑合用,固定的 DPI 顶多就是需要调调鼠标速度罢了,但如果上升到按键多一些的游戏鼠标,就有很多问题了。

不一定是用来打游戏,比如带有前进后退按钮的鼠标在写代码时非常实用。

一般来说,名厂大牌的鼠标会对 macOS 支持较好,主要是因为大厂有精力为 macOS 做鼠标驱动,如果一个鼠标原生就只有 Windows 驱动,[……]

点击跳转以继续阅读

使用 xcodebuild 来 archive 并导出 app

之前我曾写过一篇文章macOS app 实现自动化 notarize 脚本,但并没有提到使用代码自动编译并生成 App 的脚本,毕竟这一步有好多工具可以完成,比如说 fastlane。

我由于在 notarize 之前也没想过做自动化,而在写那篇文章的时候 fastlane 还没有支持 notarized 上传,于是我就自己写了,具体的编译命令是这样的:
[crayon-693adca39[……]

点击跳转以继续阅读

/usr/libexec/lsd 占用 100% CPU 的解决办法

最近忽然发现磁盘存在大量写入,打开任务管理器一看,发现一个叫做“lsd”的进程持续占用 20% – 40% CPU,很奇怪。

经过一番查询,得知这个进程是 macOS 和 iOS 上的系统进程,全名叫做“Launch Service Daemon”,负责所有 App 文件类型关联和启动。但它的数据库有时候会损坏,这就导致它频繁读取和验证某些数据。

一旦它的数据库损坏,你就会遇到 lsd[……]

点击跳转以继续阅读

使用 xcode-install 来管理 Xcode 版本

我们都知道,在使用 Python 的时候有 pyenv,使用 ruby 的话有 rbenv,都能方便地控制和管理编程语言环境的版本,那么,有没有什么方法,能让 Xcode 也像这样切换版本呢?

每次 Xcode 发布更新,更还是不更成了一个问题,下载难,还不能断点续传,又不能用第三方工具下载,真的是非常要命……就更别提多个版本时候的兼容问题了。

使用 xcode-install,一次性[……]

点击跳转以继续阅读

clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9

通常,你会在安装某个 Python 包时遇到这个错误,这个包肯定是一个包含了 C++ 代码的包。

这是由于 macOS 更新后出现的不兼容,一般来说,这个包的维护者应该已经对这个特殊情况做出了兼容:

这样在 macOS 上就可以顺利编译通过了。

但如果你使用的是 PyPy,那可能即使维护者包含了这句话,你也无法成功安[……]

点击跳转以继续阅读

Python 实时检测自身内存占用

最近在做文本统计,用 Python 实现,遇到了一个比较有意思的难题——如何保存统计结果。

直接写入内存实在是放不下,十几个小时后内存耗尽,程序被迫关闭。如果直接写入数据库吧,每次写入又太慢了,本来就十几个小时了,这样下去就要往星期上数了,也不是个办法。

最后,我想到了一个两者兼顾的方案——用内存做缓冲,达到一定量之后一次性将当前所有数据合并到硬盘里。

但这样就有一个阈值,如何确[……]

点击跳转以继续阅读

Safari 13 去除 Google 搜索结果跳转

使用 Xcode 创建一个新的 Safari 插件项目

在 Safari 9 以前,我们只要下载一个 safariextz 文件双击它,就能让 Safari 加载这个插件了。好处肯定是很方便,但也不太安全(随处都能下载到的插件,很可能是被篡改过的)。

所以后来,Apple 就不再允许用户直接下载插件给 Safari 安装了,必须通过 Mac Apple Store 下载 App,然后 App 里以插件的形式提供 Safari 插件,配合 App[……]

点击跳转以继续阅读

避免 WordPress 被用作反射放大攻击

之前我写过一篇文章,使用 fail2ban 防止 Bind9 被用于 DNS 放大攻击,万万没想到,原来 Wordpress 本身也可以用来进行放大攻击,原理就是它的 Pingback 机制。

Pingback 是 Wordpress 的一个网站之间互相通知工具,比如 A 博客引用了一个 B 博客文章的链接,那么 Wordpress 就可以自动帮你通知 B 博客,告诉博主你引用了他的文章。

这[……]

点击跳转以继续阅读

iOS 正确设置 status bar style 颜色

在开发 iOS App 时,很多应用都要根据当前 App 内容颜色来设置 iOS 系统状态栏 的配色,黑色或者白色——尤其是在 iOS 13 系统支持了黑色模式后。

通常,别人会告诉你这么做:

但这会触发警告: Deprecated in iOS 9 。那么有没有其他办法呢?有,官方推荐的写法是[……]

点击跳转以继续阅读

如何让你的 macOS 重新显示台湾旗 Emoji 🇹🇼️🇹🇼️🇹🇼️

macOS 使用了一个专用字段保存国家代码

最早台湾旗不能显示,是在 iPhone 上,苹果通过 iOS 系统地区和语言设置进行判断,如果是中文,就会把台湾旗这个 Emoji 显示为 :破解方法也很容易,把语言和地区都改掉就可以了,比如语言选成繁体或者英文。

现在,苹果已经不再单纯通过语言等设置进行判断了,通过 iPhone 硬件序列号进行判断——这是不可能被修改的。

这个被屏蔽的乱码符号让人看着心烦,究竟该怎么去掉它呢?

mac[……]

点击跳转以继续阅读

当 Mailgun 不再免费,你如何安置你的域名邮箱?

之前我写过一篇文章:《 使用 Mailgun 创建你的免费域名邮箱 》Mailgun 有一个很有意思的功能就是收件路由,通过这个功能设定,你可以将任意发来的邮件转发到你设定好的邮箱当中,这样就不需要为每一个域名设置一个邮箱服务了,只需要通过 Mailgun 就可以将对应的邮件转发的需要的邮箱——毕竟,平时我们可能也就使用这些域名邮箱做个基本的验证。

最近,Mailgun 不再免费了,免费用户[……]

点击跳转以继续阅读

Swift Python 互通 Json 数据签名

最近很流行自签证书进行 HTTPS 解密,然后就有不少人通过修改苹果的内购回执实现对 App 的破解。实际上验证购买应该是 App 连接服务器,服务器来和苹果的服务器进行通信,然后将结果发送给 App 的——但不少开发者(包括个人开发者以及企业开发者)懒得去专门维护服务器,所以直接用 App 和苹果的服务器进行通信,这就给中间人攻击提供了机会。

中间人攻击,就是说当 A 和 B 进行通信[……]

点击跳转以继续阅读

Swift Debug EXC_BAD_ACCESS in AppDelegate

 

不少人在开发中都会遇到 EXC_BAD_ACCESS ,很遗憾,这一次 Xcode 不会给出任何详细的解决方案。

通常来说,这是由于内存错误造成的。简单来说就是你创建了对象 A,但在后来访问的时候,内存里 A 这块区域已经被系统挪做他用了,比如放了对象 B 在这里——你的 A 只剩下指针,实际内容已经不存在了。

这时就会出现类似这样的崩溃:
[crayon-693[……]

点击跳转以继续阅读