大事件
這個月的大事件是高通與蘋果之間的專利大戰(zhàn)。高通分別在中國和德國對蘋果公司提起專利訴訟,結(jié)果均勝。蘋果將在中國禁售iPhoneX及之前的機(jī)型。在德國則是全面禁售。
加上新品手機(jī)的創(chuàng)新力度不夠,導(dǎo)致蘋果股票持續(xù)走低,四個月前,蘋果還是首個突破萬億美元市值的上市公司,到現(xiàn)在股價已經(jīng)下跌了 36%,市值只有 7160 億美元,幾個月內(nèi)市值損失接近 3000 億美元。

Tips
更換啟動圖不生效
現(xiàn)象:更換啟動圖,不生效,即使刪除舊圖,運(yùn)行程序啟動圖仍然是之前的版本。
嘗試了刪除app重裝,clean、重啟Xcode,刪除DriverData,還試過挪圖片位置,改名字,均無效。最后嘗試了重啟手機(jī)->再安裝才正常。
問題分析:這個是系統(tǒng)問題,為了加快程序啟動的速度系統(tǒng)會把啟動圖做個緩存,之后每次啟動是加載緩存啟動圖,所以才會出現(xiàn)修改不生效問題。但我們也并不知道系統(tǒng)會什么時候更新啟動圖,這個就有點(diǎn)尷尬??
stackoverflow上有關(guān)于這個問題的討論:
iOS Keeping old launch screen and app icon after update
有人說這個不影響線上版本,從上線之后的測試來看,大部分用戶沒有受到影響,但還是出現(xiàn)了部分手機(jī)升級卻未更換啟動圖的問題。
因為是系統(tǒng)層面控制,沒有太好的解決方案,如果有人遇到這個情況,需要注意一下。
賦值權(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
再講兩個:
chmod u=rwx, go=rx .barshrc 這個命令中u表示擁有者,g表示group中的用戶,o表示others,和上面的想對應(yīng)。注意go=rx,這里go是拼接起來的,表示g和o的用戶有讀和執(zhí)行的權(quán)限。
$ chmod a+w .barshrc
表示所有的用戶(a表示all)增加寫的權(quán)限。
App圖片瘦身
隨著項目版本的不斷迭代,會很容易積累越來越多的圖片,對這些圖片我們有兩個主要方面可以優(yōu)化:
1、刪除不用的圖片
我們需要借助一個工具LSUnusedResources
它可以檢索項目中未使用的圖片資源,我們可以指定檢索圖片的路徑,后綴進(jìn)行過濾。
注意:無法區(qū)分png序列的引用。最好手動刪除
2、圖片壓縮
可以通過ImageOptim,對圖片進(jìn)行無損壓縮。使用時只需將要壓縮的文件拖到程序中即可。
如果圖片較多時,可以借助其命令行工具:
/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
該工具還有一個Sketch插件:Plugin for Sketch
,可以在輸出icon的時候直接進(jìn)行壓縮優(yōu)化。
后臺音頻耗電問題
功能:一段助眠音頻可以后臺播放,播放完成后如果返回app,會跳到對應(yīng)的完成界面。
問題:有用戶反饋,聽音頻睡著了,早上醒來,電量掉了很多(40%)。
調(diào)研:
使用Xcode中 Debug Navigator欄的Energy Debug Gauge(需真機(jī))測試。播放完成4分鐘左右的后臺耗電狀態(tài)如下:

分析可知雖然此時app停止了所有行為,但是生命周期仍處于
Background狀態(tài),耗電量也還是存在的。暫時認(rèn)為問題是客戶端一直處于Background模式,并未被Suspend,導(dǎo)致一直被系統(tǒng)維護(hù)著,所以一直有耗電情況。
再一次查看蘋果關(guān)于后臺模式的文檔:
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.
可知,只要播放器未被銷毀,就會一直占用后臺模式!
解決方案:
在播放完成時銷毀播放器。
檢驗:
再次觀察播放音頻完成一段時間之后的后臺耗電情況:

此時app被掛起,耗電量基本為0,喚醒a(bǔ)pp,仍能正常工作。問題解決。
推薦閱讀
嘗試分模塊整理推薦閱讀的內(nèi)容
iOS開發(fā)過程中的設(shè)計模式

設(shè)計模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設(shè)計模式于己于他人于系統(tǒng)都是多贏的,設(shè)計模式使代碼編制真正工程化,設(shè)計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項目中合理地運(yùn)用設(shè)計模式可以完美地解決很多問題,每種模式在現(xiàn)實中都有相應(yīng)的原理來與之對應(yīng),每種模式都描述了一個在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的核心解決方案,這也是設(shè)計模式能被廣泛應(yīng)用的原因。
以上摘自菜鳥教程
Swift中的策略模式
從一個小例子入手,講解策略模式在swift中的使用。
Swift 中的設(shè)計模式 #1 工廠方法與單例方法
Swift 中的設(shè)計模式 #2 觀察者模式與備忘錄模式
Swift 中的設(shè)計模式 #3 外觀模式與適配器模式
SwiftGG翻譯組翻譯的設(shè)計模式系列文章。
設(shè)計模式資料整理
應(yīng)該是目前總結(jié)最全的適合iOS開發(fā)的設(shè)計模式資料匯總。
iOS逆向

iOS應(yīng)用逆向工程,是指從目標(biāo)應(yīng)用的界面及功能表現(xiàn)入手,使用不同的工具和理論知識去分析其實現(xiàn)原理,得出應(yīng)用的代碼結(jié)構(gòu)、整體設(shè)計、功能實現(xiàn)、執(zhí)行流程等,然后利用iOS的系統(tǒng)知識和語言特性,借鑒或修改原有實現(xiàn)流程的技術(shù)。
推薦兩篇掘金上關(guān)于iOS逆向的文章:
TikTok(抖音國際版)逆向,全球的小姐姐們,我來啦!
逆向 Mac 應(yīng)用 Bartender
這兩篇都是通過具體實例入手,講解逆向常用的工具和一些逆向的思路,非常適合新手。最好跟著介紹實際操作一番,第一次成功逆向一個項目之后,那種爽歪歪的感覺,你懂的!
另外推薦一位逆向領(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īng)常被稱為批處理語言或工作控制語言。一個腳本通常是解釋運(yùn)行而非編譯。腳本語言通常都有簡單、易學(xué)、易用的特性,目的就是希望能讓程序員快速完成程序的編寫工作
文章選自少數(shù)派,講述了:
- 什么是 AppleScript?
- 我使用 AppleScript 的情境
- AppleScript 基礎(chǔ)語法
- AppleScript suite 之外的解法:模擬鍵鼠
非常清晰詳細(xì)的AppleScript入門文章。
如何提高工作效率 - 自動化篇
文章選自掘金,串聯(lián)Shell Script, Apple Script, Automator, Alfred & WorkFlows,告訴你如果靈活應(yīng)用,達(dá)到利用腳本提高工作效率的目的。
我寫了一個利用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 在群里說了個好消息,他拿到了美國 Google 的 Offer。群友們紛紛表示祝賀并進(jìn)行了隆重的認(rèn)哥儀式,將 SwiftGG 誕生以來第一個 GG(哥哥) 稱號頒發(fā)給我們公認(rèn)的大哥 Cee。
以上兩個音頻來自于(ggtalk)[https://talk.swift.gg/],也是我最近上下班路上用來消遣的音頻節(jié)目,墻裂推薦!
計算機(jī)科學(xué)速成課
由Carrie Anne Philbin主講,Carrie Anne Philbin是一名計算機(jī)科學(xué)教師和作家。她是樹莓派基金會的教育主管,也是學(xué)校(CAS)多樣性和包容組的主席。她為青少年寫了電腦書《樹莓派歷險記》。特意介紹是因為我感覺這個課程因為這個主講人的個人魅力而趣味十足??。不管你是不是計算機(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
這個項目有一定的調(diào)侃意味,so what? 我選擇swift??