iOS開發月報#13|201907

這裏記錄過去一個月,我看到的值得分享的內容,包含但不限於iOS知識,每個月的最後一天發佈。 歡迎推薦內容,可以前往zhangferry/iOSMonthlyReport提交issue。

Tips

Golbal queues的優先級

如果要在後臺執行非UI相關的工作, 一般把這部分工作放在Global queue. Global queue是一種系統內共享的並行的隊列。申請Global queue的方法很簡單:

let userQueue = DispatchQueue.global(qos: .userInitiated)
複製代碼

其中後面的.userInitiated參數代表隊列的優先級。該優先級公有6中分類,有高到低爲: userInteractive>default>unspecified>userInitiated>utility>background 通過該段代碼驗證:

for i in 1...3 {
    DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
        NSLog("DispatchQoS.QoSClass.default, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.background).async {
        NSLog("DispatchQoS.QoSClass.background, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.unspecified).async {
        NSLog("DispatchQoS.QoSClass.unspecified, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {
        NSLog("DispatchQoS.QoSClass.userInitiated, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async {
        NSLog("DispatchQoS.QoSClass.userInteractive, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.utility).async {
        NSLog("DispatchQoS.QoSClass.utility, %d", i)
    }
}
複製代碼

其中userInitiatedLIFO(後進先出),即如果有新插入的userInteractive級別的隊列任務,爲先執行新任務之後再執行之前該級別任務。其餘優先級的隊列任務均是FIFO(先進先出)

“No such module” when using @testable in Xcode Unit tests

因爲測試工程和主工程分屬不同Module,所以如果我們想在測試項目中調用主工程代碼需要導入主工程:

@testable import moduleName
複製代碼

這個時候如果報以上錯誤,會有以下可能: 1、targetName錯誤 這個可以去Target->Build Setting->Product Module Name確認。 2、主工程和測試模塊支持版本號不一致 保證Build Setting->iOS Deployment Target中的版本號在主工程和測試工程中一致。

authenticating with the app store上傳卡頓

如果往AppStoreConnect傳包一直卡在這個步驟,可以試一下這種方式:

第一步: cd ~

第二步: mv .itmstransporter/ .old_itmstransporter/

第三步: "/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/itms/bin/iTMSTransporter"

等待執行完成。

訂閱的freetrial沒有標明截止時間被拒

如題,如果訂閱功能含freetrial,一定要在freetrial按鈕旁邊標清楚試用的截止時間。

WakaTime

一款能夠統計開發時間的網頁端應用,支持衆多IDE。

集成到IDE之後,註冊賬號然後會獲取到一個Key,綁定該值。然後當我們愉快的開發時,一些開發的信息就會被記錄下來。我們可以通過其網頁端的dashboard查看我們開發的情況。
因爲前幾天升級XCode,需要重新裝插件,所以最近幾天的開發記錄爲空。

Lookin | 免費好用的iOS UI調試軟件

出自QMUI團隊,可能是小集的影響力已經很大了,這個軟件首發之後竟發現已經有一衆人開始關注這個東西了。可能因爲UI調試這個操作是一個高頻的行爲,而Xcode目前又做的不夠好,所以大家都期待有一個高效的UI調試工具。我也是下下來試了下,結合之前對RevealSherlock的使用,說下自己的體會吧,首先是優點: 1、免費 2、支持動態修改UI元素屬性,例如位置,顏色,圓角這些 3、可以查看CALayer的信息 因爲是剛發佈沒多久,還是有些需要改進的地方的 1、動態修改UI元素的信息,均是通過UIView,和CALayer的信息進行修改,無法實現像UILabel改文案,更新行數等操作 2、3D的渲染有時候會有bug出現,位置不正確,另外僅支持一個左右的旋轉不支持上下 3、屏幕適配還不支持,不能修改屏幕 其實我對sherlock也都僅限於使用,中和頻率不高的使用性和高昂的費用,我選擇試用結束就放棄,雖然Lookin還存在一些不足,但是免費大於一切啊,希望可以做的更好,爲更多開發者帶來便利。

Github

R.swift

Android開發中引用資源可以通過R機制,所謂R機制就是在我們創建一個Android項目的時候,IDE會自動幫我們創建一個名爲R的類型,它所在的文件名稱也是叫做R.java,R類型中沒有任何方法,包含的是代表不同類型資源的內部靜態類,而這些內部靜態類中,也只有靜態的屬性,每個屬性代表一個資源,故我們要引用某個資源類型中的某個資源,可用R.資源類型.資源名來引用。下面就是代碼中的實例:

//  從圖片資源文件夾中加載名爲"image_test"的圖片以其創建位圖
Bitmap aBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.image_test);
複製代碼

相對來說iOS中的資源引用就麻煩很多,需要通過字符串引用,無法代碼補全,資源更換無法自檢查。解決iOS資源引用的這些問題而借鑑Android方案的R.Swift應運而生。 傳統的方式:

let settingsIcon = UIImage(named: "settings-icon")
let gradientBackground = UIImage(named: "gradient.jpg")
複製代碼

使用R.Swift

let settingsIcon = R.image.settingsIcon()
let gradientBackground = R.image.gradientJpg()
複製代碼

不光圖片,它還支持FontsResource filesColorsLocalized stringsStoryboardsSeguesNibsReuseable Cells。 我第一次見到這玩意的時候就一個感受:wocao,🐂🍺! 更多關於R.Swift的使用規則參照官網說明。

Swift-Books

github上的內容,可以分爲兩類,純乾貨和乾貨的整理。這個庫屬於後者,是一個收錄Swift&Object-C相關資料的倉庫。收錄的都是比較經典的學習資料,而且非常全! 建庫已經兩年了,但是star卻不多,不知道是因爲曝光度的問題,還是因爲大家對設計版權問題的內容有些警惕。但不管怎樣吧,我還是要推一推這個庫。

open-source-ios-apps

開源的iOS應用列表。基本涵蓋了iOS開發涉及的所有領域,通過完整的app去學習別人的開發技巧是一個相對直觀的方式,面對這個大禮包,記得來看一看哈。

Chinese-Podcasts

中文博客的收錄,包含科技,風投,生活,電影,設計等領域。 音頻內容最大的優勢就是便捷,你可以在走路,跑步,甚至休息的時候使用它。音頻相比視頻還有一個更大的好處是,它會給大腦預留更多的想象空間,聽音頻我們會思考的更多一些。 去年一直在聽東吳同學會,最近一段時間則聽ggtalk和硅谷早知道多一些。

文摘

1、

生存是一種即時策略遊戲,所有的人都是這場遊戲的玩家。財務自由了,就是遊戲贏家。

--《科技愛好者週刊:66期》

2、

我以爲別人尊重我,是因爲我很優秀。慢慢的我明白了,別人尊重我,是別人很優秀;優秀的人更懂得尊重別人,對人恭敬其實是在莊嚴你自己。

3、

所謂成熟的人,就是精神上能夠自給自足的人。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章