Kami membersihkan Dock dan membuat aplikasi tanpa xCode



Kami akan membuat program untuk meluncurkan aplikasi dari bilah status.
Anda akan memerlukan terminal, Swift versi 3.1 atau lebih tinggi dan editor teks apa pun.
Saya mengujinya di macOS Sierra 10.12.6 dan macOS Catalina 10.15.

Buka terminal / Aplikasi / Utilitas / Terminal dan buat file.

touch toolbar.swift 

Buka file toolbar.swift dan tulis kode ini:

 import AppKit var app: NSApplication var statusItem: NSStatusItem #if swift(>=5.1) app = NSApplication.shared statusItem = NSStatusBar.system.statusItem( withLength: CGFloat(NSStatusItem.variableLength)) #else app = NSApplication.shared() statusItem = NSStatusBar.system().statusItem(withLength: CGFloat(32)) #endif if #available(macOS 10.10, *) { statusItem.button?.title = "\u{2699}\u{FE0F}" } // extension // menu app.setActivationPolicy(.prohibited) app.run() 

Sebagian kode diperlukan untuk menjaga kompatibilitas dengan versi bahasa yang lebih lama.
Line app.setActivationPolicy (.prohibited) diperlukan agar ikon aplikasi yang aktif tidak muncul di Dock.

Simpan file dan jalankan program dengan perintah:

 swift toolbar.swift 

Jika tidak ada kesalahan, tombol β€œtidak berguna” akan muncul di panel status. Saya menggunakan simbol gigi UTF "\ u {2699} \ u {FE0F}", tetapi Anda dapat menambahkan gambar yang Anda inginkan menggunakan properti statusItem.button? .Image.



Keluar dari program dengan mengklik terminal ctrl-c.

Saya memutuskan untuk tidak membuat kelas AppDelegate untuk aplikasi sekecil itu, tetapi memperluas kelas NSApplication. Tambahkan baris berikut setelah // ekstensi:

 extension NSApplication { func runTask(_ appName: String, _ arg: String = "") { let task = Process() #if swift(>=5.1) task.executableURL = URL(fileURLWithPath: "/usr/bin/open") #else task.launchPath = "/usr/bin/open" #endif task.arguments = arg.isEmpty ?[appName] : [arg, appName] #if swift(>=5.1) do {try task.run()} catch {print(error)} #else task.launch() #endif } @objc func securityRun () { self.runTask("/System/Library/PreferencePanes/Security.prefPane") } @objc func diskRun () { self.runTask( "disk utility", "-a") } @objc func automatorRun () { self.runTask( "automator", "-a") } } 

Harap dicatat bahwa dengan cara ini Anda dapat menjalankan tidak hanya aplikasi lebih cepat, tetapi juga halaman SystemPreference individual.

Metode membutuhkan antarmuka. Setelah // jenis menu:

 let menu = NSMenu() let items: [String] = ["Security", "Disk Utility", "Automator", "Quit"] var sel: [Selector] = [] let shared = NSApplication.shared #if swift(>=5.1) sel = [ #selector(shared.securityRun), #selector(shared.diskRun), #selector(shared.automatorRun), #selector(shared.terminate)] #else sel = [ #selector(shared().securityRun), #selector(shared().diskRun), #selector(shared().automatorRun), #selector(shared().terminate)] #endif for i in 0..<items.count { menu.addItem(NSMenuItem( title: items[i], action: sel[i], keyEquivalent: "")) if i==items.count-2 { menu.addItem(NSMenuItem.separator()) } } statusItem.menu = menu 

Untuk semua metode, kami membuat tombol dan metode yang dilampirkan kepadanya dari instance kelas NSApplication. Kami telah menambahkan tombol "Keluar", karena kami harus mengizinkan pengguna untuk keluar dari program tanpa menggunakan terminal.

Kami menyusun program. Perhatikan bahwa alih-alih cepat, ketikkan swiftc.

 swiftc toolbar.swift 

File toolbar telah muncul di direktori saat ini. Itu bisa dimulai dengan perintah:

 ./toolbar 

Jika kita menjalankan file toolbar dengan klik dua kali, maka jendela terminal akan muncul dengan aplikasi, tetapi ini tidak terlalu nyaman.

Mari kita coba perbaiki situasinya. Kami meluncurkan semua perintah di terminal.

Pertama, buat pohon direktori untuk aplikasi kita.

 mkdir -p ToolBar.app/Contents/MacOS 

Kami mengubah akses ke aplikasi.

 chmod a+x ToolBar.app 

Buat direktori untuk ikon tersebut.

 mkdir ToolBar.app/Contents/Resources 

Salin dan ubah nama salah satu ikon standar.

 cp /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ToolbarAdvanced.icns ToolBar.app/Contents/Resources/AppIcon.icns 

Pindahkan file toolbar yang dikompilasi ke direktori MacOS.

 mv toolbar ToolBar.app/Contents/MacOS 

Ubah mode akses ke file toolbar.

 chmod a+x ToolBar.app/Contents/MacOS/toolbar 

Buat file PkgInfo dengan informasi tentang jenis aplikasi. Bendera -n diperlukan agar tidak ada karakter umpan baris dalam file PkgInfo.

 echo -n "APPL????" > ToolBar.app/Contents/PkgInfo 

Ubah mode akses ke file PkgInfo.

 chmod a+x ToolBar.app/Contents/PkgInfo 

Buat Info.plist minimal dengan informasi aplikasi:

 echo '<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleIdentifier</key> <string>example.ToolBar</string> <key>CFBundleExecutable</key> <string>toolbar</string> <key>CFBundleIconFile</key> <string>AppIcon</string> </dict> </plist>' > ToolBar.app/Contents/Info.plist 

Pindahkan aplikasi ToolBar.app ke / Aplikasi / Utilitas.
Terminal akan meminta Anda untuk memasukkan kata sandi administrator.

 sudo mv ToolBar.app /Applications/Utilities 

Setelah operasi ini, aplikasi baru akan muncul di / Aplikasi / Utilitas dan dapat diluncurkan melalui Launchpad (karena alasan tertentu, direktori dengan utilitas disebut Lainnya)



Tetap menambahkan aplikasi kami ke autorun.

Untuk melakukan ini, buat file ~ / Library / LaunchAgents / example.ToolBar.plist. Mari kita buat satu perintah ini:

 echo '<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>example.ToolBar</string> <key>ProgramArguments</key> <array> <string>open</string> <string>/Applications/Utilities/ToolBar.app</string> <string>--args</string> <string>-silent</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>' > ~/Library/LaunchAgents/example.ToolBar.plist 

Periksa apakah file yang diinginkan muncul.

 ls ~/Library/LaunchAgents 

Untuk memeriksa autorun tanpa me-reboot, keluar dari aplikasi dan jalankan perintah di terminal:

 launchctl load -w ~/Library/LaunchAgents/example.ToolBar.plist 

Ikon aplikasi akan muncul di bilah status.
Keluar dari aplikasi dan buat bongkar perintah:

 launchctl unload -w ~/Library/LaunchAgents/example.ToolBar.plist 

Sekarang aplikasi akan mulai ketika sistem reboot, dan ikon tambahan dapat dihapus dari Dock.

Kemungkinan besar, dengan cara ini Anda dapat membuat mini-player untuk iTunes, daftar todo sederhana atau antarmuka untuk menyelaraskan jendela di desktop.

Source: https://habr.com/ru/post/id480876/


All Articles