為 UIKit 開啟 Xcode Live Preview

使用 SwiftUI 的一大收益就是可以像 Flutter 那樣對 App 進行熱更新,改動了UI的代碼,會直接反映在模擬器或者是真機中,大大提升了編寫用戶界面的效率,不用改1px,運行,各種點擊,然後查看效果的循環往復。但現在使用 SwiftUI 還為時過早,畢竟還是有大量 iOS 12 設備在運行,想要做大眾軟件,那還是要支持的。

那麼,有沒有辦法能讓 UIKit 編寫的軟件也能用上實時[……]

點擊跳轉以繼續閱讀

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-6948607dea64072032[……]

點擊跳轉以繼續閱讀

快速更新 Python 包

Python 是個好東西,好多時候我們喜歡用它來寫一些小東西……比如我服務器上的很多服務都是用 Python 寫的( 使用 Supervisor 將你的 Python 程序變成服務 ),日積月累之下,竟然用到了很多依賴包。

可是,這些 Python 的依賴包並不會隨著你的 易於 升級 進行更新,許久之後的今天,我發現某個我正在用的包[……]

點擊跳轉以繼續閱讀

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-6948607de[……]

點擊跳轉以繼續閱讀

/usr/libexec/lsd 佔用 100% CPU 的解決辦法

最近忽然發現磁盤存在大量寫入,打開任務管理器一看,發現一個叫做“lsd”的進程持續佔用 20% – 40% 中央處理器,很奇怪。

經過一番查詢,得知這個進程是 macOS 和 iOS 上的系統進程,全名叫做“Launch Service Daemon”,負責所有 App 文件類型關聯和啟動。但它的數據庫有時候會損壞,這就導致它頻繁讀取和驗證某些數據。

一旦它的數據庫損壞,你就會遇到 lsd[……]

點擊跳轉以繼續閱讀

使用 xcode-install 來管理 Xcode 版本

我們都知道,在使用 Python 的時候有 pyenv,使用 ruby​​ 的話有 rbenv,都能方便地控制和管理編程語言環境的版本,那麼,有沒有什麼方法,能讓 Xcode 也像這樣切換版本呢?

每次 Xcode 發布更新,更還是不更成了一個問題,下載難,還不能斷點續傳,又不能用第三方工具下載,真的是非常要命……就更別提多個版本時候的兼容問題了。

使用 xcode安裝,一次性[……]

點擊跳轉以繼續閱讀

clang: 警告: libstdc ++已棄用; 遷移到具有OS X最低部署目標的libc ++ 10.9

平時,你會在安裝某個 Python 包時遇到這個錯誤,這個包肯定是一個包含了 C++ 代碼的包。

這是由於 macOS 更新後出現的不兼容,一般來說,這個包的維護者應該已經對這個特殊情況做出了兼容:

這樣在 macOS 上就可以順利編譯通過了。

但如果你使用的是 PyPy,那可能即使維護者包含了這句話,你也無法成功安[……]

點擊跳轉以繼續閱讀

Python 實時檢測自身內存佔用

最近在做文本統計,用 Python 實現,遇到了一個比較有意思的難題——如何保存統計結果。

直接寫入內存實在是放不下,十幾個小時後內存耗盡,程序被迫關閉。如果直接寫入數據庫吧,每次寫入又太慢了,本來就十幾個小時了,這樣下去就要往星期上數了,也不是個辦法。

最後,我想到了一個兩者兼顧的方案——用內存做緩衝,達到一定量之後一次性將當前所有數據合併到硬盤裡。

但這樣就有一個閾值,如何確[……]

點擊跳轉以繼續閱讀

蘋果瀏覽器 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 系統支持了黑色模式後。

平時,別人會告訴你這麼做:

但這會觸發警告: 不推薦使用 iOS版 9 。那麼有沒有其他辦法呢?有,官方推薦的寫法是[……]

點擊跳轉以繼續閱讀

如何讓你的 macOS 重新顯示台灣旗 Emoji 🇹🇼️🇹🇼️🇹🇼️

macOS 使用了一個專用字段保存國家代碼

最早台灣旗不能顯示,是在 iPhone 上,蘋果通過 iOS 系統地區和語言設置進行判斷,如果是中文,就會把台灣旗這個 表情符號 顯示為 :破解方法也很容易,把語言和地區都改掉就可以了,比如語言選成繁體或者英文。

現在,蘋果已經不再單純通過語言等設置進行判斷了,通過 iPhone 硬件序列號進行判斷——這是不可能被修改的。

這個被屏蔽的亂碼符號讓人看著心煩,究竟該怎麼去掉它呢?

蘋果電腦[……]

點擊跳轉以繼續閱讀

當 Mailgun 不再免費,你如何安置你的域名郵箱?

之前我寫過一篇文章:“ 使用 Mailgun 創建你的免費域名郵箱Mailgun 有一個很有意思的功能就是收件路由,通過這個功能設定,你可以將任意發來的郵件轉發到你設定好的郵箱當中,這樣就不需要為每一個域名設置一個郵箱服務了,只需要通過 Mailgun 就可以將對應的郵件轉發的需要的郵箱——畢竟,平時我們可能也就使用這些域名郵箱做個基本的驗證。

最近,Mailgun 不再免費了,免費用戶[……]

點擊跳轉以繼續閱讀

Swift Python 互通 Json 數據簽名

最近很流行自簽證書進行 HTTPS 解密,然後就有不少人通過修改蘋果的內購回執實現對 App 的破解。實際上驗證購買應該是 App 連接服務器,服務器來和蘋果的服務器進行通信,然後將結果發送給 App 的——但不少開發者(包括個人開發者以及企業開發者)懶得去專門維護服務器,所以直接用 App 和蘋果的服務器進行通信,這就給中間人攻擊提供了機會。

中間人攻擊,就是說當 A 和 B 進行通信[……]

點擊跳轉以繼續閱讀