【问题标题】:OAuthSwift SceneDelegate.swift issue ObjC+Swift projectOAuthSwift SceneDelegate.swift 问题 ObjC+Swift 项目
【发布时间】:2021-12-02 01:26:42
【问题描述】:

OAuthSwift(2.2.0) 正在添加到现有的 iOS OBJC 项目中。该项目是为 iOS 8 及更早版本开发的。为了更新项目,我们不会将项目完全转换为 swift。决定保留核心 ObjC 模块,并使用 Swift 为 iOS 13.0 开发所有新功能。更重要的是,该项目还使用了 C++ 库和其他 3rd 方库。

该项目有 100 多个实现类,每个类都有 100 行代码。我从几篇指南和文章中了解到,在 OBJC > SWIFT 转换中存在很多问题。

现有的AppDelegate.m 与多个控制器具有互操作性,我们目前持有didFinishLaunchingWithOptionsAppDelegate.mSceneDelgate.swift 之间。

实际问题:

我们试过了,

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let url = URLContexts.first?.url else {
        return
    }
    if url.host == "oauth-callback" {
        OAuthSwift.handle(url: url)
    }
}

但是,场景映射导致 UIWindow nil 出现问题,无法呈现 rootviewcontroller。

或者,我已经尝试过,openURL in AppDelegate.m,如下所示。

(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

       if ([url.host isEqualToString:@"oauth-callback"]) {
          [OAuthSwift handleWithUrl:url];
          }
          return YES;
   }

上面似乎正在访问 OAuthToken。但是,OAuthToken 在某处迷路了。这将是指导知道....

我们保留Objc的策略是否可行? 我们如何使用 OAuth 解决 SceneDelegate.swift 和 AppDelegate.m 互操作性问题?对兼容 OBJC 的 OAuth2.0 框架有任何参考吗? 可以用SFSafariController代替调用OAuthSwift,访问token吗?

提前致谢。

【问题讨论】:

    标签: ios swift objective-c oauth-2.0


    【解决方案1】:

    在 OBJC 项目中,使用 SWIFT 和 OBJC 代码之间可用的互操作性功能,此网址

       if ([url.host isEqualToString:@"oauth-callback"]) {
           [OAuthSwift handleWithUrl:url];
           }
    

    在标题中声明

    @class OAuthSwift;
    

    在 Swift 中声明 @objc

       @objc  open class func handle(url: URL) {
                let notification = Notification(name:   OAuthSwift.didHandleCallbackURL, object: nil,
                userInfo: [CallbackNotification.optionsURLKey: url])
                notificationCenter.post(notification)
            }
    

    使用了 SFSafariViewControllerDelegate。

    这个实现,并没有坚持使用 'OAuthSwift'、'~> 2.2.0' 的 SceneDelegate。互操作性很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 2016-07-18
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      相关资源
      最近更新 更多