Swift Practice # 175 iPad 分享功能Crash 與取得目前裝置類型
上一篇完成了透過中央氣象局的API資料實作出單一鄉鎮市區的天氣預報資料與天氣預報圖示的顯示。使side project又多一項小功能。
而這篇則要來看看一個閃退的問題,原本自己的side project最初的版本已經送審完成但是因為需要後續微調處理所以再次送審,原本認為應該沒有太大的問題但蘋果官方送回覆了一個閃退的情況發生。
在15.7的iPad點擊我的分享的按鈕會引發閃退,但剛好自己手上的iPad沒有升到15.7,但先在一樣的地方嘗試點擊,果然會引發閃退,因為這個功能在iPhone測試沒有問題,但iPad時忘記測試所以就被退了。所以要來研究iPhone可以執行的功能為何iPad會引發閃退,讓我們看看程式碼。
嘗試在iPhone 與 iPad運行看看
可以看到iPhone 11模擬器可以順利地跳出分享的View也能點擊複製。
而上面的iPad點擊後則會直接Crash,這就是送審時遇到的問題,所以不用iOS 15.7就能夠重現了。接著就是要來排除這個問題。
Thread 1: "UIPopoverPresentationController (<UIPopoverPresentationController: 0x145e0f880>) should have a non-nil sourceView or barButtonItem set before the presentation occurs."
透過網路查詢得知iPad在使用彈跳視窗的時候需要使用popover的方式來顯示彈跳視窗,所以沒有設定popover的話在iPad就會遭遇到閃退的狀況,也可以從上面的crash log看到sourceView需要不為nil的值。而在這個時候我們需要多判斷使用者目前使用的裝置為何,可以透過
UIDevice.current.model
來取得目前使用者是使用iPhone或是iPad。
UIDevice.current.name
則可以取得使用者目前使用的裝置型號,舉例iPhone 11、iPhone 13 Pro等。
得知了知道怎麼判斷,接下來就是加入popover與sourceView了。可以直接看下面的程式碼。
可以看到加入了sourceView後,iPad就能夠順利地跳出分享的View了。
在這裡也讓自己又多認識一個開發iPad時需要注意的地方,應該這次送審就不會再被退了吧XD 持續加油!!