iOS開發(fā)月報(bào)#6|201812

大事件


這個(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 億美元。


news.png

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

rwx.png
$ 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)如下:

Energy Debug Gauge.png

分析可知雖然此時(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)耗電情況:

image.png

此時(shí)app被掛起,耗電量基本為0,喚醒a(bǔ)pp,仍能正常工作。問題解決。

推薦閱讀


嘗試分模塊整理推薦閱讀的內(nèi)容

iOS開發(fā)過程中的設(shè)計(jì)模式

design pattern.jpeg

設(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逆向

apple-hook.png

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在命令行打開指定路徑的工具。

workflow.png
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??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,939評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內(nèi)容

  • 作者:貓芙蓉,更多兩性文章請關(guān)注公眾號(hào)《貓芙蓉》 這是一個(gè)實(shí)錄故事,社會(huì)的飛速發(fā)展讓現(xiàn)代女性活的越來越天性解放,越...
    貓芙蓉閱讀 5,929評論 5 9
  • 在這里,希望喜歡它的人一起每日感悟人生哲理,為你的生活多一點(diǎn)改變。(開心不開的時(shí)候讀讀,心情都會(huì)好很多,何樂而不為...
    林窗鯨落閱讀 247評論 0 0
  • 婚夜酒酣花燭昏, 呢喃春夢永不分。 伴我白發(fā)謝黑...
    西召閱讀 365評論 3 2
  • 一、起源 最近一個(gè)朋友需要實(shí)現(xiàn)一個(gè)UI效果,其實(shí)說起來也是很簡單的東西,就是: 需要實(shí)現(xiàn)一個(gè)UICollectio...
    __LuckyPan__閱讀 592評論 0 3
  • 3月16日,天使33班3.0開學(xué)典禮開始了,對于我來講,又將是一個(gè)新的開始。 從2017年5月開始在喜馬拉雅上聽時(shí)...
    小兔子棉花糖閱讀 239評論 0 0