2015-05-01 6 views
3

Я реализовал пользовательский элемент управления в приложении OS X, который отлично работает. Когда элемент управления рисуется, он использует код из несистемной системы. Элемент управления написан быстрым, рамки находятся в Objective-C. Рамка не построена в том же проекте или рабочей области, что и приложение с настраиваемым элементом управления. Я добавил Framework к цели и добавил ее на фазу сборки файлов копий.Загрузка кода из рамки для настраиваемого элемента управления в IBDesignable

Когда я добавляю оформление IBDesignable в пользовательский класс управления в swift, я получаю сообщение об ошибке при попытке просмотреть элемент управления в Interface Builder. Ошибки я получаю:

file:///Users/ktam/github/MovingImagesDemo/Spinner2/SpinnerController.xib: error: IB Designables: Failed to render instance of Spinner: dlopen(Spinner2.app, 1): Library not loaded: @executable_path/../Frameworks/MovingImages.framework/Versions/A/MovingImages Referenced from: Spinner2.app Reason: image not found

Когда я проверяю пакет приложения, созданный в IBDesignables подпапки каркас находится в правильном месте, в связке приложений. Я предполагаю, что исполняемый файл, фактически выполняемый в этом случае, не тот, который входит в пакет приложений IBDesignables, но, возможно, исполняемый файл Interface Builder, который объясняет, почему образ Framework не может быть загружен.

Что нужно сделать, чтобы загрузить код, который Interface Builder может найти, когда он отображает представление с помощью IBDesignable?


информация после дальнейшего тестирования:

Я перестроил Framework при задании каталога установки будет ~/Library/Frameworks, а затем копируется встроенной рамки для этого места, я тогда обновил цель приложения, так что пути поиска Runpath, включенные ~/Library/Frameworks, и как Application, так и Interface Builder, теперь настраивают пользовательский элемент управления правильно.

Это не то решение, в котором я нуждаюсь, но оно указывает на то, в чем проблема, мне все же нужно выяснить, что это за правильное исправление.

ответ

5

Решение состоит в том, чтобы установить параметр сборки каталога установки для целевой среды Framework в Xcode на @rpath. Затем в проекте Xcode, который создает приложение, добавляет в «Пути поиска пути» значение сборки целевого назначения приложения: @loader_path /../ Frameworks.

Использование @rpath вместо @executable_path гораздо более гибкое.

Два сообщения в блоге, которые помогли мне решить эту проблему являются:

Using rpath by Dave Dribin

и

Linking and Installing by Mike Ash

+0

Спасибо. Это сводило меня с ума. – charles

Смежные вопросы