fix ios transfer song bug
This commit is contained in:
@@ -289,7 +289,7 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \\\"YES\\\"\"\n exit 0\nfi\nset -euo pipefail\nif [ \"YES\" = \"${OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED:-}\" ]; then\n echo \"Skipping Gradle build (OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED=YES)\"\n exit 0\nfi\ncd \"$SRCROOT/..\"\n./gradlew :composeApp:embedAndSignAppleFrameworkForXcode";
|
||||
shellScript = "set -euo pipefail\ncd \"$SRCROOT/..\"\nif [ \"YES\" = \"${OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED:-}\" ]; then\n echo \"Kotlin framework was built by the IDE; syncing Compose resources only\"\n ./gradlew -Pcompose.ios.resources.archs=arm64 :composeApp:syncComposeResourcesForIos --rerun\n exit 0\nfi\n./gradlew :composeApp:embedAndSignAppleFrameworkForXcode";
|
||||
};
|
||||
C516F4DE7FC107135868F830 /* Verify Widget Extension Embedded */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
|
||||
@@ -94,6 +94,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
guard let message = notification.userInfo?["message"] as? String else { return }
|
||||
HostBridge.shared.showToast(message)
|
||||
}
|
||||
NotificationCenter.default.addObserver(
|
||||
forName: Notification.Name("llmpRequestLocalNetworkPermission"),
|
||||
object: nil,
|
||||
queue: .main
|
||||
) { _ in
|
||||
HostBridge.shared.requestLocalNetworkPermission()
|
||||
}
|
||||
NotificationCenter.default.addObserver(
|
||||
forName: Notification.Name("llmpPrepareAudioSession"),
|
||||
object: nil,
|
||||
|
||||
@@ -1,9 +1,48 @@
|
||||
import Network
|
||||
import UIKit
|
||||
|
||||
/// Bridges Swift host events to Kotlin (via UserDefaults + notifications).
|
||||
/// Full bidirectional callback requires exporting Kotlin handlers through the ComposeApp framework.
|
||||
final class HostBridge {
|
||||
static let shared = HostBridge()
|
||||
private var localNetworkBrowser: NWBrowser?
|
||||
private var localNetworkTimeout: DispatchWorkItem?
|
||||
|
||||
/// iOS 没有显式的本地网络权限 API;开始 Bonjour 浏览会在首次进入传输页时触发系统授权。
|
||||
func requestLocalNetworkPermission() {
|
||||
guard localNetworkBrowser == nil else { return }
|
||||
|
||||
let parameters = NWParameters()
|
||||
parameters.includePeerToPeer = true
|
||||
let browser = NWBrowser(
|
||||
for: .bonjour(type: "_llmp._tcp", domain: nil),
|
||||
using: parameters
|
||||
)
|
||||
localNetworkBrowser = browser
|
||||
browser.stateUpdateHandler = { [weak self] state in
|
||||
switch state {
|
||||
case .ready, .failed:
|
||||
self?.stopLocalNetworkPermissionRequest()
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
browser.start(queue: .main)
|
||||
|
||||
let timeout = DispatchWorkItem { [weak self] in
|
||||
self?.stopLocalNetworkPermissionRequest()
|
||||
}
|
||||
localNetworkTimeout = timeout
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 30, execute: timeout)
|
||||
}
|
||||
|
||||
private func stopLocalNetworkPermissionRequest() {
|
||||
localNetworkTimeout?.cancel()
|
||||
localNetworkTimeout = nil
|
||||
localNetworkBrowser?.stateUpdateHandler = nil
|
||||
localNetworkBrowser?.cancel()
|
||||
localNetworkBrowser = nil
|
||||
}
|
||||
|
||||
func handleDeepLink(_ url: String) {
|
||||
UserDefaults(suiteName: widgetGroupId)?.set(url, forKey: "pendingDeepLink")
|
||||
|
||||
@@ -89,18 +89,15 @@
|
||||
<string>mqqapi</string>
|
||||
<string>timapi</string>
|
||||
<string>mqqopensdkminiapp</string>
|
||||
<string>mqqopensdkapi</string>
|
||||
<string>mqqopensdkapiV2</string>
|
||||
<string>mqqopensdkapiV3</string>
|
||||
<string>mqqopensdkapiV4</string>
|
||||
<string>mqqOpensdkSSoLogin</string>
|
||||
<string>mqzoneopensdk</string>
|
||||
<string>mqzoneopensdkapi</string>
|
||||
<string>mqzoneopensdkapi19</string>
|
||||
<string>mqzoneopensdkapiV2</string>
|
||||
<string>mqqwpa</string>
|
||||
<string>mqzone</string>
|
||||
<string>wtloginmqq2</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
@@ -119,6 +116,12 @@
|
||||
</dict>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>需要获取摄像头权限扫描二维码</string>
|
||||
<key>NSBonjourServices</key>
|
||||
<array>
|
||||
<string>_llmp._tcp</string>
|
||||
</array>
|
||||
<key>NSLocalNetworkUsageDescription</key>
|
||||
<string>需要访问本地网络以连接电脑传输歌曲和同步数据</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>需要读取相册获取图片</string>
|
||||
<key>UIApplicationSceneManifest</key>
|
||||
@@ -175,6 +178,6 @@
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<true/>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
NSCameraUsageDescription = "Kamerazugriff ist zum Scannen von QR-Codes erforderlich";
|
||||
NSPhotoLibraryUsageDescription = "Fotobibliothek-Zugriff ist zum Auswählen von Bildern erforderlich";
|
||||
NSLocalNetworkUsageDescription = "Der Zugriff auf das lokale Netzwerk ist erforderlich, um für Musikübertragungen und die Datensynchronisierung eine Verbindung zu einem Computer herzustellen";
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
NSCameraUsageDescription = "Camera access is required to scan QR codes";
|
||||
NSPhotoLibraryUsageDescription = "Photo library access is required to choose images";
|
||||
NSLocalNetworkUsageDescription = "Local network access is required to connect to a computer for music transfer and data sync";
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
NSCameraUsageDescription = "QRコードをスキャンするためにカメラへのアクセスが必要です";
|
||||
NSPhotoLibraryUsageDescription = "画像を取得するために写真へのアクセスが必要です";
|
||||
NSLocalNetworkUsageDescription = "パソコンに接続して楽曲の転送とデータ同期を行うために、ローカルネットワークへのアクセスが必要です";
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
NSCameraUsageDescription = "需要获取摄像头权限扫描二维码";
|
||||
NSPhotoLibraryUsageDescription = "需要读取相册获取图片";
|
||||
NSLocalNetworkUsageDescription = "需要访问本地网络以连接电脑传输歌曲和同步数据";
|
||||
|
||||
+6
-2
@@ -91,6 +91,9 @@ targets:
|
||||
- UIInterfaceOrientationLandscapeRight
|
||||
NSCameraUsageDescription: 需要获取摄像头权限扫描二维码
|
||||
NSPhotoLibraryUsageDescription: 需要读取相册获取图片
|
||||
NSLocalNetworkUsageDescription: 需要访问本地网络以连接电脑传输歌曲和同步数据
|
||||
NSBonjourServices:
|
||||
- _llmp._tcp
|
||||
NSAppTransportSecurity:
|
||||
NSAllowsArbitraryLoads: true
|
||||
NSAllowsArbitraryLoads: true
|
||||
@@ -206,11 +209,12 @@ targets:
|
||||
basedOnDependencyAnalysis: false
|
||||
script: |
|
||||
set -euo pipefail
|
||||
cd "$SRCROOT/.."
|
||||
if [ "YES" = "${OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED:-}" ]; then
|
||||
echo "Skipping Gradle build (OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED=YES)"
|
||||
echo "Kotlin framework was built by the IDE; syncing Compose resources only"
|
||||
./gradlew -Pcompose.ios.resources.archs=arm64 :composeApp:syncComposeResourcesForIos --rerun
|
||||
exit 0
|
||||
fi
|
||||
cd "$SRCROOT/.."
|
||||
./gradlew :composeApp:embedAndSignAppleFrameworkForXcode
|
||||
|
||||
WidgetExtension:
|
||||
|
||||
Reference in New Issue
Block a user