问题
Since iOS 5.X, I used to get radio information with these methods : Get CellID, MCC, MNC, LAC, and Network in iOS 5.1
But with the iOS 8.3 beta (and 8.3 GM), this private API
_CTServerConnectionCellMonitorCopyCellInfo
doesn't work anymore.
回答1:
Apple was informed about weakness in their CoreTelephony, so now calls to CoreTelephony fail. They are checking if the caller is sandboxed, so after debug you can see:
Caller not allowed to perform action: TelephonyApiTest.240, action = sandboxed lookup, code = 1: Operation not permitted, uid = 501, euid = 501, gid = 501, egid = 501, asid = 0
However, there are still few calls which works, for example:
_CTServerConnectionCopyWakeReason
_CTServerConnectionCopyVoiceMailInfo
etc ... I haven't tried all.
The big problem now is you cannot even get a signal strength as CTGetSignalStrength
always returns 0.
And when you tried some resticted call like in your case _CTServerConnectionCellMonitorCopyCellInfo
then you can see error code in CTError
is 13 (Permission denied)
回答2:
As of iOS 8.3 all of the above solutions require entitlement to work
<key>com.apple.CommCenter.fine-grained</key>
<array>
<string>spi</string>
</array>
Not only cell monitor is protected but it seems like all of the CoreTelephony notifications now require that entitlement to work. For example, kCTMessageReceivedNotification also affected.
来源:https://stackoverflow.com/questions/29533059/get-cellid-lac-on-ios-8-3