iOS開發(fā)月報#5|201811

大事件


11月27號,蘋果AppStore下架包括拼多多、搜狗地圖、訊飛閱讀和悅跑圈在內的共718個App。據(jù)稱下架原因是觸發(fā)了AppStroe審核指南的2.5.2條例,即使用了熱更新技術。去年6月份,蘋果層因熱更新下架數(shù)萬款App。


C6D6A56886BF8346FA56A046C2BEE023.jpg

Tips

圖片渲染開銷

我們知道,解壓后的圖片是由無數(shù)像素數(shù)據(jù)組成。每個像素點通常包括紅、綠、藍和 alpha 數(shù)據(jù),每個值都是 8 位(0–255),因此一個像素通常會占用 4 個字節(jié)(32 bit per pixel。少數(shù)專業(yè)的 app 可能會用更大的空間來表示色深,消耗的內存會相應線性增加)。

下面我們來計算一些通常的圖片開銷:

普通圖片大小,如 500 * 600 * 32bpp = 1MB
跟 iPhone X 屏幕一樣大的:1125 * 2436 * 32bpp = 10MB
即刻中允許最大的圖片,總像素不超過1500w:15000000 * 32bpp = 57MB
有了大致的概念,以后看到一張圖能簡單預估,大概會吃掉多少內存。

關于iOS開發(fā)證書在鑰匙串沒有秘鑰的問題

當前現(xiàn)象


D9E4F2DFEAAA7AB5D4CEC1A380A8221E.jpg

只需要將證書拖到登錄,即可生成秘鑰


B91143F5C7B2BEA07FAF8849766D163E.jpg

APP內切換語言

APP內切換語言有一種比較簡單的實現(xiàn)方式,實現(xiàn)步驟是:
1、存儲語言狀態(tài)
2、刷新KeyWindow.rootViewController
3、刷新Bundle
4、切換語言對應的更新操作
實現(xiàn)過程:

//1、切換語言,AppleLanguages對應內容是數(shù)組,語言符合可以通過Bundle.main.localizations查看
//切換至繁體中文,存儲狀態(tài)
UserDefaults.standard.set(["zh-Hant"], forKey: "AppleLanguages")
//2、刷新keyWindow,createRootViewController為創(chuàng)建rootViewController的方法
UIApplication.shared.keyWindow?.rootViewController = Application.shared.createRootViewController()

//3、更換bundle
//在切換語言的時候,我們需要執(zhí)行一下,Bundle的exchangeBundle方法
extension Bundle {
    static func getLocalizedBundle() -> Bundle {
        if let languages = UserDefaults.standard.object(forKey: "AppleLanguages") as? [String],
                let lan = languages.first,
                let path = Bundle.main.path(forResource: lan, ofType: "lproj"),
                let bundle = Bundle.init(path: path){
                return bundle
            } else {
                return Bundle.main
            }
    }
    static func exchangeBundle(){
        //替換Bundle.main為自定義的BundleLocal
        object_setClass(Bundle.main, BundleLocal.self)
    }
}

class BundleLocal: Bundle {
    override func localizedString(forKey key: String, value: String?, table tableName: String?) -> String {
        return Bundle.getLocalizedBundle().localizedString(forKey: key, value: value, table: tableName)
    }
}


//4、其他更新操作,如接口,UI界面

測試內購時長

當我們測試內購時,需要考慮內購到期的情況。比如我測試購買了一個月的服務,那么購買到期的情況呢,不能傻傻地等一個月時間吧?
其實蘋果給出了不同內購時長在Debug情況下對應的測試時間。


04DF44800E5F07286951E4BE11342A89.jpg

AVPlayer進入前臺自動播放

在我們不進行任何前后臺設置的情況下,AVPlayer進入后臺,會自動暫停播放。再次回到前臺時,播放器會有一定概率自動恢復播放(多大概率未知,測試得出的結論)。

如果這個恢復播放不是我們需要的,或者我們需要避免這種不確定的情況發(fā)生,我們可以手動管理這個過程:

NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: self, queue: nil) { (notification) in
      self.player.pause()
}
        
NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: self, queue: nil) { (notification) in
    //根據(jù)需要是否需要恢復播放
    if shouleRecoverPlayer {
        self.player.play()
    } else {
        self.player.pause()
    }
    
}

iOS12.1關于tabbar的一個bug

觸發(fā)條件:

  • 使用 UITabBarController + UINavigationController 組合
  • UITabBar帶半透明效果,isTranslucent 屬性為 true
  • UIViewControllerhidesBottomBarWhenPushed 屬性為 true
  • 通過導航欄返回上一頁時(導航欄返回按鈕 or 屏幕左側的滑動返回手勢)

問題現(xiàn)象:

20181112163203240.gif

經確認是iOS12.1上的一個bug。
解決方案:

//MARK: - fix ios12.1 tabbar bug
let tabbar = UITabBar.appearance()
tabbar.isTranslucent = false

詳細內容可以參考:
修復 iOS12.1 UITabBar 布局位移bug - ZHFDBK的博客 - CSDN博客
swift - UITabBar items jumping on back navigation on iOS 12.1 - Stack Overflow

推薦內容

重構Swift中的Identifiers

面對越來越多的identifier,改如何優(yōu)雅地處理?
文中講了一些UITableViewCellUICollectionViewCell、segues、UIStoryboards、UIViewController中關于identifiers的重構方法。

The End Is Near for Mobile Apps

移動應用的末日將要來臨?
Medium科技板塊最近比較火的一篇文章,分上下兩篇,講述移動應用的前景和趨勢。

Realm學院

這是Realm建立的一個用于學習編程技術的網(wǎng)站,主要方式是視頻,內容配有字幕,并且都全部整理成文章。涵蓋范圍有Realm, Android, iOS, JavaScript, Architecture等。

文章質量非常高!

開發(fā)利器

KTVHTTPCache

應該是iOS端目前最好的流媒體緩存框架了。

Realm

Realm是一個開源的對象數(shù)據(jù)庫管理系統(tǒng),最初用于移動(Android/iOS),也可用于XamarinReact Native等平臺,等平臺,包括桌面應用(Windows),并獲得Apache許可。

對比FMDB,他的使用成本,維護成本都更低。

uTools

uTools是一個極簡、插件化、跨平臺的現(xiàn)代化桌面軟件。通過自由選配豐富的插件,打造你得心應手的工具集合。
通過快捷鍵(默認alt+space)就可以快速呼出這個搜索框。它相當聰明,可以支持輸入、拖拽、自動粘貼等作為輸入源,相應的插件也早已準備就緒,統(tǒng)一的設計風格和操作方式,助你高效的得到正確的結果。
當你熟悉它后,能夠為你節(jié)約大量時間,讓你可以更加專注的改變世界。

對比Alfred,他的不同就在于免費,使用簡單,更符合國人的習慣。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容