iOS摸魚週報,主要分享你們開發過程遇到的經驗教訓及學習內容。雖然說是週報,但當前內容的貢獻途徑還未穩定下來,若是後續的內容不足一期,可能會拖更到下一週再發。因此但願你們能夠多分享本身學到的開發小技巧和解bug經歷。html
週報倉庫在這裏:github.com/zhangferry/… ,能夠查看README瞭解貢獻方式;另可關注公衆號:iOS成長之路,後臺點擊進羣交流,聯繫咱們。前端
開發小技巧收錄。node
在程序開發過程當中若是想將字符串和Date
類型進行互轉,就須要藉助於dateFormat進行格式指定。關於dateFormat有兩個國際標準,一個是ISO8601,一個是RFC3339,這兩個標準基本一致,但有一處不一樣是ISO容許24點,而 RFC3339 爲了減小混淆,限制小時必須在0至23之間。23:59過1分鐘,是次日的0:00。python
符號 | 含義 |
---|---|
YYYY | 按周算的年份 |
yyyy | 天然年 |
MM | 月 |
DD/dd | 天 |
hh | 小時 |
mm | 分 |
ss | 秒 |
其中比較特殊的YYYY,舉個例子:git
let dateForamtter_yyyy = DateFormatter()
dateForamtter_yyyy.timeZone = TimeZone.init(secondsFromGMT: 8)
dateForamtter_yyyy.dateFormat = "yyyy-MM-dd"
let dateString = "2015-12-31"//2015-12-30
let date = dateForamtter_yyyy.date(from: dateString)!
print(date)//2015-12-31 00:00:00 +0000
let dateForamtter_YYYY = DateFormatter()
dateForamtter_YYYY.timeZone = TimeZone.init(secondsFromGMT: 8)
dateForamtter_YYYY.dateFormat = "YYYY-MM-dd"
let dateString_YYYY = dateForamtter_YYYY.string(from: date)
print(dateString_YYYY)//2016-12-31
複製代碼
會發現使用YYYY會多出一年,這是由於YYYY是按周定義的年,即系統認爲,2015年12月31號這天是2016年的第一週。測試發現1月1號所在的那周被稱爲新年第一週,注意是按週日爲新一週第一天算的。github
這與ISO8601定義的不一樣,它的定義爲1月4號所在那一週爲新年第一週,注意這裏是以週一爲新一週第一天算的。同時它還能夠表述爲新舊年交替週四在哪一年,則該周爲哪一年的周。有一個ISO8601DateFormatter
類,能夠進行驗證:web
let dateForamtter_iso8601 = ISO8601DateFormatter()
dateForamtter_iso8601.timeZone = TimeZone.init(secondsFromGMT: 8)
dateForamtter_iso8601.formatOptions = [.withYear, .withMonth, .withDay, .withWeekOfYear]
let isoDateString = dateForamtter_iso8601.string(from: date)
print(isoDateString)//201512W5304
複製代碼
由此能夠看出蘋果的日期格式並無徹底遵照ISO8601規範,但它提供了特定類進行標準轉換。shell
對於RFC 3339 格式,能夠指定dateFormat和locale進行轉換:macos
let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
/* 39 minutes and 57 seconds after the 16th hour of December 19th, 1996 with an offset of -08:00 from UTC (Pacific Standard Time) */
let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.date(from: string)
複製代碼
參考:npm
developer.apple.com/documentati…
bug出現的現象是什麼樣的?
編譯失敗,由pod管理的三方庫提示沒法找到頭文件。在項目的引用文件中確實沒有該頭文件,去Pods
文件夾查看,發現對應庫的引用出現了一個臨時文件夾,而這裏的文件確實是缺失該頭文件的。
是如何解決的?
有兩種解決方案:
一、升級或者回退對應庫的版本號(會影響功能使用,不推薦)
二、清除對應的pod庫的緩存:
$ pod cache clean 'PodModule' —-all # 清除特定倉庫的倉庫
$ pod cache clean —-all # 清除全部庫的緩存
複製代碼
在Pods
文件裏刪除對應庫的文件,從新install
一下。
bug引起的反思
該問題僅在某個須要頻繁編譯打包的機器出現過,尚不清楚出現的緣由,猜想是頻繁的庫文件更新致使了pod文件添加出錯。由於pod是有緩存的,對於出錯的版本,它會一直加載錯誤的內容,除非換一個未被錯誤緩存的版本或者清除緩存從新install。但對於該問題的解決方式,能夠參考一下此解決方式。先確認文件引用關係,對於未正確引用的pod文件,清除緩存解決。
bug出現的現象是什麼樣的?
在製做私有pod庫時,使用Xcode12進行lint
操做,報錯提示:
ld: building for iOS Simulator, but linking in dylib built for iOS, file '/pathToSDK' for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
複製代碼
是如何解決的?
在podspec文件裏增長下面這個設置:
s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
複製代碼
bug引起的反思
Xcode 12支持arm64架構的模擬器(爲了M1芯片),pod的 lint
操做會嘗試編譯全部架構的狀況,對於沒上M1芯片的電腦,就會致使上述失敗提示。這時咱們能夠選擇在模擬器支持的架構裏去掉arm64。
shell有兩層含義,首先它表示一個應用程序,它鏈接了用戶和系統內核,讓用戶可以更加高效、安全、低成本地使用系統內核,這就是 Shell 的本質。shell自己並非shell內核,而是在內核的基礎上編寫的一個應用程序。
Linux上的shell程序有bash,zsh,Windows也有shell程序叫PowerShell。
第二層含義是腳本語言(Script),它是同JavaScript,Python,Ruby同樣的腳本語言;Shell有一套本身的語法,你能夠利用它的規則進行編程,完成不少複雜的任務。Shell腳本適合處理系統底層的操做,像Python等腳本語言也都支持直接執行shell命令。
這裏的Shell腳本語言是指可以被bash或者zsh解釋的腳本,shell腳本不能直接被windows識別,一般須要安裝bash程序輔助識別。
在iOS開發期間,shell做爲腳本經常使用於如下場景:
一、在Xcode中咱們能夠在Build Phase中添加腳本完成一些編譯時工做。
二、配置打包腳本,CI/CD等
Bash,Unix shell的一種,1989年發佈第一個正式版本,原先是計劃用在GNU操做系統上,但能運行於大多數類Unix系統的操做系統之上,包括Linux與Mac OS X v10.4起至macOS Mojave都將它做爲默認shell,而自macOS Catalina,默認Shell以zsh取代。
Bash是一個知足POSIX規範的shell,支持文件名替換(通配符匹配)、管道、here文檔、命令替換、變量,以及條件判斷和循環遍歷的結構控制語句,同時它也作了不少擴展。
一般shell腳本的第一行會寫#!/bin/bash
,即表明使用bash解釋該腳本。
zsh是一款可用做交互式登陸的shell命令解釋器,zsh對Bourne shell作了大量改進,同時加入了bash、ksh的某些功能。從macOS Catalina起系統默認shell從bash改成了zsh。
用戶社區網站Oh My Zsh專門收集zsh插件及主題,使得zsh使用起來更加便利也更受你們歡迎。
Oh My Zsh will not make you a 10x developer...but you may feel like one.
截止目前Oh My Zsh有1700+貢獻者,包含200+插件和超過140個主題。
ohmyzsh地址:github.com/ohmyzsh/ohm…
包管理器又稱軟件包管理系統,它是在電腦中安裝、配置、卸載、升級,有時還包含搜索、發佈的工具組合。
Homebrew是一款Mac OS平臺下的包管理器,擁有安裝、卸載、更新、查看、搜索等不少實用的功能。
apt-get和yum跟Homebrew相似,只不過他們適用的平臺是Linux,兩者通常會被分別安裝到Debian、Ubuntu和RedHat、CentOS中。
軟件包管理器,適用於特定開發語言,這類軟件包自己的安裝須要依賴特定語言環境。
NPM(node package manager),一般稱爲node包管理器,主要功能就是管理node包,使用Node.js開發的多數主流軟件均可以經過npm下載。
RubyGems是Ruby的一個包管理器,提供了分發Ruby程序和庫的標準格式「gem」,旨在方便地管理gem安裝的工具,以及用於分發gem的服務器。使用Ruby開發的軟件通常都經過gem進行管理。
pip 是通用的 Python 包管理工具,python3對應的是pip3。使用Python開發的軟件多使用pip進行管理。
每次打開一個新的終端窗口,第一行顯示的內容就是Last login: Tue Dec 15 19:23:41 on ttys000
,若是再開一個窗口(包括新的tab),除了時間的變化,還有就是最後的那個名稱,會變成ttys001,它會隨着窗口打開數量不斷增長。
這個ttys000是窗體的名稱,它來源於UNIX中的tty命令。終端中輸入tty,會返回當前的終端名稱:/dev/ttys000
。dev是Linux系統的設備特殊文件目錄,該目錄不可見。
另外在窗體中輸入logout
能夠關閉當前終端窗口。
Command Line Tools 是 一個運行在macos上的命令行工具集,它的安裝命令是:xcode-select --install
。
它是獨立於xcode的,名字帶有xcode只是由於它包含編譯iOS項目的命令行工具。
它安裝的內容除了clang、llvm等常見的工具外,還包括gcc、git等工具。
該工具集的安裝路徑是:/Library/Developer/CommandLineTools/usr/bin/
這期博客推薦順帶考察了一下各大廠的技術公衆號運營狀況(僅限移動端),雖然技術號不能反映一個公司的全貌,但多少仍是可以體現出該公司的開源分享精神的,順道推薦幾篇高質量的文章。內容較多,還會再有一期,前後順序不表明排名。
公衆號:愛奇藝技術產品團隊
綜合公衆號,輸出穩定,質量較高,排版方面能夠,大綠框用了很久了,真的能夠換一下🤣。
公衆號:淘系技術
綜合技術公衆號,輸出穩定且高產,質量很高,覆蓋面很廣,排版也不錯,在這幾個技術公衆號裏我感受是作的最用心也是最好的。
公衆號:閒魚技術
綜合技術公衆號,純移動端內容較少,閒魚是較早使用Flutter的團隊,這裏有很多Flutter 相關的實戰乾貨。
公衆號:百度App技術
偏前端的公衆號,穩定輸出,質量能夠,可是選題較單一,排版有待提升。
百度App Objective-C/Swift 組件化混編之路(一)
百度App Objective-C/Swift 組件化混編之路(二)- 工程化
公衆號:字節跳動技術團隊
綜合技術公衆號,輸出穩定,質量較高,感受僅次於淘系技術。
iOS性能優化實踐:頭條抖音如何實現OOM崩潰率降低50%+
今日頭條優化實踐: iOS 包大小二進制優化,一行代碼減小 60 MB 下載大小
公衆號:京東零售技術
綜合技術公衆號,穩定輸出,質量也能夠,排版感受通常,有待提升。
公衆號:網易雲音樂大前端團隊
大前端技術公衆號,移動端相對較少,輸出穩定,質量能夠。從2020年5月份創建,排版不斷在優化,最新一期挺不錯,跟字節跳動技術團隊風格一致了。
網易還有另外兩個技術號,網易傳媒技術團隊,輸出相對少,有興趣的也能夠看下。
很抱歉,沒有找到他們的技術公衆號,只搜到一堆砍價羣0。0,若是有了解的小夥伴能夠告知下。
鹹魚團隊對Flutter技術的探索與實戰分析,據說他們已經在準備寫第二本Flutter書了。能夠關注公衆號:鹹魚技術獲取,後臺免費獲取,另有實體書能夠淘寶搜索購買。
掘金做者 戀貓的小郭 寫的Flutter實戰詳解,能夠在京東、噹噹搜索購買實體或者電子版圖書閱讀。另外做者本人還有一個介紹 Flutter 技術的文章合輯,其與實體書不一樣,但內容仍是很詳實的,對Flutter 感興趣,想學習的話,能夠點開閱讀。
地址:GSY Flutter
推薦好用的開發工具。
推薦來源:zhangferry
下載地址:ezip.awehunt.com/
軟件狀態:免費
使用介紹
Mac上很是好用的解壓縮軟件:
推薦來源:zhangferry
下載地址:u.tools/
軟件狀態:免費(部分功能付費)
使用介紹
uTools是一個豐富的生產力工具集,支持將近百種的插件。它的使用方式和 Alfred 相似,經過快捷鍵調出輸入框,並經過特殊指令執行結果。但它有比 Alfred 更簡單的插件集成方式,在我看來它是更易用的。
公衆號:iOS成長之路