From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传

---
 screendisplay/Pods/YYCategories/YYCategories/UIKit/UIDevice+YYAdd.m |  516 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 516 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/YYCategories/YYCategories/UIKit/UIDevice+YYAdd.m b/screendisplay/Pods/YYCategories/YYCategories/UIKit/UIDevice+YYAdd.m
new file mode 100755
index 0000000..cfd48c4
--- /dev/null
+++ b/screendisplay/Pods/YYCategories/YYCategories/UIKit/UIDevice+YYAdd.m
@@ -0,0 +1,516 @@
+//
+//  UIDevice+YYAdd.m
+//  YYCategories <https://github.com/ibireme/YYCategories>
+//
+//  Created by ibireme on 13/4/3.
+//  Copyright (c) 2015 ibireme.
+//
+//  This source code is licensed under the MIT-style license found in the
+//  LICENSE file in the root directory of this source tree.
+//
+
+#import "UIDevice+YYAdd.h"
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <mach/mach.h>
+#include <arpa/inet.h>
+#include <ifaddrs.h>
+#import "YYCategoriesMacro.h"
+#import "NSString+YYAdd.h"
+
+YYSYNTH_DUMMY_CLASS(UIDevice_YYAdd)
+
+
+@implementation UIDevice (YYAdd)
+
++ (double)systemVersion {
+    static double version;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        version = [UIDevice currentDevice].systemVersion.doubleValue;
+    });
+    return version;
+}
+
+- (BOOL)isPad {
+    static dispatch_once_t one;
+    static BOOL pad;
+    dispatch_once(&one, ^{
+        pad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
+    });
+    return pad;
+}
+
+- (BOOL)isSimulator {
+    static dispatch_once_t one;
+    static BOOL simu;
+    dispatch_once(&one, ^{
+        simu = NSNotFound != [[self model] rangeOfString:@"Simulator"].location;
+    });
+    return simu;
+}
+
+- (BOOL)isJailbroken {
+    if ([self isSimulator]) return NO; // Dont't check simulator
+    
+    // iOS9 URL Scheme query changed ...
+    // NSURL *cydiaURL = [NSURL URLWithString:@"cydia://package"];
+    // if ([[UIApplication sharedApplication] canOpenURL:cydiaURL]) return YES;
+    
+    NSArray *paths = @[@"/Applications/Cydia.app",
+                       @"/private/var/lib/apt/",
+                       @"/private/var/lib/cydia",
+                       @"/private/var/stash"];
+    for (NSString *path in paths) {
+        if ([[NSFileManager defaultManager] fileExistsAtPath:path]) return YES;
+    }
+    
+    FILE *bash = fopen("/bin/bash", "r");
+    if (bash != NULL) {
+        fclose(bash);
+        return YES;
+    }
+    
+    NSString *path = [NSString stringWithFormat:@"/private/%@", [NSString stringWithUUID]];
+    if ([@"test" writeToFile : path atomically : YES encoding : NSUTF8StringEncoding error : NULL]) {
+        [[NSFileManager defaultManager] removeItemAtPath:path error:nil];
+        return YES;
+    }
+    
+    return NO;
+}
+
+#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
+- (BOOL)canMakePhoneCalls {
+    __block BOOL can;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        can = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]];
+    });
+    return can;
+}
+#endif
+
+- (NSString *)ipAddressWithIfaName:(NSString *)name {
+    if (name.length == 0) return nil;
+    NSString *address = nil;
+    struct ifaddrs *addrs = NULL;
+    if (getifaddrs(&addrs) == 0) {
+        struct ifaddrs *addr = addrs;
+        while (addr) {
+            if ([[NSString stringWithUTF8String:addr->ifa_name] isEqualToString:name]) {
+                sa_family_t family = addr->ifa_addr->sa_family;
+                switch (family) {
+                    case AF_INET: { // IPv4
+                        char str[INET_ADDRSTRLEN] = {0};
+                        inet_ntop(family, &(((struct sockaddr_in *)addr->ifa_addr)->sin_addr), str, sizeof(str));
+                        if (strlen(str) > 0) {
+                            address = [NSString stringWithUTF8String:str];
+                        }
+                    } break;
+                        
+                    case AF_INET6: { // IPv6
+                        char str[INET6_ADDRSTRLEN] = {0};
+                        inet_ntop(family, &(((struct sockaddr_in6 *)addr->ifa_addr)->sin6_addr), str, sizeof(str));
+                        if (strlen(str) > 0) {
+                            address = [NSString stringWithUTF8String:str];
+                        }
+                    }
+                        
+                    default: break;
+                }
+                if (address) break;
+            }
+            addr = addr->ifa_next;
+        }
+    }
+    freeifaddrs(addrs);
+    return address;
+}
+
+- (NSString *)ipAddressWIFI {
+    return [self ipAddressWithIfaName:@"en0"];
+}
+
+- (NSString *)ipAddressCell {
+    return [self ipAddressWithIfaName:@"pdp_ip0"];
+}
+
+
+typedef struct {
+    uint64_t en_in;
+    uint64_t en_out;
+    uint64_t pdp_ip_in;
+    uint64_t pdp_ip_out;
+    uint64_t awdl_in;
+    uint64_t awdl_out;
+} yy_net_interface_counter;
+
+
+static uint64_t yy_net_counter_add(uint64_t counter, uint64_t bytes) {
+    if (bytes < (counter % 0xFFFFFFFF)) {
+        counter += 0xFFFFFFFF - (counter % 0xFFFFFFFF);
+        counter += bytes;
+    } else {
+        counter = bytes;
+    }
+    return counter;
+}
+
+static uint64_t yy_net_counter_get_by_type(yy_net_interface_counter *counter, YYNetworkTrafficType type) {
+    uint64_t bytes = 0;
+    if (type & YYNetworkTrafficTypeWWANSent) bytes += counter->pdp_ip_out;
+    if (type & YYNetworkTrafficTypeWWANReceived) bytes += counter->pdp_ip_in;
+    if (type & YYNetworkTrafficTypeWIFISent) bytes += counter->en_out;
+    if (type & YYNetworkTrafficTypeWIFIReceived) bytes += counter->en_in;
+    if (type & YYNetworkTrafficTypeAWDLSent) bytes += counter->awdl_out;
+    if (type & YYNetworkTrafficTypeAWDLReceived) bytes += counter->awdl_in;
+    return bytes;
+}
+
+static yy_net_interface_counter yy_get_net_interface_counter() {
+    static dispatch_semaphore_t lock;
+    static NSMutableDictionary *sharedInCounters;
+    static NSMutableDictionary *sharedOutCounters;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        sharedInCounters = [NSMutableDictionary new];
+        sharedOutCounters = [NSMutableDictionary new];
+        lock = dispatch_semaphore_create(1);
+    });
+    
+    yy_net_interface_counter counter = {0};
+    struct ifaddrs *addrs;
+    const struct ifaddrs *cursor;
+    if (getifaddrs(&addrs) == 0) {
+        cursor = addrs;
+        dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER);
+        while (cursor) {
+            if (cursor->ifa_addr->sa_family == AF_LINK) {
+                const struct if_data *data = cursor->ifa_data;
+                NSString *name = cursor->ifa_name ? [NSString stringWithUTF8String:cursor->ifa_name] : nil;
+                if (name) {
+                    uint64_t counter_in = ((NSNumber *)sharedInCounters[name]).unsignedLongLongValue;
+                    counter_in = yy_net_counter_add(counter_in, data->ifi_ibytes);
+                    sharedInCounters[name] = @(counter_in);
+                    
+                    uint64_t counter_out = ((NSNumber *)sharedOutCounters[name]).unsignedLongLongValue;
+                    counter_out = yy_net_counter_add(counter_out, data->ifi_obytes);
+                    sharedOutCounters[name] = @(counter_out);
+                    
+                    if ([name hasPrefix:@"en"]) {
+                        counter.en_in += counter_in;
+                        counter.en_out += counter_out;
+                    } else if ([name hasPrefix:@"awdl"]) {
+                        counter.awdl_in += counter_in;
+                        counter.awdl_out += counter_out;
+                    } else if ([name hasPrefix:@"pdp_ip"]) {
+                        counter.pdp_ip_in += counter_in;
+                        counter.pdp_ip_out += counter_out;
+                    }
+                }
+            }
+            cursor = cursor->ifa_next;
+        }
+        dispatch_semaphore_signal(lock);
+        freeifaddrs(addrs);
+    }
+    
+    return counter;
+}
+
+- (uint64_t)getNetworkTrafficBytes:(YYNetworkTrafficType)types {
+    yy_net_interface_counter counter = yy_get_net_interface_counter();
+    return yy_net_counter_get_by_type(&counter, types);
+}
+
+- (NSString *)machineModel {
+    static dispatch_once_t one;
+    static NSString *model;
+    dispatch_once(&one, ^{
+        size_t size;
+        sysctlbyname("hw.machine", NULL, &size, NULL, 0);
+        char *machine = malloc(size);
+        sysctlbyname("hw.machine", machine, &size, NULL, 0);
+        model = [NSString stringWithUTF8String:machine];
+        free(machine);
+    });
+    return model;
+}
+
+- (NSString *)machineModelName {
+    static dispatch_once_t one;
+    static NSString *name;
+    dispatch_once(&one, ^{
+        NSString *model = [self machineModel];
+        if (!model) return;
+        NSDictionary *dic = @{
+            @"Watch1,1" : @"Apple Watch 38mm",
+            @"Watch1,2" : @"Apple Watch 42mm",
+            @"Watch2,3" : @"Apple Watch Series 2 38mm",
+            @"Watch2,4" : @"Apple Watch Series 2 42mm",
+            @"Watch2,6" : @"Apple Watch Series 1 38mm",
+            @"Watch1,7" : @"Apple Watch Series 1 42mm",
+            
+            @"iPod1,1" : @"iPod touch 1",
+            @"iPod2,1" : @"iPod touch 2",
+            @"iPod3,1" : @"iPod touch 3",
+            @"iPod4,1" : @"iPod touch 4",
+            @"iPod5,1" : @"iPod touch 5",
+            @"iPod7,1" : @"iPod touch 6",
+            
+            @"iPhone1,1" : @"iPhone 1G",
+            @"iPhone1,2" : @"iPhone 3G",
+            @"iPhone2,1" : @"iPhone 3GS",
+            @"iPhone3,1" : @"iPhone 4 (GSM)",
+            @"iPhone3,2" : @"iPhone 4",
+            @"iPhone3,3" : @"iPhone 4 (CDMA)",
+            @"iPhone4,1" : @"iPhone 4S",
+            @"iPhone5,1" : @"iPhone 5",
+            @"iPhone5,2" : @"iPhone 5",
+            @"iPhone5,3" : @"iPhone 5c",
+            @"iPhone5,4" : @"iPhone 5c",
+            @"iPhone6,1" : @"iPhone 5s",
+            @"iPhone6,2" : @"iPhone 5s",
+            @"iPhone7,1" : @"iPhone 6 Plus",
+            @"iPhone7,2" : @"iPhone 6",
+            @"iPhone8,1" : @"iPhone 6s",
+            @"iPhone8,2" : @"iPhone 6s Plus",
+            @"iPhone8,4" : @"iPhone SE",
+            @"iPhone9,1" : @"iPhone 7",
+            @"iPhone9,2" : @"iPhone 7 Plus",
+            @"iPhone9,3" : @"iPhone 7",
+            @"iPhone9,4" : @"iPhone 7 Plus",
+            
+            @"iPad1,1" : @"iPad 1",
+            @"iPad2,1" : @"iPad 2 (WiFi)",
+            @"iPad2,2" : @"iPad 2 (GSM)",
+            @"iPad2,3" : @"iPad 2 (CDMA)",
+            @"iPad2,4" : @"iPad 2",
+            @"iPad2,5" : @"iPad mini 1",
+            @"iPad2,6" : @"iPad mini 1",
+            @"iPad2,7" : @"iPad mini 1",
+            @"iPad3,1" : @"iPad 3 (WiFi)",
+            @"iPad3,2" : @"iPad 3 (4G)",
+            @"iPad3,3" : @"iPad 3 (4G)",
+            @"iPad3,4" : @"iPad 4",
+            @"iPad3,5" : @"iPad 4",
+            @"iPad3,6" : @"iPad 4",
+            @"iPad4,1" : @"iPad Air",
+            @"iPad4,2" : @"iPad Air",
+            @"iPad4,3" : @"iPad Air",
+            @"iPad4,4" : @"iPad mini 2",
+            @"iPad4,5" : @"iPad mini 2",
+            @"iPad4,6" : @"iPad mini 2",
+            @"iPad4,7" : @"iPad mini 3",
+            @"iPad4,8" : @"iPad mini 3",
+            @"iPad4,9" : @"iPad mini 3",
+            @"iPad5,1" : @"iPad mini 4",
+            @"iPad5,2" : @"iPad mini 4",
+            @"iPad5,3" : @"iPad Air 2",
+            @"iPad5,4" : @"iPad Air 2",
+            @"iPad6,3" : @"iPad Pro (9.7 inch)",
+            @"iPad6,4" : @"iPad Pro (9.7 inch)",
+            @"iPad6,7" : @"iPad Pro (12.9 inch)",
+            @"iPad6,8" : @"iPad Pro (12.9 inch)",
+            
+            @"AppleTV2,1" : @"Apple TV 2",
+            @"AppleTV3,1" : @"Apple TV 3",
+            @"AppleTV3,2" : @"Apple TV 3",
+            @"AppleTV5,3" : @"Apple TV 4",
+            
+            @"i386" : @"Simulator x86",
+            @"x86_64" : @"Simulator x64",
+        };
+        name = dic[model];
+        if (!name) name = model;
+    });
+    return name;
+}
+
+- (NSDate *)systemUptime {
+    NSTimeInterval time = [[NSProcessInfo processInfo] systemUptime];
+    return [[NSDate alloc] initWithTimeIntervalSinceNow:(0 - time)];
+}
+
+- (int64_t)diskSpace {
+    NSError *error = nil;
+    NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
+    if (error) return -1;
+    int64_t space =  [[attrs objectForKey:NSFileSystemSize] longLongValue];
+    if (space < 0) space = -1;
+    return space;
+}
+
+- (int64_t)diskSpaceFree {
+    NSError *error = nil;
+    NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
+    if (error) return -1;
+    int64_t space =  [[attrs objectForKey:NSFileSystemFreeSize] longLongValue];
+    if (space < 0) space = -1;
+    return space;
+}
+
+- (int64_t)diskSpaceUsed {
+    int64_t total = self.diskSpace;
+    int64_t free = self.diskSpaceFree;
+    if (total < 0 || free < 0) return -1;
+    int64_t used = total - free;
+    if (used < 0) used = -1;
+    return used;
+}
+
+- (int64_t)memoryTotal {
+    int64_t mem = [[NSProcessInfo processInfo] physicalMemory];
+    if (mem < -1) mem = -1;
+    return mem;
+}
+
+- (int64_t)memoryUsed {
+    mach_port_t host_port = mach_host_self();
+    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
+    vm_size_t page_size;
+    vm_statistics_data_t vm_stat;
+    kern_return_t kern;
+    
+    kern = host_page_size(host_port, &page_size);
+    if (kern != KERN_SUCCESS) return -1;
+    kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
+    if (kern != KERN_SUCCESS) return -1;
+    return page_size * (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count);
+}
+
+- (int64_t)memoryFree {
+    mach_port_t host_port = mach_host_self();
+    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
+    vm_size_t page_size;
+    vm_statistics_data_t vm_stat;
+    kern_return_t kern;
+    
+    kern = host_page_size(host_port, &page_size);
+    if (kern != KERN_SUCCESS) return -1;
+    kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
+    if (kern != KERN_SUCCESS) return -1;
+    return vm_stat.free_count * page_size;
+}
+
+- (int64_t)memoryActive {
+    mach_port_t host_port = mach_host_self();
+    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
+    vm_size_t page_size;
+    vm_statistics_data_t vm_stat;
+    kern_return_t kern;
+    
+    kern = host_page_size(host_port, &page_size);
+    if (kern != KERN_SUCCESS) return -1;
+    kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
+    if (kern != KERN_SUCCESS) return -1;
+    return vm_stat.active_count * page_size;
+}
+
+- (int64_t)memoryInactive {
+    mach_port_t host_port = mach_host_self();
+    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
+    vm_size_t page_size;
+    vm_statistics_data_t vm_stat;
+    kern_return_t kern;
+    
+    kern = host_page_size(host_port, &page_size);
+    if (kern != KERN_SUCCESS) return -1;
+    kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
+    if (kern != KERN_SUCCESS) return -1;
+    return vm_stat.inactive_count * page_size;
+}
+
+- (int64_t)memoryWired {
+    mach_port_t host_port = mach_host_self();
+    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
+    vm_size_t page_size;
+    vm_statistics_data_t vm_stat;
+    kern_return_t kern;
+    
+    kern = host_page_size(host_port, &page_size);
+    if (kern != KERN_SUCCESS) return -1;
+    kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
+    if (kern != KERN_SUCCESS) return -1;
+    return vm_stat.wire_count * page_size;
+}
+
+- (int64_t)memoryPurgable {
+    mach_port_t host_port = mach_host_self();
+    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
+    vm_size_t page_size;
+    vm_statistics_data_t vm_stat;
+    kern_return_t kern;
+    
+    kern = host_page_size(host_port, &page_size);
+    if (kern != KERN_SUCCESS) return -1;
+    kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
+    if (kern != KERN_SUCCESS) return -1;
+    return vm_stat.purgeable_count * page_size;
+}
+
+- (NSUInteger)cpuCount {
+    return [NSProcessInfo processInfo].activeProcessorCount;
+}
+
+- (float)cpuUsage {
+    float cpu = 0;
+    NSArray *cpus = [self cpuUsagePerProcessor];
+    if (cpus.count == 0) return -1;
+    for (NSNumber *n in cpus) {
+        cpu += n.floatValue;
+    }
+    return cpu;
+}
+
+- (NSArray *)cpuUsagePerProcessor {
+    processor_info_array_t _cpuInfo, _prevCPUInfo = nil;
+    mach_msg_type_number_t _numCPUInfo, _numPrevCPUInfo = 0;
+    unsigned _numCPUs;
+    NSLock *_cpuUsageLock;
+    
+    int _mib[2U] = { CTL_HW, HW_NCPU };
+    size_t _sizeOfNumCPUs = sizeof(_numCPUs);
+    int _status = sysctl(_mib, 2U, &_numCPUs, &_sizeOfNumCPUs, NULL, 0U);
+    if (_status)
+        _numCPUs = 1;
+    
+    _cpuUsageLock = [[NSLock alloc] init];
+    
+    natural_t _numCPUsU = 0U;
+    kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &_numCPUsU, &_cpuInfo, &_numCPUInfo);
+    if (err == KERN_SUCCESS) {
+        [_cpuUsageLock lock];
+        
+        NSMutableArray *cpus = [NSMutableArray new];
+        for (unsigned i = 0U; i < _numCPUs; ++i) {
+            Float32 _inUse, _total;
+            if (_prevCPUInfo) {
+                _inUse = (
+                          (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER]   - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])
+                          + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])
+                          + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE]   - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])
+                          );
+                _total = _inUse + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);
+            } else {
+                _inUse = _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];
+                _total = _inUse + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];
+            }
+            [cpus addObject:@(_inUse / _total)];
+        }
+        
+        [_cpuUsageLock unlock];
+        if (_prevCPUInfo) {
+            size_t prevCpuInfoSize = sizeof(integer_t) * _numPrevCPUInfo;
+            vm_deallocate(mach_task_self(), (vm_address_t)_prevCPUInfo, prevCpuInfoSize);
+        }
+        return cpus;
+    } else {
+        return nil;
+    }
+}
+
+@end

--
Gitblit v1.8.0