AppleScript Mobileconfig

[mobileconfig]バージョンを日付番号にして更新する(説明付与するようにした)


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

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
# UUIDに変更がないため『更新』となります
# 更新=旧設定から新しいファイルに指示されている設定に上書きされます
# v2 説明欄にバージョンとUUIDを表示するように変更した
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use scripting additions

property refMe : a reference to current application


on run
  set aliasDefaultLocation to (path to desktop from user domain) as alias
  set listUTI to {"com.apple.mobileconfig"} as list
  set strPromptText to "ファイルをえらんでください" as text
  set strMesText to "ファイルをえらんでください" as text
  try
    set listFilePath to (choose file strMesText with prompt strPromptText default location aliasDefaultLocation of type listUTI with invisibles and multiple selections allowed without showing package contents) as list
  on error
log "エラーしました"
return "エラーしました"
  end try
open listFilePath
end run


on open listFilePath
  set strDateno to doGetDateNo("yyyyMMdd")
  set ocidVerSionNo to (refMe's NSNumber's numberWithInteger:strDateno)'s intValue
  
log strDateno
  repeat with itemFilePath in listFilePath
    set aliasFilePath to itemFilePath as alias
    set strFilePath to (POSIX path of aliasFilePath) as text
    set ocidFilePathStr to (refMe's NSString's stringWithString:strFilePath)
    set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
    set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:ocidFilePath isDirectory:false)
    ##############################################
    ## 本処理 ROOT 項目
    ##############################################
    set ocidPlistDict to (refMe's NSMutableDictionary's alloc()'s initWithCapacity:0)
    set listReadPlistData to (refMe's NSMutableDictionary's dictionaryWithContentsOfURL:ocidFilePathURL |error|:(reference))
    set ocidReadDict to (item 1 of listReadPlistData)
(ocidPlistDict's setDictionary:ocidReadDict)
    set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
log "現在のバージョン:" & numVerSion
    ###変更
(ocidPlistDict's setValue:ocidVerSionNo forKey:"PayloadVersion")
    set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
log "変更後のバージョン:" & numVerSion
    ################################
    #PayloadDescription
    set strPayloadUUID to (ocidPlistDict's valueForKey:"PayloadUUID") as text
    set strPayloadDisplayName to (ocidPlistDict's valueForKey:"PayloadDisplayName") as text
    set strPayloadDescription to (strPayloadDisplayName & "\nVersion: " & numVerSion & "\nUUID: " & strPayloadUUID & "") as text
(ocidPlistDict's setValue:(strPayloadDescription) forKey:("PayloadDescription"))
    
    ##############################################
    ## 本処理 PayloadContent
    ##############################################
    set ocidPayloadContentArray to (ocidPlistDict's objectForKey:"PayloadContent")
    repeat with itemPayloadContentArray in ocidPayloadContentArray
      set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
log "現在のバージョン:" & numVerSion
      ###変更
(itemPayloadContentArray's setValue:ocidVerSionNo forKey:"PayloadVersion")
      set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
log "変更後のバージョン:" & numVerSion
    end repeat
    ##############################################
    ## 保存
    ##############################################
    set ocidPlistType to refMe's NSPropertyListXMLFormat_v1_0
    set listPlistEditDataArray to (refMe's NSPropertyListSerialization's dataWithPropertyList:ocidPlistDict format:ocidPlistType options:0 |error|:(reference))
    set ocidPlisSaveData to item 1 of listPlistEditDataArray
    set boolSaveDone to (ocidPlisSaveData's writeToURL:ocidFilePathURL options:(refMe's NSDataWritingAtomic) |error|:(reference))
log boolSaveDone as list
  end repeat
  
end open




to doGetDateNo(strDateFormat)
  ####日付情報の取得
  set ocidDate to current application's NSDate's |date|()
  ###日付のフォーマットを定義
  set ocidNSDateFormatter to current application's NSDateFormatter's alloc()'s init()
ocidNSDateFormatter's setLocale:(current application's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX")
ocidNSDateFormatter's setDateFormat:strDateFormat
  set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:ocidDate
  set strDateAndTime to ocidDateAndTime as text
return strDateAndTime
end doGetDateNo

|

[mobileconfig]ツール類

mobileconfig関連
【1】Apple Configurator
【2】Xcode
【3】iMazing Profile Editor
【4】Visual Studio Code + XML系の拡張機能

パッケージ関連
【5】Jamf Composer
【6】Payload-Free-Package-Creator

お助けツール
【7】[workflow] mobileconfigをシステム設定のパネルで開く
【7】[mobileconfig]plist→←mobileconfig相互リネーム
【7】[mobileconfig]プロファイル・システム設定を開く OPENコマンド版
【7】[mobileconfig]プロファイル・システム設定を開く NSWorkspace版
【7】[profiles]現在のユーザー・プロファイル設定をバックアップ
【7】[mobileconfig]インストールサポート(ファイル選択 OPENコマンド版)
【7】[mobileconfig]インストールサポート(ファイル選択 NSWorkspaceコマンド版)
【7】[mobileconfig]mobileconfigをダウンロードしてインストール(エラー制御あり)
【7】[mobileconfig]mobileconfigをダウンロードしてインストール
【7】[mobileconfig]ファイルの関連付けをデフォルトのプロファイルインストーラに戻す
【7】[bash]mobileconfigプロファイルをシステム設定で開く
【7】[mobileconfig]バージョンを今日の日付にする
【7】[mobileconfig]PayloadUUIDを新しくする
【7】[mobileconfig]PayloadUUIDとバージョンを新しくする
【7】[mobileconfig]明日には削除する設定

【8】ワンポイント
【8】[mobileconfig]mobileconfig内でのコメントの処理

【1】Apple Configurator
Screen-20231030-174422 https://apps.apple.com/jp/app/apple-configurator/id1037126344?mt=12
【2】Xcode
Screen-20231030-174326
https://apps.apple.com/jp/app/xcode/id497799835?mt=12

【3】iMazing Profile Editor
Screen-20231030-173834
https://imazing.com/de/profile-editor
Screen-20231030-173734
https://apps.apple.com/jp/app/imazing-profile-editor/id1487860882?mt=12

【4】Visual Studio Code + XML系の拡張機能
Screen-20231030-173943
https://code.visualstudio.com/
【4−1】PLIST系の拡張機能
Screen-20231030-174234
https://marketplace.visualstudio.com/items?itemName=dnicolson.binary-plist
【4−2】XML系の拡張機能
Screen-20231030-174137
https://marketplace.visualstudio.com/items?itemName=redhat.vscode-xml

【5】Jamf Composer
Screen-20231030-175034 https://learn.jamf.com/ja-JP/bundle/composer-user-guide-current/page/Composer_Overview.html
パッケージを作る
https://learn.jamf.com/bundle/jamf-now-documentation/page/Building_and_Signing_Mac_Packages.html

【6】Payload-Free-Package-Creator
Screen-20231030-174831 https://github.com/rtrouton/Payload-Free-Package-Creator

【7】[workflow] mobileconfigをシステム設定のパネルで開く
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-11da8e.html
【7】[mobileconfig]plist→←mobileconfig相互リネーム
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-411671.html
【7】[mobileconfig]プロファイル・システム設定を開く OPENコマンド版
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-bca671.html
【7】[mobileconfig]プロファイル・システム設定を開く NSWorkspace版
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-c74956.html
【7】[profiles]現在のユーザー・プロファイル設定をバックアップ
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-3cf2dd.html
【7】[mobileconfig]インストールサポート(ファイル選択 OPENコマンド版)
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-9b4c6d.html
【7】[mobileconfig]インストールサポート(ファイル選択 NSWorkspace版)
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-39937d.html
【7】[mobileconfig]mobileconfigをダウンロードしてインストール(エラー制御あり)
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-fa6466.html
【7】[mobileconfig]mobileconfigをダウンロードしてインストール
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-edcf6b.html
【7】[mobileconfig]ファイルの関連付けをデフォルトのプロファイルインストーラに戻す
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-cf5402.html
【7】[bash]mobileconfigプロファイルをシステム設定で開く
https://quicktimer.cocolog-nifty.com/icefloe/2023/11/post-4c8484.html
【7】[mobileconfig]バージョンを今日の日付にする
https://quicktimer.cocolog-nifty.com/icefloe/2023/11/post-ebbf78.html
【7】[mobileconfig]PayloadUUIDを新しくする
https://quicktimer.cocolog-nifty.com/icefloe/2023/11/post-46986c.html
【7】[mobileconfig]PayloadUUIDとバージョンを新しくする
https://quicktimer.cocolog-nifty.com/icefloe/2023/11/post-c77671.html
【7】[mobileconfig]明日には削除する設定
https://quicktimer.cocolog-nifty.com/icefloe/2023/11/post-61feb6.html

【8】ワンポイント
【8】[mobileconfig]mobileconfig内でのコメントの処理
https://quicktimer.cocolog-nifty.com/icefloe/2023/10/post-58c421.html

|

[mobileconfig]明日には削除する設定


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

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
(*
UUIDが違うと、同じ設定内容でも『別』となります
UUID変更時は古い設定を削除してから
*)
#
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
use scripting additions
property refMe : a reference to current application


#####設定項目 会社名や組織名でOK
property strOrganization : ("com.cocolog-nifty.quicktimer") as text
property strPayloadScopeType : ("User") as text

on run
  set aliasDefaultLocation to (path to desktop from user domain) as alias
  set listUTI to {"com.apple.mobileconfig"} as list
  set strPromptText to "ファイルをえらんでください" as text
  set strMesText to "ファイルをえらんでください" as text
  try
    set listFilePath to (choose file strMesText with prompt strPromptText default location aliasDefaultLocation of type listUTI with invisibles and multiple selections allowed without showing package contents) as list
  on error
    log "エラーしました"
return "エラーしました"
  end try
open listFilePath
end run


on open listFilePath
  set strDateno to doGetDateNo("yyyyMMdd")
  set ocidVerSionNo to (refMe's NSNumber's numberWithInteger:strDateno)'s intValue
  
  log strDateno
  repeat with itemFilePath in listFilePath
    set aliasFilePath to itemFilePath as alias
    set strFilePath to (POSIX path of aliasFilePath) as text
    set ocidFilePathStr to (refMe's NSString's stringWithString:strFilePath)
    set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
    set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:ocidFilePath isDirectory:false)
    ##############################################
    ## 本処理 ROOT 項目
    ##############################################
    set ocidPlistDict to (refMe's NSMutableDictionary's alloc()'s initWithCapacity:0)
    set listReadPlistData to (refMe's NSMutableDictionary's dictionaryWithContentsOfURL:ocidFilePathURL |error|:(reference))
    set ocidReadDict to (item 1 of listReadPlistData)
(ocidPlistDict's setDictionary:ocidReadDict)
    ####PayloadVersionは現在の日付に
    set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
    log "現在のバージョン:" & numVerSion
    ###変更
(ocidPlistDict's setValue:ocidVerSionNo forKey:"PayloadVersion")
    set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
    log "変更後のバージョン:" & numVerSion
    ###
    ####PayloadOrganization 現在のタイプを取得して
    set strPayloadOrganization to (ocidPlistDict's valueForKey:"PayloadOrganization") as text
    ###未設定なら設定する
    if strPayloadOrganization is "missing value" then
(ocidPlistDict's setValue:(strOrganization) forKey:("PayloadOrganization"))
      set strPayloadOrganization to strOrganization
    end if
    ###UUID生成
    set ocidUUID to refMe's NSUUID's alloc()'s init()
    set strUUID to ocidUUID's UUIDString as text
    ###PayloadUUIDにセット
(ocidPlistDict's setValue:(strUUID) forKey:("PayloadUUID"))
    ###組織名+UUIDを
    set strPayloadIdentifier to (strOrganization & "." & strUUID) as text
    ###PayloadIdentifierにセット
(ocidPlistDict's setValue:(strPayloadIdentifier) forKey:("PayloadIdentifier"))
    ####PayloadOrganization 現在のタイプを取得して
    set strPayloadOrganization to (ocidPlistDict's valueForKey:"PayloadOrganization") as text
    ###未設定なら設定する
    if strPayloadOrganization is "missing value" then
(ocidPlistDict's setValue:(strOrganization) forKey:("PayloadOrganization"))
      set strPayloadOrganization to strOrganization
    end if
    ###ConsentText
    set strNextDate to doGetNextDateNo("yyyyMMdd") as text
    set ocidConsentTextDict to (refMe's NSMutableDictionary's alloc()'s initWithCapacity:0)
    set strValue to ("このプロファイルは" & strNextDate & "日に自動で削除されます") as text
(ocidConsentTextDict's setValue:(strValue) forKey:("default"))
    ####ConsentText現在を取得して
    set strConsentText to (ocidPlistDict's valueForKey:"ConsentText") as text
    ###未設定なら設定する
    if strConsentText is "missing value" then
(ocidPlistDict's setObject:(ocidConsentTextDict) forKey:("ConsentText"))
    end if
    ###TargetDeviceType 0はALL 1はiOS 5はmacOS
    set ocidTypeNo to (refMe's NSNumber's numberWithInteger:5)'s integerValue
(ocidPlistDict's setValue:(ocidTypeNo) forKey:("TargetDeviceType"))
    ####PayloadScope現在を取得して
    set strPayloadScope to (ocidPlistDict's valueForKey:"PayloadScope") as text
    ###未設定なら設定する
    if strPayloadScope is "missing value" then
(ocidPlistDict's setValue:(strPayloadScopeType) forKey:("PayloadScope"))
    end if
    ##############################
    ###PayloadRemovalDisallowedにセット
(ocidPlistDict's setValue:(refMe's NSNumber's numberWithBool:false) forKey:("PayloadRemovalDisallowed"))
    ###HasRemovalPasscodeにセット
(ocidPlistDict's setValue:(refMe's NSNumber's numberWithBool:false) forKey:("HasRemovalPasscode"))
    ###【A】RemovalDate 24時間の場合
    ## set strNextDate to doGetNextDateNo("yyyy-MM-dd'T'HH:mm:ss'Z'") as text
    ## set ocidNextDate to doGetNextDateComponents()
    ###【B】日付が変わったらの場合
    set strNextDate to doGetNextDateNo("yyyy-MM-dd") as text
    set strNextDate to (strNextDate & "T00:00:01Z")
    set ocidNextDateTime to doGetText2Date({strNextDate, "yyyy-MM-dd'T'HH:mm:ss'Z'"})
(ocidPlistDict's setObject:(ocidNextDateTime) forKey:("RemovalDate"))
    ##############################################
    ## 本処理 PayloadContent
    ##############################################
    set ocidPayloadContentArray to (ocidPlistDict's objectForKey:"PayloadContent")
    repeat with itemPayloadContentArray in ocidPayloadContentArray
      set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
      log "現在のバージョン:" & numVerSion
      ###変更
(itemPayloadContentArray's setValue:ocidVerSionNo forKey:"PayloadVersion")
      set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
      log "変更後のバージョン:" & numVerSion
      ####PayloadTypeを取得して
      set strPayloadType to (itemPayloadContentArray's valueForKey:"PayloadType") as text
      ###ディスクリプションにセット
(itemPayloadContentArray's setValue:(strPayloadType) forKey:("PayloadDescription"))
      ###UUID生成
      set ocidUUID to refMe's NSUUID's alloc()'s init()
      set strUUID to ocidUUID's UUIDString as text
      ###PayloadUUIDにセット
(itemPayloadContentArray's setValue:(strUUID) forKey:("PayloadUUID"))
      ###PayloadType+UUIDを
      set PayloadType to (strPayloadType & "." & strUUID) as text
      ###PayloadIdentifierにセット
(itemPayloadContentArray's setValue:(PayloadType) forKey:("PayloadIdentifier"))
      ####PayloadDescription 現在の内容を取得して
      set strPayloadDescription to (itemPayloadContentArray's valueForKey:"PayloadDescription") as text
      ###未設定なら設定する
      if strPayloadDescription is "missing value" then
(itemPayloadContentArray's setValue:(strPayloadType) forKey:("PayloadDescription"))
      end if
    end repeat
    ##############################################
    ## 保存
    ##############################################
    set ocidPlistType to refMe's NSPropertyListXMLFormat_v1_0
    set listPlistEditDataArray to (refMe's NSPropertyListSerialization's dataWithPropertyList:ocidPlistDict format:ocidPlistType options:0 |error|:(reference))
    set ocidPlisSaveData to item 1 of listPlistEditDataArray
    set boolSaveDone to (ocidPlisSaveData's writeToURL:ocidFilePathURL options:(refMe's NSDataWritingAtomic) |error|:(reference))
    log boolSaveDone as list
  end repeat
  
end open





##############################
### テキストから時間
##############################
to doGetText2Date({argDateText, argDateFormat})
  ###日付のフォーマットを定義
  set ocidNSDateFormatter to current application's NSDateFormatter's alloc()'s init()
ocidNSDateFormatter's setLocale:(current application's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX")
  set ocidTimeZone to refMe's NSTimeZone's alloc()'s initWithName:"Asia/Tokyo"
ocidNSDateFormatter's setTimeZone:(ocidTimeZone)
ocidNSDateFormatter's setDateFormat:(argDateFormat)
  set ocidDateAndTime to ocidNSDateFormatter's dateFromString:(argDateText)
return ocidDateAndTime
end doGetText2Date

##############################
### 今の日付日間 テキスト
##############################
to doGetDateNo(argDateFormat)
  ####日付情報の取得
  set ocidDate to current application's NSDate's |date|()
  ###日付のフォーマットを定義
  set ocidNSDateFormatter to current application's NSDateFormatter's alloc()'s init()
ocidNSDateFormatter's setLocale:(current application's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX")
  set ocidTimeZone to refMe's NSTimeZone's alloc()'s initWithName:"Asia/Tokyo"
ocidNSDateFormatter's setTimeZone:(ocidTimeZone)
ocidNSDateFormatter's setDateFormat:(argDateFormat)
  set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:ocidDate
  set strDateAndTime to ocidDateAndTime as text
return strDateAndTime
end doGetDateNo


##############################
### 明日の日付時間 テキスト
##############################
to doGetNextDateNo(argDateFormat)
  ####日付情報の取得
  set ocidNowDate to current application's NSDate's |date|()
  ####カレンダー初期化
  set ocidNowCalendar to refMe's NSCalendar's alloc()'s initWithCalendarIdentifier:(refMe's NSGregorianCalendar)
  ####日付時間コンポーネント
  set ocidDateComponent to refMe's NSDateComponents's alloc()'s init()
  ####1日足す
ocidDateComponent's setDay:(1)
  ####カレンダーオプション
  set ocidOption to (refMe's NSCalendarWrapComponents)
  ####今のカレンダーにコンポーネント分の値を追加する
  set ocidNextDate to ocidNowCalendar's dateByAddingComponents:ocidDateComponent toDate:(ocidNowDate) options:(ocidOption)
  #####テキスト出力
  ###日付のフォーマットを定義
  set ocidNSDateFormatter to refMe's NSDateFormatter's alloc()'s init()
ocidNSDateFormatter's setLocale:(refMe's NSLocale's localeWithLocaleIdentifier:"en_US_POSIX")
  set ocidTimeZone to refMe's NSTimeZone's alloc()'s initWithName:"Asia/Tokyo"
ocidNSDateFormatter's setTimeZone:(ocidTimeZone)
ocidNSDateFormatter's setDateFormat:(argDateFormat)
  set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:(ocidNextDate)
  set strDateAndTime to ocidDateAndTime as text
return strDateAndTime
end doGetNextDateNo

##############################
### 明日の日付時間 コンポーネント
##############################
to doGetNextDateComponents()
  ####日付情報の取得
  set ocidNowDate to current application's NSDate's |date|()
  ####カレンダー初期化
  set ocidNowCalendar to refMe's NSCalendar's alloc()'s initWithCalendarIdentifier:(refMe's NSGregorianCalendar)
  ####日付時間コンポーネント
  set ocidDateComponent to refMe's NSDateComponents's alloc()'s init()
  ####1日足す
ocidDateComponent's setDay:(1)
  ####カレンダーオプション
  set ocidOption to (refMe's NSCalendarWrapComponents)
  ####今のカレンダーにコンポーネント分の値を追加する
  set ocidNextDate to ocidNowCalendar's dateByAddingComponents:ocidDateComponent toDate:(ocidNowDate) options:(ocidOption)
end doGetNextDateComponents


|

[mobileconfig]PayloadUUIDとバージョンを新しくする


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

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
(*
UUIDが違うと、同じ設定内容でも『別』となります
UUID変更時は古い設定を削除してから
*)
#
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
use scripting additions
property refMe : a reference to current application


#####設定項目 会社名や組織名でOK
property strOrganization : ("com.cocolog-nifty.quicktimer") as text


on run
  set aliasDefaultLocation to (path to desktop from user domain) as alias
  set listUTI to {"com.apple.mobileconfig"} as list
  set strPromptText to "ファイルをえらんでください" as text
  set strMesText to "ファイルをえらんでください" as text
  try
    set listFilePath to (choose file strMesText with prompt strPromptText default location aliasDefaultLocation of type listUTI with invisibles and multiple selections allowed without showing package contents) as list
  on error
    log "エラーしました"
return "エラーしました"
  end try
open listFilePath
end run


on open listFilePath
  set strDateno to doGetDateNo("yyyyMMdd")
  set ocidVerSionNo to (refMe's NSNumber's numberWithInteger:strDateno)'s intValue
  
  log strDateno
  repeat with itemFilePath in listFilePath
    set aliasFilePath to itemFilePath as alias
    set strFilePath to (POSIX path of aliasFilePath) as text
    set ocidFilePathStr to (refMe's NSString's stringWithString:strFilePath)
    set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
    set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:ocidFilePath isDirectory:false)
    ##ファイル名
    set ocidFileName to ocidFilePathURL's lastPathComponent()
    ##拡張子を除いたbasename
    set ocidBaseFileName to ocidFileName's stringByDeletingPathExtension()
    ##############################################
    ## 本処理 ROOT 項目
    ##############################################
    set ocidPlistDict to (refMe's NSMutableDictionary's alloc()'s initWithCapacity:0)
    set listReadPlistData to (refMe's NSMutableDictionary's dictionaryWithContentsOfURL:ocidFilePathURL |error|:(reference))
    set ocidReadDict to (item 1 of listReadPlistData)
(ocidPlistDict's setDictionary:ocidReadDict)
    ####PayloadVersionは現在の日付に
    set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
    log "現在のバージョン:" & numVerSion
    ###変更
(ocidPlistDict's setValue:ocidVerSionNo forKey:"PayloadVersion")
    set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
    log "変更後のバージョン:" & numVerSion
    ###
    ####PayloadOrganization 現在のタイプを取得して
    # set strPayloadOrganization to (ocidPlistDict's valueForKey:"PayloadOrganization") as text
    ###未設定なら設定する
    # if strPayloadOrganization is "missing value" then
    # (ocidPlistDict's setValue:(strOrganization) forKey:("PayloadOrganization"))
    # set strPayloadOrganization to strOrganization
    # end if
    
    
    ##############################################
    ## 本処理 PayloadContent
    ##############################################
    set ocidPayloadContentArray to (ocidPlistDict's objectForKey:"PayloadContent")
    repeat with itemPayloadContentArray in ocidPayloadContentArray
      set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
      log "現在のバージョン:" & numVerSion
      ###変更
(itemPayloadContentArray's setValue:ocidVerSionNo forKey:"PayloadVersion")
      set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
      log "変更後のバージョン:" & numVerSion
      (*
PayloadContent Array内の PayloadIdentifierは
PayloadType . PayloadUUID にする
*)
      ####PayloadTypeを取得して
      set strPayloadType to (itemPayloadContentArray's valueForKey:"PayloadType") as text
      ###UUID生成
      set ocidUUID to refMe's NSUUID's alloc()'s init()
      set strUUID to ocidUUID's UUIDString as text
      ###PayloadUUIDにセット
(itemPayloadContentArray's setValue:(strUUID) forKey:("PayloadUUID"))
      ###PayloadType+UUIDを
      set PayloadType to (strPayloadType & "." & strUUID) as text
      ###PayloadIdentifierにセット
(itemPayloadContentArray's setValue:(PayloadType) forKey:("PayloadIdentifier"))
      ####PayloadDescription 現在の内容を取得して
      #set strPayloadDescription to (itemPayloadContentArray's valueForKey:"PayloadDescription") as text
      ###未設定なら設定する
      #if strPayloadDescription is "missing value" then
      # (itemPayloadContentArray's setValue:(strPayloadType) forKey:("PayloadDescription"))
      #end if
    end repeat
    
    ###UUID生成
    set ocidUUID to refMe's NSUUID's alloc()'s init()
    set strUUID to ocidUUID's UUIDString as text
    ###PayloadUUIDにセット
(ocidPlistDict's setValue:(strUUID) forKey:("PayloadUUID"))
    (*
ROOTのPayloadIdentifierは
コマンドライン
/usr/bin/profiles list の戻り値になるので
運用上『ファイル名』に紐づく(どの設定ファイルか?)がわかるようにする
ここでは、ファイル名 . UUID をPayloadIdentifierとして採用している
*)
    ##拡張子を除いたbasename をPayloadIdentifier
    set strBaseFileName to ocidBaseFileName as text
    set strPayloadIdentifier to (strBaseFileName & "." & strUUID) as text
    ###組織名+UUIDを PayloadIdentifier
    # set strPayloadIdentifier to (strPayloadType & "." & strUUID) as text
    ###PayloadType名+UUIDを PayloadIdentifier
    ###PayloadContentのArrayの最後に取得したstrPayloadTypeが入る
    # set strPayloadIdentifier to (strPayloadType & "." & strUUID) as text
    ###PayloadIdentifierにセット
(ocidPlistDict's setValue:(strPayloadIdentifier) forKey:("PayloadIdentifier"))
    ##############################################
    ## 保存
    ##############################################
    set ocidPlistType to refMe's NSPropertyListXMLFormat_v1_0
    set listPlistEditDataArray to (refMe's NSPropertyListSerialization's dataWithPropertyList:ocidPlistDict format:ocidPlistType options:0 |error|:(reference))
    set ocidPlisSaveData to item 1 of listPlistEditDataArray
    set boolSaveDone to (ocidPlisSaveData's writeToURL:ocidFilePathURL options:(refMe's NSDataWritingAtomic) |error|:(reference))
    log boolSaveDone as list
  end repeat
  
end open




to doGetDateNo(strDateFormat)
  ####日付情報の取得
  set ocidDate to current application's NSDate's |date|()
  ###日付のフォーマットを定義
  set ocidNSDateFormatter to current application's NSDateFormatter's alloc()'s init()
ocidNSDateFormatter's setLocale:(current application's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX")
ocidNSDateFormatter's setDateFormat:strDateFormat
  set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:ocidDate
  set strDateAndTime to ocidDateAndTime as text
return strDateAndTime
end doGetDateNo

|

[mobileconfig]PayloadUUIDを新しくする

PayloadUUIDとPayloadIdentifierのUUIDを新しくします
なので
『別』のプロファイルとなりますので
古いUUIDで登録されているプロファイルを削除しないと
同じ設定項目で別の設定内容のプロファイルになってしまいます
なので
明示的に『別』のプロファイルにしたい場合に使います

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

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
(*
UUIDが違うと、同じ設定内容でも『別』となります
UUID変更時は古い設定を削除してから
*)
#
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
use scripting additions
property refMe : a reference to current application


#####設定項目 会社名や組織名でOK
property strOrganization : ("com.cocolog-nifty.quicktimer") as text


on run
  set aliasDefaultLocation to (path to desktop from user domain) as alias
  set listUTI to {"com.apple.mobileconfig"} as list
  set strPromptText to "ファイルをえらんでください" as text
  set strMesText to "ファイルをえらんでください" as text
  try
    set listFilePath to (choose file strMesText with prompt strPromptText default location aliasDefaultLocation of type listUTI with invisibles and multiple selections allowed without showing package contents) as list
  on error
    log "エラーしました"
return "エラーしました"
  end try
open listFilePath
end run


on open listFilePath
  set strDateno to doGetDateNo("yyyyMMdd")
  set ocidVerSionNo to (refMe's NSNumber's numberWithInteger:strDateno)'s intValue
  
  log strDateno
  repeat with itemFilePath in listFilePath
    set aliasFilePath to itemFilePath as alias
    set strFilePath to (POSIX path of aliasFilePath) as text
    set ocidFilePathStr to (refMe's NSString's stringWithString:strFilePath)
    set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
    set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:ocidFilePath isDirectory:false)
    ##ファイル名
    set ocidFileName to ocidFilePathURL's lastPathComponent()
    ##拡張子を除いたbasename
    set ocidBaseFileName to ocidFileName's stringByDeletingPathExtension()
    ##############################################
    ## 本処理 ROOT 項目
    ##############################################
    set ocidPlistDict to (refMe's NSMutableDictionary's alloc()'s initWithCapacity:0)
    set listReadPlistData to (refMe's NSMutableDictionary's dictionaryWithContentsOfURL:ocidFilePathURL |error|:(reference))
    set ocidReadDict to (item 1 of listReadPlistData)
(ocidPlistDict's setDictionary:ocidReadDict)
    ####PayloadVersionは現在の日付に
    # set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
    # log "現在のバージョン:" & numVerSion
    ###変更
    # (ocidPlistDict's setValue:ocidVerSionNo forKey:"PayloadVersion")
    # set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
    # log "変更後のバージョン:" & numVerSion
    ###
    ####PayloadOrganization 現在のタイプを取得して
    # set strPayloadOrganization to (ocidPlistDict's valueForKey:"PayloadOrganization") as text
    ###未設定なら設定する
    # if strPayloadOrganization is "missing value" then
    # (ocidPlistDict's setValue:(strOrganization) forKey:("PayloadOrganization"))
    # set strPayloadOrganization to strOrganization
    # end if
    ####PayloadOrganization 現在のタイプを取得して
    # set strPayloadOrganization to (ocidPlistDict's valueForKey:"PayloadOrganization") as text
    ###未設定なら設定する
    # if strPayloadOrganization is "missing value" then
    # (ocidPlistDict's setValue:(strOrganization) forKey:("PayloadOrganization"))
    # set strPayloadOrganization to strOrganization
    # end if
    
    ##############################################
    ## 本処理 PayloadContent
    ##############################################
    set ocidPayloadContentArray to (ocidPlistDict's objectForKey:"PayloadContent")
    repeat with itemPayloadContentArray in ocidPayloadContentArray
      #set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
      #log "現在のバージョン:" & numVerSion
      ###変更
      #(itemPayloadContentArray's setValue:ocidVerSionNo forKey:"PayloadVersion")
      #set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
      #log "変更後のバージョン:" & numVerSion
      (*
PayloadContent Array内の PayloadIdentifierは
PayloadType . PayloadUUID にする
*)
      ####PayloadTypeを取得して
      set strPayloadType to (itemPayloadContentArray's valueForKey:"PayloadType") as text
      ###UUID生成
      set ocidUUID to refMe's NSUUID's alloc()'s init()
      set strUUID to ocidUUID's UUIDString as text
      ###PayloadUUIDにセット
(itemPayloadContentArray's setValue:(strUUID) forKey:("PayloadUUID"))
      ###PayloadType+UUIDを
      set PayloadType to (strPayloadType & "." & strUUID) as text
      ###PayloadIdentifierにセット
(itemPayloadContentArray's setValue:(PayloadType) forKey:("PayloadIdentifier"))
      ####PayloadDescription 現在の内容を取得して
      #set strPayloadDescription to (itemPayloadContentArray's valueForKey:"PayloadDescription") as text
      ###未設定なら設定する
      #if strPayloadDescription is "missing value" then
      # (itemPayloadContentArray's setValue:(strPayloadType) forKey:("PayloadDescription"))
      #end if
    end repeat
    
    ###UUID生成
    set ocidUUID to refMe's NSUUID's alloc()'s init()
    set strUUID to ocidUUID's UUIDString as text
    ###PayloadUUIDにセット
(ocidPlistDict's setValue:(strUUID) forKey:("PayloadUUID"))
    (*
ROOTのPayloadIdentifierは
コマンドライン
/usr/bin/profiles list の戻り値になるので
運用上『ファイル名』に紐づく(どの設定ファイルか?)がわかるようにする
ここでは、ファイル名 . UUID をPayloadIdentifierとして採用している
*)
    ##拡張子を除いたbasename をPayloadIdentifier
    set strBaseFileName to ocidBaseFileName as text
    set strPayloadIdentifier to (strBaseFileName & "." & strUUID) as text
    ###組織名+UUIDを PayloadIdentifier
    # set strPayloadIdentifier to (strPayloadType & "." & strUUID) as text
    ###PayloadType名+UUIDを PayloadIdentifier
    ###PayloadContentのArrayの最後に取得したstrPayloadTypeが入る
    # set strPayloadIdentifier to (strPayloadType & "." & strUUID) as text
    ###PayloadIdentifierにセット
(ocidPlistDict's setValue:(strPayloadIdentifier) forKey:("PayloadIdentifier"))
    ##############################################
    ## 保存
    ##############################################
    set ocidPlistType to refMe's NSPropertyListXMLFormat_v1_0
    set listPlistEditDataArray to (refMe's NSPropertyListSerialization's dataWithPropertyList:ocidPlistDict format:ocidPlistType options:0 |error|:(reference))
    set ocidPlisSaveData to item 1 of listPlistEditDataArray
    set boolSaveDone to (ocidPlisSaveData's writeToURL:ocidFilePathURL options:(refMe's NSDataWritingAtomic) |error|:(reference))
    log boolSaveDone as list
  end repeat
  
end open




to doGetDateNo(strDateFormat)
  ####日付情報の取得
  set ocidDate to current application's NSDate's |date|()
  ###日付のフォーマットを定義
  set ocidNSDateFormatter to current application's NSDateFormatter's alloc()'s init()
ocidNSDateFormatter's setLocale:(current application's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX")
ocidNSDateFormatter's setDateFormat:strDateFormat
  set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:ocidDate
  set strDateAndTime to ocidDateAndTime as text
return strDateAndTime
end doGetDateNo

|

[mobileconfig]バージョンを今日の日付にする

バージョンが変更になっても
UUIDとPayloadIdentifierが変わらなければ、値が違う『同じプロファイル』となって
設定内容等は『更新』になります

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

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
#
#
#
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use scripting additions

property refMe : a reference to current application


on run
  set aliasDefaultLocation to (path to desktop from user domain) as alias
  set listUTI to {"com.apple.mobileconfig"} as list
  set strPromptText to "ファイルをえらんでください" as text
  set strMesText to "ファイルをえらんでください" as text
  try
    set listFilePath to (choose file strMesText with prompt strPromptText default location aliasDefaultLocation of type listUTI with invisibles and multiple selections allowed without showing package contents) as list
  on error
    log "エラーしました"
return "エラーしました"
  end try
open listFilePath
end run


on open listFilePath
  set strDateno to doGetDateNo("yyyyMMdd")
  set ocidVerSionNo to (refMe's NSNumber's numberWithInteger:strDateno)'s intValue
  
  log strDateno
  repeat with itemFilePath in listFilePath
    set aliasFilePath to itemFilePath as alias
    set strFilePath to (POSIX path of aliasFilePath) as text
    set ocidFilePathStr to (refMe's NSString's stringWithString:strFilePath)
    set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
    set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:ocidFilePath isDirectory:false)
    ##############################################
    ## 本処理 ROOT 項目
    ##############################################
    set ocidPlistDict to (refMe's NSMutableDictionary's alloc()'s initWithCapacity:0)
    set listReadPlistData to (refMe's NSMutableDictionary's dictionaryWithContentsOfURL:ocidFilePathURL |error|:(reference))
    set ocidReadDict to (item 1 of listReadPlistData)
(ocidPlistDict's setDictionary:ocidReadDict)
    set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
    log "現在のバージョン:" & numVerSion
    ###変更
(ocidPlistDict's setValue:ocidVerSionNo forKey:"PayloadVersion")
    set numVerSion to (ocidPlistDict's valueForKey:"PayloadVersion") as integer
    log "変更後のバージョン:" & numVerSion
    ##############################################
    ## 本処理 PayloadContent
    ##############################################
    set ocidPayloadContentArray to (ocidPlistDict's objectForKey:"PayloadContent")
    repeat with itemPayloadContentArray in ocidPayloadContentArray
      set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
      log "現在のバージョン:" & numVerSion
      ###変更
(itemPayloadContentArray's setValue:ocidVerSionNo forKey:"PayloadVersion")
      set numVerSion to (itemPayloadContentArray's valueForKey:"PayloadVersion") as integer
      log "変更後のバージョン:" & numVerSion
    end repeat
    ##############################################
    ## 保存
    ##############################################
    set ocidPlistType to refMe's NSPropertyListXMLFormat_v1_0
    set listPlistEditDataArray to (refMe's NSPropertyListSerialization's dataWithPropertyList:ocidPlistDict format:ocidPlistType options:0 |error|:(reference))
    set ocidPlisSaveData to item 1 of listPlistEditDataArray
    set boolSaveDone to (ocidPlisSaveData's writeToURL:ocidFilePathURL options:(refMe's NSDataWritingAtomic) |error|:(reference))
    log boolSaveDone as list
  end repeat
  
end open




to doGetDateNo(strDateFormat)
  ####日付情報の取得
  set ocidDate to current application's NSDate's |date|()
  ###日付のフォーマットを定義
  set ocidNSDateFormatter to current application's NSDateFormatter's alloc()'s init()
ocidNSDateFormatter's setLocale:(current application's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX")
ocidNSDateFormatter's setDateFormat:strDateFormat
  set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:ocidDate
  set strDateAndTime to ocidDateAndTime as text
return strDateAndTime
end doGetDateNo

|

[bash]mobileconfigプロファイルをシステム設定で開く


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

#!/bin/bash
#com.cocolog-nifty.quicktimer.icefloe
#################################################
###設定項目 パス
STR_FILE_PATH="$HOME/Documents/Mobileconfig/com.microsoft.edgemac.ManagedFavorites.mobileconfig"

###########################
USER_WHOAMI=$(/usr/bin/whoami)
/bin/echo "実行ユーザー(whoami): $USER_WHOAMI"
### path to me
SCRIPT_PATH="${BASH_SOURCE[0]}"
/bin/echo "/usr/bin/sudo \"$SCRIPT_PATH\""
/bin/echo "↑を実行してください"
###実行しているユーザー名
CONSOLE_USER=$(/bin/echo "show State:/Users/ConsoleUser" | /usr/sbin/scutil | /usr/bin/awk '/Name :/ { print $3 }')
/bin/echo "コンソールユーザー(scutil): $CONSOLE_USER"
###########################
###バックアップ
/bin/mkdir -p "$HOME/Documents/Mobileconfig/Bakup"
STR_DATE=$(/bin/date +'%Y%m%d')
STR_SAVE_FILE_PATH="$HOME/Documents/Mobileconfig/Bakup/$STR_DATE"".plist"
/usr/bin/profiles show -user "$CONSOLE_USER" -type configuration -output "$STR_SAVE_FILE_PATH"
##システム設定でmobileconfigプロファイルを開きます
/usr/bin/open "$STR_FILE_PATH" | /usr/bin/open  "x-apple.systempreferences:com.apple.preferences.configurationprofiles"



exit


|

[mobileconfig]mobileconfig内でのコメントの処理

モバイルコンフィグだけではなくPLIT内のDICTは
キーの値の『A-Z』順にならんでいます

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

    <dict>
      <key>DisableAirDrop</key>
      <false/>
      <key>EnableODiskBrowsing</key>
      <true/>
      <key>PayloadDescription</key>
      <string>com.apple.NetworkBrowser</string>
      <key>PayloadDisplayName</key>
      <string>com.apple.NetworkBrowser</string>
      <key>PayloadIdentifier</key>
      <string>com.apple.NetworkBrowser.E84FC026-C834-4646-BE03-F1E972462FEA</string>
      <key>PayloadType</key>
      <string>com.apple.NetworkBrowser</string>
      <key>PayloadUUID</key>
      <string>E84FC026-C834-4646-BE03-F1E972462FEA</string>
      <key>PayloadVersion</key>
      <integer>20231028</integer>
    </dict>

なので
コメントは
キー名+任意の文字列をキーとしたstringの値で処理すると
APIやアプリケーションを通した時に並び順が変わりません。

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

      <key>DisableAirDrop</key>
      <false/>
      <key>DisableAirDrop_コメント</key>
      <string>エアドロップを禁止します</string>

|

[mobileconfig]ファイルの関連付けをデフォルトのプロファイルインストーラに戻す


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

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
# 他のスクリプトの流用なのでちょっと面倒な処理になっています
#com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
use scripting additions

property refMe : a reference to current application

###設定項目 ファイルタイプUTI
set strUTI to "com.apple.mobileconfig" as text

###UTTypに変換
set ocidUTType to refMe's UTType's typeWithIdentifier:(strUTI)
###ワークスペース初期化
set appShardWorkspace to refMe's NSWorkspace's sharedWorkspace()
###UTTypeタイプのデフォルトアプリケーション
set ocidAppPathURL to appShardWorkspace's URLsForApplicationsToOpenContentType:(ocidUTType)

################################################
###起動ボリュームにあるURLのみにする
###URL格納用の可変ARRAY
set ocidChooseArray to refMe's NSMutableArray's alloc()'s initWithCapacity:0
ocidChooseArray's setArray:ocidAppPathURL
###収集したURLの個数
set numCntArray to count of ocidAppPathURL
###収集したURLから外部ボリュームのものを削除
###起動ボリュームの名前
set strFilePath to "/System/Library/CoreServices/Finder.app" as text
set ocidFinderFilePathStr to refMe's NSString's stringWithString:(strFilePath)
set ocidFinderFilePath to ocidFinderFilePathStr's stringByStandardizingPath()
set ocidFinderFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFinderFilePath) isDirectory:false)
set listVolumeNameKey to (ocidFinderFilePathURL's getResourceValue:(reference) forKey:(refMe's NSURLVolumeNameKey) |error|:(reference))
set strVolumeName to (item 2 of listVolumeNameKey) as text
####収集したURLの数だけ繰り返し
repeat numCntArray times
  ###Arrayの削除なので後ろから処理
  set itemAppPathURL to ocidChooseArray's objectAtIndex:(numCntArray - 1)
  ###ボリューム名を取得して
  set listPathVolumeName to (itemAppPathURL's getResourceValue:(reference) forKey:(refMe's NSURLVolumeNameKey) |error|:(reference))
  set strPathVolumeName to (item 2 of listPathVolumeName) as text
  ###外部ボリュームのものは削除
  if strPathVolumeName is "Preboot" then
    log strPathVolumeName
  else if strPathVolumeName is not strVolumeName then
ocidChooseArray's removeObjectAtIndex:(numCntArray - 1)
  end if
  set numCntArray to numCntArray - 1
end repeat

set strOpenContentPath to (item 1 of ocidChooseArray)'s |path| as text

if strOpenContentPath contains "ProfileHelper.app" then
return "設定変更必要ありません"
end if

################################
##アプリケーションのURLを取得する
################################
set ocidAppPath to "/System/Library/CoreServices/ProfileHelper.app" as text
set ocidAppPathStr to refMe's NSString's stringWithString:(ocidAppPath)
set ocidAppPath to ocidAppPathStr's stringByStandardizingPath()
set ocidAppPathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidAppPath) isDirectory:false)

###選んだアプリケーションのバンドルID
set ocidAppBunndle to (refMe's NSBundle's bundleWithURL:(ocidAppPathURL))
set ocidBunndleID to ocidAppBunndle's bundleIdentifier
###IF用にテキストにしておく
set strBunndleID to ocidBunndleID as text
## com.apple.mcx.ProfileHelper
log strBunndleID

################################
##デフォルトに設定する
################################
set appShardWorkspace to refMe's NSWorkspace's sharedWorkspace()
appShardWorkspace's setDefaultApplicationAtURL:(ocidAppPathURL) toOpenContentType:(ocidUTType) completionHandler:(missing value)


################################
##設定後に 値の確定
################################

set strFilePath to "~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist"
set ocidFilePathStr to refMe's NSString's stringWithString:(strFilePath)
set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:false)
### PLISTを読み込む
set ocidPlistDict to refMe's NSMutableDictionary's alloc()'s initWithContentsOfURL:(ocidFilePathURL)
###LSHandlers Array
set ocidLSHandlersArray to ocidPlistDict's objectForKey:"LSHandlers"
###項目数の数だけ繰り返し
repeat with itemLSHandlers in ocidLSHandlersArray
  ###コンテンツタイプを取得して
  set ocidLSHandlerContentType to (itemLSHandlers's valueForKey:"LSHandlerContentType")
  ###設定項目のコンテンツタイプと同じなら
  set strLSHandlerContentType to ocidLSHandlerContentType as text
  if strLSHandlerContentType is strUTI then
    ###変更前の値
    set ocidRoleViewer to (itemLSHandlers's valueForKey:"LSHandlerRoleViewer")
    set ocidRoleAll to (itemLSHandlers's valueForKey:"LSHandlerRoleAll")
    set ocidRoleAll to (itemLSHandlers's valueForKey:"LSHandlerRoleEditor")
    set ocidRoleShell to (itemLSHandlers's valueForKey:"LSHandlerRoleShell")
    log ocidRoleViewer as text
    log ocidRoleAll as text
    log ocidRoleAll as text
    log ocidRoleShell as text
    ####値を変更する
(itemLSHandlers's setValue:(strBunndleID) forKey:"LSHandlerRoleViewer")
(itemLSHandlers's setValue:(strBunndleID) forKey:"LSHandlerRoleAll")
(itemLSHandlers's setValue:(strBunndleID) forKey:"LSHandlerRoleEditor")
(itemLSHandlers's setValue:(strBunndleID) forKey:"LSHandlerRoleShell")
    ####変更後の値
    log (itemLSHandlers's valueForKey:"LSHandlerRoleViewer") as text
    log (itemLSHandlers's valueForKey:"LSHandlerRoleAll") as text
    log (itemLSHandlers's valueForKey:"LSHandlerRoleEditor") as text
    log (itemLSHandlers's valueForKey:"LSHandlerRoleShell") as text
  end if
  
end repeat
###保存
set boolDone to ocidPlistDict's writeToURL:(ocidFilePathURL) atomically:true
log boolDone as boolean


#############################
###CFPreferencesを再起動
#############################
#####CFPreferencesを再起動させて変更後の値をロードさせる
set strCommandText to "/usr/bin/killall cfprefsd" as text
do shell script strCommandText


#############################
###LaunchServicesを再起動
#############################
####lsregister初期化
(*#色々やってみたが不具合の方が多いので停止
set strCommandText to "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -seed" as text
do shell script strCommandText
*)


|

[mobileconfig]mobileconfigをダウンロードしてインストール


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

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
# macOS14対応
# NSDATA 経由で NSPropertyListSerialization でDict変換して保存
# 保存先は $HOME/Documents/Mobileconfig
#登録はNSWorkspaceを利用
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
use framework "UniformTypeIdentifiers"
use scripting additions

property refMe : a reference to current application

###システム設定を一旦閉じる
tell application id "com.apple.systempreferences" to quit
########################
## クリップボードの中身取り出し
########################
###【1】URL
##クリップボードにテキストが無い場合
set strMes to "https://raw.githubusercontent.com/force4u/AppleScript/main/Script%20Menu/Applications/Script%20Editor/Script%20Menu/Mobileconfig/Mobileconfig/com.apple.scriptmenu.mobileconfig" as text
###初期化
set ocidPasteboard to refMe's NSPasteboard's generalPasteboard()
set ocidPastBoardTypeArray to ocidPasteboard's types
###テキストがあれば
set boolContain to ocidPastBoardTypeArray's containsObject:"public.utf8-plain-text"
if boolContain = true then
  ###値を格納する
  tell application "Finder"
    set strDefaultAnswer to (the clipboard as text) as text
  end tell
  ###Finderでエラーしたら
else
  set boolContain to ocidPastBoardTypeArray's containsObject:"NSStringPboardType"
  if boolContain = true then
    set ocidReadString to ocidPasteboard's readObjectsForClasses:({refMe's NSString}) options:(missing value)
    set strDefaultAnswer to ocidReadString as text
  else
    log "テキストなし"
    set strDefaultAnswer to strMes as text
  end if
end if
##############################
#####ダイアログ
##############################
##前面に出す
set strName to (name of current application) as text
if strName is "osascript" then
  tell application "Finder" to activate
else
  tell current application to activate
end if
###アイコンパス
set strDialogMes to "MobileconfigへのURLを入力してください"
set aliasIconPath to POSIX file "/System/Applications/Calculator.app/Contents/Resources/AppIcon.icns" as alias
try
  # set recordResult to (display dialog strDialogMes with title "入力してください" default answer strDefaultAnswer buttons {"OK", "キャンセル"} default button "OK" with icon aliasIconPath giving up after 10 without hidden answer) as record
  set recordResult to (display dialog strDialogMes with title "入力してください" default answer strMes buttons {"OK", "キャンセル"} default button "OK" with icon aliasIconPath giving up after 10 without hidden answer) as record
on error
  log "エラーしました"
return "キャンセル"
end try

if "OK" is equal to (button returned of recordResult) then
  set strFileURL to (text returned of recordResult) as text
else if (gave up of recordResult) is true then
return "時間切れです"
else
return "キャンセル"
end if
###パス
set ocidFileURLStr to refMe's NSString's stringWithString:(strFileURL)
set ocidFileURLStr to ocidFileURLStr's stringByRemovingPercentEncoding
set ocidFileURL to refMe's NSURL's URLWithString:(ocidFileURLStr)
#保存用にファイル名取っておく
set ocidFileName to ocidFileURL's lastPathComponent()
#%エンコードされたファイル名は戻しておく
set ocidSaveFileName to ocidFileName's stringByRemovingPercentEncoding
###【2】URL読み込み
#【2-1】NSdataに読み込む(エラー制御したいため-->いきなりNSMutableDictionaryでもOK)
set ocidOption to refMe's NSDataReadingMappedIfSafe
set listReadData to refMe's NSData's alloc()'s initWithContentsOfURL:(ocidFileURL) options:(ocidOption) |error|:(reference)
if (item 2 of listReadData) ≠ (missing value) then
return "コンテンツの収集に失敗しました エラー URL missing value"
else
  log "【2-1】" & (item 2 of listReadData)
  set ocidPlistData to (item 1 of listReadData)
end if

#【2-2】NSdataをNSPropertyListSerializationしてNSMutableDictionaryに格納する
set ocidXmlPlist to refMe's NSPropertyListXMLFormat_v1_0
set ocidPlistSerial to refMe's NSPropertyListSerialization
set ocidOption to refMe's NSPropertyListMutableContainersAndLeaves
set listPlistDict to ocidPlistSerial's propertyListWithData:(ocidPlistData) options:(ocidOption) format:(ocidXmlPlist) |error|:(reference)
set ocidPlistDict to (item 1 of listPlistDict)
###【3】値を変更したい場合はここで
#バージョンに日付を入れる
set strDateno to doGetDateNo("yyyyMMdd") as text
set numDateno to strDateno as integer
ocidPlistDict's setValue:(numDateno) forKey:("PayloadVersion")

###【4】ファイルの保存先(書類フォルダ)
###保存先ディレクトリ
set appFileManager to refMe's NSFileManager's defaultManager()
set ocidUserDocumentPathArray to (appFileManager's URLsForDirectory:(refMe's NSDocumentDirectory) inDomains:(refMe's NSUserDomainMask))
set ocidDocumentPathURL to ocidUserDocumentPathArray's firstObject()
#保存先ディレクトリを作る 700
set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
ocidAttrDict's setValue:(448) forKey:(refMe's NSFilePosixPermissions)
set ocidSaveDirPathURL to ocidDocumentPathURL's URLByAppendingPathComponent:("Mobileconfig") isDirectory:false
set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)
log "【4】" & (item 1 of listBoolMakeDir)
##保存ファイルのパス
set ocidSaveFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:(ocidSaveFileName)

###【5】保存
set boolDone to ocidPlistDict's writeToURL:(ocidSaveFilePathURL) atomically:true
log "【5】" & boolDone


###【6】登録実行
tell application "System Settings" to activate
--システム環境設定が開くのを待つ
repeat
  set doLaunchApp to get running of application "System Settings"
  if doLaunchApp is false then
    tell application "System Settings" to activate
    delay 0.5
  else
    exit repeat
  end if
end repeat
try
  set strCommandText to "open -b com.apple.systempreferences \"/System/Library/PreferencePanes/Profiles.prefPane\"" as text
  do shell script strCommandText
on error
  tell application id "com.apple.systempreferences"
    activate
reveal anchor "Main" of pane id "com.apple.Profiles-Settings.extension"
  end tell
end try
repeat 10 times
  tell application id "com.apple.systempreferences"
    activate
reveal anchor "Main" of pane id "com.apple.Profiles-Settings.extension"
    tell current pane
      set strPaneID to id as text
      properties
    end tell
  end tell
  if strPaneID is "com.apple.settings.PrivacySecurity.extension" then
    exit repeat
  else
    delay 0.5
  end if
end repeat

tell application "Finder"
  
  set strFilePath to ocidSaveFilePathURL's |path| as text
  
  set theCmdCom to ("open \"" & strFilePath & "\" | open \"x-apple.systempreferences:com.apple.preferences.configurationprofiles\"") as text
  do shell script theCmdCom
end tell

log "【6】Done"

###【7】保存ファイル表示
#選択状態で開く
set appShardWorkspace to refMe's NSWorkspace's sharedWorkspace()
set boolDone to appShardWorkspace's selectFile:(ocidSaveFilePathURL's |path|) inFileViewerRootedAtPath:(ocidDocumentPathURL's |path|)
log "【7】" & boolDone

###【8】システム設定を前面に
###システム設定を前面に
set ocidRunningApp to refMe's NSRunningApplication
set ocidAppArray to (ocidRunningApp's runningApplicationsWithBundleIdentifier:("com.apple.systempreferences"))
set ocidApp to ocidAppArray's firstObject()
ocidApp's activateWithOptions:(refMe's NSApplicationActivateAllWindows)
set boolDone to ocidApp's active
log "【8】" & boolDone

####日付情報の取得
to doGetDateNo(strDateFormat)
  set ocidDate to current application's NSDate's |date|()
  ###日付のフォーマットを定義
  set ocidNSDateFormatter to current application's NSDateFormatter's alloc()'s init()
ocidNSDateFormatter's setLocale:(current application's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX")
ocidNSDateFormatter's setDateFormat:strDateFormat
  set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:ocidDate
  set strDateAndTime to ocidDateAndTime as text
return strDateAndTime
end doGetDateNo

|

より以前の記事一覧

その他のカテゴリー

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