iOS 經驗分享

Clemmie Lau發表於2018-01-15

       

一. 開發工具

1. CocoaPods 

     CocoaPods是專案依賴管理工具--提供第三方開源庫的管理。如:

  1. 不需要對某些開源庫設定特殊編譯引數-fno-objc-arc。
  2. 不需要手動新增相對應系統依賴庫framework.
  3. 方便開源庫的更新

1.1  安裝CocoaPods

       在終端執行下面命令:

  • sudo gem install cocoapods
  • pod  setup
        如果你的gem太老了,可以升級gem:  sudo gem update -- system      

        另外mac自帶的ruby的軟體源rubygems.org因為使用亞馬遜的雲服務,所以被遮蔽了,需要更新一下ruby的源,如下:

  • gem sources --remove https://rubygems.org/
  • gem sources -a http://ruby.taobao.org/
  • gem sources -l
1.2 使用CocoaPods

       使用CocoaPods只需要把用到的第三方開源庫放到專案目錄下的Podfile檔案中,即:

iOS 經驗分享

然後在終端cd 到專案目錄下,再執行 pod install 安裝就可以了。每次更改了Podfile檔案,都需要重新執行一次pod update命名(如果遇到專案衝突,可以使用:pod update --verbose --no-repo-update)


2. 網路封包分析工具Charles

2.1 Charles 主要功能

  1. 支援SSL代理。可以擷取分析SSL的請求。(SSL--有相關證書加密的連結).
  2. 支援流量控制。可以模擬慢速網路,以及等待時間較長的請求。
  3. 支援AJAX除錯。可以自動將jsons或者xml資料格式化,方便檢視。
  4. 支援AMF除錯,可以將Flash Remoting或Flex Remoting資訊格式化,方便檢視。
  5. 支援重發網路請求,方便後端除錯。
  6. 支援修改網路請求引數。
  7. 支援網路請求的擷取和動態修改。
  8. 檢查HTML、CSS和RSS內容是否符合W3C標準(validator.w3.org/).
2.2 charles 功能解析

    傳送門:關於charles 對於app開發的具體功能操作 --唐巧部落格。


3.馬克鰻(Mark man 傳送門:www.getmarkman.com) 

     是一款免費標註的工具,使用它可以方便地輸出設計圖稿上的元素的大小、顏色、邊距、說明等。如下圖:

        iOS 經驗分享


二. 開發實踐

1. UIWebView或WKWebView(iOS8.0)的混合程式設計

    基於WebView的混合程式設計是同時使用原生的控制元件和WebView來展現應用介面的。

1.1 什麼時候應該用webView?

  1. 排版複雜。包括圖文混排,連結支援點選。
  2. 介面的變化需求頻繁
  3. 介面對使用者的互動需求不復雜

2. 混合程式設計模組渲染引擎

        在實際開發中,webView控制元件接受一個HTML內容,用於呈現相應的介面。

   2.1 方法一:[NSString stringWithFormat:]     <img scr=http::////////> <strong>    wwwww </strong> <p sssdsdsd>  </p>

  1. NSString *webContent = [NSString stringWithFormat:@"<html><head></head><body>%@</body></html>",webContent];  baseURL:nil];複製程式碼
  2. [_webView loadHTMLString:webContent];複製程式碼
         如果用方法一單純展示一些內容,直接載入具有標籤html內容(如商品詳情)和無使用者互動是可以的。從上面可以看出,這樣寫不方便擴充套件:
  • 模糊內容和程式碼混在一起,不方便閱讀,也不方便更改。
  • 模板的渲染邏輯使用簡單的[NSString stringWithFormat:]來完成,功能單一(表現在資料的二次處理)。
    2.2 方法二:模組渲染引擎

     2.2.1 MGTemplateEngine(傳送門:mattgemmell.com/mgtemplatee…),它的模組渲染引擎比較重量級,可以自定義Filter。它需要依賴RegexKit,RegexKit是一個正在正規表示式工具類,提供強大的正規表示式匹配和替換功能。

     2.2.2 GRMustache渲染因輕量級,匹配和替換規則是作者提供。(傳送門:下載地址

  • 把GRMustache 接入專案,建議用pod。
  • 建立html,css,js對應檔案。填寫各檔案功能。
        下面舉個簡單例子:

建立檔名為test.html 

<html> 
 <head> 
css--->%@
  </head> 
 <body>
 <h1>
  {{ title }}
  </h1> 
 <p>
  {{ content }}
  </p>
js->%@
  </body> 
  </html>複製程式碼

        然後再程式碼中把該檔案讀取到記憶體中,在使用GRMustache的renderObject方法生成渲染後的HTML內容。上程式碼:

NSURL *urlPath = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"];
NSString *html = [NSString stringWithContentsOfURL:urlPath encoding:NSUTF8StringEncoding error:nil];

NSDictionary *renderObject = @{@"title":@"我是標題",@"content":@"我是內容"};
NSString *content = [GRMustacheTemplate renderObject:renderObject fromString:html error: nil];

[_webView loadHTMLString:content baseURL:nil];
複製程式碼

      這樣,我們使用GRMustache模組引擎成功完成了HTML內容渲染工作。

       注:renderObject的key必須和html設定的值一一對應。


三. 開發技巧

3.1 刪除未使用的圖片

       app經過多次迭代,會殘留一些被更換了的圖片。如何知道自己的工程有哪些圖片資源未被使用的呢?提供一個小工具,

連結地址:jeffhodnett-Unused 或者 LSUnusedResourcesgithub連結

下載完成後執行工程跟著操作即可。

3.2 打包ipa包

       按照Xcode文件正常的操作打包是非常慢的,為了提供效率我提供2個方法。這2個方法的原理是一樣的。

  • 專案裡面的所有斷點去掉,command+B 編譯程式
  • 建立一個名為Payload檔案
  • 找到專案目錄Pruducts->xxx.app (show in finder) 把該目錄下的程式拷貝到Payload檔案裡面,壓縮資料夾,更改字尾名為ipa。

另一個方法是有指令碼進行打包。用sublime工具建立build_app.sh檔案

mkdir ${appName}         
mkdir ${appName}/Payload
cp -r ${appName}.app ${appName}/Payload/${appName}.app
cp Icon.png ${appName}/iTunesArtwork
cd ${appName}
zip -r ${appName}.ipa Payload iTunesArtwork
ipaName=Gemall_${version}_${environmental}_`date +20%y%m%d`_01.ipa
mv $project_path/${appName}/${appName}.ipa  $project_path/${ipaName}
rm -rf $project_path/${appName}
exit 0

##
#appName 專案名字
#version 版本號
#environment 介面環境
#project_path 專案的絕對路徑
複製程式碼

 在終端執行 sh build_app.sh即可打包。

3.3 修復線上不知名奔潰

3.3.1 奔潰Application received signal SIGABRT

原理:在 Xcode 8 中,當你資原始檔中[含有16點陣圖]或者[圖片顯示模式γ值為'P3']且iOS targets設定為iOS 9.3以下就會出現這個問題. 如果你的app需要支援廣色域顯示的話,那你必須得把target設定成iOS 9.3+,相反,如果你的app不需要支援廣色域且你想相容 iOS 9.3 之前的專案,你就得把所有的16位的或者顯示模式為'P3'圖片全都替換成8位模式的SRGB顏色的圖片。複製程式碼
步驟:
  1. 找到專案目錄Pruducts->xxx.app (show in finder) 
  2. 在終端cd .../your.app
  3. find . -name 'Assets.car'
  4. sudo xcrun --sdk iphoneos assetutil --info Assets.car > /tmp/Assets.json
  5. open /tmp/Assets.json

  開啟assets.json並查詢包含有 “DisplayGamut" : “P3” 或者相關的內容.如果有,叫UI重新切一份。

四.開發分享

關於iOS 效能優化梳理: 基本工具、業務優化、記憶體優化、卡頓優化、佈局優化、電量優化、 安裝包瘦身、啟動優化、網路優化等---分享連線







相關文章