【发布时间】: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 与多个控制器具有互操作性,我们目前持有didFinishLaunchingWithOptions 在AppDelegate.m 和SceneDelgate.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