【问题标题】:FBFinalClassViolationException: FBAdTimer is a final class and cannot be subclassedFBFinalClassViolationException:FBAdTimer 是最终类,不能被子类化
【发布时间】:2018-03-24 21:57:46
【问题描述】:

我们已升级到 FBAudienceNetwork v.4.26,现在每当我们尝试在 Xcode 中运行我们的单元测试目标时,我们都会看到以下未处理的运行时异常:

2017-10-12 15:30:41.229388-0500 App[60509:1890366] *** Terminating app due to uncaught exception 'FBFinalClassViolationException', reason: 'FBAdTimer is a final class and cannot be subclassed. FBAdTimer'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000011ca991cb __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000011c1bef41 objc_exception_throw + 48
    2   AppTests                    0x00000001399cc669 +[FBAdTimer scheduledTimerWithTimeInterval:repeats:block:] + 0
    3   libobjc.A.dylib                     0x000000011c1bfa14 CALLING_SOME_+initialize_METHOD + 19
    4   libobjc.A.dylib                     0x000000011c1bfdae _class_initialize + 276
    5   libobjc.A.dylib                     0x000000011c1c65e7 lookUpImpOrForward + 225
    6   libobjc.A.dylib                     0x000000011c1d63d4 _objc_msgSend_uncached + 68
    7   AppTests                    0x00000001399c8ec4 +[FBAdFingerprinter load] + 46
    8   libobjc.A.dylib                     0x000000011c1c069b call_load_methods + 695
    9   libobjc.A.dylib                     0x000000011c1c12f3 load_images + 70
    10  ???                                 0x000000010ff7adac 0x0 + 4562857388
    11  ???                                 0x000000010ff876c5 0x0 + 4562908869
    12  ???                                 0x000000010ff86898 0x0 + 4562905240
    13  ???                                 0x000000010ff8692c 0x0 + 4562905388
    14  ???                                 0x000000010ff7d956 0x0 + 4562868566
    15  ???                                 0x000000010ff83076 0x0 + 4562890870
    16  libdyld.dylib                       0x000000011ddeba47 dlopen + 86
    17  CoreFoundation                      0x000000011ca49808 _CFBundleDlfcnLoadBundle + 152
    18  CoreFoundation                      0x000000011ca49694 _CFBundleLoadExecutableAndReturnError + 324
    19  Foundation                          0x0000000114060ec1 -[NSBundle loadAndReturnError:] + 520
    20  IDEBundleInjection                  0x0000000110057860 __XCBundleInjection + 798
    21  ???                                 0x000000010ff8bc16 0x0 + 4562926614
    22  ???                                 0x000000010ff8be46 0x0 + 4562927174
    23  ???                                 0x000000010ff876da 0x0 + 4562908890
    24  ???                                 0x000000010ff86898 0x0 + 4562905240
    25  ???                                 0x000000010ff8692c 0x0 + 4562905388
    26  ???                                 0x000000010ff7b15d 0x0 + 4562858333
    27  ???                                 0x000000010ff7ec98 0x0 + 4562873496
    28  ???                                 0x000000010ff7a3d4 0x0 + 4562854868
    29  ???                                 0x0000000118742510 0x0 + 4705232144
    30  ???                                 0x0000000118740a39 0x0 + 4705225273
    31  ???                                 0x000000011873c249 0x0 + 4705206857
    32  ???                                 0x000000011873c036 0x0 + 4705206326
    33  ???                                 0x0000000000000007 0x0 + 7
)
libc++abi.dylib: terminating with uncaught exception of type NSException

奇怪的是,在我们的代码库(包括所有第三方依赖项)中,包含单词“FBAdTimer”的唯一文件是:

λ ~/Projects/iOS/app/ IOS-6370* grep -iR "FBAdTimer" .
Binary file ./Pods/FBAudienceNetwork/FBAudienceNetwork.framework/FBAudienceNetwork matches
Binary file ./App.xcworkspace/xcuserdata/silver.xcuserdatad/UserInterfaceState.xcuserstate matches

【问题讨论】:

    标签: ios objective-c facebook


    【解决方案1】:

    根据https://developers.facebook.com/bugs/147221075773612/,FBAudienceNetwork 不能同时在测试目标和加载它的主包中。解决方法是在 Podfile 中去掉测试目标的依赖:

    target 'App' do
      use_frameworks!
    
      pod 'FBAudienceNetwork'  # Only present in the main app target
    end
    
    target 'AppTests' do
    
    end
    

    【讨论】:

      【解决方案2】:

      只是引用我的案例促使我访问这个线程,

      我正在创建一个框架来管理 Facebook Audience Network,我在 FacebookAudienceNetwork.framework 包的不同类上多次收到 FBFinalClassViolationException 异常

      嫌疑人是:appoDeal(是一个中介适配器 sdk),它正在添加 FacebookAudience Network 框架来管理他们的中介适配器。

      从 AppoDeal pod 集合中删除 FacebookAudienceNetwork pod 解决了我的问题,(在我的情况下,删除 AppoDeal 是好的)

      Hint to Solution: 请检查是否有其他框架/库/sdks 添加 FacebookAudienceNetwork

      【讨论】:

        【解决方案3】:

        对于面对他们的人,只需转到 Assets-> Play Services Resolver(或 External Dependency Manager)-> iOS Resolver-> Settings 并选中“Link Frameworks Statically”复选框,这将为您的 Podfile 并修复导致崩溃的异常。

        除了这个解决方案之外,另一件事导致了同样的问题。当 FBAudienceNetwork 框架同时在 Xcode 项目的 Podfile 中的 Unity-iPhone 和 Unity-iPhone 测试目标上时,就会发生这种情况。如果是这种情况,只需删除 Tests 上的行并在该目录中的终端上运行“pod install”命令。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-15
          • 2017-01-03
          • 1970-01-01
          • 2012-04-21
          • 1970-01-01
          • 1970-01-01
          • 2016-12-09
          • 1970-01-01
          相关资源
          最近更新 更多