Device identifier by Airbridge. (example: 82A16EC9-A273-48B6-9BB2-017EAB641109)
import Airbridge Airbridge.fetchDeviceUUID { deviceUUID in }#import <Airbridge/Airbridge.h> [Airbridge fetchDeviceUUID:^(NSString * _Nonnull deviceUUID) { }];import Airbridge Airbridge.fetchDeviceUUID { deviceUUID in }#import <Airbridge/Airbridge.h> [Airbridge fetchDeviceUUID:^(NSString * _Nonnull deviceUUID) { }];import AirBridge AirBridge.deviceUUID#import <AirBridge/AirBridge.h> AirBridge.deviceUUID;import AirBridge AirBridge.deviceUUID#import <AirBridge/AirBridge.h> AirBridge.deviceUUID;Random UUID assigned by Airbridge upon app install on each device. (example: 82A16EC9-A273-48B6-9BB2-017EAB641109)
import Airbridge Airbridge.fetchAirbridgeGeneratedUUID { airbridgeGeneratedUUID in } #import <Airbridge/Airbridge.h> [Airbridge fetchAirbridgeGeneratedUUID:^(NSString * _Nonnull airbridgeGeneratedUUID) { }];import Airbridge Airbridge.fetchAirbridgeGeneratedUUID { airbridgeGeneratedUUID in } #import <Airbridge/Airbridge.h> [Airbridge fetchAirbridgeGeneratedUUID:^(NSString * _Nonnull airbridgeGeneratedUUID) { }];import AirBridge AirBridge.fetchAirbridgeGeneratedUUID { uuid in } #import <AirBridge/AirBridge.h> [AirBridge fetchAirbridgeGeneratedUUID:^(NSString * _Nonnull uuid) { }];import AirBridge AirBridge.fetchAirbridgeGeneratedUUID { uuid in } #import <AirBridge/AirBridge.h> [AirBridge fetchAirbridgeGeneratedUUID:^(NSString * _Nonnull uuid) { }];As of iOS 14.5, apps must obtain explicit user consent before tracking users. ATT (App Tracking Transparency) is Apple's privacy framework that enables users to control whether apps can track their activity.
import AppTrackingTransparency let status = ATTrackingManager.trackingAuthorizationStatus switch status {case .notDetermined: // User has not yet made a decision - popup can be showncase .authorized: // Tracking permission grantedcase .denied: // Tracking permission deniedcase .restricted: // Tracking is restricted (by device settings)@unknown default: break}#import <AppTrackingTransparency/AppTrackingTransparency.h> ATTrackingManagerAuthorizationStatus status = [ATTrackingManager trackingAuthorizationStatus]; switch (status) { case ATTrackingManagerAuthorizationStatusNotDetermined: // User has not yet made a decision - popup can be shown break; case ATTrackingManagerAuthorizationStatusAuthorized: // Tracking permission granted break; case ATTrackingManagerAuthorizationStatusDenied: // Tracking permission denied break; case ATTrackingManagerAuthorizationStatusRestricted: // Tracking is restricted (by device settings) break;}import AppTrackingTransparency let status = ATTrackingManager.trackingAuthorizationStatus switch status {case .notDetermined: // User has not yet made a decision - popup can be showncase .authorized: // Tracking permission grantedcase .denied: // Tracking permission deniedcase .restricted: // Tracking is restricted (by device settings)@unknown default: break}#import <AppTrackingTransparency/AppTrackingTransparency.h> ATTrackingManagerAuthorizationStatus status = [ATTrackingManager trackingAuthorizationStatus]; switch (status) { case ATTrackingManagerAuthorizationStatusNotDetermined: // User has not yet made a decision - popup can be shown break; case ATTrackingManagerAuthorizationStatusAuthorized: // Tracking permission granted break; case ATTrackingManagerAuthorizationStatusDenied: // Tracking permission denied break; case ATTrackingManagerAuthorizationStatusRestricted: // Tracking is restricted (by device settings) break;}Advertising ID issued by Apple. (example: 82A16EC9-A273-48B6-9BB2-017EAB641109)
import AdSupport ASIdentifierManager.shared().advertisingIdentifier.uuidString#import <AdSupport/AdSupport.h> ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString;import AdSupport ASIdentifierManager.shared().advertisingIdentifier.uuidString#import <AdSupport/AdSupport.h> ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString;Unique ID that publishers can use to identify which apps a specific user has installed. (example: 82A16EC9-A273-48B6-9BB2-017EAB641109)
UIDevice.current.identifierForVendor?.uuidStringUIDevice.currentDevice.identifierForVendor.UUIDString;UIDevice.current.identifierForVendor?.uuidStringUIDevice.currentDevice.identifierForVendor.UUIDString;Device's Limit AD Tracking information. (example: true)
import AdSupport ASIdentifierManager.shared().isAdvertisingTrackingEnabled#import <AdSupport/AdSupport.h> ASIdentifierManager.sharedManager.advertisingTrackingEnabled;import AdSupport ASIdentifierManager.shared().isAdvertisingTrackingEnabled#import <AdSupport/AdSupport.h> ASIdentifierManager.sharedManager.advertisingTrackingEnabled;Device model name. (example: iPhone)
UIDevice.current.localizedModelUIDevice.currentDevice.localizedModel;UIDevice.current.localizedModelUIDevice.currentDevice.localizedModel;Device identifier name. (example: iPhone9,3)
var systemInfo = utsname()uname(&systemInfo) return String(cString: &systemInfo.machine.0, encoding: .utf8)#import <sys/utsname.h> struct utsname systemInfo;uname(&systemInfo); return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];var systemInfo = utsname()uname(&systemInfo) return String(cString: &systemInfo.machine.0, encoding: .utf8)#import <sys/utsname.h> struct utsname systemInfo;uname(&systemInfo); return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];Device manufacturer information. (example: Apple)
"Apple"@"Apple""Apple"@"Apple"Device OS name. (example: iOS)
UIDevice.current.systemNameUIDevice.currentDevice.systemName;UIDevice.current.systemNameUIDevice.currentDevice.systemName;Device OS version. (example: 13.3)
UIDevice.current.systemVersionUIDevice.currentDevice.systemVersion;UIDevice.current.systemVersionUIDevice.currentDevice.systemVersion;Device locale settings. (example: ko-KR)
func getSystemLocale() -> String? { guard let language = getSystemLanguage() else { return nil } guard let country = getSystemCountry() else { return nil } return "\(language)-\(country)"} func getSystemLanguage() -> String? { let languages = Locale.preferredLanguages if languages.count < 1 { return nil } let languageSource = languages[0] guard let barIndex = languageSource.range(of: "-") else { return languageSource } return String(languageSource[..<barIndex.lowerBound])} func getSystemCountry() -> String? { return Locale.autoupdatingCurrent.regionCode}+ (NSString *)getSystemLocale { NSString* language = [#ClassName# getSystemLanguage]; NSString* country = [#ClassName# getSystemCountry]; if(language == nil || country == nil) { return nil; } return [NSString stringWithFormat:@"%@-%@", language, country];} + (NSString*) getSystemLanguage { NSArray* preferredLanguages = NSLocale.preferredLanguages; if (preferredLanguages.count < 1) { return nil; } NSString* languageSource = preferredLanguages[0]; if (languageSource == nil) { return nil; } NSRange barIndex = [languageSource rangeOfString:@"-"]; if (barIndex.location != NSNotFound) { languageSource = [languageSource substringToIndex:barIndex.location]; } return languageSource;} + (NSString*) getSystemCountry { NSLocale* locale = NSLocale.autoupdatingCurrentLocale; if (locale == nil) { return nil; } return [locale objectForKey:NSLocaleCountryCode];}func getSystemLocale() -> String? { guard let language = getSystemLanguage() else { return nil } guard let country = getSystemCountry() else { return nil } return "\(language)-\(country)"} func getSystemLanguage() -> String? { let languages = Locale.preferredLanguages if languages.count < 1 { return nil } let languageSource = languages[0] guard let barIndex = languageSource.range(of: "-") else { return languageSource } return String(languageSource[..<barIndex.lowerBound])} func getSystemCountry() -> String? { return Locale.autoupdatingCurrent.regionCode}+ (NSString *)getSystemLocale { NSString* language = [#ClassName# getSystemLanguage]; NSString* country = [#ClassName# getSystemCountry]; if(language == nil || country == nil) { return nil; } return [NSString stringWithFormat:@"%@-%@", language, country];} + (NSString*) getSystemLanguage { NSArray* preferredLanguages = NSLocale.preferredLanguages; if (preferredLanguages.count < 1) { return nil; } NSString* languageSource = preferredLanguages[0]; if (languageSource == nil) { return nil; } NSRange barIndex = [languageSource rangeOfString:@"-"]; if (barIndex.location != NSNotFound) { languageSource = [languageSource substringToIndex:barIndex.location]; } return languageSource;} + (NSString*) getSystemCountry { NSLocale* locale = NSLocale.autoupdatingCurrentLocale; if (locale == nil) { return nil; } return [locale objectForKey:NSLocaleCountryCode];}Device timezone settings. (example: US/Pacific)
TimeZone.current.descriptionNSTimeZone.systemTimeZone.name;TimeZone.current.descriptionNSTimeZone.systemTimeZone.name;Device display orientation. Values will be either "portrait" or "landscape". (example: portrait)
if UIDevice.current.orientation.isLandscape { return @"landscape"} else { return @"portrait"}UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;if (UIInterfaceOrientationIsLandscape(orientation)) return @"landscape";else return @"portrait";if UIDevice.current.orientation.isLandscape { return @"landscape"} else { return @"portrait"}UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;if (UIInterfaceOrientationIsLandscape(orientation)) return @"landscape";else return @"portrait";Device's screen density. (example: 3.000)
String(format: "%.3f", UIScreen.main.scale)[NSString stringWithFormat:@"%.3f", UIScreen.mainScreen.scale];String(format: "%.3f", UIScreen.main.scale)[NSString stringWithFormat:@"%.3f", UIScreen.mainScreen.scale];Device's actual width. (example: 375.0)
String(format: "%.f", UIScreen.main.bounds.size.width)[NSString stringWithFormat:@"%.f", UIScreen.mainScreen.bounds.size.width];String(format: "%.f", UIScreen.main.bounds.size.width)[NSString stringWithFormat:@"%.f", UIScreen.mainScreen.bounds.size.width];Device's actual height. (example: 667.0)
String(format: "%.f", UIScreen.main.bounds.size.height)[NSString stringWithFormat:@"%.f", UIScreen.mainScreen.bounds.size.height];String(format: "%.f", UIScreen.main.bounds.size.height)[NSString stringWithFormat:@"%.f", UIScreen.mainScreen.bounds.size.height];Device network carrier information.
import CoreTelephony let info = CTTelephonyNetworkInfo() if #available(iOS 12.1, *) { let providers = info.serviceSubscriberCellularProviders return providers?.values.first?.carrierName} else { let provider = info.subscriberCellularProvider return provider?.carrierName}#import <CoreTelephony/CTCarrier.h>#import <CoreTelephony/CTTelephonyNetworkInfo.h> CTTelephonyNetworkInfo* networkInfo = [[CTTelephonyNetworkInfo alloc] init]; if (@available(iOS 12.1, *)) { NSDictionary<NSString*, CTCarrier*>* providers = [networkInfo serviceSubscriberCellularProviders]; return providers.allValues.firstObject.carrierName;} else { CTCarrier* provider = [networkInfo subscriberCellularProvider]; return provider.carrierName;}import CoreTelephony let info = CTTelephonyNetworkInfo() if #available(iOS 12.1, *) { let providers = info.serviceSubscriberCellularProviders return providers?.values.first?.carrierName} else { let provider = info.subscriberCellularProvider return provider?.carrierName}#import <CoreTelephony/CTCarrier.h>#import <CoreTelephony/CTTelephonyNetworkInfo.h> CTTelephonyNetworkInfo* networkInfo = [[CTTelephonyNetworkInfo alloc] init]; if (@available(iOS 12.1, *)) { NSDictionary<NSString*, CTCarrier*>* providers = [networkInfo serviceSubscriberCellularProviders]; return providers.allValues.firstObject.carrierName;} else { CTCarrier* provider = [networkInfo subscriberCellularProvider]; return provider.carrierName;}Device mobile data status. (example: true)
import SystemConfiguration func isCellular() -> Bool { return network() == .cellular} enum Network { case wifi case cellular case none} func getNetworkInfo() -> Network { var zeroAddress = sockaddr() bzero(&zeroAddress, MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_len = __uint8_t(MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_family = sa_family_t(AF_INET) guard let reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, &zeroAddress) else { return .none } var flags = SCNetworkReachabilityFlags() if !SCNetworkReachabilityGetFlags(reachability, &flags) { return .none } if !flags.contains(.reachable) { return .none } if flags.contains(.connectionRequired) && !((flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic)) && !flags.contains(.interventionRequired)) { return .none } if flags.contains(.isWWAN) { return .cellular } else { return .wifi }}#import <SystemConfiguration/SystemConfiguration.h>#import <netinet/in.h> + (BOOL) isCellular { return [#ClassName# getNetworkInfo] == CELLULAR;} typedef enum : NSInteger { WIFI, CELLULAR, NONE} ABNetwork; + (ABNetwork) getNetworkInfo { struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *) &zeroAddress); if (reachability == nil) { return NONE; } SCNetworkReachabilityFlags flags; if (!SCNetworkReachabilityGetFlags(reachability, &flags)) { return NONE; } if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { return NONE; } if (((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0) && !(((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0 || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0) && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)) { return NONE; } if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { return CELLULAR; } else { return WIFI; }}import SystemConfiguration func isCellular() -> Bool { return network() == .cellular} enum Network { case wifi case cellular case none} func getNetworkInfo() -> Network { var zeroAddress = sockaddr() bzero(&zeroAddress, MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_len = __uint8_t(MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_family = sa_family_t(AF_INET) guard let reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, &zeroAddress) else { return .none } var flags = SCNetworkReachabilityFlags() if !SCNetworkReachabilityGetFlags(reachability, &flags) { return .none } if !flags.contains(.reachable) { return .none } if flags.contains(.connectionRequired) && !((flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic)) && !flags.contains(.interventionRequired)) { return .none } if flags.contains(.isWWAN) { return .cellular } else { return .wifi }}#import <SystemConfiguration/SystemConfiguration.h>#import <netinet/in.h> + (BOOL) isCellular { return [#ClassName# getNetworkInfo] == CELLULAR;} typedef enum : NSInteger { WIFI, CELLULAR, NONE} ABNetwork; + (ABNetwork) getNetworkInfo { struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *) &zeroAddress); if (reachability == nil) { return NONE; } SCNetworkReachabilityFlags flags; if (!SCNetworkReachabilityGetFlags(reachability, &flags)) { return NONE; } if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { return NONE; } if (((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0) && !(((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0 || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0) && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)) { return NONE; } if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { return CELLULAR; } else { return WIFI; }}Device wifi status. (example: true)
import SystemConfiguration func isWifi() -> Bool { return network() == .wifi} enum Network { case wifi case cellular case none} func getNetworkInfo() -> Network { var zeroAddress = sockaddr() bzero(&zeroAddress, MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_len = __uint8_t(MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_family = sa_family_t(AF_INET) guard let reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, &zeroAddress) else { return .none } var flags = SCNetworkReachabilityFlags() if !SCNetworkReachabilityGetFlags(reachability, &flags) { return .none } if !flags.contains(.reachable) { return .none } if flags.contains(.connectionRequired) && !((flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic)) && !flags.contains(.interventionRequired)) { return .none } if flags.contains(.isWWAN) { return .cellular } else { return .wifi }}#import <SystemConfiguration/SystemConfiguration.h>#import <netinet/in.h> + (BOOL) isWifi { return [#ClassName# getNetworkInfo] == WIFI;} typedef enum : NSInteger { WIFI, CELLULAR, NONE} ABNetwork; + (ABNetwork) getNetworkInfo { struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *) &zeroAddress); if (reachability == nil) { return NONE; } SCNetworkReachabilityFlags flags; if (!SCNetworkReachabilityGetFlags(reachability, &flags)) { return NONE; } if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { return NONE; } if (((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0) && !(((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0 || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0) && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)) { return NONE; } if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { return CELLULAR; } else { return WIFI; }}import SystemConfiguration func isWifi() -> Bool { return network() == .wifi} enum Network { case wifi case cellular case none} func getNetworkInfo() -> Network { var zeroAddress = sockaddr() bzero(&zeroAddress, MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_len = __uint8_t(MemoryLayout.size(ofValue: zeroAddress)) zeroAddress.sa_family = sa_family_t(AF_INET) guard let reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, &zeroAddress) else { return .none } var flags = SCNetworkReachabilityFlags() if !SCNetworkReachabilityGetFlags(reachability, &flags) { return .none } if !flags.contains(.reachable) { return .none } if flags.contains(.connectionRequired) && !((flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic)) && !flags.contains(.interventionRequired)) { return .none } if flags.contains(.isWWAN) { return .cellular } else { return .wifi }}#import <SystemConfiguration/SystemConfiguration.h>#import <netinet/in.h> + (BOOL) isWifi { return [#ClassName# getNetworkInfo] == WIFI;} typedef enum : NSInteger { WIFI, CELLULAR, NONE} ABNetwork; + (ABNetwork) getNetworkInfo { struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *) &zeroAddress); if (reachability == nil) { return NONE; } SCNetworkReachabilityFlags flags; if (!SCNetworkReachabilityGetFlags(reachability, &flags)) { return NONE; } if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { return NONE; } if (((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0) && !(((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0 || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0) && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)) { return NONE; } if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { return CELLULAR; } else { return WIFI; }}Application package name. (example: co.ab180.ablog)
Bundle.main.bundleIdentifierNSBundle.mainBundle.bundleIdentifier;Bundle.main.bundleIdentifierNSBundle.mainBundle.bundleIdentifier;Application version name. (example: 1.0.0)
Bundle.main.infoDictionary?["CFBundleShortVersionString"][NSBundle.mainBundle.infoDictionary objectForKey:@"CFBundleShortVersionString"];Bundle.main.infoDictionary?["CFBundleShortVersionString"][NSBundle.mainBundle.infoDictionary objectForKey:@"CFBundleShortVersionString"];Timestamp(milliseconds) of when the event was sent. (example: 1581043739682)
UInt64(Date().timeIntervalSince1970 * 1000)[NSNumber numberWithUnsignedLongLong:NSDate.date.timeIntervalSince1970 * 1000];UInt64(Date().timeIntervalSince1970 * 1000)[NSNumber numberWithUnsignedLongLong:NSDate.date.timeIntervalSince1970 * 1000];このページは役に立ちましたか?