1.前言
前端統一開發越來越多,公司爲了大一統前端的所有頁面顯示問題,同時爲節約人力資源成本,決定做前端統一開發的預研以及選型。
2.項目背景
經過幾次討論後決定前端統一開發選型方案從以下幾種方式進行:
- flutter
- reactnative
- uniapp
- ionic
各統一開發方案的優劣勢與選型結果見文檔:app技術選型.docx,提取碼: qs6z
根據實際情況我們選擇了uni-app進行後續前端統一開發的語言。其中最重要的有以下幾點:
- uni-app熱度逐漸上升趨勢非常明顯
- uni-app使用vue技術,公司部門內部部分人員已有vue前端開發基礎
- 中文文檔,上手快
3.項目框架
- 前端開發框架: HbuilderX 2.5.1
- 前端頁面開發參考文檔:5+App;uni-app開發(ps:因爲前期統一使用uni-app進行開發,但是後來發現uni-app在按照文檔的方式調用原生NFC讀寫iOS 13.0以上才支持的功能時不起作用,後來決定採用插件的形式進行iOS原生代碼開發,安卓還是按照原有方式進行開發。另外頁面顯示上你可以直接集成某些vue的頁面組件進行開發使用,例如ColorUI)
- App開發框架:Xcode
- 先看文檔
- 多看文檔
- 仔細看文檔
4.從入坑到踩坑
4.1打包錯誤
- HbuilderX找不到iOS模擬器或真機
解決方案:Xcode->Preferences->Command Line Tools選上然後重啓IDE,如下圖 - 在演示App上正常顯示,但是亂七八槽不確定的東西這麼多我上架確定不會被拒嗎?iOS創建最簡工程參考iOS創建最精簡離線打包工程,不要錯誤的參考了iOS離線打包,,也不要參考IOS平臺5+SDK技術白皮書.docx(可以簡單看一下,比較全但實際開發還是要看自己需求的,這明顯不符合我的uni-app需求),不然你會在這條道路上越走越遠。
- iOS創建工程運行時各種Error:根據error信息提示缺啥靜態庫動態庫在下載的(5+ SDK下載)的SDK中找到補啥。
- 運行到模擬器或者真機彈框提示打包缺少XXX模塊
解決方案:參考5+ SDK下載中Excel表格:Feature-iOS.xls - 使用uni-app iOS NFC讀寫功能時importClass(“NFCTagReaderSession”)失敗
解決方案:在manifest.json源碼視圖中添加framework,參考 - 開發原生插件請認準自己的項目類型,我的項目框架要去看uni-app,或者更詳細的5+app-uniplugin-demo,不要看html5+,也不要看5+ SDK中的插件開發說明。不然你會錯的莫名其妙不知所措。
- 自定義基座看iOS平臺離線生成自定義基座
- 在HbuilderX中調用iOS原生插件方法不起作用,本地打包放到在Xcode中試試看!記得先刪掉模擬器或真機上的舊基座。
4.2 運行錯誤
-
運行到模擬器或者真機發現彈窗提示各種莫名其妙的ABCD,如下圖
解決方案:做一下國際語言本地化生成Localizable.strings。問題參考,內容參考 -
啓動圖片未全屏?
解決方案:info下添加啓動圖片,參考示例工程info.plist中的字段UILaunchImages -
啓動時黑屏,進入頁面提示如下圖
-
加上liblibNavigator.a之後,項目報錯提示如下圖
解決方案:根據提示添加AssetsLibrary.framework、AVFoundation.framework、AddressBook.framework、CoreLocation.framework -
最近提包到蘋果市場後會有一個回饋郵件關於UIWebview使用廢棄問題
ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs .
解決方案:Appstore審覈反饋廢棄UIWebview APIs問題的說明
說兩個個我耗時比較久的問題,也比較簡單:
- 集成到Xcode中顯示HbuilderX編譯版本高於手機SDK版本,查看詳情提示升級HbuilderX需要手動升級手機SDK進入uni-app運行環境版本和編譯器版本不一致的問題
解決方案:到HBuilderX官網下載最新的SDK重新集成到Xcode中 - uni-app中使用了uni.getLocation本地打包然後提交App Store總是得到一封ITMS-90683錯誤提示缺少NSLocationAlwaysUsageDescription的key,項目中沒有用到持續定位但總是過不了,當我單獨在本地基座中添加該隱私說明後App內授權彈框提示又不提示了。反覆檢查代碼查看文檔,也沒有發現需要使用。
解決方案:iOS雲打包修改權限提示語或NSLocationAlwaysUsageDescription 審覈不過中按照該文檔下評論修改爲
"ios" : {
"privacyDescription" : {
"NFCReaderUsageDescription" : "需要使用您的NFC功能操作標籤",
"NSLocationWhenInUseUsageDescription" : "需要訪問您的位置顯示天氣信息",
"NSLocationAlwaysUsageDescription" : "需要訪問您的位置顯示天氣信息",
"NSLocationAlwaysAndWhenInUseUsageDescription" : "需要訪問您的位置顯示天氣信息"
}
}
然後在本地基座的info.plist中同樣按先後順序添加隱私權限發現成功了。
總結
總之一句話:還是多花時間仔仔細細看一下文檔再去開發!