使用中のMacの製品呼称を取得するAppleScriptです。
ながらく、この手のルーチンを使い続けてきましたが、macOS 10.15でエラーが出るようになりました。
理由を確認してみたところ、パス名の一部がmacOS 10.15で変更になっていることがわかりました。
目下、Xcode上でアプリケーションを作成すると、ローカライズしたリソースのフォルダについては、「English.lproj」ではなく「en.lproj」と、言語コードが用いられるようになってきました。この、「English」と「en」の変更がOS内部のコンポーネントについても行われた「だけ」というのが理由のようです。
ちなみに、パス名を無意味に途中で切ってつなげているのは、Blog(HTML)やMarkDownのドキュメントに入れたときに、折り返しされずにレンダリング品質を下げる原因になる(行がそこだけ伸びるとか、ページ全体の文字サイズが強制的に小さくなるとか)ためです。
AppleScript名:使用中のMacの製品呼称を取得する v4.scptd |
— – Created by: Takaaki Naganoya – Created on: 2020/03/08 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set myInfo to retModelInfo() of me –> "Mac mini (Late 2014)" on retModelInfo() set v2 to system attribute "sys2" — macOS 10.15.3 –> 15 if v2 < 15 then –macOS 10.14まで set pListPath to "/System/Library/PrivateFrameworks/ServerInformation.framework/" & "Versions/A/Resources/English.lproj/SIMachineAttributes.plist" else –macOS 10.15以降 set pListPath to "/System/Library/PrivateFrameworks/ServerInformation.framework/" & "Versions/A/Resources/en.lproj/SIMachineAttributes.plist" end if set aRec to retDictFromPlist(pListPath) of me set hwName to (do shell script "sysctl -n hw.model") –> "Macmini7,1" set aMachineRec to retRecordByLabel(aRec, hwName) of me set aMachineRec2 to contents of first item of aMachineRec return (marketingModel of _LOCALIZABLE_ of aMachineRec2) end retModelInfo on retDictFromPlist(aPath) set thePath to current application’s NSString’s stringWithString:aPath set thePath to thePath’s stringByExpandingTildeInPath() set theDict to current application’s NSDictionary’s dictionaryWithContentsOfFile:thePath return theDict as record end retDictFromPlist on retRecordByLabel(aRec as record, aKey as string) set aDic to current application’s NSDictionary’s dictionaryWithDictionary:aRec set aVal to aDic’s valueForKey:aKey return aVal as list end retRecordByLabel on retRecordByKeyPath(aRec as record, aKey as string) set aDic to current application’s NSDictionary’s dictionaryWithDictionary:aRec set aVal to aDic’s valueForKeyPath:aKey return aVal end retRecordByKeyPath |
More from my site
(Visited 47 times, 1 visits today)