XCode12编译出错:Undefined symbol: _OBJC_CLASS_$_ATTrackingManager

说明:

从 iOS 14 开始,若开发者设置 App Tracking Transparency 向用户申请跟踪授权,在用户授权之前IDFA 将不可用。 如果用户拒绝此请求,应用获取到的 IDFA 将自动清零,可能会导致您的广告收入的降低

应用编译环境升级至 Xcode 12.0 及以上版本

报错信息

XCode12编译出错:Undefined symbol: _OBJC_CLASS_$_ATTrackingManager_第1张图片

Showing All Messages
Arm64 function not 4-byte aligned: _unwind_tester from /Users/yz/Desktop/CSJ_Test/Build/CSJ_TestXCode/Libraries/libiPhone-lib.a(unwind_test_arm64.o)

Showing All Messages
Undefined symbol: _OBJC_CLASS_$_ATTrackingManager

解决方法:

原因是缺少了一个 Libraries 引用 “AppTrackingTransparency.framework"

在XCode中配置即可: Build Phases -> Link Binary With Libraries 

XCode12编译出错:Undefined symbol: _OBJC_CLASS_$_ATTrackingManager_第2张图片 AppTrackingTransparency配置

 

穿山甲SDK

最近接入穿山甲广告SDK时遇到的这个错误问题:

后得到穿山甲官方回应:

对于国内的媒体,ATT相关的目前苹果未做强制要求。

SKAdNetworkIdentifier对海外媒体的,国内媒体也可不设置

--------------

穿山甲SDK需求:

需要 App Tracking Transparency(ATT)适用于请求用户授权,访问与应用相关的数据以跟踪用户或设备。

访问 https://developer.apple.com/documentation/apptrackingtransparency了解更多信息。

海外流量开发者需要注意: SKAdNetwork(SKAN)是 Apple 的归因解决方案,可帮助广告客户在保持用户隐私的同时衡量广告活动。

使用 Apple 的 SKAdNetwork 后,即使 IDFA 不可用,广告网络也可以正确获得应用安装的归因结果。 访问 https://developer.apple.com/documentation/storekit/skadnetwork 了解更多信息。

Checklist

  1. 应用编译环境升级至 Xcode 12.0 及以上版本
  2. 升级穿山甲 iOS SDK 3.2.5.0 及以上版本,穿山甲提供了 iOS 14 与 SKAdNetwork 支持
  3. 海外流量开发者需要检查: 将穿山甲的 SKAdNetwork ID 添加到 info.plist 中,以保证 SKAdNetwork 的正确运行
SKAdNetworkItems
  
    
      SKAdNetworkIdentifier
      238da6jt44.skadnetwork
    
    
      SKAdNetworkIdentifier
      22mmun2rn5.skadnetwork
    
  
  1. 持苹果 ATT:从 iOS 14 开始,若开发者设置 App Tracking Transparency 向用户申请跟踪授权,在用户授权之前IDFA 将不可用。 如果用户拒绝此请求,应用获取到的 IDFA 将自动清零,可能会导致您的广告收入的降低
NSUserTrackingUsageDescription
该标识符将用于向您投放个性化广告
  • 要获取 App Tracking Transparency 权限,请更新您的 Info.plist,添加 NSUserTrackingUsageDescription 字段和自定义文案描述。代码示例:

        要向用户申请权限时,请调用 requestTrackingAuthorizationWithCompletionHandler:,我们建议您申请权限后在请求广告,以便获得穿山甲准确获得用户的授权。

Objective-C 代码示例

#import 
#import 

- (void)getIDFA {
    if (@available(iOS 14, *)) {
        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
            if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
                NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
                NSLog(@"idfaStr - %@", idfaStr);
            }
        }];
    } else {
        // 使用原方式访问 IDFA
        if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
            NSString *idfaStr = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString;
            NSLog(@"idfaStr - %@", idfaStr);
        }
    }
}

 

其它参考:https://blog.csdn.net/wuwei54321/article/details/107581070

你可能感兴趣的:(Unity,IOS)