نقوم بتنظيف Dock وجعل التطبيق دون xCode



سنقوم بعمل برنامج لتشغيل التطبيقات من شريط الحالة.
ستحتاج إلى الإصدار 3.1 أو إصدار أحدث من Swift وأي محرر نصوص.
لقد اختبرت ذلك على نظامي macOS Sierra 10.12.6 و macOS Catalina 10.15.

فتح المحطة الطرفية / التطبيقات / المرافق / المحطة الطرفية وإنشاء ملف.

touch toolbar.swift 

افتح ملف toolbar.swift واكتب هذا الكود:

 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() 

هناك حاجة إلى جزء من التعليمات البرمجية للحفاظ على التوافق مع الإصدارات القديمة من اللغة.
مطلوب سطر app.setActivationPolicy (محظور) حتى لا يظهر رمز التطبيق النشط في Dock.

احفظ الملف وقم بتشغيل البرنامج باستخدام الأمر:

 swift toolbar.swift 

في حالة عدم وجود أخطاء ، سيظهر زر "عديم الفائدة" في لوحة الحالة. استخدمت رمز الترس UTF "\ u {2699} \ u {FE0F}" ، لكن يمكنك إضافة الصورة التي تريدها باستخدام خاصية statusItem.button؟ .Image.



قم بإنهاء البرنامج بالنقر فوق ctrl-c.

قررت عدم إنشاء فئة AppDelegate لمثل هذا التطبيق الصغير ، ولكن قمت بتوسيع فئة NSApplication. أضف الأسطر التالية بعد الامتداد //:

 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") } } 

يرجى ملاحظة أنه بهذه الطريقة ، يمكنك تشغيل التطبيقات ليس فقط بشكل أسرع ، ولكن أيضًا صفحات SystemPreference الفردية.

طرق تحتاج إلى واجهة. بعد // نوع القائمة:

 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 

بالنسبة لجميع الطرق ، أنشأنا أزرارًا وطرق مرفقة بها من مثيل لفئة NSApplication. لقد أضفنا زر "إنهاء" ، حيث نحتاج إلى السماح للمستخدم بالخروج من البرنامج دون استخدام الجهاز الطرفي.

نحن تجميع البرنامج. لاحظ أنه بدلاً من swift ، اكتب swiftc.

 swiftc toolbar.swift 

لقد ظهر ملف شريط الأدوات في الدليل الحالي. يمكن أن تبدأ بالأمر:

 ./toolbar 

إذا قمنا بتشغيل ملف شريط الأدوات بنقر مزدوج ، فسيظهر إطار المحطة الطرفية مع التطبيق ، لكن هذا ليس مناسبًا للغاية.

دعنا نحاول إصلاح الوضع. نطلق جميع الأوامر في المحطة.

أولاً ، قم بإنشاء شجرة دليل لتطبيقنا.

 mkdir -p ToolBar.app/Contents/MacOS 

نغير الوصول إلى التطبيق.

 chmod a+x ToolBar.app 

إنشاء دليل للرمز.

 mkdir ToolBar.app/Contents/Resources 

انسخ وتغيير اسم أحد الرموز القياسية.

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

نقل ملف شريط الأدوات المترجمة إلى دليل MacOS.

 mv toolbar ToolBar.app/Contents/MacOS 

تغيير وضع الوصول إلى ملف شريط الأدوات.

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

قم بإنشاء ملف PkgInfo بمعلومات حول نوع التطبيق. هناك حاجة إلى علامة -n بحيث لا يوجد حرف موجز سطر في ملف PkgInfo.

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

تغيير وضع الوصول إلى ملف PkgInfo.

 chmod a+x ToolBar.app/Contents/PkgInfo 

إنشاء Info.plist الحد الأدنى مع معلومات التطبيق:

 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 

انقل تطبيق ToolBar.app إلى / Applications / Utilities.
سوف يطلب منك الجهاز إدخال كلمة مرور المسؤول.

 sudo mv ToolBar.app /Applications/Utilities 

بعد هذه العمليات ، يجب أن يظهر تطبيق جديد في / Applications / Utilities ويمكن تشغيله من خلال Launchpad (لسبب ما ، يسمى الدليل مع الأدوات المساعدة الآخرين)



يبقى لإضافة طلبنا التشغيل التلقائي.

للقيام بذلك ، قم بإنشاء الملف ~ / Library / LaunchAgents / example.ToolBar.plist. لنجعل هذا الأمر واحدًا:

 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 

تحقق مما إذا كان الملف المطلوب يظهر.

 ls ~/Library/LaunchAgents 

للتحقق من التشغيل التلقائي دون إعادة التشغيل ، اخرج من التطبيق وقم بتشغيل الأمر في الجهاز الطرفي:

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

يجب أن يظهر رمز التطبيق في شريط الحالة.
الخروج من التطبيق وإلغاء تحميل الأمر:

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

الآن سيبدأ التطبيق عند إعادة تشغيل النظام ، ويمكن إزالة الرموز الإضافية من Dock.

على الأرجح ، وبهذه الطريقة يمكنك إنشاء مشغل صغير لـ iTunes ، أو قائمة مهام بسيطة أو واجهة لمحاذاة النوافذ على سطح المكتب.

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


All Articles