iOS開發月報#6|201812

大事件

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

Tips

更換啓動圖不生效

現象:更換啓動圖,不生效,即使刪除舊圖,運行程序啓動圖仍然是之前的版本。 嘗試了刪除app重裝,clean、重啓Xcode,刪除DriverData,還試過挪圖片位置,改名字,均無效。最後嘗試了重啓手機->再安裝才正常。

問題分析:這個是系統問題,爲了加快程序啓動的速度系統會把啓動圖做個緩存,之後每次啓動是加載緩存啓動圖,所以纔會出現修改不生效問題。但我們也並不知道系統會什麼時候更新啓動圖,這個就有點尷尬😓 stackoverflow上有關於這個問題的討論: iOS Keeping old launch screen and app icon after update

有人說這個不影響線上版本,從上線之後的測試來看,大部分用戶沒有受到影響,但還是出現了部分手機升級卻未更換啓動圖的問題。 因爲是系統層面控制,沒有太好的解決方案,如果有人遇到這個情況,需要注意一下。

賦值權限

在Mac 系統的終端上修改文件權限使用的是 Linux 中的 chmod 命令: r:可讀,表示可以讀取內容 w:可寫,表示可以編輯內容,但是不可以刪除文件 x: 可執行,表示可以執行文件。

r:4 w:2 x:1

rwx=4+2+1=7

$ chmod 777 file
複製代碼

這行命令的意思就是:文件所有者權限是7,同用戶組的權限是7,其他非本地用戶組的權限是7。同理可以出現這樣的命令 chmod740.barshrc

再講兩個: chmod u=rwx, go=rx .barshrc 這個命令中u表示擁有者,g表示group中的用戶,o表示others,和上面的想對應。注意go=rx,這裏go是拼接起來的,表示g和o的用戶有讀和執行的權限。

$ chmod a+w .barshrc
複製代碼

表示所有的用戶(a表示all)增加寫的權限。

App圖片瘦身

隨着項目版本的不斷迭代,會很容易積累越來越多的圖片,對這些圖片我們有兩個主要方面可以優化:

1、刪除不用的圖片

我們需要藉助一個工具LSUnusedResources 它可以檢索項目中未使用的圖片資源,我們可以指定檢索圖片的路徑,後綴進行過濾。 注意:無法區分png序列的引用。最好手動刪除

2、圖片壓縮

可以通過ImageOptim,對圖片進行無損壓縮。使用時只需將要壓縮的文件拖到程序中即可。 如果圖片較多時,可以藉助其命令行工具:

/Applications/ImageOptim.app/Contents/MacOS/ImageOptim $file_name
複製代碼

對應的shell腳本:

# 處理文件名出現空格問題
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的時候直接進行壓縮優化。

後臺音頻耗電問題

功能: 一段助眠音頻可以後臺播放,播放完成後如果返回app,會跳到對應的完成界面。

問題: 有用戶反饋,聽音頻睡着了,早上醒來,電量掉了很多(40%)。

調研: 使用Xcode中 Debug Navigator欄的Energy Debug Gauge(需真機)測試。播放完成4分鐘左右的後臺耗電狀態如下:

分析可知雖然此時app停止了所有行爲,但是生命週期仍處於Background狀態,耗電量也還是存在的。暫時認爲問題是客戶端一直處於Background模式,並未被Suspend,導致一直被系統維護着,所以一直有耗電情況。

再一次查看蘋果關於後臺模式的文檔:

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,喚醒app,仍能正常工作。問題解決。

推薦閱讀

嘗試分模塊整理推薦閱讀的內容

iOS開發過程中的設計模式

設計模式是一套被反覆使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是爲了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項目中合理地運用設計模式可以完美地解決很多問題,每種模式在現實中都有相應的原理來與之對應,每種模式都描述了一個在我們周圍不斷重複發生的問題,以及該問題的核心解決方案,這也是設計模式能被廣泛應用的原因。

以上摘自菜鳥教程

Swift中的策略模式 從一個小例子入手,講解策略模式在swift中的使用。

Swift 中的設計模式 #1 工廠方法與單例方法

Swift 中的設計模式 #2 觀察者模式與備忘錄模式

Swift 中的設計模式 #3 外觀模式與適配器模式

SwiftGG翻譯組翻譯的設計模式系列文章。

設計模式資料整理 應該是目前總結最全的適合iOS開發的設計模式資料彙總。

iOS逆向

iOS應用逆向工程,是指從目標應用的界面及功能表現入手,使用不同的工具和理論知識去分析其實現原理,得出應用的代碼結構、整體設計、功能實現、執行流程等,然後利用iOS的系統知識和語言特性,借鑑或修改原有實現流程的技術。

推薦兩篇掘金上關於iOS逆向的文章:

TikTok(抖音國際版)逆向,全球的小姐姐們,我來啦!

逆向 Mac 應用 Bartender

這兩篇都是通過具體實例入手,講解逆向常用的工具和一些逆向的思路,非常適合新手。最好跟着介紹實際操作一番,第一次成功逆向一個項目之後,那種爽歪歪的感覺,你懂的!

另外推薦一位逆向領域的牛人劉培慶(博客github),瞭解逆向的同學大多應該都不陌生,iOS方面的逆向優先參照 MonkeyDev。 劉總今年出了新書《iOS應用逆向與安全》,非常適合對逆向有興趣的同學。

利用腳本提高工作效率

腳本語言(英語:Scripting language)是爲了縮短傳統的“編寫、編譯、鏈接、運行”(edit-compile-link-run)過程而創建的計算機編程語言。早期的腳本語言經常被稱爲批處理語言或工作控制語言。一個腳本通常是解釋運行而非編譯。腳本語言通常都有簡單、易學、易用的特性,目的就是希望能讓程序員快速完成程序的編寫工作

AppleScript入門:探索macOS自動化

文章選自少數派,講述了:

  • 什麼是 AppleScript?
  • 我使用 AppleScript 的情境
  • AppleScript 基礎語法
  • AppleScript suite 之外的解法:模擬鍵鼠

非常清晰詳細的AppleScript入門文章。 如何提高工作效率 - 自動化篇 文章選自掘金,串聯Shell Script, Apple Script, Automator, Alfred & WorkFlows,告訴你如果靈活應用,達到利用腳本提高工作效率的目的。

我寫了一個利用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
複製代碼

使用方法是:點擊選中文件夾,按下熱鍵CMD + T

音視頻

創業那點事:聽蓮叔和羊叔回憶崢嶸歲月 蓮叔和羊叔是 SwiftGG 翻譯組的真·大佬。成績好,學歷高,思維縝密,能力很強。聽過《升職加薪》那期節目的朋友應該都有印象。作爲標準的技術人才,在創業大潮中自然也想試試身手,打拼一番。

和 Cee 聊聊如何拿 Google Offer 翻譯組裏真是人才輩出啊,前幾天 Cee 在羣裏說了個好消息,他拿到了美國 Google 的 Offer。羣友們紛紛表示祝賀並進行了隆重的認哥儀式,將 SwiftGG 誕生以來第一個 GG(哥哥) 稱號頒發給我們公認的大哥 Cee。

以上兩個音頻來自於ggtalk,也是我最近上下班路上用來消遣的音頻節目,牆裂推薦!

計算機科學速成課Carrie Anne Philbin主講,Carrie Anne Philbin是一名計算機科學教師和作家。她是樹莓派基金會的教育主管,也是學校(CAS)多樣性和包容組的主席。她爲青少年寫了電腦書《樹莓派歷險記》。特意介紹是因爲我感覺這個課程因爲這個主講人的個人魅力而趣味十足😄。不管你是不是計算機專業的學生,看過之後應該都能有所收穫。

Github

12306ForMac

以前要麼開Windows虛擬機,要麼使用官方Web,現在可以使用12306ForMac訂票助手啦。希望對大家有所幫助!

LongestCocoa

SoWhatIsTheLongestMethodOrConstantNamesInCocoaFramework? (那麼,Cocoa框架中最長的方法名或常量名是什麼?)答案是:

  • outputImageProviderFromBufferWithPixelFormat:pixelsWide:pixelsHigh:baseAddress:bytesPerRow:releaseCallback:releaseContext:colorSpace:shouldColorMatch:

  • kCMSampleBufferConduitNotificationParameter_UpcomingOutputPTSRangeMayOverlapQueuedOutputPTSRange

這個項目有一定的調侃意味,so what? 我選擇swift🤣

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