release: PaopaoLocationSpoofer v1.0.0

- iOS 虚拟定位工具,基于本地 HTTP 代理 MITM 方案
- MapKit 原生地图体验,支持搜索、收藏、实时定位
- 完整的设置引导流程(证书安装、WiFi 代理配置、环境验证)
- 支持 iOS 15+,SwiftUI 构建
This commit is contained in:
xweiba
2026-08-05 15:45:24 +08:00
commit c8aba2be78
75 changed files with 7339 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
import AVFoundation
import UIKit
final class BackgroundKeepAlive {
static let shared = BackgroundKeepAlive()
private var engine: AVAudioEngine?
private var playerNode: AVAudioPlayerNode?
private var isActive = false
private init() {
NotificationCenter.default.addObserver(
self, selector: #selector(handleInterruption),
name: AVAudioSession.interruptionNotification, object: nil)
}
@objc private func handleInterruption(_ notification: Notification) {
guard isActive, let info = notification.userInfo,
let type = info[AVAudioSessionInterruptionTypeKey] as? UInt,
type == AVAudioSession.InterruptionType.ended.rawValue else { return }
start()
RuntimeLogger.info("APP", "KeepAlive", "音频中断恢复")
}
func start() {
guard !isActive else { return }
isActive = true
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: .mixWithOthers)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
RuntimeLogger.error("APP", "KeepAlive", "音频会话失败", error: error)
}
let eng = AVAudioEngine()
let player = AVAudioPlayerNode()
eng.attach(player)
let fmt = AVAudioFormat(standardFormatWithSampleRate: 44100, channels: 1)!
let buf = AVAudioPCMBuffer(pcmFormat: fmt, frameCapacity: 44100 * 3)!
buf.frameLength = 44100 * 3
eng.connect(player, to: eng.mainMixerNode, format: fmt)
eng.prepare()
do { try eng.start() } catch {
RuntimeLogger.error("APP", "KeepAlive", "引擎启动失败", error: error)
isActive = false; return
}
player.scheduleBuffer(buf, at: nil, options: .loops)
player.play()
engine = eng; playerNode = player
UIApplication.shared.isIdleTimerDisabled = true
RuntimeLogger.info("APP", "KeepAlive", "后台保活已启动(静音音频)")
}
func stop() {
guard isActive else { return }
isActive = false
playerNode?.stop(); engine?.stop()
playerNode = nil; engine = nil
UIApplication.shared.isIdleTimerDisabled = false
try? AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
RuntimeLogger.info("APP", "KeepAlive", "后台保活已停止")
}
}