Как получить путь к исполняемому файлу инструмента командной строки в Objective C (Framework Framework)? - PullRequest
4 голосов
/ 22 февраля 2010

Я пытаюсь найти способ определить путь к исполняемому файлу инструмента командной строки в Objective C.

Следовательно, если исполняемый файл - / Applications / Utils / MyTool, то этот метод вернет / Applications / Utils

Я использую основу Foundation.

Ответы [ 3 ]

9 голосов
/ 22 февраля 2010

Я предполагаю, что под /Applications/Utils/MyTool вы подразумеваете приложение с именем «MyTool» в каталоге «Utils» в каталоге «Application» (который фактически является путем /Applications/Utils/MyTools.app). В этом случае вы можете получить каталог, в котором находится приложение (/Applications/Utils), со следующим битом кода:

NSString *appParentDirectory = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
8 голосов
/ 11 апреля 2014

Назовите меня пуристом - или ненавистником, - , если вам нужно .. но мне "нравится"

NSString *myLittleCLIToolPath = NSProcessInfo.processInfo.arguments[0];

0 голосов
/ 02 марта 2019

Вот Swift-версия ответа @ mipadi :

let appParentDirectory = Bundle.main.bundleURL.deletingLastPathComponent()

Документация: <a href="https://developer.apple.com/documentation/foundation/bundle" rel="nofollow noreferrer">Bundle</a>.<a href="https://developer.apple.com/documentation/foundation/bundle/1410786-main" rel="nofollow noreferrer">main</a>.<a href="https://developer.apple.com/documentation/foundation/bundle/1415654-bundleurl" rel="nofollow noreferrer">bundleURL</a>.<a href="https://developer.apple.com/documentation/foundation/url/1780471-deletinglastpathcomponent" rel="nofollow noreferrer">deletingLastPathComponent()</a>


И из @ AlexGray ответ :

let myLittleCliToolPath = ProcessInfo.processInfo.arguments.first

Документация: <a href="https://developer.apple.com/documentation/foundation/processinfo" rel="nofollow noreferrer">ProcessInfo</a>.<a href="https://developer.apple.com/documentation/foundation/processinfo/1408734-processinfo" rel="nofollow noreferrer">processInfo</a>.<a href="https://developer.apple.com/documentation/foundation/processinfo/1415596-arguments" rel="nofollow noreferrer">arguments</a>.<a href="https://developer.apple.com/documentation/swift/array/1689165-first" rel="nofollow noreferrer">first</a>

Обратите внимание, что это приводит к необязательной строке. Вероятно, вы получили путь успешно, но не на 100% гарантировано, поэтому вы также можете использовать один из них в качестве резервной копии (которая также возвращает необязательные значения), если у вас есть доступ к AppKit или вышеупомянутому подходу Bundle (который ):

NSRunningApplication.current.bundleURL?.deletingLastPathComponent()

Документация: <a href="https://developer.apple.com/documentation/appkit/nsrunningapplication" rel="nofollow noreferrer">NSRunningApplication</a>.<a href="https://developer.apple.com/documentation/appkit/nsrunningapplication/1533604-current" rel="nofollow noreferrer">current</a>.<a href="https://developer.apple.com/documentation/appkit/nsrunningapplication/1535500-bundleurl" rel="nofollow noreferrer">bundleURL</a>.<a href="https://developer.apple.com/documentation/foundation/url/1780471-deletinglastpathcomponent" rel="nofollow noreferrer">deletingLastPathComponent()</a>

NSRunningApplication.current.executableURL?.deletingLastPathComponent()

Документация: <a href="https://developer.apple.com/documentation/appkit/nsrunningapplication" rel="nofollow noreferrer">NSRunningApplication</a>.<a href="https://developer.apple.com/documentation/appkit/nsrunningapplication/1533604-current" rel="nofollow noreferrer">current</a>.<a href="https://developer.apple.com/documentation/appkit/nsrunningapplication/1531062-executableurl" rel="nofollow noreferrer">executableURL</a>.<a href="https://developer.apple.com/documentation/foundation/url/1780471-deletinglastpathcomponent" rel="nofollow noreferrer">deletingLastPathComponent()</a>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...