Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

カテゴリー: NFC

NFCタグリーダー/ライターの情報+タグ情報を取得

Posted on 3月 9 by Takaaki Naganoya

MacにUSB経由で接続したNFCタグリーダー/ライターの情報、およびそのリーダーに接触しているNFCタグの情報を取得するAppleScriptです(Apple Silicon Mac用、Intelバイナリはなし)。


▲音楽CD型のNFCタグ(おもちゃ) Apple Musicの配信先URLを記録しておくと、iPhoneにタッチするとApple Musicがオープンする仕組み

NFC関連の情報を取得するmacOS内のフレームワークは、CryptoTokenKitです。

最初は、これをAppleScriptObjCから直接呼び出すことを試みていたのですが、呼び出してオブジェクトを生成した段階でつまづいたので、ASOC経由で直接機能を呼び出すことには早々に見切りをつけました(↓できてもよさそうなのに)。

AppleScript名:NFCカードリーダーの存在確認_v1.scpt
use AppleScript version "2.8"
use scripting additions
use framework "Foundation"
use framework "CryptoTokenKit"

— リーダーの接続確認(ダメ!)
set cardManager to current application’s TKSmartCardSlotManager’s defaultManager()
if cardManager = missing value then
  display alert "リーダーが見つかりません。接続を確認してください。"
  
return
end if

set allSlots to cardManager’s slotNames()

if (count of allSlots) > 0 then
  display notification "リーダーを認識しました: " & (item 1 of allSlots) with title "NFC Ready"
else
  display alert "リーダーが見つかりません。接続を確認してください。"
end if

★Click Here to Open This Script 

このため、CryptoTokenKitフレームワークの機能を呼び出す部分はSwiftで記述したコマンドライン・ツールを用意し、AppleScriptバンドル内に格納してdo shell scriptコマンド経由で呼び出すことにしてみました。

Xcodeプロジェクト化してSwiftのプログラムを直接呼び出す方式でもよかったのですが、確実に呼び出せることを重視して前述の方式に。

–> Download Script Bundle within nfc_reader_writer cli tool

NFCタグリーダー/ライターを操作

日本市場で実績があって入手しやすいNFCリーダー/ライターはソニーのRC-S300一択という状況なので、ほぼ決め打ちでこの機種を想定してもよいのですが、海外市場がどんな状況になっているのかはわかりません。

本プログラムではMacに接続されているNFCリーダー/ライターの製品名(readerName)、NFCタグがスキャン範囲内にあるか?(tagReady)、NFCタグリーダー/ライターが書き込み可能かどうか(canWrite)、NFCタグの属性データ(atr)を取得できます。

–> {{readerName:”SONY FeliCa Port/PaSoRi 4.0″, tagReady:true, atr:”3B8F8001804F0CA0000003060300030000000068″, canWrite:true}}

NFCタグリーダー/ライターが複数接続されている場合にも対処するようになっていますが、複数台のリーダーで動作確認は行なっていません。

かるくUSのAmazonでNFCリーダー/ライターを検索してみたところ、ほぼ同様の仕組みのデバイスが流通していることを確認しました。

現在までにできていること

一応、NFCタグリーダー/ライターの存在確認(本プログラム)、NFCタグへのデータ書き込み(URLだけで確認)、NFCタグからのデータ読み込み……と、ひととおり、Swift+AppleScriptの組み合わせで実現できています。

ただ、どう考えても全MacユーザーがNFCタグリーダー/ライターを購入して利用する姿は想像しにくいため(MacにNFCリーダー/ライターが標準搭載される未来はたぶん来ない。キーボードやマウスだと可能性はゼロではないかも)、iPhoneを併用して、これでNFCタグを読み込んだり、データ書き込みする利用スタイルを想定しています。つまり、iPhoneでNFCタグを読み取ると、Macに通知が飛んでMac側でAppleScriptによって処理を行う流れになります(そんなに難しくないので、ほぼ実現できる)。

iPhone上でショートカット.appを用いてNFCタグの読み込みに応じて実行されるアクションを作成し、iCloud Drive経由でテキストデータを書き込み。Mac側でFolder Actionを用いて内容を読み取る……という流れを想定しています(ただし、自分が使っているのがiPhone 7なのでまだ実現していません……このアクションにはiPhone X以降が必要とのこと)。

このため、読み込みについてはiPhoneでスキャン→Macで実行というスタイルを考えています。書き込みについてはMac側で、ということになるでしょう(iPhone側でもできるようですが、運用上ちょっと混乱しそうなので)。

つまり、本プログラムを核としたテストプログラムのほとんどは「無駄」になってしまいそうなところです。技術的な調査がひととおり行えた、という意味では意義はあるのかもしれません。難しくなさそうなのに、セキュリティでがんじがらめなのでちょっと残念さを感じます。

AppleScript名:reader_list_v3.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2026/03/09
—
–  Copyright © 2026 Piyomaru Software, All Rights Reserved
—

set rRes to getNFCReaderList() of me
— {{readerName:"SONY FeliCa Port/PaSoRi 4.0", tagReady:true, atr:"3B8F8001804F0CA0000003060300030000000068", canWrite:true}}

on getNFCReaderList()
  set mePath to POSIX path of (path to me)
  
set listTool to quoted form of (mePath & "Contents/Resources/nfc_list")
  
  
— plist文字列を取得
  
set xmlData to do shell script listTool
  
  
— Property List Dataとしてパース
  
tell application "System Events"
    set plistItems to make new property list item with data xmlData
    
set readerList to value of plistItems
  end tell
  
  
set outList to {}
  
  
— 取得したリストをパース
  
repeat with aReader in readerList
    — plistのキーに基づき値を取得
    
set rName to |name| of aReader
    
set rStatus to status of aReader
    
set rAtr to atr of aReader
    
set rCanWrite to can_write of aReader
    
    
if rStatus is "present" then
      set tmpRec to {readerName:rName, tagReady:true, atr:rAtr, canWrite:rCanWrite}
    else
      set tmpRec to {readerName:rName, tagReady:false, atr:rAtr, canWrite:rCanWrite}
    end if
    
set the end of outList to tmpRec
  end repeat
  
  
— 呼び出し元の想定に合わせて、最初のリーダーのレコードを返します
  
if (count of outList) > 0 then
    return outList
  else
    return {readerName:"", tagReady:false, atr:"", canWrite:false}
  end if
end getNFCReaderList

★Click Here to Open This Script 

Posted in NFC System | Tagged 10.15savvy 26.0savvy | Leave a comment

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • macOS 26, Tahoe
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • Xcode上のAppleScriptObjCのプログラムから、Xcodeのログ欄へのメッセージ出力を実行
  • Script Debuggerがフリーダウンロードで提供されることに
  • AppleScript Dropletのバグっぽい動作が「復活」(macOS 15.5β)
  • macOS 26, 15.5でShortcuts.app「AppleScriptを実行」アクションのバグが修正される
  • Appleに買収されたPixelmator ProがAppleとしての初アップデート
  • Numbersで選択範囲のdateの年を+1する
  • Dock Menu
  • Applicationのactivateを記録する v2
  • シンプルな文字置換
  • Claris FileMaker Pro 2025(v22)がリリースされた
  • macOS 15.5beta5(24F74)でaliasのキャスティングバグが修正された???
  • 複数の重複検出ルーチンを順次速度計測
  • Apple Creator Studioに含まれるKeynote/Pages/Numbersは新バージョン?
  • macOS 15.7.2 スクリプトメニューから実行できなくなった地図系ライブラリ?
  • 画像をAppleScriptでアスキーアート化
  • NaturalLanguage.frameworkを用いて日本語テキストの形態素解析を行う
  • Adobe InDesignのAppleScript実行エンジンがCarbonからCocoaベースに書き換えられる
  • NSIndexSetを作成し、各index要素を取り出す

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (439) 11.0savvy (283) 12.0savvy (212) 13.0savvy (204) 14.0savvy (159) 15.0savvy (170) 26.0savvy (43) CotEditor (68) Finder (53) Keynote (122) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (80) Pages (58) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Newt On Project
  • NFC
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • process
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • Scripting Additions
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2026年3月
  • 2026年2月
  • 2026年1月
  • 2025年12月
  • 2025年11月
  • 2025年10月
  • 2025年9月
  • 2025年8月
  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC