To The Apples Core
1.0.0

苹果的核心是测试无越狱的本地iOS可以做的事情的界限。
该项目是出于教育目的,不应在针对App Store的任何应用程序中使用该代码。
所有项目和剪裁都是为非刺伤设备而制造和运行的。虽然未经测试,但大多数以下狙击手都应该能够在iPad的操场上运行。
import Darwin
import Foundation
/**
Obtains an array of dictionaries representing device battery info. Returns nil if there was an issue retrieving info from battery API.
*/
func deviceBatteryInfo ( ) -> [ [ String : AnyObject ] ] ? {
guard case let handle = dlopen ( " /System/Library/PrivateFrameworks/BatteryCenter.framework/BatteryCenter " , RTLD_LAZY ) , handle != nil ,
let c = NSClassFromString ( " BCBatteryDeviceController " ) as AnyObject as? NSObjectProtocol else {
return nil
}
func sharedInstance ( ) -> String { return " sharedInstance " } // Silence compiler warnings
guard c . responds ( to : Selector ( sharedInstance ( ) ) ) == true else { return nil }
let instance = c . perform ( Selector ( sharedInstance ( ) ) ) . takeUnretainedValue ( )
guard let batteries = instance . value ( forKey : " connectedDevices " ) as? [ AnyObject ] else { return nil }
let batteryInfo = batteries . compactMap { battery -> [ String : AnyObject ] ? in
var propertyCount : UInt32 = 0
guard let properties = class_copyPropertyList ( battery . classForCoder , & propertyCount ) else { return nil }
var batteryDictionary = [ String : AnyObject ] ( )
for i in 0 ..< propertyCount {
let cPropertyName = property_getName ( properties [ Int ( i ) ] )
let pName = String ( cString : cPropertyName )
batteryDictionary [ pName ] = battery . value ( forKey : pName ) as AnyObject
}
free ( properties ) //release Obj-C property structs
return batteryDictionary
}
return batteryInfo
}
print ( " Batteries' Info: ( deviceBatteryInfo ( ) ) " ) ![]()
我已经围绕这个名为Appexplorer的想法创建了一个整个项目。查看存储库以获取更多信息以及如何在自己的项目中实现它。
class AirplaneManager {
/**
Whether or not airplane mode is enabled. Returns nil if an error occured getting info from API.
*/
static func isAirplaneModeEnabled ( ) -> Bool ? {
guard case let handle = dlopen ( " /System/Library/PrivateFrameworks/AppSupport.framework/AppSupport " , RTLD_LAZY ) , handle != nil ,
let c = NSClassFromString ( " RadiosPreferences " ) as? NSObject . Type else {
return nil
}
let radioPreferences = c . init ( )
if radioPreferences . responds ( to : NSSelectorFromString ( " airplaneMode " ) ) {
return ( radioPreferences . value ( forKey : " airplaneMode " ) as AnyObject ) . boolValue
}
return false
}
}
print ( " Airplane Mode Enabled: ( AirplaneManager . isAirplaneModeEnabled ( ) ) " ) 为了使用scdynamicstorecreate和scdynamicstorecopyvalue函数__OSX_AVAILABLE_STARTING宏需要更改这些功能。
最简单的方法是⌘ + ⌥ + CLICK Xcode中的功能名称,该功能将带您到各自的标题。如下所示,请评论宏:
SCDynamicStoreRef __nullable SCDynamicStoreCreate (
CFAllocatorRef __nullable allocator,
CFStringRef name,
SCDynamicStoreCallBack __nullable callout,
SCDynamicStoreContext * __nullable context
) /* __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_NA) */ ; CFPropertyListRef __nullable SCDynamicStoreCopyValue (
SCDynamicStoreRef __nullable store,
CFStringRef key
) /* __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_NA) */ ;
let reader = MobileHotspotReader . sharedReader
print ( " Connected Devices: ( reader . numberOfConnectedDevices ) " )
print ( " Connected over Bluetooth: ( reader . connectionsOverBluetooth ) " ) 该代码不需要私有API,但是确实使用了可能会在未来OS版本中改变的硬编码字符串。
print ( " Wifi is Enabled : ( NetworkManager . wifiEnabled ( ) ) " )
print ( " Wifi is Connected : ( NetworkManager . wifiConnected ( ) ) " )
print ( " Currently Tethering : ( NetworkManager . isTethering ( ) ) " ) import Darwin
import UIKit
struct WallpaperLocation : OptionSet {
let rawValue : Int
static let lockscreen = WallpaperLocation ( rawValue : 1 << 0 )
static let homescreen = WallpaperLocation ( rawValue : 1 << 1 )
}
func setWallpaper ( image : UIImage , location : WallpaperLocation ) -> Bool {
guard case let handle = dlopen ( " /System/Library/PrivateFrameworks/SpringBoardUI.framework/SpringBoardUI " , RTLD_LAZY ) , handle != nil else {
return false
}
guard case let symbol = dlsym ( handle , " SBSUIWallpaperSetImageAsWallpaperForLocations " ) , symbol != nil else {
return false
}
typealias methodSignature = @ convention ( c ) ( AnyObject , NSInteger ) -> ( )
let _ = unsafeBitCast ( symbol , to : methodSignature . self ) ( image , location . rawValue )
dlclose ( handle )
return true
}
setWallpaper ( image , location : [ . homescreen , . lockscreen ] )