Подтвердить что ты не робот

Использование фреймворков в инструменте командной строки

Я построил утилиту командной строки (инструмент Foundation) в Xcode, используя Cocoa. Инструмент использует стороннюю структуру.

Все работает нормально в Xcode, но как мне развернуть эту программу?

Если я запустил приложение из Finder, он не сможет найти библиотеку, потому что она выглядит в ../Frameworks/etc. Могу ли я статически ссылаться на стороннюю структуру?

4b9b3361

Ответ 1

К сожалению, в OS X нет способа связать платформу с утилитой командной строки, и я подозреваю, что фреймворк, на который вы ссылаетесь, ожидает, что он будет упакован в каталог пакетов приложения Frameworks/. Если у вас есть доступ к исходному коду фреймворка, вы можете скомпилировать статическую библиотеку и статически связать ее с вашим приложением (или напрямую включить источник в целевой объект приложения). Если у вас нет исходного кода или вы по какой-то причине не хотите статически связывать библиотеку, есть два оставшихся варианта:

  1. Если у вас есть доступ к общесистемной папке /Library/Frameworks, вы можете установить стороннюю платформу там. Для этого необходимо, чтобы путь установки платформы (параметр сборки INSTALL_PATH) был установлен на /Library/Frameworks во время сборки или чтобы вы использовали install_name_tool для изменения пути установки платформы на /Library/Frameworks (если у вас нет исходного кода платформы код).

  2. Создайте комплект приложений (как если бы вы создавали приложение с графическим интерфейсом) с помощью утилиты командной строки в качестве исполняемого файла комплекта приложений (т.е. В AppBundle.app/Contents/MacOS/). Затем вы можете скопировать сторонний фреймворк в каталог фреймворков пакета приложений. Затем вы можете поместить пакет приложения в любое место и создать символическую ссылку на утилиту командной строки.

Вариант 1, безусловно, является более приемлемым подходом, но я использовал вариант 2, когда была веская причина.

Вы можете найти больше информации о сборке, компоновке и установке фреймворков в Руководстве по программированию Apple Frameworks.

Ответ 2

Другим способом, если у вас есть исходный код для фреймворка, является добавление статической целевой библиотеки и создание из нее статической библиотеки. Затем вы можете статически связать его с инструментом командной строки.

Ответ 3

Начиная с Xcode 9.3.1, я смог добавить каркас к инструменту командной строки, установив для типа Mach-O Type значение Static Library для каркаса. Затем в target строке командной строки обязательно добавьте платформу к Target Dependencies и Build Phases Link Binary With Libraries. Встроенный исполняемый файл мог работать без проблем.

Ответ 4

Вы можете использовать марафон для управления зависимостями https://github.com/JohnSundell/Marathon

Это нужно больше думать, если вы хотите распространять приложение. (Возможно, вы захотите установить в папку frameworks в этом случае.) Ваш пробег может варьироваться в зависимости от этого решения.