iOS 18適配問題記錄(Xcode16正式版)

問題1:ADClient編譯報錯問題

報錯信息

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_ADClient", referenced from:
       in ViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

相關(guān)代碼(demo)

原因

蘋果對AdClicent API加了一個標(biāo)識
ADCLIENT_DEPRECATED_IOS_90_145_OBSOLETED_180
表示:iOS7.1-iOS14.5可用,iOS18徹底廢棄简肴,會在iOS18系統(tǒng)上編譯失敗唯欣。

解決辦法

使用AdService庫的AAAttribution替代笤闯,注意iOS14.3才可以使用焰坪。

代碼

if (@available(ios 14.3, *)) {
        NSError *error;
        NSString *token = [AAAttribution attributionTokenWithError:&error];
        if (token != nil) {
            ...
        }
}

參考

https://developer.apple.com/forums/thread/759156
https://developer.apple.com/documentation/iad?language=objc

問題2:Xcode16(正式版)運(yùn)行時此疹,YYCache導(dǎo)致crash

報錯信息

原因

在 iOS18 中燃领,需要提前對 sqlite3_stmt 執(zhí)行 sqlite3_finalize士聪。

解決辦法

代碼

- (BOOL)_dbClose {
    if (!_db) return YES;
    
    int  result = 0;
    BOOL retry = NO;
    BOOL stmtFinalized = NO;
    
    if (@available(iOS 18, *)) {
        if (_dbStmtCache) {
            CFIndex size = CFDictionaryGetCount(_dbStmtCache);
            CFTypeRef *valuesRef = (CFTypeRef *)malloc(size * sizeof(CFTypeRef));
            CFDictionaryGetKeysAndValues(_dbStmtCache, NULL, (const void **)valuesRef);
            const sqlite3_stmt **stmts = (const sqlite3_stmt **)valuesRef;
            for (CFIndex i = 0; i < size; i ++) {
                sqlite3_stmt *stmt = stmts[i];
                sqlite3_finalize(stmt);
            }
            free(valuesRef);
            CFRelease(_dbStmtCache);
        }
    } else {
        if (_dbStmtCache) CFRelease(_dbStmtCache);
        _dbStmtCache = NULL;
    }
    
    do {
        retry = NO;
        result = sqlite3_close(_db);
        if (result == SQLITE_BUSY || result == SQLITE_LOCKED) {
            if (!stmtFinalized) {
                stmtFinalized = YES;
                sqlite3_stmt *stmt;
                while ((stmt = sqlite3_next_stmt(_db, nil)) != 0) {
                    sqlite3_finalize(stmt);
                    retry = YES;
                }
            }
        } else if (result != SQLITE_OK) {
            if (_errorLogsEnabled) {
                NSLog(@"%s line:%d sqlite close failed (%d).", __FUNCTION__, __LINE__, result);
            }
        }
    } while (retry);
    _db = NULL;
    return YES;
}

參考

https://giters.com/ibireme/YYCache/issues/166

問題3:Xcode16正式版,addSubView crash (maskView)

報錯信息

image.png
*** Assertion failure in -[TestMaskView _addSubview:positioned:relativeTo:], UIView.m:18496
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Set `maskView` (<UIView: 0x14a21ddd0; frame = (0 0; 0 0); layer = <CALayer: 0x60000314b480>>) to `nil` before adding it as a subview of <TestMaskView: 0x153e08350; frame = (0 0; 393 852); layer = <CALayer: 0x60000314b440>>'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001063540ec __exceptionPreprocess + 172
    1   libobjc.A.dylib                     0x00000001048bede8 objc_exception_throw + 72
    2   Foundation                          0x0000000109d21aa8 _userInfoForFileAndLine + 0
    3   UIKitCore                           0x0000000128c0151c -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1124
    4   ADClientTest                        0x0000000104609660 -[TestMaskView initWithFrame:] + 276
    5   ADClientTest                        0x0000000104609434 -[ViewController viewDidLoad] + 164
    6   UIKitCore                           0x0000000127f1e69c -[UIViewController _sendViewDidLoadWithAppearanceProxyObjectTaggingEnabled] + 80
    7   UIKitCore                           0x0000000127f23238 -[UIViewController loadViewIfRequired] + 908
    8   UIKitCore                           0x0000000127f234e0 -[UIViewController view] + 20
    9   UIKitCore                           0x00000001286c3a08 -[UIWindow addRootViewControllerViewIfPossible] + 132
    10  UIKitCore                           0x00000001286c343c -[UIWindow _updateLayerOrderingAndSetLayerHidden:actionBlock:] + 168
    11  UIKitCore                           0x00000001286c4288 -[UIWindow _setHidden:forced:] + 228
    12  UIKitCore                           0x00000001286d3344 -[UIWindow _mainQueue_makeKeyAndVisible] + 36
    13  UIKitCore                           0x000000012892dcd8 -[UIWindowScene _performDeferredInitialWindowUpdateForConnection] + 204
    14  UIKitCore                           0x0000000127af58f0 +[UIScene _sceneForFBSScene:create:withSession:connectionOptions:] + 1164
    15  UIKitCore                           0x000000012868f45c -[UIApplication _connectUISceneFromFBSScene:transitionContext:] + 808
    16  UIKitCore                           0x000000012868f70c -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 304
    17  UIKitCore                           0x000000012815ec08 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 260
    18  FrontBoardServices                  0x0000000113090ce4 __95-[FBSScene _callOutQueue_didCreateWithTransitionContext:alternativeCreationCallout:completion:]_block_invoke + 260
    19  FrontBoardServices                  0x00000001130910a4 -[FBSScene _callOutQueue_coalesceClientSettingsUpdates:] + 60
    20  FrontBoardServices                  0x0000000113090b64 -[FBSScene _callOutQueue_didCreateWithTransitionContext:alternativeCreationCallout:completion:] + 408
    21  FrontBoardServices                  0x00000001130bdd50 __93-[FBSWorkspaceScenesClient _callOutQueue_sendDidCreateForScene:transitionContext:completion:]_block_invoke.156 + 216
    22  FrontBoardServices                  0x000000011309d618 -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 160
    23  FrontBoardServices                  0x00000001130bc220 -[FBSWorkspaceScenesClient _callOutQueue_sendDidCreateForScene:transitionContext:completion:] + 388
    24  libdispatch.dylib                   0x000000010bdea7b8 _dispatch_client_callout + 16
    25  libdispatch.dylib                   0x000000010bdee3bc _dispatch_block_invoke_direct + 388
    26  FrontBoardServices                  0x00000001130e0b58 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 44
    27  FrontBoardServices                  0x00000001130e0a34 -[FBSMainRunLoopSerialQueue _targetQueue_performNextIfPossible] + 196
    28  FrontBoardServices                  0x00000001130e0b8c -[FBSMainRunLoopSerialQueue _performNextFromRunLoopSource] + 24
    29  CoreFoundation                      0x00000001062b8324 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
    30  CoreFoundation                      0x00000001062b826c __CFRunLoopDoSource0 + 172
    31  CoreFoundation                      0x00000001062b7a2c __CFRunLoopDoSources0 + 324
    32  CoreFoundation                      0x00000001062b20b0 __CFRunLoopRun + 788
    33  CoreFoundation                      0x00000001062b1960 CFRunLoopRunSpecific + 536
    34  GraphicsServices                    0x0000000117edfb10 GSEventRunModal + 160
    35  UIKitCore                           0x000000012868db40 -[UIApplication _run] + 796
    36  UIKitCore                           0x0000000128691d38 UIApplicationMain + 124
    37  ADClientTest                        0x0000000104609064 main + 140
    38  dyld                                0x00000001047cd410 start_sim + 20
    39  ???                                 0x000000010490a274 0x0 + 4371554932
)
libc++abi: terminating due to uncaught exception of type NSException

原因

iOS 18 對 UIView的maskView 增加了斷言猛蔽,導(dǎo)致如果業(yè)務(wù)代碼里有同名屬性可能導(dǎo)致觸發(fā)該斷言剥悟。

經(jīng)測試發(fā)現(xiàn):
1.自定義UIView子視圖,存在同名屬性maskView曼库,會崩潰
2.自定義cell区岗,添加到cell視圖上會崩潰毁枯,添加到contentView上,則不會崩潰
3.控制器里的maskView視圖屬性种玛,添加到控制器view,不會崩潰

解決辦法

修改自定義視圖蒂誉,將自定義子組件名為maskView的視圖進(jìn)行重命名。

參考

https://github.com/Tencent/QMUI_iOS/issues/1557

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末右锨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悄窃,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轧抗,死亡現(xiàn)場離奇詭異恩敌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)横媚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門纠炮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灯蝴,你說我怎么就攤上這事恢口。” “怎么了穷躁?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵耕肩,是天一觀的道長。 經(jīng)常有香客問我问潭,道長猿诸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任狡忙,我火速辦了婚禮梳虽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘去枷。我一直安慰自己怖辆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布删顶。 她就那樣靜靜地躺著竖螃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逗余。 梳的紋絲不亂的頭發(fā)上特咆,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音录粱,去河邊找鬼腻格。 笑死,一個胖子當(dāng)著我的面吹牛啥繁,可吹牛的內(nèi)容都是我干的菜职。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼旗闽,長吁一口氣:“原來是場噩夢啊……” “哼酬核!你這毒婦竟也來了蜜另?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤嫡意,失蹤者是張志新(化名)和其女友劉穎举瑰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔬螟,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡此迅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耸序。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菠齿。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡绳匀,死狀恐怖疾棵,靈堂內(nèi)的尸體忽然破棺而出痹仙,到底是詐尸還是另有隱情,我是刑警寧澤开仰,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布众弓,位于F島的核電站恩溅,受9級特大地震影響脚乡,放射性物質(zhì)發(fā)生泄漏滨达。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一锌订、第九天 我趴在偏房一處隱蔽的房頂上張望辆飘。 院中可真熱鬧,春花似錦劈猪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聋亡。三九已至,卻和暖如春漂佩,著一層夾襖步出監(jiān)牢的瞬間罪塔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工蜻直, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓臣樱,卻偏偏與公主長得像腮考,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棚放,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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