果醬同步
用於在資料夾、Jamf Pro 檔案共用分發點和 Jamf Pro JDCS2 分發點之間傳輸檔案以及更新 Jamf Pro 伺服器上的套件的實用程式。
指示
有關執行 Jamf Sync 的協助,請參閱 JamfSync/Resources/Jamf Sync User Guide.pdf,或在執行「Jamf Sync.app」時,按一下「說明」/「Jamf Sync 使用者指南」。
特徵
- 處理多個 Jamf Pro 伺服器,允許將套件從測試伺服器移至生產伺服器,反之亦然。
- 可以在 Cloud DP、檔案共用 DP 或本機資料夾之間複製檔案。
- 可以選擇從目標 DP 中刪除來源 DP 上不存在的檔案。
- 可以選擇刪除 Jamf Pro 伺服器上不在來源 DP 上的套件。
- 可以將本機資料夾視為分發點,允許上傳和下載多個套件。
- 處理自動為包建立校驗和。
- 命令列參數允許腳本同步。
描述
設定
- 新增 Jamf Pro 伺服器和/或資料夾。
- 資料夾被視為分發點,允許在其他分發點或資料夾之間進行同步。
- 當您按一下關閉時,如果進行了更改,它將聯繫每個 Jamf Pro 伺服器以獲取分發點,並使用它們來填充來源和目標選擇清單。
新增 Jamf Pro 伺服器
- 使用者可以提供 Jamf Pro 伺服器 URL 以及使用者 ID 和密碼或用戶端 ID 和用戶端密碼,具體取決於是否使用標準驗證或 OAuth(API 角色和用戶端)。
- 可以點擊「測試」按鈕來驗證 Jamf Pro 伺服器是否可以透過設定進行存取。
- 這將自動新增雲端 DP 伺服器以及 Jamf Pro 伺服器中的所有檔案共用 DP。
- 設定儲存在本地。 Jamf Pro 和檔案共用分發點的憑證將安全地儲存在鑰匙圈中。
新增本機資料夾
- 允許新增本機資料夾,該資料夾將作為來源或目標的選項呈現給使用者。資料夾被視為分發點,允許其他分發點或資料夾之間的同步。它將包含名稱和目錄位置。該名稱將預設為目錄名稱。
編輯
- 允許您編輯選定的任何項目。如果未選擇任何內容,則編輯按鈕將被停用。
刪除
- 允許您刪除選定的任何項目。刪除前會提示確認。如果未選擇任何內容,則刪除按鈕將被停用。
主視圖
- 在選擇來源和目標並且來源和目標不同之前,「同步」按鈕將呈現灰色顯示。這將從來源到目的地同步。
- 即使目標上的校驗和匹配,「強制同步」複選框也會導致複製所有來源項目。如果未選中,則僅同步新增或變更的項目。
- 有一個來源選擇器和目標選擇器,每個選擇器都包含所有資料夾和分發點的清單。最初選擇“--”,表示沒有選擇。
- 所選來源分發點上的檔案清單位於左側,目標分發點上的檔案清單位於右側。
- 當同時選擇來源和目標分發點時,「同步」列將顯示一個圖標,指示同步期間將發生的情況。當同步圖示有顏色時,表示將參與同步。如果是黑白的就不會了。如果要添加,則同步圖標將有一個+;如果要更新,則有一個複選標記;如果將從目標中刪除(如果他們在單擊“同步”後選擇這樣做),則有一個X;如果文件同時存在,則有一個=。
- 可以選擇來源清單中的項目。如果有選定的項目,則僅同步這些文件,並且不會從目標中刪除任何文件。如果未選擇任何文件,則按下「同步」按鈕時,系統將提示您是否刪除不在來源上的項目。如果您選擇“是”,則目標上顯示紅色 x 符號的任何檔案都將從 Jamf Pro 的目標和套件清單中刪除。
命令列參數
注意:首先執行不含參數的 JamfSync 以新增 Jamf Pro 伺服器和/或資料夾。 Jamf Pro 伺服器和分發點的密碼必須儲存在鑰匙圈中,以便透過命令列參數進行同步。
用法: JamfSync [(-s | --srcDp) ] [(-d | --dstDp) ] [(-f | --forceSync)] [(-r | --removeFilesNotOnSource)] [(-rp | --刪除PackagesNotOnSource)] [-p | --progress] JamfSync [-h | --progress] JamfSync --help] JamfSync [-v | --help] JamfSync - 版本]
-s --srcDp: The name of the source distribution point or folder.
-d --dstDp: The name of the destination distribution point or folder.
-f --forceSync: Force synchronization of all files even if they appear to match on both the source and destination.
-r --removeFilesNotOnSource: Delete files on the destination that are not on the source. No delete is done if ommitted.
-rp --removePackagesNotOnSource: Delete packages on the destination's Jamf Pro instance that are not on the source. No delete is done if ommitted.
-p --progress: Show the progress of files being copied.
-v --version: Display the version number and build number.
-h --help: Shows this help text.
注意:如果多個 Jamf Pro 實例上的散佈點名稱相同,請使用「dpName:jamfProName」作為名稱。
範例: "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -srcDp localSourceName -dstDp targetSourceName --removeFilesNotOnSource --progress "/Applications/Jamf Sync.app/Contents/MacOS/Jamn SynOS" :Stage" -d "JCDS:Prod" -r -rp -p "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -s localSourceName -d destinationSourceName
原始碼概述
原始碼位於幾個群組中。
- 模型包含與 UI 不直接相關的類別。
- Model 群組內部是 ViewModels,它與 UI 關係更密切,但與 UI 沒有明確的聯繫。通常,當視圖模型中的欄位發生變更時,關聯的 UI 將自動重新繪製。
- 資源包含程式使用的圖像和其他文件。
- UI 包含程式中顯示的所有視圖的 SwiftUI 文件,以及 JamfSyncApp(程式執行開始的地方)。
- 實用程式包含執行更一般任務的類別。
模型
模型組中的文件用於追蹤和處理所使用的資料。
資料模型:這代表了幾乎所有事物的狀態,並包含資料和作用於該資料的函數。它負責從核心儲存載入資料並載入分發點的資料。它已發布用於控制 UI 的變數。
SavableItem:可儲存的任何內容的基底類別(JamfProInstance 和FolderInstance)。這些項目儲存在核心資料中。只要使用者允許,密碼不會儲存在核心資料中,而是儲存在鑰匙圈中。 loadDps 函數由特定子類別重寫,負責載入與該項目關聯的所有分發點。 getDps 函數傳回與該項目相關的分發點。
- JamfProInstance - 這代表 Jamf Pro 實例,負責載入必要的資料並與 Jamf Pro API 進行通訊。它還為與 Jamf Pro 伺服器關聯的分發點創建並載入資料。它還從 Jamf Pro 伺服器載入和儲存包資訊。
- FolderInstance - 這代表電腦上的本機目錄。它創建一個單一FolderDp,在同步期間充當分發點。
DistributionPoint:所有DistributionPoint 物件(FileShareDp、Jcds2Dp 和FolderDp)的基底類別 copyFiles 函數是同步的主要函數。它呼叫由特定分發點物件覆蓋的其他函數。
- FileShareDp - 檔案共用分發點的特定分發點物件。
- Jcds2Dp - 雲端分發點的特定分發點物件。
- FolderDp - 資料夾分發點(表示本機資料夾)的特定分發點物件。
其他對象:
- DpFile - 儲存單一檔案的資訊。它還包含維護和比較其校驗和的函數。
- DpFiles - 儲存檔案列表。它具有幫助查找特定文件、更新文件的校驗和以及更新指示文件狀態的每個文件的狀態的功能。
- 校驗和 - 表示任何類型的校驗和(通常為 SHA-512)
- 校驗和 - 保存校驗和物件清單的對象,並具有可用於校驗和集合的函數。
視圖模型
ViewModels 群組中的檔案用於追蹤和處理所使用的資料。發布的變數將導致關聯的視圖重繪。 * LogViewModel - 用於日誌檢視和螢幕底部顯示的訊息。 * SetupViewModel - 用於設定視圖。 * PackageListViewModel - 用於主視圖上的來源檔案和目標檔案清單。 * DpFileViewModel - 用於 PackageListViewModel 中的每個檔案。它有一個指向特定 DpFile 實例的指針,並具有 UI 特定欄位。 * DpFilesViewModel - 具有 DpFileViewModel 物件數組,用於將檔案儲存在 PackageListViewModel 物件中。
使用者介面
UI 群組中的檔案是使用者介面的 SwiftUI 檔案。 DataModel 中的資料用於控制視圖。每當帶有 @Published 的屬性發生變更時,都會導致使用這些欄位的任何視圖重新繪製。
- AboutView:顯示版本和其他資訊的視圖。
- ChecksumView:顯示為檔案計算的校驗和,並在滑鼠懸停時顯示帶有實際校驗和的字串。
- ConfirmationView:用來確認各種事情的視圖
- ContentView:驅動一切的主視圖。
- FileSharePasswordView:用於在檔案共用密碼尚未儲存在鑰匙圈中時提示輸入檔案共用密碼。
- FolderView:新增或編輯資料夾時的視圖
- HeaderView:ContentView 的頂部,包含「同步」按鈕和「強制同步」複選框。
- JamfProPasswordView:當 Jamf Pro 密碼尚未儲存在鑰匙圈中時,用於提示輸入 Jamf Pro 密碼。
- JamfProServerView:新增或編輯 Jamf Pro 伺服器時的視圖
- JamfSyncApp:保存 ContentView 的主應用程式
- LogMessageView:在主視圖底部簡單顯示日誌訊息的視圖。
- LogView:顯示日誌訊息的視圖
- PackageAnimationView:同步期間顯示動畫的檢視。
- PackageListView:主視圖上包清單的檢視。
- SavableItemListView:「設定」視圖上的清單視圖
- SetupView:設定的主視圖
- SourceDestinationView:MainView 的一部分,包含來源和目標選擇器以及檔案清單。
- SynchronizationProgressView:顯示正在進行的同步進度的同步視圖。這也會在onAppear中啟動同步。
公用事業
實用程式群組中的檔案是用於處理資料的幫助程式類,與 UI 沒有直接連接。
- ArgumentParser:解析命令列參數(如果有)。
- CloudSessionDelegate:當檔案傳入和傳出雲端時,處理 URLSessionTaskDelegate 和 URLSessionDownloadDeleatedelegate 函數。
- FileHash:建立檔案哈希值。這是一個參與者類,因此函數一次只會處理一個文件,以防止衝突。
- 文件共享:處理文件共享的安裝和卸載。這是一個演員類,以避免衝突。
- FileShares:安裝共用或傳回已安裝的檔案共用。並卸載所有已安裝的檔案共用。這是一個演員類,以避免衝突。
- KeychainHelper:協助儲存和檢索鑰匙圈項目。
- View+NSWindow:用於將視圖顯示為其自己的視窗。
- UserSettings:讀取、儲存和追蹤寫入使用者設定的資料。
擴展 JamfSync 支援的分發點類型
新增直接雲端連線的分發點會很方便,例如 Rackspace、Amazon Web Services、Akamai。為了支援其中一項,需要執行以下操作:
- 建立一個繼承SavableItem(如FolderInstance)的對象,並為需要提供的每個資訊新增成員變數。
- 建立一個繼承自 DistributionPoint 的物件。有關此範例,請參閱 Jcds2Dp。請參閱FolderItem 以了解應如何建立和傳回它(如FolderDp 一樣)。
- 在 StoredSettings.xcdatamodeld 中建立一個實體並將父級設定為 SavableItemData。
- 修改SetupView以能夠建立、編輯和刪除新項目。
- 新增一個物件(例如 JamfProServerView),以便使用者可以輸入任何必要的資訊。
- 使用 KeychainHelper 將憑證儲存到鑰匙圈並根據需要新增其他服務名稱(如 fileShareServiceName)。
- 確保現有單元測試通過並添加其他單元測試以覆蓋您所做的更改。
尚需改進
- 如上所述,建立對其他雲端分發點(如 Rackspace、Amazon Web Services、Akamai)的支援。
- 取消動作需要改進。對於FileShareDps 和FolderDps,它不會取消目前正在傳輸的文件,因此可能需要相當長的時間才能取消。
- 使清單可依任何列排序。
- 使列表列足夠大。
- 增加更多單元測試覆蓋範圍(特別是完成 Jcds2DpTests 並為 CommandLineProcessing 新增單元測試)。
- 可以進行改進以使其更易於訪問。
- 最好使其可本地化並開始添加一些在地化內容。
貢獻
要進行本機開發,請為此儲存庫建立一個分支,在您的分支上建立以您正在改進的問題或工作流程命名的分支,簽出您的分支,然後在 Xcode 中開啟該資料夾。
此儲存庫需要經過驗證的簽名提交。您可以在 GitHub Docs 上找到有關簽署提交的更多資訊。
拉取請求
在提交拉取請求之前,請執行以下操作:
- 如果您要新增命令或功能,它們應該包括單元測試。如果您要變更功能,請根據需要更新測試或新增測試。
- 驗證所有單元測試都通過。
- 在變更日誌中新增註釋,描述您所做的變更。
- 如果您的拉取請求與某個問題相關,請在描述中新增指向該問題的連結。
貢獻者