OSのアップデートがあるたびに調査している「CoreTelephony.framework」の調査を行なってみました。
最初(macOS 10.10のころ?)はFrameworkのダミーがあるだけで、use framework “CoreTelephony”などと書いても、エラーになるだけでした。
次いで、use framework “Coretelephony”が通るようになったものの、中身が用意されていない時代が長く続き、とうとうmacOS 10.15で実際にオブジェクトを生成して情報が取れるようになりました。macOS 10.14では本Scriptは動きません。動作するのは10.15以降のみです。
VOIP経由で通話ができるという情報が取れるようになっただけですが、通話に使えるほど待ち受け時間が長いマシン(ARM CPU搭載)の開発が最終段階に到達したのか、あるいはARM CPU搭載のiPadのようなマシンにmacOSを搭載することを検討しているのか、それ以外の何かを用意しているのかは不明です。
ただひとつ言えることは、macOS上でCoreTelephony.frameworkのフルセットが、ようやく動いて、BridgeSupportのファイルまで用意された(=AppleScriptから呼べるようになった)ということです。
struct name='CTError' type64='{_CTError="domain"i"error"i}' constant name='CTCallStateConnected' type64='@' constant name='CTCallStateDialing' type64='@' constant name='CTCallStateDisconnected' type64='@' constant name='CTCallStateIncoming' type64='@' constant name='CTRadioAccessTechnologyCDMA1x' type64='@' constant name='CTRadioAccessTechnologyCDMAEVDORev0' type64='@' constant name='CTRadioAccessTechnologyCDMAEVDORevA' type64='@' constant name='CTRadioAccessTechnologyCDMAEVDORevB' type64='@' constant name='CTRadioAccessTechnologyDidChangeNotification' type64='@' constant name='CTRadioAccessTechnologyEdge' type64='@' constant name='CTRadioAccessTechnologyGPRS' type64='@' constant name='CTRadioAccessTechnologyHSDPA' type64='@' constant name='CTRadioAccessTechnologyHSUPA' type64='@' constant name='CTRadioAccessTechnologyLTE' type64='@' constant name='CTRadioAccessTechnologyWCDMA' type64='@' constant name='CTRadioAccessTechnologyeHRPD' type64='@' constant name='CTServiceRadioAccessTechnologyDidChangeNotification' type64='@' constant name='CTSubscriberTokenRefreshed' type64='@' enum name='kCTErrorDomainMach' value64='2' enum name='kCTErrorDomainNoError' value64='0' enum name='kCTErrorDomainPOSIX' value64='1' class name='CTCarrier' method selector='allowsVOIP' retval type64='B'
下記ScriptはMac mini 2014にBluetooth経由でiPhoneを接続した状態で実行したものです。この記事を書いたあたりで「ARM Macはあり得る」と感じるようになっていました(半信半疑ですが)。
AppleScript名:電話関連情報を取得するじっけん |
— Created 2016-09-30 by Takaaki Naganoya — 2016 Piyomaru Software use AppleScript version "2.7" use scripting additions use framework "Foundation" use framework "CoreTelephony" –macOS 10.15ではじめて呼び出せた set telephony to current application’s CTTelephonyNetworkInfo’s alloc()’s init() –set telephony to current application’s CTTelephonyNetworkInfo’s new() set cRes to telephony’s subscriberCellularProvider() –> missing value set sRes to telephony’s serviceCurrentRadioAccessTechnology() –> missing value set sRes2 to telephony’s serviceSubscriberCellularProviders() –> missing value set sRes3 to telephony’s serviceSubscriberCellularProvidersDidUpdateNotifier() –> missing value set sRes3 to telephony’s dataServiceIdentifier() –> missing value set aCarrier to current application’s CTCarrier’s alloc()’s init() –> (* CTCarrier (0x6000034d5bf0) { Carrier name: [<nil>] Mobile Country Code: [<nil>] Mobile Network Code:[<nil>] ISO Country Code:[<nil>] Allows VOIP? [YES] } *) set vRes to aCarrier’s allowsVOIP() –> true |
追記:2020/12/17に同一機体でmacOS 11.1環境で同じScriptを実行した際の結果を反映させてみました。
この時点でARM Mac=M1 Macが登場して、市販もはじまっている状況ですが、SIM入りMacは登場していません。iPad Proのような筐体でMx系CPUを搭載したタブレット的な「Mac Pad」のようなマシンが出てくるものと予測していますが、どうなることやら。
AppleScript名:電話関連情報を取得するじっけん.scptd |
— Created 2016-09-30 by Takaaki Naganoya — 2016 Piyomaru Software use AppleScript version "2.7" use scripting additions use framework "Foundation" use framework "CoreTelephony" –macOS 10.15ではじめて呼び出せた set telephony to current application’s CTTelephonyNetworkInfo’s alloc()’s init() –set telephony to current application’s CTTelephonyNetworkInfo’s new() set cRes to telephony’s subscriberCellularProvider() –> missing value–10.15 –> missing value–11.1 set sRes to telephony’s serviceCurrentRadioAccessTechnology() –> missing value–10.15 –> (NSDictionary) {}–11.x set sRes2 to telephony’s serviceSubscriberCellularProviders() –> missing value–10.15 –> (NSDictionary) {}–11.x set sRes3 to telephony’s serviceSubscriberCellularProvidersDidUpdateNotifier() –> missing value–10.15 –> missing value–11.x set sRes3 to telephony’s dataServiceIdentifier() –> missing value–10.15 –> missing value–11.x set aCarrier to current application’s CTCarrier’s alloc()’s init() –> (* –macOS 10.15 CTCarrier (0x6000034d5bf0) { Carrier name: [<nil>] Mobile Country Code: [<nil>] Mobile Network Code:[<nil>] ISO Country Code:[<nil>] Allows VOIP? [YES] } –macOS 11.1 Mobile Country Code: [<nil>] Mobile Network Code:[<nil>] ISO Country Code:[<nil>] Allows VOIP? [YES] } *) set vRes to aCarrier’s allowsVOIP()–> true–10.15 –> true–11.x |