iOS開發(fā)3DTouch導致Crush

原因推測

最近公司項目加入 3D touch 功能上線后, 有用戶反映他們的機器在點擊程序 icon 的時候就直接閃退了, 找了個問題機測試了一下發(fā)現(xiàn)是 3D touch 導致的崩潰. 正規(guī)渠道購買的機器都沒有閃退問題, 某些港版, 日版, 美版機器會出問題, 所以推測是那些機器在購買之前經(jīng)過越獄或是什么原因, 修改了底層 3D touch 某些屬性, 導致本不支持 3D touch 的問題機誤以為自己支持該功能導致崩潰.

  • 只是推測, 老鳥歡迎指正

初步方案

shortCutItem

由于沒有那么多問題機測試, 只有兩臺, 只能算一個參考方案吧, 反正這兩臺機器是沒問題了.
方案: 限制機型, 只允許 6S 和 9.0以上系統(tǒng)走 3D Touch 方法.
代碼:
在AppDelegate.m中
首先導入頭文件#import "sys/utsname.h"
pch 文件中定義系統(tǒng)版本號#define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]

// 獲取機型設備號
struct utsname systemInfo;
    uname(&systemInfo);
    NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    
    // 如果系統(tǒng)版本大于9.0
    if (IOS_VERSION >= 9.0) {
        
        // 如果設備號是 6S 或者 6S PLUS
        if ([deviceString isEqualToString:@"iPhone8,1"] || [deviceString isEqualToString:@"iPhone8,2"]) {
            
            // 創(chuàng)建 shortCutItem 的方法
            [self createItemsWithIcons];
            
            if (launchOptions[@"UIApplicationLaunchOptionsShortcutItemKey"] == nil) {
                return YES;
            } else {
                return NO;
            }
        }
    }

至此, 打開就閃退的問題在這兩臺機器上解決了


Preview

在支持 3d touch的視圖控制器.m文件中同樣導入#import "sys/utsname.h"
在設置traitCollection的方法中同樣用上面的判斷

- (void)viewWillAppear:(BOOL)animated {
    
    [super viewWillAppear:animated];
    
    // 獲取設備型號
    struct utsname systemInfo;
    uname(&systemInfo);
    NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    
    // 判斷系統(tǒng)型號
    if (IOS_VERSION >= 9.0) {
        
        if ([deviceString isEqualToString:@"iPhone8,1"] || [deviceString isEqualToString:@"iPhone8,2"]) {
            
            if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
                
                [self registerForPreviewingWithDelegate:self sourceView:self.levelCollectionView];
            }
        }
    }
}

如果要預覽的 webView 打開了allowsLinkPreview
同樣需要重復導入上面的頭文件

struct utsname systemInfo;
    uname(&systemInfo);
    NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    if ([deviceString isEqualToString:@"iPhone8,1"] || [deviceString isEqualToString:@"iPhone8,2"]) {
        self.webView.allowsLinkPreview = YES;
    }

至此, 這兩臺問題機器的 3D Touch 崩潰問題解決


設備型號(不完全版)

- (NSString*)deviceVersion {

    struct utsname systemInfo;
    uname(&systemInfo);
    NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    
    NSLog(@"%@",deviceString);
    
    if ([deviceString isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";
    if ([deviceString isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";
    if ([deviceString isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";
    if ([deviceString isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
    if ([deviceString isEqualToString:@"iPhone3,2"])    return @"Verizon iPhone 4";
    if ([deviceString isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([deviceString isEqualToString:@"iPhone5,2"])    return @"iPhone 5";
    if ([deviceString isEqualToString:@"iPhone6,2"])    return @"iPhone 5S";
    if ([deviceString isEqualToString:@"iPhone7,2"])    return @"iPhone 6";
    if ([deviceString isEqualToString:@"iPhone7,1"])    return @"iPhone 6 Plus";
    if ([deviceString isEqualToString:@"iPhone8,1"])    return @"iPhone 6s";
    if ([deviceString isEqualToString:@"iPhone8,2"])    return @"iPhone 6s Plus";
    if ([deviceString isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";
    if ([deviceString isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";
    if ([deviceString isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";
    if ([deviceString isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";
    if ([deviceString isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([deviceString isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([deviceString isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([deviceString isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([deviceString isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([deviceString isEqualToString:@"i386"])         return @"Simulator";
    if ([deviceString isEqualToString:@"x86_64"])       return @"Simulator";
    
    return deviceString;
}
  • iPhone 7,2是6, 7,1是6Plus

這個方案還不是很確定, 如果我說的有問題, 歡迎來糾錯, 謝謝
補充一下, 不管上一頁有沒有設置preView, 只要下一頁的webView打開了allowsLinkPreview屬性, 也會導致問題機型的崩潰

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爱榔,一起剝皮案震驚了整個濱河市染厅,隨后出現(xiàn)的幾起案子蚤氏,更是在濱河造成了極大的恐慌,老刑警劉巖坎弯,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機册倒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磺送,“玉大人驻子,你說我怎么就攤上這事屈尼。” “怎么了拴孤?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長甲捏。 經(jīng)常有香客問我演熟,道長,這世上最難降的妖魔是什么司顿? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任芒粹,我火速辦了婚禮,結(jié)果婚禮上大溜,老公的妹妹穿的比我還像新娘化漆。我一直安慰自己,他們只是感情好钦奋,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布座云。 她就那樣靜靜地躺著,像睡著了一般付材。 火紅的嫁衣襯著肌膚如雪朦拖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天厌衔,我揣著相機與錄音璧帝,去河邊找鬼。 笑死富寿,一個胖子當著我的面吹牛睬隶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播页徐,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼苏潜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了变勇?” 一聲冷哼從身側(cè)響起窖贤,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贰锁,沒想到半個月后赃梧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡豌熄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年授嘀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锣险。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹄皱,死狀恐怖览闰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巷折,我是刑警寧澤压鉴,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站锻拘,受9級特大地震影響油吭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜署拟,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一婉宰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧推穷,春花似錦心包、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至区宇,卻和暖如春岭佳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萧锉。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工珊随, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柿隙。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓叶洞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親禀崖。 傳聞我的和親對象是個殘疾皇子衩辟,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評論 25 707
  • 記得以前看《新戀愛時代》時艺晴,很喜歡鄭海潮在劇中說的一段話: " 如果一個人說喜歡你,請等到他對你百般照顧時再相信掸屡;...
    虹姐有話說閱讀 1,320評論 0 4
  • 11.4 我開始懷念17歲里陽光的香味封寞,裹著干凈的散發(fā)著洗衣液味道校服的笑臉,比如今的我要真誠燦爛許多仅财。
    詩酒年華閱讀 229評論 0 1
  • 文:miya | 圖:caipang 這世上狈究,最不能直視的東西有兩樣 太陽和人心 講真,若非工作所需 恐怕到現(xiàn)在你...
    海韻夢都閱讀 257評論 0 0