從MAC移除 FortiClient.app

在終端機下兩行指令搞定FortiClient.app被鎖住不能移除的問題 從MAC移除 FortiClient.app 在終端機下兩行指令搞定FortiClient.app被鎖住不能移除的問題 # 第一步 /bin/ls -dleO@ /Applications/FortiClient.app # 第二步 sudo /usr/bin/chflags -R noschg /Applications/FortiClient.app執行完上面的指令後,小鎖就不見了 然後就可以用AppCleaner把App完整刪除. 這兩個命令的目的是在Unix/Linux系統中設置和查看文件或目錄的標誌(flags)。其中,chflags命令用於更改標誌,而ls命令則用於列出文件或目錄的詳細信息,包括標誌。 /Applications/FortiClient.app上的小鎖可能是由於該應用程序被設置為“不可更改”(immutable)的屬性,這是一種特殊的標誌。執行chflags -R noschg /Applications/FortiClient.app命令後,將這個“不可更改”標誌移除了,因此小鎖消失了。 通常情況下,應用程序的小鎖表示這個應用程序的文件或目錄具有某種特殊的權限或屬性,可能是為了保護或限制對應用程序的修改。當您使用chflags命令修改了應用程序的標誌後,小鎖就消失了,這表明相關的權限或屬性已經被修改或移除了。 第一行指令的含義: /bin/ls -dleO@ /Applications/FortiClient.app /bin/ls:是列出目錄內容的命令,/bin是ls命令所在的路徑。 -dleO@:是命令的選項或參數,它們分別具有以下含義: -d:指定了要列出的目錄的詳細信息,而不是目錄內容的詳細信息。 -l:以長格式(long format)顯示文件的詳細信息,包括文件類型、權限、所有者、群組、大小、修改日期等。 -e:顯示Access Control List (ACL) 的相關信息。 -O:顯示擴展屬性(extended attributes)的相關信息。 @:顯示文件的扩展屬性,這在macOS中通常與App Store中的應用程序相關。 /Applications/FortiClient.app:是指定的文件或目錄的路徑,這裡是指定了FortiClient應用程序的路徑。 第二行指令的含義: sudo /usr/bin/chflags -R noschg /Applications/FortiClient.app sudo:用於以超級用戶權限執行命令,通常用於需要特權權限的操作。 /usr/bin/chflags:是用於更改文件或目錄標誌的命令,/usr/bin是chflags命令所在的路徑。 -R:表示遞歸地(recursive)應用這個操作到指定目錄及其所有子目錄和文件。 noschg:是要設置的標誌,noschg表示“不可更改”(no change),這意味著對指定的文件或目錄禁止了修改或刪除的操作。 /Applications/FortiClient.app:是指定的文件或目錄的路徑,這裡是指定了FortiClient應用程序的路徑。

February 15, 2024 · 1 min · Peter

contains

.contains(物件)為真,卻沒有被執行?Why ? contains .contains(物件)為真,卻沒有被執行?Why ? AI解釋:在您提到的情況下,當您按下 IconButton 時,favorites 列表中已經包含了該 Movie 物件,但是在第 161 行的 else 塊中的代碼沒有被執行。這可能是因為在第 160 行中,您使用了 contains 方法來檢查 favorites 列表中是否包含該 Movie 物件,但是 contains 方法是基於 == 運算符來比較兩個對象是否相等的。如果您的 Movie 類沒有實現 == 運算符,則 contains 方法將無法正確地比較兩個 Movie 物件是否相等。 為了解決這個問題,您可以在 Movie 類中實現 == 運算符,以便在比較兩個 Movie 物件時使用。 最後在movie.dart加上這段解決

January 1, 2024 · 1 min · Peter

iOS : 記憶體管理

在iOS app中,記憶體管理是基於引用計數模型運作。當創建一個物件的時候,記憶體會在Heap(堆)上分配,並將其引用計數設置為1。隨著其他物件對此物件建立強引用(strong reference),其引用計數會增加1。 iOS : 記憶體管理 在iOS app中,記憶體管理是基於引用計數模型運作。當創建一個物件的時候,記憶體會在Heap(堆)上分配,並將其引用計數設置為1。隨著其他物件對此物件建立強引用(strong reference),其引用計數會增加1。 相反的,如果擁有物件的持有者放棄了強引用,引用計數將會減少1。一旦引用計數變為0,該物件的記憶體就會被自動釋放。 當啟用了ARC(Automatic Reference Counting)自動引用計數功能的編譯器編寫程式碼時,編譯器會分析你創建的引用,並自動插入對底層記憶體管理機制的調用,我們無須手動設置引用計數。 隨著自動引用計數(ARC)的引入,我們只需要在引用物件時指定所有權的類型: 強引用(strong reference):確保被引用的物件只要引用仍然有效,就會一直保留在記憶體中。例如,我們宣告一個控制器屬性 strong var myView: UIView,表示控制器強引用 myView 物件,直到控制器釋放之前,myView 都會存在記憶體中。 弱引用 (weak reference):對被引用的物件的生存期沒有影響。例如,我們宣告一個閉包中的局部變數 weak var capturedView: UIView,表示閉包弱引用 capturedView 物件,即使 capturedView 被釋放,閉包中的 capturedView 也會變成 nil 而不會崩潰。 非擁有引用 (unowned reference):與弱引用類似,對被引用的物件的生存期沒有影響,但與弱引用的不同之處是,非擁有引用 預期總是擁有 「非 nil 的值」,**ARC 不會自動將其設置為 ****nil**。例如,我們宣告一個子視圖中的屬性 unowned var parentViewController: UIViewController,表示子視圖非擁有引用父控制器,而父控制器通常擁有比子視圖更長的生存期,因此子視圖可以安全地訪問父控制器。 需要注意的是: 當被引用的物件被釋放時,弱引用會被設定為 nil,而非擁有引用則會變成一個懸浮指標 (dangling pointer)。向懸浮指標發送訊息會導致程式崩潰。 使用非擁有引用時,要確保另一個物件擁有相同的或更長的生存期,避免懸浮指標問題。 簡單來說,在以下情況下使用不同的引用類型: strong: 當你想要確保物件一直存在,直到不再需要它為止; weak: 會在被引用的物件被釋放時自動設為 nil,因此它們可以用來避免循環引用。例如,在代理關係中,委托者通常會使用弱引用來引用代理,這樣當委托者被釋放時,代理也不會被保留。; unowned: 不會在被引用的物件被釋放時自動設為 nil,因此它們只能用於指向那些生命週期一定會比引用它的物件長的物件。例如,子視圖可以使用非擁有引用來引用父視圖,因為父視圖通常會比子視圖存在得更久。 assign: 當你只需要一個指向簡單數據的指標,不需要跟踪它的生命周期。 使用 weak 和 assign 引用可以避免循環引用,即兩個物件互相引用導致彼此都無法被釋放的情況。 ...

December 20, 2023 · 2 min · Peter

VSCode 顯示隱藏資料夾

打開設定(Settings) VSCode 顯示隱藏資料夾 打開設定(Settings) 在設定畫面右上角點擊“Open Settings按鈕” 添加設置: 存檔,從新啟動VSCode,就可以看到 . 開頭的資料夾

November 14, 2023 · 1 min · Peter

iOS中的associated type和associated value是不同的概念

它們在使用和用途上有很大的區別。讓我們來解釋這兩者之間的差異: iOS中的associated type和associated value是不同的概念 它們在使用和用途上有很大的區別。讓我們來解釋這兩者之間的差異: 是的,iOS中的associated type和associated value是不同的概念,它們在使用和用途上有很大的區別。讓我們來解釋這兩者之間的差異: Associated Type(關聯類型): Associated type是Swift中協議(protocols)的一個特性。 關聯類型允許在定義協議時指定一個或多個類型,但不需要提供具體的實現。 具體遵循(conforming)該協議的類別或結構體需要提供關聯類型的具體實現。 關聯類型使協議更具通用性,因為它可以適應不同的類型。 protocol OrderQueue { associatedtype Order // 定義一個關聯類型 mutating func enqueue(_ order: Order) mutating func dequeue() -> Order? } struct OrderQueueImplementation: OrderQueue { // 實現OrderQueue協議,指定關聯類型為OrderStatus typealias Order = OrderStatus private var orders: [OrderStatus] = [] mutating func enqueue(_ order: OrderStatus) { orders.append(order) } mutating func dequeue() -> OrderStatus? { return orders.isEmpty ? nil : orders.removeFirst() } } ...

October 27, 2023 · 1 min · Peter

搜尋目錄下每一個檔案的特定字/檔案名稱

在開發過程中,我們常需要快速找出「哪個檔案用到了這個變數?」或是「那個設定檔到底放在哪裡?」。 本文整理了 Linux/Mac 終端機中最常用的搜尋指令:grep、ag 和 find。 1. 搜尋檔案內容 (grep) grep 是系統內建最強大的文字搜尋工具。 常用指令 # 在目前目錄 (./) 遞歸搜尋 "R2" grep -rwn --color=auto ./ -e 'R2' 參數詳解 -r (recursive):遞歸搜尋,包含所有子目錄。 -w (word):僅匹配「完整單字」,避免匹配到部分字串(例如搜尋 is 不會匹配到 this)。 -n (line number):顯示行號。 -e (pattern):指定搜尋的關鍵字。 --color=auto:將關鍵字高亮顯示。 顯示前後文 (Context) 有時候只看一行不夠,我們需要看前後幾行程式碼: # -C (Context): 顯示前後各 1 行 grep -rwn -C 1 ./ -e 'R2' # -A (After): 顯示後 1 行 # -B (Before): 顯示前 1 行 2. 更快的選擇:The Silver Searcher (ag) grep 雖然強大,但速度較慢且指令較長。ag 是一個專為程式碼搜尋設計的工具,速度極快且預設忽略 .gitignore 的檔案。 (需額外安裝:brew install the_silver_searcher) ...

September 23, 2023 · 1 min · Peter

iOS如何把專案打包framwork後也讓原本的pod/套件包入framework ?

工作需要把整個app包成一個SDK讓另一個app引用,所以要把原本專案的套件也包進去,不然在打包framework的時候,import套件那一行會報錯. iOS如何把專案打包framwork後也讓原本的pod/套件包入framework ? 工作需要把整個app包成一個SDK讓另一個app引用,所以要把原本專案的套件也包進去,不然在打包framework的時候,import套件那一行會報錯. 假設你的專案叫”B”,打包的framework取名為BPack,那麽在Podfile的部分要加入framework自己的套件引用,原本的專案裝什麼pod,framework如果有用到該套件也要跟著裝,以SnapKit為例,作法如下: target ‘B’ do Comment the next line if you don’t want to use dynamic frameworks use_frameworks! pod ‘SnapKit’, ‘~> 5.6.0’ Pods for B end target ‘BPack’ do Comment the next line if you don’t want to use dynamic frameworks use_frameworks! pod ‘SnapKit’, ‘~> 5.6.0’ Pods for B Pods for BPack end另外,在Build Setting的部分好像也要做一下設定: 如果你包的是動態庫,那麽在framework target的Build Settings: Linking -> Mach-O Type應該要選擇:Dynamic Libray Mach-O這部分不太確定有沒有影響,不過我這樣選是可以Run App Successful. 有錯麻煩請指正,感謝! ...

September 22, 2023 · 1 min · Peter

面試常見題: OSI 7層

#個人心法# 面試常見題: OSI 7層 #個人心法# 記首位字母 縮寫 P.D.N.T. SPA 口訣: 有三個人(‘P’hy. ‘D’a. ‘N’et.) 去(‘T.’: 想成To) ‘S.’ ‘P.’ ‘A.’ 等於: Physical Data Network Transport Session Presentation Application 定義:參考https://zh.wikipedia.org/wiki/OSI%E6%A8%A1%E5%9E%8B Physical layer/ 實體層:為資料端裝置提供傳送資料通路。 數據機 光纖 Data link layer/ 資料連結層:在兩個網路實體之間提供資料鏈路連接的建立、維持和釋放管理。 Wifi 乙太網路 PPPoE Network layer/網路層:提供定址和路由的功能。 -IP(IPv4, IPv6) Transport layer/傳輸層:傳輸層服務通過傳輸層協定的編程介面傳遞給應用行程。 Transmission Control Protocol,縮寫:TCP User Datagram Protocol,縮寫:UDP Session layer/會議層:主要為兩個會議層實體進行對談(Session),而進行的對話連接的管理服務。 https://zh.wikipedia.org/wiki/%E4%BC%9A%E8%AF%9D%E5%B1%82 Presentation layer/表現層:為不同終端的上層使用者提供資料和資訊正確的語法表示變換方法。 ASCII格式 UTF-8格式 Application layer/應用層:應用層直接和應用程式介面結合,並提供常見的網路應用服務。 BitTorrent DNS POP3 SMTP SSH Telnet

August 20, 2023 · 1 min · Peter

MacOS[祕技] Dock的隱藏與顯示

如果Dock有開啟自動隱藏的話,可以把動畫效果關掉 MacOS[祕技] Dock的隱藏與顯示 如果Dock有開啟自動隱藏的話,可以把動畫效果關掉 桌面與Dock選項裡面可以找到在終端機下指令: $defaults write com.apple.dock autohide-time-modifier -int 0這句命令調整的是當你把鼠標移動到螢幕邊緣時,Dock 開始出現之前的延遲時間。設為 “0” 意味著 Dock 將在鼠標接觸螢幕邊緣的瞬間立刻開始出現,無需等待。 $defaults write com.apple.dock "autohide-delay" -float "0"這句它是用來調整 macOS Dock 的自動隱藏延遲時間,設定為 0 意味著當你將鼠標移到螢幕邊緣時,Dock 將立即(沒有延遲)出現。 在執行上面的命令後,通常還需要重啟 Dock 以使更改生效,可以使用以下命令或是重新開機也可以: $killall Dock或是: $defaults write com.apple.dock autohide-time-modifier -int 0;killall Dock具體解釋如下: defaults: 這是一個命令行工具,用於讀取和修改 macOS 的應用程式和系統設置。 write: 表示要寫入或修改一個設置。 com.apple.dock: 這是 Dock 應用程式的 domain name。 autohide-delay: 控制的是啟動動畫之前的等待時間。 autohide-time-modifier 控制的是動畫的執行速度。 -float: 表示接下來的值是一個浮點數。 "0": 這是你想設定的新值。設定為 0 意味著當你將鼠標移到螢幕邊緣時,Dock 將立即(沒有延遲)出現。 總結: "autohide-delay" 控制的是啟動動畫之前的等待時間。 autohide-time-modifier 控制的是動畫的執行速度。 如果你將兩者都設為 0,那麼當你移動鼠標到螢幕邊緣時,Dock 將瞬間顯示,不會有任何延遲或動畫效果。 ...

August 4, 2023 · 1 min · Peter

Xcode Hotkey

在 iOS 開發過程中,熟練使用 Xcode 快捷鍵是提升效率的關鍵。與其不斷地在滑鼠與鍵盤間切換,不如讓手指留在鍵盤上,像彈鋼琴一樣流暢地寫程式。 以下是我整理的 Xcode 必備快捷鍵速查表: 🚀 導航與跳轉 (Navigation) 最常用的功能,讓你快速在檔案與編輯器之間穿梭。 功能 快捷鍵 說明 快速開啟檔案 Cmd + Shift + O 最強大功能! 輸入檔名快速跳轉 (Open Quickly) 定位檔案位置 Cmd + Shift + J 在左側 Project Navigator 中選中目前編輯的檔案 跳轉到編輯器 Cmd + J 聚焦到編輯器區域,並可選擇開啟位置 顯示呼叫階層 Cmd + Ctrl + Shift + H Show Call Hierarchy,查看誰呼叫了這個方法 全域搜尋 Cmd + Shift + F Find in Workspace,搜尋整個專案 🖥 視窗與介面 (Interface) 快速開關不需要的面板,爭取最大的程式碼閱讀空間。 功能 快捷鍵 說明 開/關 導航面板 Cmd + 0 左側 Navigator (Project, Search, Git…) 開/關 檢查器 Cmd + Option + 0 右側 Inspector (Attributes, Identity…) 開/關 除錯區 Cmd + Shift + Y 下方 Debug Area 開新分頁 Cmd + T 開啟新的 Tab 開新視窗 Cmd + Option + T 開啟全新的 Xcode 視窗 📝 編輯與除錯 (Editing & Debugging) 寫程式時的得力助手。 ...

July 26, 2023 · 1 min · Peter