Swift

蘋果新出的用於代替OC的高級編程語言!

落格輸入法是如何在 iOS 上反賬號共享盜版的

對於 iOS 開發者來說,面對 app 盜版,最大的問題不是技術破解,反而是越來越多的 Apple ID 共享盜版,有的人可能會說這樣的盜版就相當於是“試用”了,喜歡的人自然會去入正……但實際上,由於一分錢共享賬號盜版的存在,導致無數獨立開發者最終走向了投簡歷。

總之,去年,Surge 的作者[……]

點擊跳轉以繼續閱讀

NSView 在 10.12 不顯示 shadow 問題詳解

在 iOS 上,如果我們要一個 View 顯示陰影,那麼基本上是這麼做的:

不過,到了 macOS 上,這樣就不靈了——沒有任何效果。

答案在於 macOS 上如果你想要給一個 View 使用 [crayon-693a273[……]

點擊跳轉以繼續閱讀

macOS 鍵盤按鍵 event 的三種截獲方式

一般情況下,你不需要了解這些內容。

在極少數情況下,你的app可能需要去獲取用戶按下的按鍵信息,比如盜號木馬 開發一款輸入法。只有這樣你才能給用戶提供候選。

怎麼在 macOS 下創建一個輸入法,我在Swift 使用 InputMethodKit 寫輸入法這篇文章中有詳細的說明,這里略過[……]

點擊跳轉以繼續閱讀

多顯示器下判斷窗口位置 macOS

在開發落格輸入法的時候,我遇到了這麼一件事情,就是作為候選欄的窗口會在屏幕邊緣的時候超出屏幕去!所以,在顯示窗口的時候我根據坐標做了額外的檢查:

總之,就是說如果坐標算上自己的寬度超過了屏幕的寬度,就把它挪回來。

但是,這樣[……]

點擊跳轉以繼續閱讀

如何讓 NSWindow 顯示在不同的 Space 或者 Screen 中

在寫落格輸入法 Mac 版的過程當中,我遇到了這麼一個問題,系統的候選條 API 年久失修,很多功能 API 存在但根本無效,比如:

這個方法是用來設置候選條風格的,裡邊除了默認的[crayon-693a273bae11c9403[……]

點擊跳轉以繼續閱讀

URL 遇到 中文字符 無法初始化

在 Swift 中,大家經常會用 URL 來初始化一個路徑,比如網頁的鏈接。比如這樣:

當用戶點擊按鈕(比如說這個幫助按鈕),那麼一下子就幫用戶打開默認的瀏覽器,並打開指定的頁面(這裡是個論壇)。

那麼,如果你的鏈接是這樣的[……]

點擊跳轉以繼續閱讀

落格輸入法是如何實現按鍵音的

眾所周知,落格輸入法不需要獲取“完全訪問權限“,所以根據蘋果的權限,自然就無法播放按鍵音了。

不過,最近的落格輸入法更新中加入了這一功能——在後續的版本中甚至可以加入按鍵震動了。然而我還是無需獲取“完全訪問權限”。

那麼,我是怎麼做到的呢?

iOS 裡的聲音和震動

其實是同一回事[……]

點擊跳轉以繼續閱讀

Xcode 自動版本號

做開發者肯定有過這樣的煩惱:版本號提交錯了!

編譯和測試的版本多了,難免提交的時候才發現版本號搞錯了。要不就是後台版本號正確,前台的版本號忘記更改。其實,可以讓前台自動獲取後台的版本號數據,比如這樣:

後台的版本號[……]

點擊跳轉以繼續閱讀

一個自動排序的 Swift 棧

一年前,我在 git 上發布了一個用 Swift 實現的棧,一共有兩個版本。因為 Swift 自身並沒有實現這個東西——儘管官方的教程中泛型的部分就是用這個棧舉的例子。

也許是人家覺得這個太簡單了吧

總之,這次我又來玩這個東西了,因為 HMM 的 Viterbi 算法需要做修剪,不然路徑太多無謂[……]

點擊跳轉以繼續閱讀

Swift 中判斷字符串是否有 Emoji 表情

更新:網絡上流傳的 emoji 代碼點不太完整,我按照維基百科的資料重新整理了一下,文中的 Swift 版本代碼已更新。

很多時候我們需要判斷一個字符、或者說是一句話裡是不是包含了emoji,使用 Swift 語言開發 app 也不例外,比如可以使用正則表達式——但很遺憾,似乎不同的語[……]

點擊跳轉以繼續閱讀

落格輸入法 是怎麼實現 app 設置而不需要 完全訪問 權限的?

眾所周知,在 iOS 平台上自從 8.0 版本開始,可以為 iOS 開發第三方的輸入法鍵盤了,而這些鍵盤可以被放在 AppStore 銷售了,不過,同時也有著十分嚴格的權限規則。

對此,蘋果為第三方的鍵盤設計了兩種權限,一種是最小的,只有最基本的鍵盤功能的權限、另一種則相對較多,鍵盤獲取了“完[……]

點擊跳轉以繼續閱讀

CloudKit 優化指南

最近給落格輸入法加入了一個叫做“對數雲”的東西,其實不難,比使用 iCloud Document 要簡單,不過網上的資料不太多,你通過那些上手教程來現充應該不是問題,但想要提升用戶體驗,就不是那麼容易了。這裡我們就一起來看看,怎麼樣才能讓 CloudKit 運行得更暢快。

CKDatabaseOp[……]

點擊跳轉以繼續閱讀

在字符串中 快速查找

很多時候,我們需要在字符串中執行查找,以判斷過濾指定的內容出來。比如過在落格輸入法當中,就需要用輔碼過濾出需要的候選詞。

一般來說,查找和對比肯定是數字來的最快,不過在詞庫上總不能把所有的詞彙都轉換為數字(雖然理論上可行……)在字符串的搜索上,我們有很多種辦法來實現,這裡我就說一下我自己的思路[……]

點擊跳轉以繼續閱讀

基於動態規劃的整句輸入法

一般來說,我們不會在用動態規划算法求解的問題上稱呼它為“動態規劃“,而是稱之為“隱馬爾可夫模型“,不過,如果我們單純用動態規划算法來求解一個普通的有向無環圖,那麼就只能說是動態規劃了……

這次我們要來說的,是基於詞庫的整句輸入法。而不是基於狀態轉移的隱馬爾可夫模型求解。

詞庫

由於不需要模[……]

點擊跳轉以繼續閱讀