【问题标题】:iOS app crashes when Podfile has 'use_frameworks!' option当 Podfile 具有“use_frameworks!”时,iOS 应用程序崩溃选项
【发布时间】:2015-07-20 17:16:41
【问题描述】:

我有一个使用 CocoaPods 的单视图应用程序设置,其中仅包含两个 pod,“MBProgressHUB”和“ImojiSDK”。

当 CocoaPods 设置为静态库时,项目可以正常构建和运行。当我将 CocoaPods 配置为使用框架时,通过包含“use_frameworks!”在 Podfile 中标记,项目构建,但在运行时崩溃。

问题是,为什么它作为静态库运行良好,但在使用框架时却不行?

当我尝试在视图的 viewDidLoad 中创建新的 ImojiSDK 会话时发生崩溃:

IMImojiSession *session = [IMImojiSession imojiSession]; //THIS IS WHERE IT CRASHES
session.contentCache = [[NSCache alloc] init];
session.contentCache.countLimit = 100;

以下是 Xcode 的 Podfile 和崩溃输出:

PODFILE:

# Uncomment this line to define a global platform for your project
# platform :ios, '6.0'

use_frameworks!

pod 'MBProgressHUD'
pod 'ImojiSDK'

崩溃输出:

2015-07-20 14:05:18.031 imoji[19887:323843] +[BFTask im_concurrentBackgroundTaskWithBlock:]: unrecognized selector sent to class 0x1041b6878
2015-07-20 14:05:18.035 imoji[19887:323843] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[BFTask im_concurrentBackgroundTaskWithBlock:]: unrecognized selector sent to class 0x1041b6878'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000104aafc65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000104746bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x0000000104ab6fad +[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x0000000104a0d13c ___forwarding___ + 988
    4   CoreFoundation                      0x0000000104a0ccd8 _CF_forwarding_prep_0 + 120
    5   imoji                               0x0000000104003962 -[IMMutableImojiSessionStoragePolicy performCleanupOnOldImages] + 93
    6   imoji                               0x0000000104002c4f -[IMMutableImojiSessionStoragePolicy initWithCachePath:persistentPath:] + 175
    7   imoji                               0x000000010400ec6d +[IMImojiSessionStoragePolicy temporaryDiskStoragePolicy] + 210
    8   imoji                               0x0000000104003dfc -[IMImojiSession init] + 76
    9   imoji                               0x000000010400e8c7 +[IMImojiSession imojiSession] + 41
    10  imoji                               0x0000000103fd6b8c -[ViewController viewDidLoad] + 76
    11  UIKit                               0x000000010526d1d0 -[UIViewController loadViewIfRequired] + 738
    12  UIKit                               0x000000010526d3ce -[UIViewController view] + 27
    13  UIKit                               0x0000000105188289 -[UIWindow addRootViewControllerViewIfPossible] + 58
    14  UIKit                               0x000000010518864f -[UIWindow _setHidden:forced:] + 247
    15  UIKit                               0x0000000105194de1 -[UIWindow makeKeyAndVisible] + 42
    16  UIKit                               0x0000000105138417 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2732
    17  UIKit                               0x000000010513b19e -[UIApplication _runWithMainScene:transitionContext:completion:] + 1349
    18  UIKit                               0x000000010513a095 -[UIApplication workspaceDidEndTransaction:] + 179
    19  FrontBoardServices                  0x00000001085585e5 __31-[FBSSerialQueue performAsync:]_block_invoke_2 + 21
    20  CoreFoundation                      0x00000001049e341c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    21  CoreFoundation                      0x00000001049d9165 __CFRunLoopDoBlocks + 341
    22  CoreFoundation                      0x00000001049d8f25 __CFRunLoopRun + 2389
    23  CoreFoundation                      0x00000001049d8366 CFRunLoopRunSpecific + 470
    24  UIKit                               0x0000000105139b02 -[UIApplication _run] + 413
    25  UIKit                               0x000000010513c8c0 UIApplicationMain + 1282
    26  imoji                               0x0000000103fd6fef main + 111
    27  libdyld.dylib                       0x0000000106579145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

【问题讨论】:

  • 你用的是Objective-C还是SwiftiOS7还是iOS8?
  • 我正在使用 Objective-C。

标签: ios xcode frameworks crash cocoapods


【解决方案1】:

use_frameworks! 通过在新的动态框架中构建您的代码来启用 Swift 支持。动态框架仅支持 iOS 8

CocoaPods 0.36 - Framework and Swift Support

【讨论】:

  • iOS 部署目标设置为 8.4。 Objective-C 也支持框架。
  • @SpencerMüllerDiniz 我可以问你为什么需要将 pod 用作框架,因为它作为静态库工作
  • 我在项目中有一个键盘扩展,ImojiSDK 使用 Bolts 库。 Bolts 库使用扩展中禁止的 API 方法。 ImojiSDK 开发人员建议,在这种情况下,应将 ImojiSDK pod 用作框架。请参阅此处的故障排除部分:cocoapods.org/?q=imojisdk
  • 使用 use_frameworks! 时,您可能应该使用@import
【解决方案2】:

最近更新了 ImojiSDK pod 以实现框架兼容性。 https://github.com/imojiengineering/imoji-ios-sdk

【讨论】:

  • 感谢您的信息,但我最终没有使用 SDK,而是直接开始使用 REST API。
猜你喜欢
  • 1970-01-01
  • 2019-03-02
  • 2017-09-27
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多