使用 Packages 創建支持 Apple M1 芯片的 pkg 安裝包

使用高級設置修改 Packages 默認參數

蘋果發布 M1 芯片設備已經有一段時間了,雖然我當時第一時間申請了 DTK 設備,但由於一些原因,直到蘋果回收設備,我也沒能親手摸到。總之,落格輸入法 macOS 還是成功靠盲打支持了 Apple 架構,即 arm64,根據用戶反饋,效果還行。

直到有用戶說雖然 app 是支持 m1 芯片的,但安裝包不行——當運行 pkg 安裝包時,系統彈出了 Rosetta 2……

雖然其實並不影響[……]

點擊跳轉以繼續閱讀

macOS 使用 atos 命令解析任意崩潰記錄和採樣數據

最近落格輸入法遇到了幾個比較難以復現的問題——關鍵是它不會導致崩潰。這就讓崩潰統計功能根本無效,具體表現為在某些情況下輸入法會突然卡住幾秒,叫人十分惱火。後來我想到,macOS自帶活動管理器中,有個“採樣”功能,可以看到對應進程當前的執行(調用)狀態,那我是不是可以用它來分析錯誤原因呢?

在和用戶溝通後,我得到了一個類似這樣的採樣報告:
[crayon-6908a93d09eba70368[……]

點擊跳轉以繼續閱讀

快速更新 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-6908a93d0[……]

點擊跳轉以繼續閱讀

/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 進行通信[……]

點擊跳轉以繼續閱讀

斯威夫特調試EXC_BAD_ACCESS中的AppDelegate

 

不少人在開發中都會遇到 EXC_BAD_ACCESS ,很遺憾,這一次 Xcode 不會給出任何詳細的解決方案。

通常來說,這是由於內存錯誤造成的。簡單來說就是你創建了對象 A,但在後來訪問的時候,內存裡 A 這塊區域已經被系統挪做他用了,比如放了對象 B 在這裡——你的 A 只剩下指針,實際內容已經不存在了。

這時就會出現類似這樣的崩潰:
[蠟筆690[……]

點擊跳轉以繼續閱讀