大事件
這個(gè)月的大事件是高通與蘋果之間的專利大戰(zhàn)。高通分別在中國和德國對蘋果公司提起專利訴訟,結(jié)果均勝。蘋果將在中國禁售iPhoneX及之前的機(jī)型。在德國則是全面禁售。
加上新品手機(jī)的創(chuàng)新力度不夠,導(dǎo)致蘋果股票持續(xù)走低,四個(gè)月前,蘋果還是首個(gè)突破萬億美元市值的上市公司,到現(xiàn)在股價(jià)已經(jīng)下跌了 36%,市值只有 7160 億美元,幾個(gè)月內(nèi)市值損失接近 3000 億美元。
Tips
更換啟動(dòng)圖不生效
現(xiàn)象:更換啟動(dòng)圖,不生效,即使刪除舊圖,運(yùn)行程序啟動(dòng)圖仍然是之前的版本。
嘗試了刪除app重裝,clean、重啟Xcode,刪除DriverData,還試過挪圖片位置,改名字,均無效。最后嘗試了重啟手機(jī)->再安裝才正常。
問題分析:這個(gè)是系統(tǒng)問題,為了加快程序啟動(dòng)的速度系統(tǒng)會(huì)把啟動(dòng)圖做個(gè)緩存,之后每次啟動(dòng)是加載緩存啟動(dòng)圖,所以才會(huì)出現(xiàn)修改不生效問題。但我們也并不知道系統(tǒng)會(huì)什么時(shí)候更新啟動(dòng)圖,這個(gè)就有點(diǎn)尷尬??
stackoverflow上有關(guān)于這個(gè)問題的討論:
iOS Keeping old launch screen and app icon after update
有人說這個(gè)不影響線上版本,從上線之后的測試來看,大部分用戶沒有受到影響,但還是出現(xiàn)了部分手機(jī)升級卻未更換啟動(dòng)圖的問題。
因?yàn)槭窍到y(tǒng)層面控制,沒有太好的解決方案,如果有人遇到這個(gè)情況,需要注意一下。
賦值權(quán)限
在Mac 系統(tǒng)的終端上修改文件權(quán)限使用的是 Linux 中的 chmod 命令:
r:可讀,表示可以讀取內(nèi)容
w:可寫,表示可以編輯內(nèi)容,但是不可以刪除文件
x: 可執(zhí)行,表示可以執(zhí)行文件。
r:4
w:2
x:1
rwx=4+2+1=7
$ chmod 777 file
這行命令的意思就是:文件所有者權(quán)限是7,同用戶組的權(quán)限是7,其他非本地用戶組的權(quán)限是7。同理可以出現(xiàn)這樣的命令 chmod740.barshrc
再講兩個(gè):
chmod u=rwx, go=rx .barshrc 這個(gè)命令中u表示擁有者,g表示group中的用戶,o表示others,和上面的想對應(yīng)。注意go=rx,這里go是拼接起來的,表示g和o的用戶有讀和執(zhí)行的權(quán)限。
$ chmod a+w .barshrc
表示所有的用戶(a表示all)增加寫的權(quán)限。
App圖片瘦身
隨著項(xiàng)目版本的不斷迭代,會(huì)很容易積累越來越多的圖片,對這些圖片我們有兩個(gè)主要方面可以優(yōu)化:
1、刪除不用的圖片
我們需要借助一個(gè)工具LSUnusedResources
它可以檢索項(xiàng)目中未使用的圖片資源,我們可以指定檢索圖片的路徑,后綴進(jìn)行過濾。
注意:無法區(qū)分png序列的引用。最好手動(dòng)刪除
2、圖片壓縮
可以通過ImageOptim,對圖片進(jìn)行無損壓縮。使用時(shí)只需將要壓縮的文件拖到程序中即可。
如果圖片較多時(shí),可以借助其命令行工具:
/Applications/ImageOptim.app/Contents/MacOS/ImageOptim $file_name
對應(yīng)的shell腳本:
# 處理文件名出現(xiàn)空格問題
MY_IFS=$IFS
IFS=$'\n'
for file_name in $(find "$1" -name "*.png" -type f); do
echo $file_name
/Applications/ImageOptim.app/Contents/MacOS/ImageOptim $file_name
done
IFS=$MY_IFS
該工具還有一個(gè)Sketch插件:Plugin for Sketch
,可以在輸出icon的時(shí)候直接進(jìn)行壓縮優(yōu)化。
后臺(tái)音頻耗電問題
功能:一段助眠音頻可以后臺(tái)播放,播放完成后如果返回app,會(huì)跳到對應(yīng)的完成界面。
問題:有用戶反饋,聽音頻睡著了,早上醒來,電量掉了很多(40%)。
調(diào)研:
使用Xcode中 Debug Navigator
欄的Energy Debug Gauge
(需真機(jī))測試。播放完成4分鐘左右的后臺(tái)耗電狀態(tài)如下:
分析可知雖然此時(shí)app停止了所有行為,但是生命周期仍處于
Background
狀態(tài),耗電量也還是存在的。暫時(shí)認(rèn)為問題是客戶端一直處于Background
模式,并未被Suspend
,導(dǎo)致一直被系統(tǒng)維護(hù)著,所以一直有耗電情況。
再一次查看蘋果關(guān)于后臺(tái)模式的文檔:
When the UIBackgroundModes key contains the audio value, the system’s media frameworks automatically prevent the corresponding app from being suspended when it moves to the background. As long as it is playing audio or video content or recording audio content, the app continues to run in the background. However, if recording or playback stops, the system suspends the app.
可知,只要播放器未被銷毀,就會(huì)一直占用后臺(tái)模式!
解決方案:
在播放完成時(shí)銷毀播放器。
檢驗(yàn):
再次觀察播放音頻完成一段時(shí)間之后的后臺(tái)耗電情況:
此時(shí)app被掛起,耗電量基本為0,喚醒a(bǔ)pp,仍能正常工作。問題解決。
推薦閱讀
嘗試分模塊整理推薦閱讀的內(nèi)容
iOS開發(fā)過程中的設(shè)計(jì)模式
設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設(shè)計(jì)模式于己于他人于系統(tǒng)都是多贏的,設(shè)計(jì)模式使代碼編制真正工程化,設(shè)計(jì)模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項(xiàng)目中合理地運(yùn)用設(shè)計(jì)模式可以完美地解決很多問題,每種模式在現(xiàn)實(shí)中都有相應(yīng)的原理來與之對應(yīng),每種模式都描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的核心解決方案,這也是設(shè)計(jì)模式能被廣泛應(yīng)用的原因。
以上摘自菜鳥教程
Swift中的策略模式
從一個(gè)小例子入手,講解策略模式在swift中的使用。
Swift 中的設(shè)計(jì)模式 #1 工廠方法與單例方法
Swift 中的設(shè)計(jì)模式 #2 觀察者模式與備忘錄模式
Swift 中的設(shè)計(jì)模式 #3 外觀模式與適配器模式
SwiftGG翻譯組翻譯的設(shè)計(jì)模式系列文章。
設(shè)計(jì)模式資料整理
應(yīng)該是目前總結(jié)最全的適合iOS開發(fā)的設(shè)計(jì)模式資料匯總。
iOS逆向
iOS應(yīng)用逆向工程,是指從目標(biāo)應(yīng)用的界面及功能表現(xiàn)入手,使用不同的工具和理論知識(shí)去分析其實(shí)現(xiàn)原理,得出應(yīng)用的代碼結(jié)構(gòu)、整體設(shè)計(jì)、功能實(shí)現(xiàn)、執(zhí)行流程等,然后利用iOS的系統(tǒng)知識(shí)和語言特性,借鑒或修改原有實(shí)現(xiàn)流程的技術(shù)。
推薦兩篇掘金上關(guān)于iOS逆向的文章:
TikTok(抖音國際版)逆向,全球的小姐姐們,我來啦!
逆向 Mac 應(yīng)用 Bartender
這兩篇都是通過具體實(shí)例入手,講解逆向常用的工具和一些逆向的思路,非常適合新手。最好跟著介紹實(shí)際操作一番,第一次成功逆向一個(gè)項(xiàng)目之后,那種爽歪歪的感覺,你懂的!
另外推薦一位逆向領(lǐng)域的牛人劉培慶(博客,github),了解逆向的同學(xué)大多應(yīng)該都不陌生,iOS方面的逆向優(yōu)先參照 MonkeyDev。
劉總今年出了新書《iOS應(yīng)用逆向與安全》,非常適合對逆向有興趣的同學(xué)。
利用腳本提高工作效率
腳本語言(英語:Scripting language)是為了縮短傳統(tǒng)的“編寫、編譯、鏈接、運(yùn)行”(edit-compile-link-run)過程而創(chuàng)建的計(jì)算機(jī)編程語言。早期的腳本語言經(jīng)常被稱為批處理語言或工作控制語言。一個(gè)腳本通常是解釋運(yùn)行而非編譯。腳本語言通常都有簡單、易學(xué)、易用的特性,目的就是希望能讓程序員快速完成程序的編寫工作
AppleScript入門:探索macOS自動(dòng)化
文章選自少數(shù)派,講述了:
- 什么是 AppleScript?
- 我使用 AppleScript 的情境
- AppleScript 基礎(chǔ)語法
- AppleScript suite 之外的解法:模擬鍵鼠
非常清晰詳細(xì)的AppleScript入門文章。
如何提高工作效率 - 自動(dòng)化篇
文章選自掘金,串聯(lián)Shell Script, Apple Script, Automator, Alfred & WorkFlows,告訴你如果靈活應(yīng)用,達(dá)到利用腳本提高工作效率的目的。
我寫了一個(gè)利用AppleScript和Alfred的WorkFlows在命令行打開指定路徑的工具。
on run argv
tell application "Finder"
-- get selection path
set pathFile to selection as text
set pathFile to get POSIX path of pathFile
-- fix space problem in the directory
set pathFile to quoted form of pathFile
tell application "Terminal"
activate
tell window 1
do script "cd " & pathFile
end tell
end tell
end tell
end run
使用方法是:點(diǎn)擊選中文件夾,按下熱鍵CMD + T
。
音視頻
創(chuàng)業(yè)那點(diǎn)事:聽蓮叔和羊叔回憶崢嶸歲月
蓮叔和羊叔是 SwiftGG 翻譯組的真·大佬。成績好,學(xué)歷高,思維縝密,能力很強(qiáng)。聽過《升職加薪》那期節(jié)目的朋友應(yīng)該都有印象。作為標(biāo)準(zhǔn)的技術(shù)人才,在創(chuàng)業(yè)大潮中自然也想試試身手,打拼一番。
和 Cee 聊聊如何拿 Google Offer
翻譯組里真是人才輩出啊,前幾天 Cee 在群里說了個(gè)好消息,他拿到了美國 Google 的 Offer。群友們紛紛表示祝賀并進(jìn)行了隆重的認(rèn)哥儀式,將 SwiftGG 誕生以來第一個(gè) GG(哥哥) 稱號(hào)頒發(fā)給我們公認(rèn)的大哥 Cee。
以上兩個(gè)音頻來自于(ggtalk)[https://talk.swift.gg/],也是我最近上下班路上用來消遣的音頻節(jié)目,墻裂推薦!
計(jì)算機(jī)科學(xué)速成課
由Carrie Anne Philbin主講,Carrie Anne Philbin是一名計(jì)算機(jī)科學(xué)教師和作家。她是樹莓派基金會(huì)的教育主管,也是學(xué)校(CAS)多樣性和包容組的主席。她為青少年寫了電腦書《樹莓派歷險(xiǎn)記》。特意介紹是因?yàn)槲腋杏X這個(gè)課程因?yàn)檫@個(gè)主講人的個(gè)人魅力而趣味十足??。不管你是不是計(jì)算機(jī)專業(yè)的學(xué)生,看過之后應(yīng)該都能有所收獲。
Github
12306ForMac
以前要么開Windows虛擬機(jī),要么使用官方Web,現(xiàn)在可以使用12306ForMac訂票助手啦。希望對大家有所幫助!
LongestCocoa
SoWhatIsTheLongestMethodOrConstantNamesInCocoaFramework? (那么,Cocoa框架中最長的方法名或常量名是什么?)答案是:
outputImageProviderFromBufferWithPixelFormat:pixelsWide:pixelsHigh:baseAddress:bytesPerRow:releaseCallback:releaseContext:colorSpace:shouldColorMatch:
kCMSampleBufferConduitNotificationParameter_UpcomingOutputPTSRangeMayOverlapQueuedOutputPTSRange
這個(gè)項(xiàng)目有一定的調(diào)侃意味,so what? 我選擇swift??