AppleScript locationd

[TCC]位置情報 locationd とLiverpoolからアプリケーションを指定して削除


【スクリプトエディタで開く】|

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
(*
error number -128
com.cocolog-nifty.quicktimer.icefloe
*)
#
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
##自分環境がos12なので2.8にしているだけです
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
use scripting additions

property refMe : a reference to current application
tell application "Finder"
  set aliasTemporaryItems to path to temporary items from local domain as alias with folder creation
  set strTemporaryItemsPath to (POSIX path of aliasTemporaryItems) as text
end tell

set strFilePath to "/var/db/locationd/clients.plist" as text

set strDistFilePath to (strTemporaryItemsPath & "clients.plist") as text


set strCommandText to ("/usr/bin/sudo /usr/bin/ditto \"" & strFilePath & "\" \"" & strDistFilePath & "\"") as text
do shell script strCommandText with administrator privileges

set strCommandText to ("/usr/bin/sudo /bin/chmod 777 \"" & strDistFilePath & "\"") as text
do shell script strCommandText with administrator privileges

set ocidFilePathStr to refMe's NSString's stringWithString:(strDistFilePath)
set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:false)

set ocidPlistDict to refMe's NSMutableDictionary's dictionaryWithContentsOfURL:(ocidFilePathURL)

set ocidAllKeys to ocidPlistDict's allKeys()
set listAllKeys to ocidAllKeys as list

##############################
#####ダイアログを前面に
##############################
tell current application
  set strName to name as text
end tell
####スクリプトメニューから実行したら
if strName is "osascript" then
  tell application "Finder"
    activate
  end tell
else
  tell current application
    activate
  end tell
end if
##############################
#####ダイアログ
##############################
try
  set listResponse to (choose from list listAllKeys with title "選んでください" with prompt "位置情報『locationd』から削除する項目を選んでください" default items (item 3 of listAllKeys) without multiple selections allowed and empty selection allowed)
on error
  log "エラーしました"
return "エラーしました"
end try
if listResponse is false then
return "キャンセルしました"
end if
set strResponse to (item 1 of listResponse) as text
##############################
#####clients.plistから項目を削除
##############################
set strCommandText to ("/usr/bin/sudo /usr/bin/defaults delete \"" & strFilePath & "\" \"" & strResponse & "\"") as text
do shell script strCommandText with administrator privileges

##############################
#####TCCリセット用にUTIにする
##############################
set AppleScript's text item delimiters to ":"
set listDelim to (every text item of strResponse) as list
set AppleScript's text item delimiters to ""
set strUTI to (item 2 of listDelim) as text

###TCCの位置情報サービスkTCCServiceLiverpoolをリセット
set strCommandText to ("/usr/bin/tccutil reset \"Liverpool\" \"" & strUTI & "\"") as text
do shell script strCommandText with administrator privileges

###TCCの位置情報サービスkTCCServiceLiverpoolをリセット
set strCommandText to ("/usr/bin/sudo /usr/bin/tccutil reset \"Liverpool\" \"" & strUTI & "\"") as text
do shell script strCommandText with administrator privileges




|

[locate]再構成


【スクリプトエディタで開く】|

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
(*
locate.databaseを削除して再構築します
再構築中はfindコマンドがフル駆動しますので昼休み前とか
しばらく操作しないタイミングがいいでしょう
*)
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
##自分環境がos12なので2.8にしているだけです
use AppleScript version "2.8"
use framework "Foundation"
use scripting additions

property refMe : a reference to current application

try
  set strCommandText to ("/usr/bin/sudo /bin/launchctl stop -w /System/Library/LaunchDaemons/com.apple.locate.plist") as text
  do shell script strCommandText with administrator privileges
end try
try
  set strCommandText to ("/usr/bin/sudo /bin/rm -f /var/db/locate.database") as text
  do shell script strCommandText with administrator privileges
end try
try
  set strCommandText to ("/usr/bin/sudo /bin/launchctl start -w /System/Library/LaunchDaemons/com.apple.locate.plist") as text
  do shell script strCommandText with administrator privileges
end try
try
  set strCommandText to ("/usr/bin/sudo /usr/libexec/locate.updatedb") as text
  do shell script strCommandText with administrator privileges
  set strCommandText to ("/usr/bin/sudo /usr/bin/killall locationd") as text
  do shell script strCommandText with administrator privileges
end try

return "処理は終わりました。この後findが起動します"




|

spctl 設定変更

ダウンロード - spctl_status.zip




【スクリプトエディタで開く】

#!/bin/bash

SUDO_USER=$(whoami)
echo "$SUDO_USER"
if [ "$SUDO_USER" != "root" ]; then
  echo "sudo で実行してください"
  exit 1
else
LOGFILE=$(/usr/bin/mktemp /private/tmp/SPCTL_STATUS.XXXXX)
/bin/chmod 755 "$LOGFILE"
echo  "$LOGFILE"
fi

/usr/sbin/spctl --status > "$LOGFILE"
SPCTL_STATUS=$(/usr/sbin/spctl --status)
if echo "$SPCTL_STATUS" | grep -q "disabled"; then
  echo "SPCTLは停止中です=期待値です"
else
  /usr/bin/sudo /usr/sbin/spctl --master-disable
  echo "SPCTLの設定を変更しました"
fi

/bin/mv "$LOGFILE" "$LOGFILE.log" 
exit 0



【スクリプトエディタで開く】


SPCTL(8)                                System Manager's Manual                               SPCTL(8)

NAME
     spctl SecAssessment system policy security

SYNOPSIS
     spctl --assess [-t type] [-] file ...
     spctl --global-enable | --global-disable
     spctl --enable | --disable | --remove [-t type] [--path path] [--requirement requirement]
           [--anchor hash] [--hash hash]
     spctl --status

DESCRIPTION
     spctl manages the security assessment policy subsystem.

     This subsystem maintains and evaluates rules that determine whether the system allows the
     installation, execution, and other operations on files on the system.

     spctl requires one command option that determines its principal operation:

     --add    Add rule(s) to the system-wide assessment rule database.

     -a, --assess
              Requests that spctl perform an assessment on the files given.

     --disable
              Disable one or more rules in the assessment rule database.  Disabled rules are not
              considered when performing assessment, but remain in the database and can be re-enabled
              later.

     --enable
              Enable rule(s) in the assessment rule database, counteracting earlier disabling.

     --disable

     --global-disable
              Disable the assessment subsystem altogether.  Operations that would be denied by system
              policy will be allowed to proceed; assessment APIs always report success.  Requires root
              access.

     --global-enable
              Enable the assessment subsystem.  Operations that are denied by system policy will fail;
              assessment APIs report the truth.  Requires root access.

     --remove
              Remove rule(s) from the assessment rule database.

     --status
              Query whether the assessment subsystem is enabled or disabled.

     In addition, the following options are recognized:

     --anchor
              In rule update operations, indicates that the arguments are hashes of anchor
              certificates.

     --continue
              If the assessment of a file fails, continue assessing additional file arguments.
              Without this option, the first failed assessment terminates operation.

     --hash   In rule update operations, indicates that the arguments are code directory hashes.

     --ignore-cache
              Do not query or use the assessment object cache.  This may significantly slow down
              operation.  Newly generated assessments may still be stored in the cache.

     --label label
              Specifies a string label to attach to new rules, or find in existing rules.  Labels are
              arbitrary strings that are assigned by convention.  Rule labels are optional.

     --no-cache
              Do not place the outcome of any assessments into the assessment object cache.  No other
              assessment may reuse this outcome.  This option not prohibit the use of existing cache
              entries.

     --path   In rule update operations, indicates that the argument(s) denote paths to files on disk.

     --priority priority
              In rule update operations, specifies the priority of the rule(s) created or changed.
              Priorities are floating-point numbers.  Higher numeric values indicate higher priority.

     --raw    When displaying the outcome of an assessment, write it as a "raw" XML plist instead of
              parsing it in somewhat more friendly form.  This is useful when used in scripts, or to
              access newly invented assessment aspects that spctl does not yet know about.

     --requirement
              In rule update operations, indicates that the argument(s) are code requirement source.

     --reset-default
              Unconditionally reset the system policy database to its default value. This discards all
              changes made by administrators. It also heals any corruption to the database. It does
              not implicitly either enable or disable the facility. This must be done as the super
              user. Reboot after use.

     --rule   In rule update operations, indicates that the argument(s) are the index numbers of
              existing rules.

     -t, --type
              Specify which type of assessment is desired: execute to assess code execution, install
              to assess installation of an installer package, and open to assess the opening of
              documents.  The default is to assess execution.

     -v, --verbose
              Requests more verbose output.  Repeat the option or give it a higher numeric value to
              increase verbosity.

RULE SUBJECTS
     The system assessement rule database contains entries that match candidates based on Code
     Requirements.  spctl allows you to specify these requirements directly using the --requirement
     option.  In addition, individual programs on disk can be addressed with the --path option (which
     uses their Designated Requirement).  The --anchor option takes the hash of a (full) certificate
     and turns it into a requirement matching any signature based on that anchor certificate.
     Alternatively, it can take the absolute path of a certificate file on disk, containing the DER
     form of an anchor certificate.  Finally, the --hash option generates a code requirement that
     denotes only and exactly one program whose CodeDirectory hash is given.  The means of specifying
     subjects does not affect the remaining processing.

FILES
     /var/db/SystemPolicy  The system policy database.
     /var/db/.SystemPolicy-default
                           A copy of the initial distribution version of the system policy database.
                           Useful for starting over if the database gets messed up beyond recognition.

EXAMPLES
     To check whether Mail.app is allowed to run on the local system:
           spctl -a /Applications/Mail.app

     To allow Frobozz.app to run on the local system:
           spctl --add --label "My Stuff" /Applications/Frobozz.app

     To forbid all code obtained from the Mac App Store from running:
           spctl --disable --label "Mac App Store"

DIAGNOSTICS
     spctl exits zero on success, or one if an operation has failed.  Exit code two indicates
     unrecognized or unsuitable arguments.  If an assessment operation results in denial but no other
     problem has occurred, the exit code is three.

SEE ALSO
     codesign(1), syspolicyd(1)

HISTORY
     The system policy facility and spctl command first appeared in Mac OS X Lion 10.7.3 as a limited
     developer preview.


|

[locate]基本

/usr/bin/sudo /bin/launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
/usr/bin/sudo /bin/launchctl start -w /System/Library/LaunchDaemons/com.apple.locate.plist

/usr/bin/sudo /bin/launchctl stop -w /System/Library/LaunchDaemons/com.apple.locate.plist
/usr/bin/sudo /bin/launchctl unload -w /System/Library/LaunchDaemons/com.apple.locate.plist
/usr/bin/sudo /usr/libexec/locate.updatedb
/usr/bin/sudo /usr/libexec/locate.code
/usr/bin/locate -i png -d /var/db/locate.database
/usr/bin/sudo  /bin/rm -f /var/db/locate.database

|

[locationd]位置情報サービス

『自分がいる場所』なわけで
セキュリティと言うより、『プライバシー』の問題です。
そのため、セキュリティ設定的にはちょっと厳しめです。
『そこ』は留意して操作、設定しましょう

自分の位置情報が、何に対して『通知』されているのか?
定期的に確認すると良いでしょう。
(設定変更には管理者権限が必要なのもこんな意味からでしょう)

基本、アプリやサービスで位置情報が必要なのは
『マップ』『FindMyMac』
iOSデバイス(iPhoneやiPad)をお持ちの方は
『ショートカット』ぐらいかなぁ

細かい事言えば、海外行くなら、タイムゾーンも必要ですが
国内なら、切っておいてもさして問題はないです。


|

[locationd]全部停止

なぜか?
do shell scriptだと停止できない事もある
なんで?

ダウンロード - locationde585a8e983a8off.scpt.zip



#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
#
#
#
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
##自分環境がos12なので2.8にしているだけです
use AppleScript version "2.8"
use framework "Foundation"
use scripting additions
property aliasIconPath : ""
set theComandText to ("id -un") as text
set theUserName to (do shell script theComandText) as text
try
set objDialog to (display dialog "要管理者権限パスワード" default answer "" with title "このMacのログインパスワード" with hidden answer)
set theAdminPassWord to (text returned of objDialog) as text
on error
"パスワードを取得できませんでした"
return
end try
########################################################
set strCommandText to "date +%s"
set strDate to (do shell script strCommandText) as text
set strCommandText to "mkdir -pm 777 /tmp/" & strDate & ""
do shell script strCommandText
set strTmpPlist to "/tmp/" & strDate & "/clients.plist" as text
set strCommandText to "/usr/bin/sudo /usr/bin/ditto \"/var/db/locationd/clients.plist\" " & strTmpPlist & ""
do shell script strCommandText user name theUserName password theAdminPassWord with administrator privileges
set strCommandText to "/usr/bin/sudo /bin/chmod 777 " & strTmpPlist & ""
do shell script strCommandText user name theUserName password theAdminPassWord with administrator privileges
tell application "System Events"
tell contents of property list file strTmpPlist
set listDictKey to name of every property list item
end tell
end tell
repeat with objDictKey in listDictKey
set strDictKey to objDictKey as text
set strCommandText to "/usr/bin/sudo /usr/libexec/PlistBuddy -c \"Set :" & strDictKey & ":Authorized false\" \"/var/db/locationd/clients.plist\""
try
tell application "Terminal"
launch
activate
set objWindowID to (do script "\n\n")
delay 1
do script strCommandText in objWindowID
delay 2
do script theAdminPassWord in objWindowID
delay 1
do script "\n\n" in objWindowID
do script "exit" in objWindowID
delay 2
end tell
tell application "Terminal" to close (get window 1)
end try
end repeat
try
set strCommandText to "/usr/bin/sudo /usr/bin/killall locationd"
do shell script strCommandText user name theUserName password theAdminPassWord with administrator privileges
end try


|

[locationd]アプリ単体停止

これは、あまり意味ないかな

ダウンロード - locationde382a2e38395e3829ae383aaoff.scpt.zip



#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
#
#
#
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
##自分環境がos12なので2.8にしているだけです
use AppleScript version "2.8"
use framework "Foundation"
use scripting additions

property aliasIconPath : ""

set theComandText to ("id -un") as text
set theUserName to (do shell script theComandText) as text
try

set objDialog to (display dialog "要管理者権限パスワード" default answer "" with title "このMacのログインパスワード" with hidden answer)

set theAdminPassWord to (text returned of objDialog) as text
on error
"パスワードを取得できませんでした"
return
end try
########################################################


set aliasFile to (choose file with prompt "アプリケーションを選んでください" default location (path to applications folder from user domain) of type {"com.apple.application-bundle"} with invisibles without showing package contents and multiple selections allowed) as alias

try
on error
log "エラーしました"
return
end try
if aliasFile is false then
return
end if

tell application "Finder"
set theAppPath to (POSIX path of aliasFile) as text
set theInfoPath to ("" & theAppPath & "Contents/Info.plist") as text
set objInfo to info for aliasFile
set theName to name of objInfo as text
set theUTI to bundle identifier of objInfo as text
end tell

try
set strCommandText to "/usr/bin/sudo /usr/libexec/PlistBuddy -c \"Set :" & theUTI & ":Authorized false\" \"/var/db/locationd/clients.plist\""
do shell script strCommandText user name theUserName password theAdminPassWord with administrator privileges
end try

try
set strCommandText to "/usr/bin/sudo /usr/bin/killall locationd"
do shell script strCommandText user name theUserName password theAdminPassWord with administrator privileges
end try


|

[locationd]位置情報サービスの設定(システムサービス詳細)

システムサービスで位置情報の取得を許可

HOMEKIT OFF
/usr/bin/sudo /usr/libexec/PlistBuddy -c "Set :com.apple.locationd.bundle-/System/Library/PrivateFrameworks/HomeKitDaemon.framework:Authorized false" "/var/db/locationd/clients.plist"

位置情報に基づく検索候補 OFF
/usr/bin/sudo /usr/libexec/PlistBuddy -c "Set :com.apple.locationd.bundle-/System/Library/PrivateFrameworks/CoreParsec.framework:Authorized false" "/var/db/locationd/clients.plist"

利用頻度の高い場所 OFF
/usr/bin/sudo /usr/libexec/PlistBuddy -c "Set :com.apple.locationd.bundle-/System/Library/LocationBundles/Routine.bundle:Authorized false" "/var/db/locationd/clients.plist"

Macを探す OFF
/usr/bin/sudo /usr/libexec/PlistBuddy -c "Set :com.apple.locationd.bundle-/System/Library/PrivateFrameworks/FindMyDevice.framework:Authorized false" "/var/db/locationd/clients.plist"

時間帯とシステムのカスタマイズ OFF
/usr/bin/sudo /usr/libexec/PlistBuddy -c "Set :com.apple.locationd.bundle-/System/Library/LocationBundles/TimeZone.bundle:Authorized false" "/var/db/locationd/clients.plist"

位置情報に基づく通知-->集中モード(フォーカス) OFF
/usr/bin/sudo /usr/libexec/PlistBuddy -c "Set :com.apple.locationd.bundle-/System/Library/LocationBundles/DoNotDisturb.bundle:Authorized false" "/var/db/locationd/clients.plist"

ネットワークとワイヤレス OFF
/usr/bin/sudo /usr/libexec/PlistBuddy -c "Set :com.apple.locationd.bundle-/System/Library/Frameworks/CoreWLAN.framework:Authorized false" "/var/db/locationd/clients.plist"

エラーする場合(値が無い時がある)はAddする
ネットワークとワイヤレス
/usr/bin/sudo /usr/libexec/PlistBuddy -c "Add :com.apple.locationd.bundle-/System/Library/Frameworks/CoreWLAN.framework:Authorized false" "/var/db/locationd/clients.plist"

|

[locationd]位置情報サービスの設定

20220405224825_1280x784
セキュリティ設定の中で『位置情報』だけは、TCC.db外で設定されています。

/var/db/locationd/clients.plist

1:一覧出力
2:無効化
3:有効化
4:削除
5:変更内容を適用



1:一覧出力

sh-3.2$ 

sh-3.2$ /usr/bin/sudo  /usr/bin/defaults read "/var/db/locationd/clients.plist"

{

    "com.apple.amsaccountsd" =     {

        BundleId = "com.apple.amsaccountsd";

        Registered = "";

        Requirement = "identifier \\"com.apple.amsaccountsd\\" and anchor apple";

    };

    "com.apple.assistantd" =     {

        BundleId = "com.apple.assistantd";

        Registered = "";

        Requirement = "identifier \\"com.apple.assistantd\\" and anchor apple";




2:無効化

 "com.google.Chrome" =     {

        Authorized = 1;

        BundleId = "com.google.Chrome";

        Registered = "";

        Requirement = "(identifier \\"com.google.Chrome\\" or identifier \\"com.google.Chrome.beta\\" or identifier \\"com.google.Chrome.dev\\" or identifier \\"com.google.Chrome.canary\\") and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = EQHXZ8M8AV";

    };

}

sh-3.2$ /usr/bin/sudo /usr/libexec/PlistBuddy -c "Set :com.google.Chrome:Authorized  false" "/var/db/locationd/clients.plist"

sh-3.2$ 

sh-3.2$ /usr/bin/sudo /usr/libexec/PlistBuddy -c "print :com.google.Chrome:Authorized" "/var/db/locationd/clients.plist"

false

sh-3.2$ 




3:有効化

sh-3.2$ /usr/bin/sudo /usr/libexec/PlistBuddy -c "print :com.google.Chrome:Authorized" "/var/db/locationd/clients.plist"

false

sh-3.2$ 

sh-3.2$ /usr/bin/sudo /usr/libexec/PlistBuddy -c "Set :com.google.Chrome:Authorized  true" "/var/db/locationd/clients.plist"

sh-3.2$ 

sh-3.2$ /usr/bin/sudo /usr/libexec/PlistBuddy -c "print :com.google.Chrome:Authorized" "/var/db/locationd/clients.plist"

true

sh-3.2$ 




4:削除

sh-3.2$ /usr/bin/sudo /usr/bin/defaults delete "/var/db/locationd/clients.plist" com.google.Chrome

sh-3.2$ 

sh-3.2$ 

sh-3.2$ /usr/bin/sudo /usr/bin/defaults delete "/var/db/locationd/clients.plist" com.google.Chrome

2022-04-05 23:06:23.907 defaults[4975:98590] 

Domain (/var/db/locationd/clients.plist) not found.

Defaults have not been changed.

sh-3.2$ 



5:変更内容を適用
-->TCCの他の操作と違ってデーモンの再起動が必須

sh-3.2$ 

sh-3.2$ /usr/bin/sudo /usr/bin/killall locationd 

sh-3.2$ 

sh-3.2$ 


|

その他のカテゴリー

Acrobat Acrobat Annotation Acrobat Dialog Acrobat Form Acrobat JS Acrobat Open Acrobat Plugin Acrobat python Acrobat Reader Acrobat Sequ Acrobat Stamps Admin Admin Account Admin Apachectl Admin configCode Admin Device Management Admin LaunchServices Admin Locationd Admin loginitem Admin Maintenance Admin Permission Admin Pkg Admin Power Management Admin Printer Admin SetUp Admin SMB Admin System Information Admin Tools Admin Users Admin Volumes Adobe Apple AppleScript AppleScript Guide AppleScript Accessibility AppleScript AppKit AppleScript Applications AppleScript AppStore AppleScript Archive AppleScript Attributes AppleScript Automator AppleScript AVAsset AppleScript AVconvert AppleScript AVFoundation AppleScript AVURLAsset AppleScript BackUp AppleScript Barcode AppleScript Bash AppleScript Basic AppleScript Basic Path AppleScript Bluetooth AppleScript BOX AppleScript Browser AppleScript Calendar AppleScript CD/DVD AppleScript Choose AppleScript Chrome AppleScript CIImage AppleScript CloudStorage AppleScript Color AppleScript com.apple.LaunchServices.OpenWith AppleScript Console AppleScript Contacts AppleScript CotEditor AppleScript CURL AppleScript current application AppleScript Date&Time AppleScript delimiters AppleScript Desktop AppleScript Device AppleScript Disk AppleScript do shell script AppleScript Dock AppleScript DropBox AppleScript eMail AppleScript Encode Decode AppleScript Error AppleScript EXIFData AppleScript ffmpeg AppleScript File AppleScript Finder AppleScript Firefox AppleScript Folder AppleScript Fonts AppleScript GIF AppleScript HTML AppleScript Icon AppleScript Illustrator AppleScript Image Events AppleScript Image2PDF AppleScript ImageOptim Applescript iWork AppleScript Javascript AppleScript Jedit AppleScript Json AppleScript Label AppleScript List AppleScript locationd AppleScript LRC AppleScript LSSharedFileList AppleScript m3u8 AppleScript MakePDF AppleScript Map AppleScript Math AppleScript Microsoft AppleScript Microsoft Edge AppleScript Microsoft Excel AppleScript Mobileconfig AppleScript Mouse AppleScript Movie AppleScript Music AppleScript NetWork AppleScript Notes AppleScript NSArray AppleScript NSBitmapImageRep AppleScript NSBundle AppleScript NSCFBoolean AppleScript NSCharacterSet AppleScript NSColor AppleScript NSColorList AppleScript NSData AppleScript NSDictionary AppleScript NSError AppleScript NSEvent AppleScript NSFileAttributes AppleScript NSFileManager AppleScript NSFont AppleScript NSFontManager AppleScript NSImage AppleScript NSIndex AppleScript NSKeyedArchiver AppleScript NSKeyedUnarchiver AppleScript NSLocale AppleScript NSMutableArray AppleScript NSMutableDictionary AppleScript NSMutableString AppleScript NSNotFound AppleScript NSNumber AppleScript NSOpenPanel AppleScript NSPasteboard AppleScript NSPDFImageRep AppleScript NSpoint AppleScript NSPredicate AppleScript NSRange AppleScript NSRegularExpression AppleScript NSRunningApplication AppleScript NSScreen AppleScript NSSize AppleScript NSString AppleScript NSStringCompareOptions AppleScript NSTask AppleScript NSTimeZone AppleScript NSURL AppleScript NSURL File AppleScript NSURLBookmark AppleScript NSURLComponents AppleScript NSURLResourceKey AppleScript NSUserDefaults AppleScript NSUUID AppleScript NSView AppleScript NSWorkspace AppleScript Numbers AppleScript OAuth AppleScript ObjC AppleScript OneDrive AppleScript Osax AppleScript PDF AppleScript PDFAnnotationWidget AppleScript PDFContext AppleScript PDFDisplayBox AppleScript PDFDocumentPermissions AppleScript PDFKit AppleScript PDFnUP AppleScript PDFOutline AppleScript Photos AppleScript Photoshop AppleScript Plist System Events AppleScript PostScript AppleScript prefPane AppleScript Preview AppleScript Python AppleScript QR AppleScript QR Decode AppleScript QuickLook AppleScript QuickTime AppleScript record AppleScript Regular Expression AppleScript Reminders AppleScript ReName AppleScript Repeat AppleScript RTF AppleScript Safari AppleScript SaveFile AppleScript ScreenCapture AppleScript ScreenSaver AppleScript Script Editor AppleScript Script Menu AppleScript Shortcuts AppleScript Shortcuts Events AppleScript Sort AppleScript Sound AppleScript Spotlight AppleScript SRT AppleScript StandardAdditions AppleScript stringByApplyingTransform AppleScript System Events AppleScript System Settings AppleScript TemporaryItems AppleScript Terminal AppleScript Text AppleScript Text CSV AppleScript Text TSV AppleScript TextEdit AppleScript Translate AppleScript Trash AppleScript Twitter AppleScript UI AppleScript Unit Conversion AppleScript UTType AppleScript valueForKeyPath AppleScript Video AppleScript VisionKit AppleScript Visual Studio Code AppleScript webarchive AppleScript webp AppleScript Wifi AppleScript XML AppleScript XML EPUB AppleScript XML OPML AppleScript XML Plist AppleScript XML RSS AppleScript XML SVG AppleScript XML TTML AppleScript XML webloc AppleScript YouTube AppleScript Zero Suppress Applications Barcode OnLine Tools CityCode Design iPhone List Logs lsappinfo Memo Music perl PlistBuddy pluginkit postalcode ReadMe SF Symbols character id SF Symbols Entity sips Skype Slack sqlite TCC Tools Typography Video Wacom zoom