iOS-應用閃退總結 以前上架的 App 在 iOS 9 會閃退問題 iOS中app啓動閃退

1、以前上架的 App 在 iOS 9 會閃退問題(iOS系統版本更新,未配置新版本致使閃退問題)html

最新更新:(2015.10.02)ios

開發環境:數據庫

真機測試(如下機種皆不閃退):api

  • iPhone 3GS v6.1.2 (32 bit)
  • iPhone 4 v7.1.2 (32 bit)
  • iPhone 4S v9.0 (32 bit)
  • iPhone 5S v8.4.1 (64 bit)
  • iPad 2 mini v9.0 (64 bit)

※ 使用上面的配置,及 EMB 官方提供的 Hotfix,真機皆沒有問題,下面的閃退問題能夠略過了。數據結構

 


 

問題一:iOS 9 於 2015/09/16 開放下載了,但以前使用 Delphi(XE8 或以前的版) 開發上架的 App 皆會閃退,沒法運行在 iOS 9。app

問題二:使用 Delphi 10 Seattle + Xcode 7.0 + iOS SDK 9.0 發佈到 iOS 9 的真機沒有問題,但發佈到 iOS 6~8 的機子會閃退函數

 

爲了解決以上問題,能夠參考下列方法:post

1. 使用 Delphi 10 Seattle 從新上架:

開發環境:測試

  • Delphi 10 Seattle
  • Xcode 7.0
  • iOS SDK 8.4(這個是關鍵,必定要用 SDK 8.4 纔不會閃退)

真機測試(如下機種皆不閃退):ui

    • iPhone 3GS v6.1.2 (32 bit)
    • iPhone 4 v7.1.2 (32 bit)
    • iPhone 4S v9.0 (32 bit)
    • iPhone 5S v8.4.1 (64 bit)
    • iPad 2 mini v9.0 (64 bit)

2. 使用 XE8 從新上架:

開發環境:

  • Delphi XE8 update 1
  • Xcode 6.4
  • iOS SDK 8.4

修改源碼:

真機測試(如下機種皆不閃退):

  • iPhone 3GS v6.1.2 (32 bit)
  • iPhone 4 v7.1.2 (32 bit)
  • iPhone 4S v9.0 (32 bit)
  • iPhone 5S v8.4.1 (64 bit)
  • iPad 2 mini v9.0 (64 bit)

趕快從新上架新版 App 吧。

 

追加整理,依版本整理以下(2015.09.23):

  • Xcode 7.0 + SDK 8.4
    • XE8 + iOS 6 = 正常
    • XE8 + iOS 7 = 正常
    • XE8 + iOS 8 = 正常
    • XE8 + iOS 9 = 正常
  • Xcode 6.4 + SDK 8.4
    • XE8 + iOS 6 = 正常
    • XE8 + iOS 7 = 正常
    • XE8 + iOS 8 = 正常
    • XE8 + iOS 9 = 閃退(使用官方修復文件,不閃退)
  • Xcode 7.0 + SDK 9.0
    • D10 + iOS 6 = 閃退
    • D10 + iOS 7 = 閃退
    • D10 + iOS 8 = 退
    • D10 + iOS 9 = 正常

官方 QC 討論:

https://quality.embarcadero.com/browse/RSP-12324

官方 Apple Xcode 各版本下載位置:

https://developer.apple.com/downloads/

  • OS X El Capitan

2、iOS中app啓動閃退

    秒退是發生在程序剛剛啓動的時候,在開發、蘋果審覈階段都沒有被發現的最大可能性就是,這個問題只會發生在老版系統、老版機型上。  

    對於不少開發者(尤爲是我的開發者),進行全部 iOS 版本,全部 iOS 機型覆蓋測試是有難度的,蘋果審覈時也只是重點審覈該應用在新機器、新版本下的運行狀況,並不關注老系統。因此這也就是爲何會秒退的程序居然也能經過蘋果的審覈。  
      歸納:老機型,或者老系統版本的代碼適配存在問題致使閃退。(不少公司提供測試組一套  測試機 的緣由,是爲了解決 用戶 體驗 問題。防止用戶 流失。用戶不滿)
    在新 iOS 上正常的應用,到了老版本 iOS 上秒退最多見緣由是系統動態連接庫或Framework沒法找到。這種狀況一般是因爲 App 引用了一個新版操做系統裏的動態庫(或者某動態庫的新版本)或只有新 iOS 支持的 Framework,而又沒有對老系統進行測試,因而當 App 運行在老系統上時便因爲找不到而秒退。解決辦法是等開發人員發現這個問題後升級程序,或由用戶自行升級其操做系統。  
   歸納:蘋果官方審查力度加大,致使代碼或者數據庫更新,或者項目中使用的第三方代碼已經不適合 當前 的蘋果官方 的審查門檻。
   還有一種常見的秒退是程序在升級時,修改了本地存儲的數據結構,可是對用戶既存的舊數據沒有作好升級,結果致使初始化時由於沒法正確讀取用戶數據而秒退。這類問題一般只需刪除程序後從新安裝一遍就能解決。但缺點是用戶的既存數據會丟失——就算有備份可能也無濟於事,由於備份下來的舊數據仍是沒法被正確升級。若是舊數據很是重要,那麼就須要聯繫開發人員要求其進行程序修正了。  
    歸納:系統升級,數據丟失致使
   另外一種已經變得不那麼常見的秒退緣由是 App 的設置不正確。例如在編譯時沒有編譯 ARMv6 的版本,可是設置裏卻容許該 App 運行在 ARMv6 處理器的機器上(如:iPhone 1代,iPhone 3G,iPod touch 一、2代和3代8G版)。這個問題除了等開發人員升級外用戶本身沒什麼辦法解決。固然願意換臺新機器是最好的 ;) 這個問題目前已經可以在提交應用至 App Store 的時候被檢查出來了,所以從此應該不太常見了。  
   歸納:App設置錯誤
  還有一類秒退或是用到 App 裏某個功能後必退的緣由,是開發時用到了只有新版操做系統才支持的某個方法,而又沒有對該方法是否存在於老系統中作出判斷。例如程序啓動時用到了 Game Center,而沒有判斷用戶的機器是否支持 Game Center,因而就秒退了。  
      歸納:iOS版本升級致使問題
  主要的秒退狀況就是這麼幾個,這些都是以該 App 新版系統上能正常跑爲前提的。  

  諸如內存不足、BAD_ACCESS 這類問題一般無論在新舊 iOS 上都會存在,若是是因爲這類問題形成的秒退一般都能在測試和審覈階段被發現,所以並不常見。

  歸納:內存不足致使閃退,幾本上在蘋果移動端 是暫時不可能出現的

三.程序崩潰會致使閃退。

  常見程序崩潰緣由:

  1.點擊某個模塊或者某個功能按鈕,進行頁面跳轉,或者獲取數據。沒數據會崩潰,數據錯誤會崩潰。

  2.點擊某個模塊或者某個功能按鈕,進行頁面跳轉,或者獲取數據。業務邏輯處理不當會致使崩潰。

  3.點擊某個模塊或者某個功能按鈕,直接致使崩潰:編輯代碼時無報錯,編譯時出錯。代碼邏輯錯誤,或者存在閃退符號的代碼。

  常見程序崩潰緣由的獲取:

  

iOS開發中遇到程序崩潰是很正常的事情,如何在程序崩潰時捕獲到異常信息並通知開發者?

下面就介紹如何在iOS中實現:

1. 在程序啓動時加上一個異常捕獲監聽,用來處理程序崩潰時的回調動做

1
NSSetUncaughtExceptionHandler  (&UncaughtExceptionHandler);

官方文檔介紹:Sets the top-level error-handling function where you can perform last-minute logging before the program terminates.
UncaughtExceptionHandler是一個函數指針,該函數須要咱們實現,能夠取本身想要的名字。當程序發生異常崩潰時,該函數會獲得調用,這跟C,C++中的回調函數的概念是同樣的。

2. 實現本身的處理函數

1
2
3
4
5
6
7
void  UncaughtExceptionHandler( NSException  *exception) {
     NSArray  *arr = [exception callStackSymbols]; //獲得當前調用棧信息
     NSString  *reason = [exception reason]; //很是重要,就是崩潰的緣由
     NSString  *name = [exception name]; //異常類型
    
     NSLog (@ "exception type : %@ \n crash reason : %@ \n call stack info : %@" , name, reason, arr);
}

以上代碼很簡單,可是帶來的做用是很是大的。

程序崩潰日誌分析一: http://www.cnblogs.com/CoderAlex/p/4860075.html

程序崩潰日誌分析二:http://www.cnblogs.com/CoderAlex/p/4860075.html

相關文章
相關標籤/搜索