国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ReactNative中升級IOS 17版本Crash解決

這篇具有很好參考價值的文章主要介紹了ReactNative中升級IOS 17版本Crash解決。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


ReactNative中升級IOS 17版本Crash解決


ReactNative中升級IOS 17版本Crash解決,React-Native,IOS技術(shù)學習與實踐,ios,react native,objective-c

一、問題描述

業(yè)務(wù)上用了截圖相關(guān)UIGraphicsBeginImageContextWithOptions && UIGraphicsEndImageContext 會報出 Assert。

錯誤信息會是下面這樣:

  • UIGraphicsBeginImageContext() failed to allocate CGBitampContext: size={382, 0}, scale=3.000000, bitmapInfo=0x2002. Use UIGraphicsImageRenderer to avoid this assert.

或者會是這樣的

  • *** Assertion failure in void _UIGraphicsBeginImageContextWithOptions(CGSize, BOOL, CGFloat, BOOL)(), UIGraphics.m:410
二、原因分析

查了下 api,發(fā)現(xiàn) UIGraphicsBeginImageContext 在iOS 17上已經(jīng) deprecated 了. 點擊這里,看看官方文檔 官方文檔說明https://developer.apple.com/documentation/uikit/1623922-uigraphicsbeginimagecontext

ReactNative中升級IOS 17版本Crash解決,React-Native,IOS技術(shù)學習與實踐,ios,react native,objective-c

能夠清楚地看到針對以下版本廢棄

  • iOS 2.0–17.0 Deprecated
  • iPadOS 2.0–17.0 Deprecated
  • Mac Catalyst 13.1–17.0 Deprecated
  • tvOS 9.0–17.0 Deprecated
  • watchOS 2.0–10.0 Deprecated
  • visionOS 1.0–1.0 Deprecated
三、解決方案決策
3.1 設(shè)置寬高為非零值

當我們保證api 寬高不為零,則可正常使用,需要改動的地方較多,可能需要將業(yè)務(wù)中每一個設(shè)置為零屬性的地方都得檢查

3.2 使用新的UIGraphicsImageRenderer替換就版本的UIGraphicsBeginImageContext

改動較小,只需要改動三方庫中原生內(nèi)容即可,無需針對業(yè)務(wù)中涉及到的每一個元素進行校驗,只需要驗證部分頁面展示正常即可。

四、可能使用到該API的三方庫
4.1 react-native-fast-image

解決方案:react-native-fast-image 官方解決
修改node_modules文件路徑: ios/FastImage/FFFastImageView.m


- (UIImage*) makeImage: (UIImage*)image withTint: (UIColor*)color {
    UIImage* newImage = [image imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate];

    UIGraphicsImageRendererFormat *format = [UIGraphicsImageRendererFormat defaultFormat];
    UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:image.size format:format];

    UIImage *resultImage = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
        CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
        [color set];
        [newImage drawInRect:rect];
    }];

    return resultImage;
}


4.2 react-native-linear-gradient

官方解決方案: react-native-linear-gradient 官方解決

按照官方解決,已經(jīng)提供了新的版本包在npm倉庫,此時我們可以去更新源代碼或者直接更新版本:

  • 下載是最新的版本
    下載最新版本地址:https://github.com/react-native-linear-gradient/react-native-linear-gradient/releases/tag/v2.8.3
    也可以直接去看看npm倉庫。

  • 直接更新源碼

如果要更新源代碼,則進行更新路徑/node_modules/react-native-linear-gradient/ios/BVLinearGradientLayer.m 文件中 display函數(shù)。


- (void)display {
    [super display];

    // short circuit when height or width are 0. Fixes CGContext errors throwing
    if (self.bounds.size.height == 0 || self.bounds.size.width == 0) {
      return;
    }

    BOOL hasAlpha = NO;

    for (NSInteger i = 0; i < self.colors.count; i++) {
        hasAlpha = hasAlpha || CGColorGetAlpha(self.colors[i].CGColor) < 1.0;
    }

    if (@available(iOS 10.0, *)) {
        UIGraphicsImageRendererFormat *format;
        if (@available(iOS 11.0, *)) {
            format = [UIGraphicsImageRendererFormat preferredFormat];
        } else {
            format = [UIGraphicsImageRendererFormat defaultFormat];
        }
        format.opaque = !hasAlpha;
        UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:self.bounds.size format:format];
        UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull ref) {
            [self drawInContext:ref.CGContext];
        }];

        self.contents = (__bridge id _Nullable)(image.CGImage);
        self.contentsScale = image.scale;
    } else {
        UIGraphicsBeginImageContextWithOptions(self.bounds.size, !hasAlpha, 0.0);
        CGContextRef ref = UIGraphicsGetCurrentContext();
        [self drawInContext:ref];

        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        self.contents = (__bridge id _Nullable)(image.CGImage);
        self.contentsScale = image.scale;

        UIGraphicsEndImageContext();
    }
}

我項目中閃退的就是這個庫出的問題,當漸變的文本有內(nèi)容時,則展示是正常的,但是當文本內(nèi)容不存在時,就會出現(xiàn)閃退,這就很詭異。

4.3 使用到 UIGraphicsBeginImageContextWithOptions 的三方庫還有以下一些:
  • react native本身繪畫邊框
  • react-native本身圖片處理 /node_modules/react-native/Libraries/Image/RCTImageUtils.m
  • react-native-camera
  • react-native-view-shot
  • react-native-svg 文件包含地址: node_modules/react-native-svg/apple/RNSVGRenderable.mm
  • react-native-syan-image-picker 中 TZImagePickerController

其他三方庫沒有列出來,可以在Xcode中進行搜索 UIGraphicsBeginImageContextWithOptions ,檢查是否是有使用到,同時驗證顯示正常與否。如果顯示有問題,則可以去三方庫對應(yīng)的官方Github尋求解決方案或者自行替換。

五、參考地址

Apple官方提問:https://developer.apple.com/forums/thread/733326
Apple官方提問:https://developer.apple.com/forums/thread/731385
github issue:https://github.com/react-native-linear-gradient/react-native-linear-gradient/issues/637
github: https://github.com/ibireme/YYText/issues/984
github:https://github.com/muntius/react-native-fast-image/commit/fc2b8acd97f07989e312f5cbd61d2e541fda3611
github:https://github.com/DylanVann/react-native-fast-image/issues/1002文章來源地址http://www.zghlxwxcb.cn/news/detail-718472.html


到了這里,關(guān)于ReactNative中升級IOS 17版本Crash解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 升級至iOS17公測版系統(tǒng)后如何降級?iOS 17 Beta降級詳細教程

    升級至iOS17公測版系統(tǒng)后如何降級?iOS 17 Beta降級詳細教程

    蘋果最近發(fā)布iOS 17首個公測版,許多果粉都迫不及待地進行了更新。但是不少小伙伴升級iOS 17后iPhone遇到了一些問題,例如APP閃退、吃內(nèi)存、耗電快等。Bug太多導致體驗很差,想要降級到iOS 16系統(tǒng)。 升級iOS 17beta后悔了?其實只要蘋果沒有關(guān)閉iOS 16系統(tǒng)正式版的驗證通道,已

    2024年02月13日
    瀏覽(21)
  • iOS 17 beta 2有哪些BUG?iOS 17 beta 2推薦升級嗎?

    iOS 17 beta 2有哪些BUG?iOS 17 beta 2推薦升級嗎?

    雖然iOS 17 beta 2 帶來了大量的功能更新,但畢竟是測試版,海量的適配BUG也一同隨之而來。 想升級iOS 17 beta 2的用戶不妨先查看下目前存在的問題匯總! 一:存儲空間更小了 升級beta1后存儲空間縮小了大概3G左右,beta2更新后又縮小了2G。 二:圖片顯示有問題 iOS 17 beta 2 會導致

    2024年02月11日
    瀏覽(20)
  • Xcode升級到15.0 iOS17.0會出現(xiàn)的問題

    Xcode升級到15.0 iOS17.0會出現(xiàn)的問題

    解決辦法: Build Settings 搜索 User Script Sandboxing ,把== User Script Sandboxing== 改為 NO 。 解決辦法:全局搜索 DT_TOOLCHAIN_DIR ,一鍵替換成 TOOLCHAIN_DIR 。 解決方法:去pod里面搜索 iOS Deployment Target ,全部替換成最低支持iOS 12.0 解決方法:將Build Phases中的各項重新拖動排序,按以下順序

    2024年02月08日
    瀏覽(19)
  • 升級iOS 17出現(xiàn)白蘋果、不斷重啟等系統(tǒng)問題怎么辦?

    升級iOS 17出現(xiàn)白蘋果、不斷重啟等系統(tǒng)問題怎么辦?

    iOS 17發(fā)布后了,很多果粉都迫不及待的將iphone/ipad升級到最新iOS17系統(tǒng),體驗新系統(tǒng)功能。 但部分果粉因硬件、軟件的各種情況,導致升級系統(tǒng)后出現(xiàn)故障,比如白蘋果、不斷重啟、卡在系統(tǒng)升級界面等等問題。 如果遇到了這些系統(tǒng)問題,首選我們可以選擇強制重啟設(shè)備來修

    2024年02月09日
    瀏覽(31)
  • 升級iOS17后iPhone無法連接App Store怎么辦?

    升級iOS17后iPhone無法連接App Store怎么辦?

    最近很多用戶反饋,升級最新iOS 17系統(tǒng)后打開App Store提示\\\"無法連接\\\",無法正常打開下載APP。 為什么升級后無法連接到App Store?可能是以下問題導致: 1.網(wǎng)絡(luò)問題導致App Store無法正常打開 2.網(wǎng)絡(luò)設(shè)置問題 3.App Store服務(wù)器問題導致無法正常使用 4.系統(tǒng)問題也有可能導致App Store無

    2024年02月10日
    瀏覽(22)
  • iPhone升級iOS17出現(xiàn)無法連接互聯(lián)網(wǎng)的錯誤提示怎么辦?

    iPhone升級iOS17出現(xiàn)無法連接互聯(lián)網(wǎng)的錯誤提示怎么辦?

    最新的iOS 17系統(tǒng)已經(jīng)發(fā)布了快一個月了,很多人都已升級體驗更多全新功能,但有部分用戶卻在升級過程中遇到一些問題:如無法驗證更新,iOS17驗證失敗,因為您不再連接到互聯(lián)網(wǎng)、 iPhone無法檢查更新等錯誤問題。明明網(wǎng)絡(luò)穩(wěn)定,手機也可以正常瀏覽其他網(wǎng)站與APP,但就是

    2024年02月08日
    瀏覽(28)
  • 免費升級到 iOS 17 Developer Beta:官方Apple Store升級方案與愛思助手方法比較

    免費升級到 iOS 17 Developer Beta:官方Apple Store升級方案與愛思助手方法比較

    ???? 博主 libin9iOak帶您 Go to New World.??? ?? 個人主頁——libin9iOak的博客?? ?? 《面試題大全》 文章圖文并茂??生動形象??簡單易學!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍》學會IDEA常用操作,工作效率翻倍~?? ???? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬

    2024年02月11日
    瀏覽(22)
  • React16、17、18版本新特性

    react-16版本新特性 一、hooks 二、memo、lazy、Suspense 三、Profiler Profiler 能添加在 React 樹中的任何地方來測量樹中這部分渲染所帶來的開銷 四、createContext、createRef、forwardRef、生命周期函數(shù)的更新、Strict Mode 五、Fragment 六、createPortal react-17版本新特性 一、全新的 JSX 轉(zhuǎn)換 React 17以

    2024年02月05日
    瀏覽(24)
  • 【Flutter】flutter和react-native的性能對比

    Flutter和React Native是兩個流行的跨平臺移動應(yīng)用開發(fā)框架。它們都提供了一種方式來使用一套代碼編寫應(yīng)用程序,并運行在多個平臺上,如iOS和Android。 就性能而言,F(xiàn)lutter和React Native在某些方面有一些差異。下面是一些比較常見的性能方面的對比: 渲染性能: Flutter使用自己的

    2024年02月10日
    瀏覽(23)
  • 【IOS】Xcode 15.2版本下載 iOS_17 Simulator失敗

    Xcode更新15.2自身不帶iOS_17 Simulator模擬器的,然而在使用自帶的get下載安裝會一直在40進度左右出現(xiàn)因為網(wǎng)絡(luò)問題安裝失敗的情況,一般這種情況在斷點處重試安裝也還好,但是每次重試都是需要重新下載,因為本身下載又很慢,又總是在40左右出現(xiàn)此問題,所以只能嘗試自行

    2024年02月20日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包