From 592a23b02e17a917a2550cc9304ea21935b5fb67 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sat, 4 Jul 2026 18:00:44 +0800 Subject: [PATCH] =?UTF-8?q?fix(iOS):=20SMB=20URL=20detection=20=E2=80=94?= =?UTF-8?q?=20show=20alert=20guiding=20to=20Files=20app=20instead=20of=20t?= =?UTF-8?q?rying=20to=20play.=20Add=20import=20UIKit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/NetworkFileBrowser.swift | 35 +++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/Sources/NetworkFileBrowser.swift b/Sources/NetworkFileBrowser.swift index 117bf54..b25a4ea 100644 --- a/Sources/NetworkFileBrowser.swift +++ b/Sources/NetworkFileBrowser.swift @@ -2,6 +2,8 @@ import SwiftUI import AVFoundation #if os(macOS) import AppKit +#else +import UIKit #endif // MARK: - 网络共享文件项 @@ -257,6 +259,20 @@ struct NetworkFileBrowserIOS: View { @State private var manualURL = "" @State private var showFileImporter = false + @State private var showSMBAlert = false + @State private var smbAlertURL = "" + + private func openInFiles(url: URL) { + smbAlertURL = url.absoluteString + showSMBAlert = true + } + + private func openFilesApp() { + // 打开 Files 应用 + if let filesURL = URL(string: "shareddocuments://") { + UIApplication.shared.open(filesURL) + } + } var body: some View { NavigationView { @@ -295,15 +311,22 @@ struct NetworkFileBrowserIOS: View { .font(.headline) HStack { - TextField("https://... or smb://...", text: $manualURL) + TextField("https://... 播放流地址", text: $manualURL) .textFieldStyle(.roundedBorder) .keyboardType(.URL) .autocapitalization(.none) .disableAutocorrection(true) Button("Open") { - guard let url = URL(string: manualURL.trimmingCharacters(in: .whitespaces)), - !manualURL.trimmingCharacters(in: .whitespaces).isEmpty else { return } + let trimmed = manualURL.trimmingCharacters(in: .whitespaces) + guard !trimmed.isEmpty, let url = URL(string: trimmed) else { return } + + // SMB/NFS 地址不能直接播放,引导去 Files 连接 + if url.scheme == "smb" || url.scheme == "nfs" { + openInFiles(url: url) + return + } + let name = url.lastPathComponent.isEmpty ? (url.host ?? "Stream") : url.lastPathComponent bridge.addURL(manualURL) isPresented = false @@ -327,6 +350,12 @@ struct NetworkFileBrowserIOS: View { Button("Close") { isPresented = false } } } + .alert("SMB/NFS Share", isPresented: $showSMBAlert) { + Button("Open Files App") { openFilesApp() } + Button("Cancel", role: .cancel) {} + } message: { + Text("To access SMB/NFS shares on iPhone:\n\n1. Open the Files app\n2. Tap ⋯ → Connect to Server\n3. Enter: \(smbAlertURL)\n4. Login with your credentials\n\nThen come back and use 'Browse Files'.") + } .fileImporter( isPresented: $showFileImporter, allowedContentTypes: [.movie, .video, .audio, .mpeg4Movie, .quickTimeMovie, .mp3, .wav, .mpeg4Audio],