从 Xcode 15.1 升级到 Xcode 16 会导致未定义符号:_OBJC_CLASS_$_ADClient 错误

问题描述 投票:0回答:1

我最近从 Xcode 15.1 升级到 Xcode 16,现在在构建过程中遇到以下错误:

Check this image here.

此错误似乎与 ADClient 类有关,该类是我用来请求归因详细信息的 iAd 框架的一部分。代码在升级之前运行良好,其中涉及调用 ADClient 上的 requestAttributionDetails 方法

swift iad xcode16
1个回答
0
投票

但是,iAd 在 iOS 14 及更高版本中已弃用。 Apple 强烈建议使用 AdServices 框架进行归因,尤其是针对较新 iOS 版本的应用程序。

从您的项目中删除 iAd 框架

如果您过去添加过 iAd 并且不再需要它(或正在迁移到 AdServices),请务必:

  • 从 Link Binary With Libraries 中删除 iAd.framework。
  • 删除代码库中的所有 import iAd 语句。
  • 删除任何 iAd 相关代码

切换到 AdServices 框架

导入 AdServices 框架:

import AdServices

将 iAd 相关代码替换为 AdServices 等效代码:

if #available(iOS 14.3, *) {
    do {
        let attributionToken = try AAAttribution.attributionToken()
        // Handle the attribution token (e.g., send it to your backend)
        completion(["AttributionToken": attributionToken], nil)
    } catch {
        // Handle the error
        completion(nil, error as NSError)
    }
} else {
    // Handle unsupported iOS versions
    completion(nil, nil)
}

在 Xcode 16 中,当跳转到 ADClient 的定义时,它被明确标记为已过时且不再允许。推荐的替代方案是使用 AdServices 的 AAAttribution 来处理归因任务。您可以在下图中突出显示此更改。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.