从Xcode 15.1升级到Xcode 16后出现Undefined symbol: _OBJC_CLASS_$_ADClient错误
解决Xcode 16升级后ADClient/iAd框架构建错误
问题原因
Xcode 16正式移除了iAd框架中的ADClient类,苹果早在iOS 14+就已废弃iAd的归因能力,转而推荐使用AdServices框架提供的归因API替代。
解决方案
替换框架依赖
在项目的Build Phases > Link Binary With Libraries中移除iAd.framework,添加AdServices.framework(设置为Optional以兼容低版本系统)。更新归因请求代码
将原ADClient的requestAttributionDetails调用替换为AdServices框架的AAAttributionAPI:原代码示例:
#import <iAd/iAd.h> [[ADClient sharedClient] requestAttributionDetailsWithBlock:^(NSDictionary *details, NSError *error) { // 处理归因详情 }];替换后的Swift代码:
import AdServices import AppTrackingTransparency // iOS 14+需先请求ATT权限 ATTrackingManager.requestTrackingAuthorization { status in guard status == .authorized else { return } AAAttribution.shared().requestAttributionDetails { details, error in if let attributionDetails = details { // 解析归因数据 } else if let error = error { // 处理错误 } } }添加权限描述
在Info.plist中添加NSUserTrackingUsageDescription键,填写向用户说明追踪用途的文案,例如:"需要获取您的设备标识符以提供个性化广告服务"。
注意事项
- 若需支持iOS 13及以下版本,需保留条件编译逻辑,针对不同系统版本调用对应框架的API。
- 需在App Store Connect的App隐私设置中配置广告追踪相关选项。
内容的提问来源于stack exchange,提问作者K N Sarvaiya
相关产品推荐
相关产品推荐

