Использование каркасов в инструменте командной строки - PullRequest
27 голосов
/ 10 марта 2009

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

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

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

Ответы [ 4 ]

27 голосов
/ 10 марта 2009

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

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

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

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

Более подробную информацию о создании, компоновке и установке каркасов можно найти в Руководстве по программированию каркасов Apple .

9 голосов
/ 10 марта 2009

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

1 голос
/ 08 июня 2018

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

0 голосов
/ 10 сентября 2018

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

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

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