You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS 13下自定义Scheme唤起App后application:openURL:options:未触发

iOS 13下自定义Scheme唤起App但application(_:open:options:)未被调用的解决办法

嘿,我之前在iOS 13+的项目里也碰到过一模一样的坑!问题出在iOS 13引入的**场景化架构(Scene)**上——Xcode 11默认创建的项目会启用UISceneDelegate,这时候原来AppDelegate里的application(_:open:options:)就会被弃用,回调逻辑会转到SceneDelegate的对应方法里。

下面是具体的解决步骤:

1. 在SceneDelegate中实现正确的回调方法

打开你的SceneDelegate.swift,添加这个方法来处理唤起请求:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    // 获取唤起App的目标URL
    guard let url = URLContexts.first?.url else {
        return
    }
    
    // 在这里编写你的URL处理逻辑,比如解析参数、跳转指定页面
    print("收到唤起URL:\(url)")
    // 示例:如果是MyApp://product/456,解析商品ID
    if url.scheme == "MyApp", let productID = url.pathComponents.last {
        print("要跳转的商品ID:\(productID)")
        // 这里添加页面跳转或业务逻辑
    }
}

2. 优化Info.plist配置(可选但推荐)

你的CFBundleURLName字段建议改成反向域名格式的唯一标识符,比如com.yourcompany.MyApp,虽然这不是导致方法不调用的直接原因,但符合苹果官方规范,能避免和其他App的Scheme命名冲突。

3. 若想回到旧架构(不推荐)

要是你暂时不想适配Scene架构,也可以手动关闭它:

  • 打开Info.plist,删除UIApplicationSceneManifest这个完整的key(包括它下面的所有子项)
  • 这样App就会回到iOS 12及以前的架构,application(_:open:options:)就能正常被调用了

⚠️ 注意:苹果现在更推荐使用Scene架构来适配iPad多窗口、Mac Catalyst等功能,除非有特殊需求,否则不建议关闭。

最后测试的时候记得把App从后台彻底退出再测试,避免缓存影响结果哦!

内容的提问来源于stack exchange,提问作者Jabson

火山引擎 最新活动