// Created by AI on 2025-10-09. // Copyright © 2025 YuMi. All rights reserved. import Foundation @objc class APIConfig: NSObject { // MARK: - Private Properties private static let xorKey: UInt8 = 77 private static let releaseEncodedParts: [String] = [ "JTk5PT53YmI=", "LD0kYw==", "KD0sPzk0ISQ7KGMuIiA=", ] // MARK: - Public Methods @objc static func baseURL() -> String { #if DEBUG // TODO: 修复后改为 return HttpRequestHelper.getHostUrl() return getDevBaseURL() #else let url = decodeURL(from: releaseEncodedParts) if url.isEmpty || !url.hasPrefix("http") { NSLog("[APIConfig] 警告:域名解密失败,使用备用域名") return backupURL() } return url #endif } private static func getDevBaseURL() -> String { #if DEBUG let isProduction = UserDefaults.standard.string(forKey: "kIsProductionEnvironment") if isProduction == "YES" { return "https://api.epartylive.com" } else { return "https://test-api.yourdomain.com" } #else return "https://api.epartylive.com" #endif } @objc static func backupURL() -> String { return getDevBaseURL() } // MARK: - Private Methods private static func decodeURL(from parts: [String]) -> String { let decoded = parts.compactMap { part -> String? in guard let data = Data(base64Encoded: part) else { NSLog("[APIConfig] Base64 解码失败: \(part)") return nil } let xored = data.map { $0 ^ xorKey } return String(bytes: xored, encoding: .utf8) } let result = decoded.joined() #if DEBUG NSLog("[APIConfig] 解密后的域名: \(result)") #endif return result } } // MARK: - Debug Helper #if DEBUG extension APIConfig { @objc static func testEncryption() { print("=== APIConfig 加密测试 ===") print("Release 域名: \(decodeURL(from: releaseEncodedParts))") print("当前环境域名: \(baseURL())") print("备用域名: \(backupURL())") } } #endif