AppUtils.swift 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //
  2. // AppUtils.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/11/10.
  6. //
  7. import Foundation
  8. import UIKit
  9. // 获取当前应用的包名(Bundle Identifier)
  10. var curAppBundleIdentifier: String = {
  11. guard let bundleIdentifier = Bundle.main.bundleIdentifier else {
  12. return "未知版本"
  13. }
  14. return bundleIdentifier
  15. }()
  16. // 获取应用当前版本号
  17. var curAppVersion: String = {
  18. guard let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else {
  19. return "未知版本"
  20. }
  21. return version
  22. }()
  23. // 获取应用构建号
  24. var curBuildVersion: String = {
  25. guard let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String else {
  26. return "未知构建号"
  27. }
  28. return build
  29. }()
  30. // 获取系统版本
  31. var curSystemVersion: String = {
  32. return UIDevice.current.systemVersion
  33. }()
  34. // 获取设备型号名称(如"iPhone 13")
  35. var curDeviceModelName: String = {
  36. var systemInfo = utsname()
  37. uname(&systemInfo)
  38. let machineMirror = Mirror(reflecting: systemInfo.machine)
  39. let identifier = machineMirror.children.reduce("") { identifier, element in
  40. guard let value = element.value as? Int8, value != 0 else { return identifier }
  41. return identifier + String(UnicodeScalar(UInt8(value)))
  42. }
  43. return identifier
  44. }()
  45. // 获取设备唯一标识符(注意:iOS 10以后无法获取真正的UDID,这里返回的是identifierForVendor)
  46. var curDeviceId: String = {
  47. guard let deviceId = UIDevice.current.identifierForVendor?.uuidString else {
  48. return "无法获取设备ID"
  49. }
  50. return deviceId
  51. }()
  52. // 获取当前时区
  53. var curTimeZone: String = {
  54. return TimeZone.current.identifier
  55. }()
  56. var curLocal: Locale {
  57. Locale(identifier: LNAppConfig.shared.curLang.bundleName)
  58. }
  59. // 获取当前时间
  60. var curTime: TimeInterval {
  61. Date().timeIntervalSince1970
  62. }
  63. var curTimeInMicro: TimeInterval {
  64. curTime * 1_000
  65. }
  66. var curTimeInNano: TimeInterval {
  67. curTime * 1_000_000_000
  68. }
  69. func openAppSetting() {
  70. guard let url = URL(string: UIApplication.openSettingsURLString) else { return }
  71. UIApplication.shared.open(url)
  72. }
  73. var isDebuggerAttached: Bool {
  74. var info = kinfo_proc()
  75. var mib: [Int32] = [CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()]
  76. var size = MemoryLayout<kinfo_proc>.stride
  77. let result = sysctl(&mib, UInt32(mib.count), &info, &size, nil, 0)
  78. guard result == 0 else {
  79. return false
  80. }
  81. return (info.kp_proc.p_flag & P_TRACED) != 0
  82. }