Calculating IOS signal strength using CTGetSignalS

2019-04-17 06:03发布

问题:

I have begun developing a non-Apple store app for iOS 8.3 that measures and returns the Received Signal Strength Indicator (RSSI) value in dB. I got access to a git repository for an Xcode project named VAFieldTest that uses the Core Telephony framework in order to get access to information such as cell ID, serving mnc, RSSI, etc. However, the build of the project fails and returns the following error:

    Ld /Users/rajesh/Library/Developer/Xcode/DerivedData/VAFieldTest-dmyrokwehbyuqcauvwpiouivlnqy/Build/Products/Debug-iphonesimulator/VAFieldTest.app/VAFieldTest normal i386
    cd /Users/rajesh/Documents/VAFieldTest
    export IPHONEOS_DEPLOYMENT_TARGET=4.0
    export PATH="/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode-beta.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.4.sdk -L/Users/rajesh/Library/Developer/Xcode/DerivedData/VAFieldTest-dmyrokwehbyuqcauvwpiouivlnqy/Build/Products/Debug-iphonesimulator -F/Users/rajesh/Library/Developer/Xcode/DerivedData/VAFieldTest-dmyrokwehbyuqcauvwpiouivlnqy/Build/Products/Debug-iphonesimulator -F/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.4.sdk/System/Library/PrivateFrameworks -filelist /Users/rajesh/Library/Developer/Xcode/DerivedData/VAFieldTest-dmyrokwehbyuqcauvwpiouivlnqy/Build/Intermediates/VAFieldTest.build/Debug-iphonesimulator/VAFieldTest.build/Objects-normal/i386/VAFieldTest.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=4.0 -framework Foundation -framework UIKit -framework CoreGraphics -framework CoreTelephony -weak_framework VoiceServices -Xlinker -dependency_info -Xlinker /Users/rajesh/Library/Developer/Xcode/DerivedData/VAFieldTest-dmyrokwehbyuqcauvwpiouivlnqy/Build/Intermediates/VAFieldTest.build/Debug-iphonesimulator/VAFieldTest.build/Objects-normal/i386/VAFieldTest_dependency_info.dat -o /Users/rajesh/Library/Developer/Xcode/DerivedData/VAFieldTest-dmyrokwehbyuqcauvwpiouivlnqy/Build/Products/Debug-iphonesimulator/VAFieldTest.app/VAFieldTest

ld: -pie can only be used when targeting iOS 4.2 or later
clang: error: linker command failed with exit code 1 (use -v to see invocation)

At first I thought it was due to the linking of the new library but upon inspection, the build dependencies have already been included and it didn't help. I thought of calling the Core Telephony methods myself but the official documentation lists no methods for accessing these core functions in iOS 8.3. The listed methods are available at the developers documentation library and don't contain the required methods.

How do I get the RSSI values in iOS 8.3? Im using Xcode 6.4 beta.

回答1:

This is no longer possible, apparently as a side-effect to patching a vulnerability. Get CellID, LAC, ... on iOS 8.3



回答2:

You can get signal strength using this:

UIApplication *app = [UIApplication sharedApplication];
NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
NSString *dataNetworkItemView = nil;

for (id subview in subviews) {
    if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) {
        dataNetworkItemView = subview;
        break;
    }
}

int signalStrength = [[dataNetworkItemView valueForKey:@"signalStrengthRaw"] intValue];

NSLog(@"signal %d", signalStrength);