iOS混合開發之uni-app本地打包集成到iOS原生項目

1.前言

    前端統一開發越來越多,公司爲了大一統前端的所有頁面顯示問題,同時爲節約人力資源成本,決定做前端統一開發的預研以及選型。

2.項目背景

    經過幾次討論後決定前端統一開發選型方案從以下幾種方式進行:

  1. flutter
  2. reactnative
  3. uniapp
  4. ionic

各統一開發方案的優劣勢與選型結果見文檔:app技術選型.docx,提取碼: qs6z

    根據實際情況我們選擇了uni-app進行後續前端統一開發的語言。其中最重要的有以下幾點:

  1. uni-app熱度逐漸上升趨勢非常明顯
  2. uni-app使用vue技術,公司部門內部部分人員已有vue前端開發基礎
  3. 中文文檔,上手快

3.項目框架

  1. 前端開發框架: HbuilderX 2.5.1
  2. 前端頁面開發參考文檔:5+Appuni-app開發(ps:因爲前期統一使用uni-app進行開發,但是後來發現uni-app在按照文檔的方式調用原生NFC讀寫iOS 13.0以上才支持的功能時不起作用,後來決定採用插件的形式進行iOS原生代碼開發,安卓還是按照原有方式進行開發。另外頁面顯示上你可以直接集成某些vue的頁面組件進行開發使用,例如ColorUI
  3. App開發框架:Xcode
  4. 先看文檔
  5. 多看文檔
  6. 仔細看文檔

4.從入坑到踩坑

4.1打包錯誤

  1. HbuilderX找不到iOS模擬器或真機
    解決方案:Xcode->Preferences->Command Line Tools選上然後重啓IDE,如下圖在這裏插入圖片描述
  2. 在演示App上正常顯示,但是亂七八槽不確定的東西這麼多我上架確定不會被拒嗎?iOS創建最簡工程參考iOS創建最精簡離線打包工程,不要錯誤的參考了iOS離線打包,,也不要參考IOS平臺5+SDK技術白皮書.docx(可以簡單看一下,比較全但實際開發還是要看自己需求的,這明顯不符合我的uni-app需求),不然你會在這條道路上越走越遠。
  3. iOS創建工程運行時各種Error:根據error信息提示缺啥靜態庫動態庫在下載的(5+ SDK下載)的SDK中找到補啥。
  4. 運行到模擬器或者真機彈框提示打包缺少XXX模塊
    解決方案:參考5+ SDK下載中Excel表格:Feature-iOS.xls
  5. 使用uni-app iOS NFC讀寫功能時importClass(“NFCTagReaderSession”)失敗
    解決方案:在manifest.json源碼視圖中添加framework,參考
  6. 開發原生插件請認準自己的項目類型,我的項目框架要去看uni-app,或者更詳細的5+app-uniplugin-demo,不要看html5+,也不要看5+ SDK中的插件開發說明。不然你會錯的莫名其妙不知所措。
  7. 自定義基座看iOS平臺離線生成自定義基座
  8. 在HbuilderX中調用iOS原生插件方法不起作用,本地打包放到在Xcode中試試看!記得先刪掉模擬器或真機上的舊基座。

4.2 運行錯誤

  1. 運行到模擬器或者真機發現彈窗提示各種莫名其妙的ABCD,如下圖
    在這裏插入圖片描述
    解決方案:做一下國際語言本地化生成Localizable.strings。問題參考內容參考

  2. 啓動圖片未全屏?
    解決方案:info下添加啓動圖片,參考示例工程info.plist中的字段UILaunchImages

  3. 啓動時黑屏,進入頁面提示如下圖
    在這裏插入圖片描述

  4. 加上liblibNavigator.a之後,項目報錯提示如下圖
    在這裏插入圖片描述
    解決方案:根據提示添加AssetsLibrary.framework、AVFoundation.framework、AddressBook.framework、CoreLocation.framework

  5. 最近提包到蘋果市場後會有一個回饋郵件關於UIWebview使用廢棄問題

ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs .

    解決方案:Appstore審覈反饋廢棄UIWebview APIs問題的說明

說兩個個我耗時比較久的問題,也比較簡單:

  1. 集成到Xcode中顯示HbuilderX編譯版本高於手機SDK版本,查看詳情提示升級HbuilderX需要手動升級手機SDK進入uni-app運行環境版本和編譯器版本不一致的問題
    解決方案:到HBuilderX官網下載最新的SDK重新集成到Xcode中
  2. uni-app中使用了uni.getLocation本地打包然後提交App Store總是得到一封ITMS-90683錯誤提示缺少NSLocationAlwaysUsageDescription的key,項目中沒有用到持續定位但總是過不了,當我單獨在本地基座中添加該隱私說明後App內授權彈框提示又不提示了。反覆檢查代碼查看文檔,也沒有發現需要使用。
    解決方案:iOS雲打包修改權限提示語NSLocationAlwaysUsageDescription 審覈不過中按照該文檔下評論修改爲
"ios" : {
	"privacyDescription" : {
		"NFCReaderUsageDescription" : "需要使用您的NFC功能操作標籤",
		"NSLocationWhenInUseUsageDescription" : "需要訪問您的位置顯示天氣信息",
		"NSLocationAlwaysUsageDescription" : "需要訪問您的位置顯示天氣信息",
		"NSLocationAlwaysAndWhenInUseUsageDescription" : "需要訪問您的位置顯示天氣信息"
	}
}

然後在本地基座的info.plist中同樣按先後順序添加隱私權限發現成功了。

總結

總之一句話:還是多花時間仔仔細細看一下文檔再去開發!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章