如何用Swift实现打开旧iOS应用TVFy时启动全新iOS应用?
实现旧iOS应用TVFy自动启动新应用的Swift方案
因为新旧应用是独立Bundle ID和Apple账号,核心是利用iOS的URL Scheme来实现应用间跳转,以下是完整的实现步骤和代码:
1. 配置新应用的URL Scheme
在新应用的Xcode项目中:
- 进入 Targets -> 对应新应用Target -> Info 标签页
- 找到 URL Types 区域,点击加号添加一个URL Scheme
- 填写一个唯一的Scheme(建议用反向域名格式避免冲突,比如
com.yourcompany.tvfy-new)
2. 旧应用中添加跳转逻辑
在旧应用的启动入口(AppDelegate 或 SceneDelegate,根据iOS版本选择)中添加以下代码:
第一步:定义常量
// 新应用的URL Scheme,和新应用配置的一致 private let newAppScheme = "com.yourcompany.tvfy-new://" // 新应用的App Store下载链接,替换为实际链接 private let newAppStoreLink = "https://apps.apple.com/cn/app/[新应用名称]/[App ID]"
第二步:实现跳转检查函数
private func openNewAppOrNavigateToStore() { guard let newAppURL = URL(string: newAppScheme) else { return } // 检查新应用是否已安装 if UIApplication.shared.canOpenURL(newAppURL) { // 打开新应用 UIApplication.shared.open(newAppURL, options: [:]) { success in if success { // 成功打开后可选择退出旧应用(按需使用) exit(0) } } } else { // 未安装则引导到App Store guard let storeURL = URL(string: newAppStoreLink) else { return } UIApplication.shared.open(storeURL, options: [:]) } }
第三步:在启动方法中调用函数
- 若使用
AppDelegate(iOS 12及以下):
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { openNewAppOrNavigateToStore() return true }
- 若使用
SceneDelegate(iOS 13+):
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let _ = (scene as? UIWindowScene) else { return } openNewAppOrNavigateToStore() }
3. 关键配置:旧应用Info.plist添加白名单
必须在旧应用的 Info.plist 中添加 LSApplicationQueriesSchemes 数组,将新应用的URL Scheme加入,否则 canOpenURL 会返回false:
<key>LSApplicationQueriesSchemes</key> <array> <string>com.yourcompany.tvfy-new</string> </array>
可选方案:Universal Links(更优雅的跳转)
如果需要更安全、无弹窗的跳转体验,可以使用Universal Links:
- 配置新应用的Associated Domains,添加
applinks:yourdomain.com - 在你的域名根目录或
.well-known目录放置apple-app-site-association文件,指定新应用的Bundle ID和路径规则 - 旧应用中直接跳转新应用的关联域名链接,若用户未安装新应用,链接会自动打开网页(可在网页中引导到App Store)
注意事项
exit(0)用于退出旧应用,苹果官方虽不推荐强制退出,但如果需求是完全切换到新应用,可按需使用,确保调用前无未完成的异步任务- 测试时需确保新应用已安装在测试设备上,且URL Scheme配置完全匹配
- URL Scheme需保证唯一,避免与其他应用冲突
内容的提问来源于stack exchange,提问作者komalc
相关产品推荐
相关产品推荐

