最近在項(xiàng)目中遇到一個(gè)讓人頭痛的bug,查遍網(wǎng)上都沒找到,因?yàn)楸卷?xiàng)目中必須用到交互和上傳相片,最后只能自己挨著挨著的排除測試。
出現(xiàn)問題的場景:
在同一個(gè)控制器中的WKWebView頁面中使用相機(jī)或者相冊后,所有的交互便失效了?;赝撕蟮膚eb頁面也同樣失效。當(dāng)退出再重新進(jìn)入控制器,即創(chuàng)建了新的WKWebView頁面,其他的交互又才可以用。
排除的問題及解決辦法:
- 相機(jī)相冊的使用權(quán)限問題
① 檢查info.plist中是否添加以下兩條權(quán)限
相機(jī) Privacy - Photo Library Usage Description
相冊 Privacy - Camera Usage Description
② 在訪問時(shí),權(quán)限是否生效,若未生效,則通過<Photos/Photos.h>中的PHAuthorizationStatus類來手動設(shè)置
PHAuthorizationStatus authorizationStatus = [PHPhotoLibrary authorizationStatus];
if (authorizationStatus == PHAuthorizationStatusAuthorized) {
//從相冊中讀取照片
[self readImageFromAlbum];
} else {
if (authorizationStatus == PHAuthorizationStatusNotDetermined) {
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { //彈出訪問權(quán)限提示框
if (status == PHAuthorizationStatusAuthorized) {
//從相冊中讀取照片
[self readImageFromAlbum];
} else {
//顯示無權(quán)限的提示
}
}];
} else {
//顯示無權(quán)限的提示
}
}
同樣,此方法也用于解決此錯(cuò)誤:
[discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled};
在網(wǎng)上看到很多人通過設(shè)置環(huán)境變量OS_ACTIVITY_MODE為disable來解決此打印問題,但個(gè)人覺得這并沒有真正的解決問題,只是屏蔽打印而已。
- 經(jīng)測試發(fā)現(xiàn)不管是通過原生的UIImagePickerController還是H5的input來調(diào)用相機(jī)或相冊,只要進(jìn)入相機(jī)或相冊,就會導(dǎo)致與WKWebView的交互失效。
最后換成UIWebView測試,終于發(fā)覺使用相機(jī)或相冊不影響UIWebView的交互了,雖然UIWebView的性能沒有WKWebView好,但為了解決此問題暫時(shí)退而求其次。
總結(jié):
ios12使用相機(jī)或相冊的系統(tǒng)類與WKWebView的交互類有沖突。
若找到更好解決辦法,我會在后面更新;若你也遇到同樣的問題,或有更好的解決方法,也希望可以留言相互交流學(xué)習(xí)。