chore: Initial clean commit

- Removed YuMi/Library/ (138 MB, not tracked)
- Removed YuMi/Resources/ (23 MB, not tracked)
- Removed old version assets (566 files, not tracked)
- Excluded Pods/, xcuserdata/ and other build artifacts
- Clean repository optimized for company server deployment
This commit is contained in:
edwinQQQ
2025-10-09 16:19:14 +08:00
commit a35a711be6
5582 changed files with 408913 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
//
// CarrierIdentifier.h
// YYMobileFramework
//
// Created by wuwei on 14-5-30.
// Copyright (c) 2014年 YY Inc. All rights reserved.
//
#import <Foundation/Foundation.h>
// 运营商类型
typedef NS_ENUM(NSUInteger, CarrierIdentifier)
{
CarrierIdentifier_Unknown = 0, // 未知, 网络不可用(未插SIM卡/无信号/飞行模式)
CarrierIdentifier_ChinaMobile = 1, // 中国移动
CarrierIdentifier_ChinaUnicom = 2, // 中国联通
CarrierIdentifier_ChinaTelecom = 3, // 中国电信
CarrierIdentifier_Otherwise = 0x0000FFFF, // 其他运营商
};

View File

@@ -0,0 +1,173 @@
//
// YYUtility+App.m
// YYMobileFramework
//
// Created by wuwei on 14-5-30.
// Copyright (c) 2014 YY Inc. All rights reserved.
//
#import "YYUtility.h"
#import <CoreTelephony/CTTelephonyNetworkInfo.h> //
#import <CoreTelephony/CTCarrier.h> //
#import "ClientConfig.h"
@implementation YYUtility (App)
+ (id)valueInPlistForKey:(NSString *)key{
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
return [infoDictionary objectForKey:key];
}
+ (NSString *)appVersion{
static NSString *appVersion = nil;
if (!appVersion) {
appVersion = [self valueInPlistForKey:@"CFBundleShortVersionString"];
}
return appVersion;
}
+(NSString *)getLanguage{
NSString *language = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] firstObject];
return language;
}
+ (NSString *)appName {
#ifdef DEBUG
NSString *isProduction = [[NSUserDefaults standardUserDefaults]valueForKey:@"kIsProductionEnvironment"];
if([isProduction isEqualToString:@"YES"]){
return @"youmi";
}
return @"molistar";
#else
return @"youmi";
#endif
}
+ (NSString *)appBuild{
static NSString *appBuild = nil;
if (!appBuild) {
appBuild = [self valueInPlistForKey:(NSString *)kCFBundleVersionKey];
}
return appBuild;
}
+ (NSString *)appBundleId{
static NSString *appBundleId = nil;
if (!appBundleId) {
appBundleId = [self valueInPlistForKey:(NSString *)kCFBundleIdentifierKey];
}
return appBundleId;
}
+ (NSString *)svnVersion{
static NSString *svnVersion = nil;
if (!svnVersion) {
svnVersion = [self valueInPlistForKey:@"SvnBuildVersion"];
}
return svnVersion;
}
static NSString * const kMobileFrameworkResourceBundleName = @"YYMobileFrameworkRes";
+ (NSURL *)URLForMobileFrameworkResourceBundle{
return [[NSBundle mainBundle] URLForResource:kMobileFrameworkResourceBundleName
withExtension:@"bundle"];
}
+ (NSString *)pathForMobileFrameworkResourceBundle{
return [[NSBundle mainBundle] pathForResource:kMobileFrameworkResourceBundleName
ofType:@"bundle"];
}
+ (NSString *)buildType{
#ifdef DEBUG
NSString *isProduction = [[NSUserDefaults standardUserDefaults]valueForKey:@"kIsProductionEnvironment"];
if([isProduction isEqualToString:@"YES"]){
return @"RELEASE";
}
return @"DEBUG";
#else
return @"RELEASE";
#endif
}
+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)fileURL{
if (![[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) {
NSLog(@"File %@ dosen't exist!", fileURL);
return NO;
}
NSError *error = nil;
BOOL result = [fileURL setResourceValue:[NSNumber numberWithBool:YES]
forKey:NSURLIsExcludedFromBackupKey
error:&error];
if (!result) {
NSLog(@"Error excluding '%@' from backup, error: %@.", fileURL, error);
}
return result;
}
static NSString *_from = nil;
+ (NSString *)getAppSource{
if (_from == nil) {
if (isEnterprise == NO) {
_from = ISTestFlight ? PI_Test_Flight : @"molistar_enterprise"; //
}else {
_from = [ClientConfig shareConfig].isTF == YES ? PI_Test_Flight : PI_App_Source; // Test_Flightappstore App Store
}
}
return _from;
}
+ (BOOL)isFromAppStore{
if([[[YYUtility getAppSource] lowercaseString] isEqualToString:@"appstore"]){
return YES;
}
return NO;
}
+ (NSString *)removeSpaceAndNewline:(NSString *)str{
NSString *temp = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
temp = [temp stringByReplacingOccurrencesOfString:@"\r" withString:@""];
temp = [temp stringByReplacingOccurrencesOfString:@"\n" withString:@""];
return temp;
}
///
+ (YYUtilityTelephonType)getOperatorInfomation {
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
//NSLog(@"info = %@", info);
CTCarrier *carrier = [info subscriberCellularProvider];
//NSLog(@"carrier = %@", carrier);
if (carrier == nil) {
return YYUtilityTelephonType_Link_Unknown;
}
NSString *code = [carrier mobileNetworkCode];
if (code == nil) {
return YYUtilityTelephonType_Link_Unknown;
}
if ([code isEqualToString:@"00"] || [code isEqualToString:@"02"] || [code isEqualToString:@"07"]) {
return YYUtilityTelephonType_Move;
} else if ([code isEqualToString:@"01"] || [code isEqualToString:@"06"]) {
return YYUtilityTelephonType_Link_Together;
} else if ([code isEqualToString:@"03"] || [code isEqualToString:@"05"]) {
return YYUtilityTelephonType_Link_Telegraphy;
} else if ([code isEqualToString:@"20"]) {
return YYUtilityTelephonType_Link_Tietong;
}
return YYUtilityTelephonType_Link_Unknown;
}
@end

View File

@@ -0,0 +1,97 @@
//
// YYUtility+Carrier.m
// YYFoundation
//
// Created by wuwei on 14-5-30.
// Copyright (c) 2014 YY Inc. All rights reserved.
//
#import "YYUtility.h"
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import "CarrierIdentifier.h"
@import CoreTelephony;
/*
* The most update-to-date list of MNC&MCC is fetched
* from the website below: http://www.mcc-mnc.com
*/
// MCCs
static NSString * const kMobileCountryCode_China = @"460"; //
// MNCs
static NSSet * kMobileNetworkCodes_ChinaMobile; //
static NSSet * kMobileNetworkCodes_ChinaUnicom; //
static NSSet * kMobileNetworkCodes_ChinaTelecom; //
@implementation YYUtility (Carrier)
+ (void)load
{
if (self == [YYUtility self]) {
kMobileNetworkCodes_ChinaMobile = [NSSet setWithObjects:@"00", @"02", @"07", nil]; //
kMobileNetworkCodes_ChinaUnicom = [NSSet setWithObjects:@"01", @"06", nil]; //
kMobileNetworkCodes_ChinaTelecom = [NSSet setWithObjects:@"03", @"05", nil]; //
}
}
+ (NSString *)carrierName
{
return [self carrier].carrierName;
}
+ (NSInteger)carrierIdentifier
{
return [self identifierOfCarrier:[self carrier]];
}
+ (CTCarrier *)carrier
{
return [[CTTelephonyNetworkInfo alloc] init].subscriberCellularProvider;
}
+(NSString *)getMobileCountryCode{
CTCarrier *carrier = [[CTTelephonyNetworkInfo alloc] init].subscriberCellularProvider;
NSString *code = carrier.mobileCountryCode;
return code;
}
+ (NSInteger)identifierOfCarrier:(CTCarrier *)carrier
{
// CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc] init];
// if (@available(iOS 16, *)) {
// carrier = networkInfo.serviceSubscriberCellularProviders;
// }
CarrierIdentifier identifier = CarrierIdentifier_Unknown;
do {
if (carrier.mobileCountryCode == nil || carrier.mobileNetworkCode == nil)
{
identifier = CarrierIdentifier_Unknown;
break;
}
if ([carrier.mobileCountryCode isEqualToString:kMobileCountryCode_China])
{
if ([kMobileNetworkCodes_ChinaMobile containsObject:carrier.mobileNetworkCode])
{
identifier = CarrierIdentifier_ChinaMobile;
break;
}
else if ([kMobileNetworkCodes_ChinaUnicom containsObject:carrier.mobileNetworkCode])
{
identifier = CarrierIdentifier_ChinaUnicom;
break;
}
else if ([kMobileNetworkCodes_ChinaTelecom containsObject:carrier.mobileNetworkCode])
{
identifier = CarrierIdentifier_ChinaTelecom;
break;
}
}
identifier = CarrierIdentifier_Otherwise;
} while (0);
return identifier;
}
@end

View File

@@ -0,0 +1,488 @@
//
// YYUtility+Device.m
// YYMobileFramework
//
// Created by wuwei on 14-5-30.
// Copyright (c) 2014 YY Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import "YYUtility.h"
#import <sys/utsname.h>
#import <arpa/inet.h>
#import <net/if.h>
#import <ifaddrs.h>
#import "YYReachability.h"
#import <AdSupport/ASIdentifierManager.h>
#import <ifaddrs.h>
#import <net/if_dl.h>
#import <sys/socket.h>
#import "SSKeychain.h"
#import "GCDHelper.h"
#if !defined(IFT_ETHER)
#define IFT_ETHER 0x6
#endif
#define kIOSCellular @"pdp_ip0"
#define kIOSWifi @"en0"
#define kIPAddrV4 @"ipv4"
#define kIPAddrV6 @"ipv6"
#define kAppName @"yym51ip"
@implementation YYUtility (Device)
+ (NSString *)modelName
{
static NSString *modelName = nil;
if (!modelName) {
struct utsname systemInfo;
uname(&systemInfo);
modelName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
}
return modelName;
}
+ (NSString *)systemVersion
{
// cleanSpecialText
static NSString* _systemVersion = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_systemVersion = [UIDevice currentDevice].systemVersion;;
});
if (_systemVersion) {
return _systemVersion;
}
return [UIDevice currentDevice].systemVersion;
}
+ (NSString *)identifierForVendor
{
static NSString *idfv = nil;
if (!idfv) {
idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
return idfv;
}
+ (NSString *)deviceID
{
NSString *deviceID = @"";
if (!deviceID || deviceID.length == 0) {
deviceID = [YYUtility identifierForVendor];
}
if (!deviceID) {
deviceID = @"";
}
return deviceID;
}
+ (NSInteger)networkStatus
{
return (self.reachability.currentReachabilityStatus);
}
+ (YYReachability *)reachability
{
static YYReachability *reachability = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
reachability = [YYReachability reachabilityForInternetConnection];
});
return reachability;
}
+ (void)checkCameraAvailable:(void (^)(void))available denied:(void(^)(void))denied restriction:(void(^)(void))restriction
{
available = available ? : ^{};
denied = denied ? : ^{};
restriction = restriction ? : ^{};
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
// iOS7iPhone访
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
switch (authStatus) {
case AVAuthorizationStatusAuthorized:
{
available();
break;
}
case AVAuthorizationStatusDenied:
{
// [->->]YY访
denied();
break;
}
case AVAuthorizationStatusRestricted:
{
// NOTE: [--访]
restriction();
break;
}
case AVAuthorizationStatusNotDetermined:
{
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
dispatch_main_sync_safe(^{
if (granted)
{
available();
}
else
{
denied();
}
});
}];
}
default:
break;
}
}
else
{
restriction();
}
}
+ (void)checkAssetsLibrayAvailable:(void (^)(void))available denied:(void(^)(void))denied restriction:(void(^)(void))restriction
{
available = available ? : ^{};
denied = denied ? : ^{};
restriction = restriction ? : ^{};
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary] ||
[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {
ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
if (author == ALAuthorizationStatusNotDetermined) {
ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (*stop) {
available();
return;
}
*stop = TRUE;
} failureBlock:^(NSError *error) {
denied();
}];
}else if (author == ALAuthorizationStatusDenied) {
denied();
}else if(author == ALAuthorizationStatusRestricted) {
restriction();
}else if(author == ALAuthorizationStatusAuthorized) {
available();
}
}else {
restriction();
}
}
+ (void)checkMicPrivacy:(void(^)(BOOL succeed))resultBlock
{
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (resultBlock) {
dispatch_async(dispatch_get_main_queue(), ^{
resultBlock(granted);
});
}
}];
}
+ (NSString *)deviceUniqueIdentification {
// SSKeychain
NSString * currentDeviceUUIDStr = [SSKeychain passwordForService:@" " account:@"uuid"];
if (currentDeviceUUIDStr == nil || [currentDeviceUUIDStr isEqualToString:@""])
{
NSUUID * currentDeviceUUID = [UIDevice currentDevice].identifierForVendor;
currentDeviceUUIDStr = currentDeviceUUID.UUIDString;
currentDeviceUUIDStr = [currentDeviceUUIDStr stringByReplacingOccurrencesOfString:@"-" withString:@""];
currentDeviceUUIDStr = [currentDeviceUUIDStr lowercaseString];
[SSKeychain setPassword: currentDeviceUUIDStr forService:@" "account:@"uuid"];
}
return currentDeviceUUIDStr;
}
+ (NSString *)ipAddress
{
return [self ipAddress:YES];
}
+ (NSString *)ipAddress:(BOOL)preferIPv4
{
NSArray *searchArray = preferIPv4 ?
@[ kIOSWifi @"/" kIPAddrV4, kIOSWifi @"/" kIPAddrV6, kIOSCellular @"/" kIPAddrV4, kIOSCellular @"/" kIPAddrV6 ] :
@[ kIOSWifi @"/" kIPAddrV6, kIOSWifi @"/" kIPAddrV4, kIOSCellular @"/" kIPAddrV6, kIOSCellular @"/" kIPAddrV4 ] ;
NSDictionary *addresses = [self getIpAddresses];
__block NSString *addr;
[searchArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
addr = addresses[obj];
if (addr) {
*stop = YES;
}
}];
return addr ? : @"0.0.0.0";
}
+ (NSDictionary *)getIpAddresses
{
NSMutableDictionary *addresses = [NSMutableDictionary dictionary];
// retrieve the current interfaces - return 0 on success
struct ifaddrs *interfaces;
if (!getifaddrs(&interfaces)) {
// Loop through linked list of interfaces
struct ifaddrs *interface;
for (interface = interfaces; interface; interface = interface->ifa_next) {
if (!(interface -> ifa_flags & IFF_UP)) {
continue;
}
const struct sockaddr_in *addr = (const struct sockaddr_in *)interface->ifa_addr;
char addrBuf[MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) + 2];
if (addr && (addr->sin_family == AF_INET || addr->sin_family == AF_INET6)) {
NSString *ifaName = [NSString stringWithUTF8String:interface->ifa_name];
NSString *ifaType;
if (addr->sin_family == AF_INET) {
if (inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {
ifaType = kIPAddrV4;
}
} else {
const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)interface->ifa_addr;
if (inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {
ifaType = kIPAddrV6;
}
}
if (ifaType) {
NSString *key = [NSString stringWithFormat:@"%@/%@", ifaName, ifaType];
addresses[key] = [NSString stringWithUTF8String:addrBuf];
}
}
}
}
// free memory
freeifaddrs(interfaces);
return addresses;
}
+ (NSString *)macAddresss
{
static NSMutableString *macAddress = nil;
if ([macAddress length] > 0) {
return macAddress;
}
do
{
struct ifaddrs* addrs;
if ( getifaddrs( &addrs ) )
break;
const struct ifaddrs *cursor = addrs;
while ( cursor )
{
if ( ( cursor->ifa_addr->sa_family == AF_LINK )
&& strcmp( "en0", cursor->ifa_name ) == 0
&& ( ( ( const struct sockaddr_dl * )cursor->ifa_addr)->sdl_type == IFT_ETHER ) )
{
const struct sockaddr_dl *dlAddr = ( const struct sockaddr_dl * )cursor->ifa_addr;
const uint8_t *base = ( const uint8_t * )&dlAddr->sdl_data[dlAddr->sdl_nlen];
macAddress = [[NSMutableString alloc] initWithCapacity:64];
for ( int i = 0; i < dlAddr->sdl_alen; i++ )
{
if (i > 0) {
[macAddress appendFormat:@"])%02X", base[i]];
}
else
{
[macAddress appendFormat:@"%02X", base[i]];
}
}
break;
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
} while (NO);
if (macAddress == nil) {
macAddress = [NSMutableString stringWithString:@""];
}
return macAddress;
}
+ (NSString *)idfa
{
static NSString *idfa = nil;
if (!idfa) {
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0) {
idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
} else {
idfa = @"";
}
}
return idfa;
}
+ (NSString*)modelType {
struct utsname systemInfo;
uname(&systemInfo);
NSString*platform = [NSString stringWithCString: systemInfo.machine encoding:NSASCIIStringEncoding];
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
if([platform isEqualToString:@"iPhone10,1"]) return @"iPhone 8";
if([platform isEqualToString:@"iPhone10,4"]) return @"iPhone 8";
if([platform isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus";
if([platform isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus";
if([platform isEqualToString:@"iPhone10,3"]) return @"iPhone X";
if([platform isEqualToString:@"iPhone10,6"]) return @"iPhone X";
if ([platform isEqualToString:@"iPhone11,8"]) return @"iPhone XR";
if ([platform isEqualToString:@"iPhone11,2"]) return @"iPhone XS";
if ([platform isEqualToString:@"iPhone11,6"]) return @"iPhone XS Max";
if ([platform isEqualToString:@"iPhone11,4"]) return @"iPhone XS Max";
if ([platform isEqualToString:@"iPhone12,1"]) return @"iPhone 11";
if ([platform isEqualToString:@"iPhone12,3"]) return @"iPhone 11 Pro";
if ([platform isEqualToString:@"iPhone12,5"]) return @"iPhone 11 Pro Max";
if ([platform isEqualToString:@"iPhone12,8"]) return @"iPhone SE(2nd generation)";
if ([platform isEqualToString:@"iPhone13,1"]) return @"iPhone 12 mini";
if ([platform isEqualToString:@"iPhone13,2"]) return @"iPhone 12";
if ([platform isEqualToString:@"iPhone13,3"]) return @"iPhone 12 Pro";
if ([platform isEqualToString:@"iPhone13,4"]) return @"iPhone 12 Pro Max";
if ([platform isEqualToString:@"iPhone14,4"]) return @"iPhone 13 mini";
if ([platform isEqualToString:@"iPhone14,5"]) return @"iPhone 13";
if ([platform isEqualToString:@"iPhone14,2"]) return @"iPhone 13 Pro";
if ([platform isEqualToString:@"iPhone14,3"]) return @"iPhone 13 Pro Max";
if ([platform isEqualToString:@"iPhone14,6"]) return @"iPhone SE (3rd generation)";
if ([platform isEqualToString:@"iPhone14,7"]) return @"iPhone 14";
if ([platform isEqualToString:@"iPhone14,8"]) return @"iPhone 14 Plus";
if ([platform isEqualToString:@"iPhone15,2"]) return @"iPhone 14 Pro";
if ([platform isEqualToString:@"iPhone15,3"]) return @"iPhone 14 Pro Max";
if ([platform isEqualToString:@"iPhone15,4"]) return @"iPhone 15";
if ([platform isEqualToString:@"iPhone15,5"]) return @"iPhone 15 Plus";
if ([platform isEqualToString:@"iPhone16,1"]) return @"iPhone 15 Pro";
if ([platform isEqualToString:@"iPhone16,2"]) return @"iPhone 15 Pro Max";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1G";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator";
return platform;
}
// , iPhone6
+ (BOOL)isIphone6AndLow {
struct utsname systemInfo;
uname(&systemInfo);
NSString*platform = [NSString stringWithCString: systemInfo.machine encoding:NSASCIIStringEncoding];
if([platform isEqualToString:@"iPhone1,1"])return YES;
if([platform isEqualToString:@"iPhone1,2"])return YES;
if([platform isEqualToString:@"iPhone2,1"])return YES;
if([platform isEqualToString:@"iPhone3,1"])return YES;
if([platform isEqualToString:@"iPhone3,2"])return YES;
if([platform isEqualToString:@"iPhone3,3"])return YES;
if([platform isEqualToString:@"iPhone4,1"])return YES;
if([platform isEqualToString:@"iPhone5,1"])return YES;
if([platform isEqualToString:@"iPhone5,2"])return YES;
if([platform isEqualToString:@"iPhone5,3"])return YES;
if([platform isEqualToString:@"iPhone5,4"])return YES;
if([platform isEqualToString:@"iPhone6,1"])return YES;
if([platform isEqualToString:@"iPhone6,2"])return YES;
if([platform isEqualToString:@"iPhone7,1"])return YES;
if([platform isEqualToString:@"iPhone7,2"])return YES;
if ([platform isEqualToString:@"iPhone8,1"]) return YES;
if ([platform isEqualToString:@"iPhone8,3"]) return YES;
if ([platform isEqualToString:@"iPhone8,4"]) return YES;
if ([platform isEqualToString:@"iPhone9,1"]) return YES;
if ([platform isEqualToString:@"iPhone9,3"]) return YES;
return NO;
}
@end

View File

@@ -0,0 +1,232 @@
//
// YYUtility.h
// YYMobileFramework
//
// Created by wuwei on 14/6/11.
// Copyright (c) 2014年 YY.inc. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef enum : NSUInteger {
YYUtilityTelephonType_Move = 0,///移动
YYUtilityTelephonType_Link_Together,///联通
YYUtilityTelephonType_Link_Telegraphy,///电信
YYUtilityTelephonType_Link_Tietong,///铁通
YYUtilityTelephonType_Link_Unknown,///不知道的运营商
} YYUtilityTelephonType;
@class CTCarrier;
@interface YYUtility : NSObject
@end
/*==============================*/
/* App Utilities */
/*==============================*/
@interface YYUtility (App)
/**
* 从YYMobile-Info.plist中读取字段
*
* @param key 键
*
* @return 值
*/
+ (id)valueInPlistForKey:(NSString *)key;
/**
* 获取App版本号, 从plist从读取CFBundleShortVersion
*/
+ (NSString *)appVersion;
+(NSString *)getLanguage;
/**
* 获取AppBuild号, 从plist中读取CFBundleVersion
*/
+ (NSString *)appBuild;
/**
* 当前构建出的版本在svn中的版本号
*/
+ (NSString *)svnVersion;
/**
获取appName
@return app的名称
*/
+ (NSString *)appName;
/**
* 获取bundle id
*
* @return bundle id
*/
+ (NSString *)appBundleId;
/**
* 获取YYMobileFrameworkRes.bundle的URL
*/
+ (NSURL *)URLForMobileFrameworkResourceBundle;
/**
* 获取YYMobileFrameworkRes.bundle的路径
*/
+ (NSString *)pathForMobileFrameworkResourceBundle;
+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)fileURL;
/**
* 获取当前的构建类型(DEBUG/RELEASE)
*
* @return 构建类型
*/
+ (NSString *)buildType;
/**
* 获取平台渠道
*/
+ (NSString *)getAppSource;
/**
* 是否来自appstore
*/
+ (BOOL)isFromAppStore;
/// 获取运营商信息
+ (YYUtilityTelephonType)getOperatorInfomation;
@end
/*==============================*/
/* Carrier Utilities */
/*==============================*/
@interface YYUtility (Carrier)
+(NSString *)getMobileCountryCode;
/**
获取设备唯一标识
@return 唯一标识
*/
+ (NSString *)deviceUniqueIdentification;
/**
* 获取运营商
*/
+ (CTCarrier *)carrier;
/**
* 获取运营商类型
*/
+ (NSInteger)carrierIdentifier;
/**
* 获取运营商名称
*/
+ (NSString *)carrierName;
/**
* 从CTCarrier对象获取网络类型
* @param carrier - CTCarrier对象
* @return CarrierType
*/
+ (NSInteger)identifierOfCarrier:(CTCarrier *)carrier;
@end
/*==============================*/
/* Device Utilities */
/*==============================*/
@interface YYUtility (Device)
/**
* 获取modelName, 如iPhone5,2
*/
+ (NSString *)modelName;
/**
获取设备类型
@return 设备类型
*/
+ (NSString*)modelType;
/**
* 获取系统版本
*/
+ (NSString *)systemVersion;
/**
* 获取当前设备的 IDFVIDFV 在某些情况下会变,不建议将其作为设备标识
*/
+ (NSString *)identifierForVendor NS_AVAILABLE_IOS(6_0);
/**
* 获取当前的设备标识,会使用海度 SDK 中的 OpenUDID
*
* @return 海度 SDK 缓存的 OpenUDID
*/
+ (NSString *)deviceID;
/**
* 获取当前网络状态
*/
+ (NSInteger)networkStatus;
/**
* 获取当前IP地址
*/
+ (NSString *)ipAddress;
/**
* 获取当前IP地址
*
* @param preferIPv4 优先取IPv4的地址
*/
+ (NSString *)ipAddress:(BOOL)preferIPv4;
/**
* 检查Camera是否可用, 可用则调用available; 若隐私设置中禁用了本app对相机
* 的访问, 则调用denied; 否则视为被限制, 调用restriction
*
* @param available 可用
* @param denied 不可用
* @param restriction 受限制
*/
+ (void)checkCameraAvailable:(void (^)(void))available denied:(void(^)(void))denied restriction:(void(^)(void))restriction;
/**
* 检查相册是否可用, 可用则调用available; 若隐私设置中禁用了本app对相册
* 的访问, 则调用denied; 否则视为被限制, 调用restriction
*
* @param available 可用
* @param denied 不可用
* @param restriction 受限制
*/
+ (void)checkAssetsLibrayAvailable:(void (^)(void))available denied:(void(^)(void))denied restriction:(void(^)(void))restriction;
/**
检查麦克风权限
@param resultBlock 结果处理block
*/
+ (void)checkMicPrivacy:(void(^)(BOOL succeed))resultBlock;
+ (NSString *)macAddresss;
+ (NSString *)idfa;
/**
* 初始化信令sdkimsdk所用到的appName
*
* @return app name
*/
+ (NSString *)appName;
/**
当前设备是否低于, 等于 iPhone6
@return 当前设备是否低于, 等于 iPhone6
*/
+ (BOOL)isIphone6AndLow;
@end

View File

@@ -0,0 +1,13 @@
//
// YYUtility.m
// YYMobileFramework
//
// Created by wuwei on 14-5-30.
// Copyright (c) 2014 YY Inc. All rights reserved.
//
#import "YYUtility.h"
@implementation YYUtility
@end