當(dāng)前位置:首頁(yè) > IT技術(shù) > 移動(dòng)平臺(tái) > 正文

iOS基礎(chǔ)-專(zhuān)欄總目錄(持續(xù)更新)
2021-08-08 17:38:06

?

文章目錄

  • 引言
  • I、 上架指南
    • 1.1 iOS上架干貨匯總
    • 1.2 上架相關(guān)操作技巧
    • 1.3 iOS被拒絕的解決方案匯總
    • 1.4 系統(tǒng)框架(API)適配
  • II、 開(kāi)發(fā)基礎(chǔ)知識(shí)
  • III、渲染
    • 3.1 動(dòng)畫(huà)
    • 3.2 文字/圖像處理
      • 3.2.1 Quartz2D使用指南
  • IV、 網(wǎng)絡(luò)與數(shù)據(jù)存儲(chǔ)
    • 4.1 數(shù)據(jù)存儲(chǔ)
    • 4.2 數(shù)據(jù)搜索
    • 4.3 http/https/dns(數(shù)據(jù)提交)
    • 4.4 get 和PostBOOL參數(shù)進(jìn)行處理
  • V、需求案例: 注冊(cè)/登陸基礎(chǔ)模塊
    • 5.1 支付產(chǎn)品的基礎(chǔ)知識(shí)
    • 5.2 登陸模塊
    • 5.3 注冊(cè)模塊
      • 5.3.1 《用戶(hù)協(xié)議及隱私政策》彈框
    • 5.4 處理用戶(hù)輸入內(nèi)容
    • 5.5 地理信息處理
  • VI、 內(nèi)存
    • 6.1 進(jìn)程
      • 6.1.1 Extension的應(yīng)用例子:語(yǔ)言播報(bào)
  • VII、質(zhì)量(code review 、性能)
    • 7.1 測(cè)試
      • 7.1.1 技巧
      • 7.1.2 AB 測(cè)試流量切換方案
      • 7.1.3 iOS測(cè)試指南
    • 7.2 安全
    • 7.3 性能優(yōu)化
    • 7.4 監(jiān)控系統(tǒng)
  • VIII、 效率
  • see also
    • 技術(shù)分布

?

引言

歡迎大家來(lái)到#公眾號(hào):iOS逆向的《iOS基礎(chǔ)》專(zhuān)欄

本文列出學(xué)習(xí)大綱,同時(shí)也可作為大家學(xué)習(xí)《iOS基礎(chǔ)》專(zhuān)欄的索引。
文中的藍(lán)字都是傳送門(mén),點(diǎn)擊進(jìn)入即可

本專(zhuān)欄側(cè)重于程序開(kāi)發(fā)和 iOS 開(kāi)發(fā)的基礎(chǔ)知識(shí)和技能以及產(chǎn)品需求案例,當(dāng)然也會(huì)包括提高項(xiàng)目質(zhì)量和提升開(kāi)發(fā)效率模塊。

  • 基礎(chǔ)涉及內(nèi)容:app上架指南、語(yǔ)言、框架、內(nèi)存、網(wǎng)絡(luò)、存儲(chǔ)、渲染、線程
  • 產(chǎn)品需求案例:

1、普通的數(shù)據(jù)顯示案例,即網(wǎng)絡(luò)拉數(shù)據(jù)->存儲(chǔ)->讀取->展示;
2、代理商CRM app、商戶(hù)收銀app
3、計(jì)劃涉及的案例:瀏覽器內(nèi)核,文字排版引擎,音視頻和圖像處理引擎,圖標(biāo)繪制引擎

  • 質(zhì)量

1、測(cè)試/調(diào)試技巧(測(cè)試保證質(zhì)量是一個(gè)很重要的環(huán)節(jié)):黑盒測(cè)試、單元測(cè)試、自動(dòng)化測(cè)試
2、性能優(yōu)化:網(wǎng)絡(luò)/存儲(chǔ)/內(nèi)存/渲染/算法優(yōu)化
3、監(jiān)控體系:卡頓監(jiān)控、數(shù)據(jù)庫(kù)監(jiān)控、流量消耗監(jiān)控、內(nèi)存消耗監(jiān)控、耗時(shí)監(jiān)控(問(wèn)題響應(yīng))
4、代碼管理:代碼規(guī)范/代碼規(guī)范檢測(cè)工具、code review 機(jī)制(互相監(jiān)督,減少臟亂差代碼)
5、應(yīng)用安全:敏感信息的脫敏規(guī)范、網(wǎng)絡(luò)傳輸?shù)陌踩?、敏感信息安?用戶(hù)名/密碼)、代碼混淆【iOS應(yīng)用逆向與安全模塊請(qǐng)移步到《iOS逆向》專(zhuān)欄學(xué)習(xí)】

I、 上架指南

1.1 iOS上架干貨匯總

  • iOS上架前的準(zhǔn)備、上架技巧(不更新版本的情況下刪除App Store非主語(yǔ)言的方法)、常見(jiàn)上架問(wèn)題及解決方案(上傳ipa包被吃掉、已上架app在AppStore搜不到)、app上架后的事項(xiàng)(ASO)

  • iOS代碼管理之【Xcode Build版本號(hào)自增的解決方案】(通過(guò)配置腳本讓xcode 在每次Build打包時(shí)自動(dòng)對(duì)CFBundleVersion加一)

  • 【codesign】1、重簽名2、搜索本機(jī)的證書(shū)、查看簽名證書(shū)、3、打包腳本

1.2 上架相關(guān)操作技巧

【AppStore 上架相關(guān)技巧】1、由于AppStore緩存原因,導(dǎo)致已上架iOS app(可供銷(xiāo)售)在AppStore上搜不到的解決方案2、不更新版本的情況下刪除App Store非主語(yǔ)言的方法(應(yīng)用場(chǎng)景:馬甲包)

1.3 iOS被拒絕的解決方案匯總

iOS被拒絕的解決方案匯總:1、因藍(lán)牙功能隱蔽而導(dǎo)致上架2、iOS審核1.1.6被拒(安全-令人反感的內(nèi)容)

1.4 系統(tǒng)框架(API)適配

  • iOS基礎(chǔ)-專(zhuān)欄目錄指南之【系統(tǒng)適配】(持續(xù)更新)
II、 開(kāi)發(fā)基礎(chǔ)知識(shí)

涉及框架:StoreKit / MessageUI / AVFoundation/Foundation/UIKit

III、渲染

3.1 動(dòng)畫(huà)

  • iOS常用動(dòng)畫(huà) 【 定點(diǎn)縮放彈窗】利用錨點(diǎn)anchorPoint進(jìn)行實(shí)現(xiàn)

iOS基礎(chǔ)-專(zhuān)欄總目錄(持續(xù)更新)_iOS基礎(chǔ)模塊

iOS基礎(chǔ)-專(zhuān)欄總目錄(持續(xù)更新)_上架指南_02

  • iOS Horizontal Popup View 【 橫向(水平方向)彈出菜單視圖】例子:商品列表支持彈出菜單進(jìn)行下/上架商品、打印商品價(jià)簽、編輯商品信息、同步網(wǎng)店等操作popover

iOS基礎(chǔ)-專(zhuān)欄總目錄(持續(xù)更新)_iOS數(shù)據(jù)搜索_03

3.2 文字/圖像處理

  • 渲染機(jī)制

圖層混合,渲染時(shí)機(jī),離屏渲染

  • iOS 圖片的平鋪和拉伸、圖片的加載方式、內(nèi)容模式(等比例顯示)

3.2.1 Quartz2D使用指南

  • Quartz2D使用指南:自定義控件(電子簽名)、圖片水印、裁剪以及屏幕截圖

  • iOS Quartz2D使用教程之【自定義控件】(案例:橫屏電子簽名)

  • 電子簽名

IV、 網(wǎng)絡(luò)與數(shù)據(jù)存儲(chǔ)

app從拉取數(shù)據(jù)到顯示的大致流程:

從網(wǎng)絡(luò)拉取數(shù)據(jù)
存儲(chǔ)到本地文件系統(tǒng)
再?gòu)谋镜厝〕鰜?lái)放進(jìn)內(nèi)存,最后渲染出來(lái)。

從流程就可以看出本模塊講解的內(nèi)容大綱如下:

  • 數(shù)據(jù)存儲(chǔ)
  • https 的原理
  • dns 劫持(重試機(jī)制)
  • 優(yōu)化弱網(wǎng)絡(luò)下的連接(離線機(jī)制)
  • 客戶(hù)端跟后臺(tái)的通信協(xié)議

數(shù)據(jù)結(jié)構(gòu)json /protobuf、數(shù)據(jù)的增量更新

  • 線程

這里所有的處理都在操作系統(tǒng)的進(jìn)程和線程中執(zhí)行,因此了解線程相關(guān)知識(shí)是必不可少的

4.1 數(shù)據(jù)存儲(chǔ)

  • 主鍵索引事務(wù)等數(shù)據(jù)庫(kù)基本概念
  • 存儲(chǔ)機(jī)制/索引的實(shí)現(xiàn)/sqlite的七層結(jié)構(gòu)
  • 單文件存儲(chǔ)

XML存文件;對(duì)象序列化成二進(jìn)制存儲(chǔ)

  • iOS app 使用BGFMDB存儲(chǔ)信息到本地?cái)?shù)據(jù)庫(kù)教程【應(yīng)用場(chǎng)景:商戶(hù)首次登陸app同意協(xié)議流程,記錄當(dāng)前商戶(hù)已經(jīng)同意過(guò)協(xié)議信息】

  • 【iOS 使用數(shù)據(jù)庫(kù)表存儲(chǔ)信息】例子: 存儲(chǔ)顯示過(guò)廣告彈窗的用戶(hù)ID, 應(yīng)用場(chǎng)景:首次打開(kāi)app進(jìn)行廣告彈窗

  • PL/SQL基礎(chǔ)

4.2 數(shù)據(jù)搜索

  • iOS數(shù)據(jù)搜索技巧:1、 應(yīng)用NSPredicate進(jìn)行數(shù)據(jù)篩選:從數(shù)組搜索特定條件的元素(從數(shù)組中篩選type=8的電子簽名數(shù)據(jù),避免遍歷數(shù)組 certificateInfoList)2、正則表達(dá)式

4.3 http/https/dns(數(shù)據(jù)提交)

  • iOS 實(shí)現(xiàn)json數(shù)據(jù)提交(發(fā)送JSON數(shù)據(jù)給服務(wù)器)

1.一定要使用POST請(qǐng)求
2.設(shè)置請(qǐng)求頭 [request setValue:@“application/json” forHTTPHeaderField:@“Content-Type”];
3.設(shè)置JSON數(shù)據(jù)為請(qǐng)求體

  • iOS接收json格式【 unacceptable content-type: text/plain的解決方案】
  • iOS實(shí)現(xiàn)key=value&key=value形式的數(shù)據(jù)提交【Post 提交請(qǐng)求數(shù)據(jù)格式為application/x-www-form-urlencoded的方案】(基于AFNetworkSDK)

4.4 get 和PostBOOL參數(shù)進(jìn)行處理

【AFN使用NSNumber 傳BOOL值參數(shù)時(shí),需要區(qū)分get 和Post進(jìn)行處理】get請(qǐng)求對(duì)應(yīng)的0和1,post對(duì)應(yīng)true/false:若服務(wù)端Bool 參數(shù)沒(méi)有同時(shí)支持這兩種格式,就需要處理

?

V、需求案例: 注冊(cè)/登陸基礎(chǔ)模塊

5.1 支付產(chǎn)品的基礎(chǔ)知識(shí)

  • i1、支付知識(shí)及調(diào)試測(cè)試技巧:【支付流程 & 預(yù)授權(quán)& 銀行卡驗(yàn)證&反洗錢(qián)】2、安全設(shè)計(jì)Checklist(短信驗(yàn)證碼、圖形驗(yàn)證碼、密碼管理、身份驗(yàn)證、會(huì)話(huà)安全、敏感信息、接口安全)

5.2 登陸模塊

  • iOS 優(yōu)化登錄流程:【打開(kāi)app,如果 token不過(guò)期,就使用最近一次登錄的tokenn進(jìn)行接口請(qǐng)求?!?jī)?yōu)化token的存儲(chǔ)方式:(之前只是存儲(chǔ)在內(nèi)存,每次打開(kāi)app都會(huì)重新登錄,)

5.3 注冊(cè)模塊

5.3.1 《用戶(hù)協(xié)議及隱私政策》彈框

  • iOS TextViewHyperLink 文字超鏈接: 《用戶(hù)協(xié)議及隱私政策》彈框

iOS基礎(chǔ)-專(zhuān)欄總目錄(持續(xù)更新)_iOS基礎(chǔ)模塊_04

5.4 處理用戶(hù)輸入內(nèi)容

  • iOS文本長(zhǎng)度計(jì)算【中文占1,英文等能轉(zhuǎn)ascii的占0.5】常常應(yīng)用于對(duì)文本輸入框的個(gè)數(shù)限制

  • iOS處理語(yǔ)言的強(qiáng)大工具CFStringTransform : 智能地處理用戶(hù)的輸入內(nèi)容,經(jīng)典應(yīng)用場(chǎng)景【索引】

  • iOS用戶(hù)輸入處理之【從字符串中提取數(shù)字(手機(jī)號(hào))】應(yīng)用場(chǎng)景:登錄界面“請(qǐng)輸入手機(jī)號(hào)“文本框,對(duì)粘貼內(nèi)容進(jìn)行手機(jī)號(hào)碼提取

  • iOS金額的格式轉(zhuǎn)化處理

5.5 地理信息處理

  • iOS定位、地理/逆地理編碼geocodes的使用、判斷目標(biāo)經(jīng)緯度是否在大陸
VI、 內(nèi)存
  • ARC 機(jī)制

OC 的引用計(jì)數(shù) 、自動(dòng)釋放池、Java語(yǔ)言的垃圾回收機(jī)制

  • 內(nèi)存管理

避免內(nèi)存泄露

  • 緩存管理

避免緩存太多導(dǎo)致OOM、緩存命中率太低性能低下
Out Of Memory:“內(nèi)存用完了”。 它來(lái)源于java.lang.OutOfMemoryError。

  • 線程和進(jìn)程

iOS 開(kāi)發(fā)只在做 Extension 時(shí)才需要考慮到進(jìn)程,
主線程子線程,多線程并發(fā)鎖競(jìng)爭(zhēng),死鎖,GCD,Runloop

6.1 進(jìn)程

6.1.1 Extension的應(yīng)用例子:語(yǔ)言播報(bào)

  • NotificationServiceExtension

使用 NotificationServiceExtension實(shí)現(xiàn)VoiceBroadcast
【app處于后臺(tái)/被殺死的狀態(tài)仍可進(jìn)行語(yǔ)言播報(bào)】
iOS12.1以上在后臺(tái)或者被殺死無(wú)法語(yǔ)音播報(bào)的解決方案

VII、質(zhì)量(code review 、性能)

7.1 測(cè)試

7.1.1 技巧

  • iOS測(cè)試位置信息變更:通過(guò)GPX文件修改經(jīng)緯度信息(模擬iOS設(shè)備的位置)

7.1.2 AB 測(cè)試流量切換方案

  • AB 測(cè)試流量切換方案

7.1.3 iOS測(cè)試指南

iOS測(cè)試指南之 【保存接口返回的數(shù)據(jù)為json,以便作為測(cè)試數(shù)據(jù)】

7.2 安全

【iOS應(yīng)用逆向與安全模塊請(qǐng)移步到《iOS逆向》專(zhuān)欄學(xué)習(xí)】

【敏感信息的脫敏規(guī)范】(數(shù)據(jù)類(lèi)型包括日志相關(guān)、賬戶(hù)訂單、個(gè)人信息、賬戶(hù)認(rèn)證、持卡數(shù)據(jù))

7.3 性能優(yōu)化

1、 檢測(cè)各方面的數(shù)據(jù),量化運(yùn)行性能,
2、從檢測(cè)數(shù)據(jù)尋找性能瓶頸
3、找解決方案并用監(jiān)測(cè)的數(shù)據(jù)驗(yàn)證優(yōu)化效果

7.4 監(jiān)控系統(tǒng)

【電池的狀態(tài)處理:電池狀態(tài)獲取及監(jiān)測(cè)、電池電量獲取及監(jiān)測(cè)、低電量模式切換監(jiān)測(cè)】

VIII、 效率

效率教程模塊放在了 《iOS進(jìn)階》專(zhuān)欄

see also
  • 客戶(hù)端開(kāi)發(fā)

主要是指iOS/Android,也包括macOS/Windows/Linux這些平臺(tái)的軟件開(kāi)發(fā)

前端開(kāi)發(fā)

使用vue/react這些來(lái)源于瀏覽器技術(shù)

  • Native開(kāi)發(fā)

是指“非瀏覽器技術(shù)”開(kāi)發(fā),例如不使用JavaScript開(kāi)發(fā)。
通常Native開(kāi)發(fā),使用的語(yǔ)言主要是編譯型,而不是解釋型。
例如iOS/macOS使用Objective C和Swift來(lái)開(kāi)發(fā),Android使用Java或Kotlin來(lái)開(kāi)發(fā)。Windows使用C#來(lái)開(kāi)發(fā),Linux使用C++來(lái)開(kāi)發(fā)。(C++所有平臺(tái)都能開(kāi)發(fā))。
Flutter使用Dart

技術(shù)分布

  • 完全小程序?qū)崿F(xiàn)

這些應(yīng)用一般是業(yè)務(wù)為主,連接線下的應(yīng)用

  • ReactNative或者Flutter實(shí)現(xiàn)為主,少量Native代碼為輔助。

中小公司開(kāi)發(fā)的業(yè)務(wù)類(lèi)型為主的應(yīng)用,更多是ToB產(chǎn)品。為了節(jié)省開(kāi)發(fā)人力,大部分功能使用跨端技術(shù)開(kāi)發(fā)。

  • 自定義DSL框架。

用xml或者json描述界面,Native代碼來(lái)根據(jù)xml或json生成對(duì)應(yīng)的界面。
這些應(yīng)用多數(shù)是大型的應(yīng)用,多數(shù)以Feed流為主,DSL框架用來(lái)實(shí)現(xiàn)某一個(gè)“內(nèi)容為主”的功能。
例如美團(tuán)首頁(yè)、微博首頁(yè)(刷微博時(shí)經(jīng)??吹降膹V告)、支付寶首頁(yè)。
這些Feed流中的內(nèi)容十分豐富,公司內(nèi)部也會(huì)開(kāi)發(fā)專(zhuān)有的運(yùn)營(yíng)平臺(tái),能很方便的配置下發(fā)不同的內(nèi)容。
美團(tuán)的MTFlexbox發(fā)布過(guò)文章,但不開(kāi)源。阿里的Tangram(開(kāi)源)。

  • 更高級(jí)的DSL框架。

例如滴滴的變色龍 https://github.com/didi/chameleon ,
或者最近阿里開(kāi)源的北海 https://github.com/openkraken/kraken 。這些框架可以使用前端技術(shù),開(kāi)發(fā)出適應(yīng)多平臺(tái)的代碼。

  • Native為主,其他技術(shù)為輔助。

核心功能對(duì)性能有更高的要求,必須使用Native技術(shù)來(lái)開(kāi)發(fā)。
例如微信、淘寶、抖音
這些應(yīng)用的核心功能使用Native開(kāi)發(fā),跨端技術(shù)、小程序、自定義DSL框架都在其中某個(gè)場(chǎng)景中發(fā)揮各自的優(yōu)勢(shì)。
此外,一些小而美的應(yīng)用多數(shù)具有某些平臺(tái)的創(chuàng)新特性,很多需要使用到平臺(tái)獨(dú)有的能力。

iOS基礎(chǔ)-專(zhuān)欄總目錄(持續(xù)更新)_數(shù)據(jù)_05

?

本文摘自 :https://blog.51cto.com/i

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >