Использование DTCoreText с RubyMotion

В настоящее время я работаю над своим первым крупным приложением RubyMotion. У меня много html-текста для отображения, и я хочу отойти от использования UIWebView - так как это отчасти хак и его трудно правильно масштабировать без большого количества обручей. Итак, один из моих вариантов - DTCoreText, который кажется наиболее используемым и стабильным элементом управления этим лотом.

Первоначально я пытался использовать версию CocoaPod, но по какой-то причине это вызывает проблемы с MKNetworkKit из другого модуля. Я немного повозился с этим, но увидел, что в MKNetworkKit много проблем, связанных с процессом сборки, поэтому лучше оставить его в покое.

Вместо этого я выбрал вариант продавца. Я git клонировал репозиторий DTCoreText в каталог моего поставщика и добавил его в свой проект. Хотя это сближает меня, компилируя библиотеку и создавая мой файл libDTCoreText.a, я все еще застрял после того, как запустил его.

Мои файлы Rake включают в себя следующее (остальное довольно общее):

app.vendor_project('vendor/DTCoreText',
    :xcode,
    :target => 'Static Library',
    :products => ['libDTCoreText.a'])
app.libs << '/usr/lib/libxml2.2.dylib' #For DTCoreText

Как я уже сказал, файл libDTCoreText.a компилируется и копируется в нужное место в моем проекте.

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

@source = DTAttributedTextView.alloc.initWithFrame(CGRectZero)
@source.attributedString = NSAttributedString.alloc.initWithHTMLData(post.source.dataUsingEncoding(NSString.defaultCStringEncoding), options:{}, documentAttributes:nil)
@source.frame = [[self.frame.size.width / 2 - size.width / 2, 600], [250, 250]]

Приложение компилируется, но во время выполнения, когда мы нажимаем на приведенный выше код, происходит сбой:

Objective-C stub for message `initWithHTMLData:options:documentAttributes:' 
type `@@:@@^@' not precompiled. Make sure you properly link with the framework 
or library that defines this message.

*** simulator session ended with error: Error Domain=DTiPhoneSimulatorErrorDomain
Code=1 "The simulated application quit." UserInfo=0x10019d470
{NSLocalizedDescription=The simulated application quit., DTiPhoneSimulatorUnderlyingErrorCodeKey=-1}

У кого-нибудь есть идеи, где я могу начать искать? Я пока не знаю тонну процесса сборки XCode, поэтому, возможно, я что-то упустил. Но, похоже, это должно сработать. Он говорит мне, что он может правильно видеть заголовки (и может компилировать), но не знает, где находится настоящая библиотека.

1 ответ

Ну, у меня есть соответствующий опыт работы с DTCoreText, но нет опыта работы с RubyMotion. DTCoreText использует категории, и поэтому предъявляет особые требования к нагрузке. В моем проекте XCode, в "Другие флаги компоновщика", у меня есть это: -force_load $(BUILT_PRODUCTS_DIR)/libDTCoreText.a

Эта строка гарантирует, что библиотека загружена правильно. Если вы этого не сделаете, вы получите сбой при попытке использовать его.

Я был очень счастлив использовать DTCoreText в течение года, и ИМХО, это гораздо лучшее решение для атрибутивного текста, чем использование UIWebViews.

Другие вопросы по тегам