一. 開發工具
1. CocoaPods
CocoaPods是專案依賴管理工具--提供第三方開源庫的管理。如:
- 不需要對某些開源庫設定特殊編譯引數-fno-objc-arc。
- 不需要手動新增相對應系統依賴庫framework.
- 方便開源庫的更新
1.1 安裝CocoaPods
在終端執行下面命令:
- sudo gem install cocoapods
- pod setup
另外mac自帶的ruby的軟體源rubygems.org因為使用亞馬遜的雲服務,所以被遮蔽了,需要更新一下ruby的源,如下:
- gem sources --remove https://rubygems.org/
- gem sources -a http://ruby.taobao.org/
- gem sources -l
使用CocoaPods只需要把用到的第三方開源庫放到專案目錄下的Podfile檔案中,即:
然後在終端cd 到專案目錄下,再執行 pod install 安裝就可以了。每次更改了Podfile檔案,都需要重新執行一次pod update命名(如果遇到專案衝突,可以使用:pod update --verbose --no-repo-update)
2. 網路封包分析工具Charles
2.1 Charles 主要功能
- 支援SSL代理。可以擷取分析SSL的請求。(SSL--有相關證書加密的連結).
- 支援流量控制。可以模擬慢速網路,以及等待時間較長的請求。
- 支援AJAX除錯。可以自動將jsons或者xml資料格式化,方便檢視。
- 支援AMF除錯,可以將Flash Remoting或Flex Remoting資訊格式化,方便檢視。
- 支援重發網路請求,方便後端除錯。
- 支援修改網路請求引數。
- 支援網路請求的擷取和動態修改。
- 檢查HTML、CSS和RSS內容是否符合W3C標準(validator.w3.org/).
傳送門:關於charles 對於app開發的具體功能操作 --唐巧部落格。
3.馬克鰻(Mark man 傳送門:www.getmarkman.com)
是一款免費標註的工具,使用它可以方便地輸出設計圖稿上的元素的大小、顏色、邊距、說明等。如下圖:
二. 開發實踐
1. UIWebView或WKWebView(iOS8.0)的混合程式設計
基於WebView的混合程式設計是同時使用原生的控制元件和WebView來展現應用介面的。
1.1 什麼時候應該用webView?
- 排版複雜。包括圖文混排,連結支援點選。
- 介面的變化需求頻繁
- 介面對使用者的互動需求不復雜
2. 混合程式設計模組渲染引擎
在實際開發中,webView控制元件接受一個HTML內容,用於呈現相應的介面。
2.1 方法一:[NSString stringWithFormat:] <img scr=http::////////> <strong> wwwww </strong> <p sssdsdsd> </p>
NSString *webContent = [NSString stringWithFormat:@"<html><head></head><body>%@</body></html>",webContent]; baseURL:nil];複製程式碼
[_webView loadHTMLString:webContent];複製程式碼
- 模糊內容和程式碼混在一起,不方便閱讀,也不方便更改。
- 模板的渲染邏輯使用簡單的[NSString stringWithFormat:]來完成,功能單一(表現在資料的二次處理)。
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 或者 LSUnusedResources(github連結)
下載完成後執行工程跟著操作即可。
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顏色的圖片。複製程式碼
步驟:- 找到專案目錄Pruducts->xxx.app (show in finder)
- 在終端cd .../your.app
- find . -name 'Assets.car'
- sudo xcrun --sdk iphoneos assetutil --info Assets.car > /tmp/Assets.json
- open /tmp/Assets.json
開啟assets.json並查詢包含有 “DisplayGamut" : “P3” 或者相關的內容.如果有,叫UI重新切一份。
四.開發分享
關於iOS 效能優化梳理: 基本工具、業務優化、記憶體優化、卡頓優化、佈局優化、電量優化、 安裝包瘦身、啟動優化、網路優化等---分享連線