swift2 错误:FBSDKApplicationDelegate.m 'UIApplication'没有可见的@界面宣告选择器'openURL:options:completionHandler:'

fcy6dtqo  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(193)

我正在使用Xcode 7.3.1为Swift 2.2编写的旧版iOS应用程序实现Facebook SDK。我根据this tutorial使用CocoaPods安装了SDK的Swift version
当我尝试建置项目时,收到此错误:
“UIApplication”没有可见的@接口声明选择器“openURL:选项:完成处理程序:”
以下是FBSDCoreKit中受影响的代码:

NSOperatingSystemVersion iOS10Version = { .majorVersion = 10, .minorVersion = 0, .patchVersion = 0 };
if ([FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS10Version]) {
  [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:handler];
}

如何在不修改Facebook SDK本身的情况下解决此错误?

toiithl6

toiithl61#

我在10天前报告了这个问题,但仍然没有响应https://github.com/facebook/facebook-sdk-swift/issues/122

yvfmudvl

yvfmudvl2#

这个问题是由使用Swift 2.2/Xcode 7.3.1和最新的(v0.2.0,因为我张贴这个anwser)Facebook SDK引起的。在迁移到最新的Swift/Xcode 8.2.1后,问题不再发生。

plicqrtu

plicqrtu3#

您应该为此更新:

- (void)openURL:(NSURL *)url sender:(id<FBSDKURLOpening>)sender 
handler:(void(^)(BOOL))handler
{
  _expectingBackground = YES;
  _pendingURLOpen = sender;
  dispatch_async(dispatch_get_main_queue(), ^{
    // Dispatch openURL calls to prevent hangs if we're inside the 
current app delegate's openURL flow already

# if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_10_0

      [[UIApplication sharedApplication] openURL:url options:@{} 
completionHandler:handler];

# else

      BOOL opened = [[UIApplication sharedApplication] openURL:url];

      if ([url.scheme hasPrefix:@"http"] && !opened) {
    NSOperatingSystemVersion iOS8Version = { .majorVersion = 8, .minorVersion = 0, .patchVersion = 0 };
    if (![FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS8Version]) {
      // Safari openURL calls can wrongly return NO on iOS 7 so manually overwrite that case to YES.
      // Otherwise we would rather trust in the actual result of openURL
      opened = YES;
    }
  }
  if (handler) {
    handler(opened);
  }

# endif

  });
}

相关问题