У меня очень неприятная проблема с Typhoon Framework версии 2.3.0 в проекте Swift.
Я включил Typhoon в Podfile, как указано в руководстве, установил Pods, создал соединительный заголовок и добавил #import <Typhoon/Typhoon.h>
в этот заголовок.
Затем я создал подкласс сборки под названием ApplicationAssebly:
import Foundation
public class ApplicationAssembly: TyphoonAssembly {
public dynamic func appDelegate() -> AnyObject {
return TyphoonDefinition.withClass(AppDelegate.self) {
(definition) in
definition.injectProperty("myAssembly", with: self)
}
}
}
Как видите, я хочу внедрить эту сборку в AppDelegate. Я также добавил запись TyphoonInitialAssemblies в файл Info.plist. И в этот момент начались мои проблемы. Я протестировал несколько комбинаций, приводящих к NSException :
Не удается разрешить сборку для имени xxx
Вот эти комбинации (typhtest — название проекта/пакета):
- ClassName в Info.plist: ApplicationAssembly, определяет свойство модуля в настройках сборки: Нет
- ClassName в Info.plist: ApplicationAssembly, определяет свойство модуля в настройках сборки: Да
- ClassName в Info.plist: typhtest.ApplicationAssembly, определяет свойство модуля в настройках сборки: Нет
- ClassName в Info.plist: typhtest.ApplicationAssembly, определяет свойство модуля в настройках сборки: Да
Я нашел этот ответ на StackOverflow, поэтому попробовал последнюю комбинацию:
- ClassName в Info.plist: _TtC8typhtest19ApplicationAssembly, определяет свойство модуля в настройках сборки: Да
Эта комбинация не вызывает NSException, но у меня есть dyld_fatal_error, трассировка стека с iPhone 5s (iOS 7.1) ниже:
Я получаю немного другую трассировку стека от симулятора iPhone (iOS 7.1):
Что странно, работает на симуляторе iOS 8.1! Также на моем устройстве хорошо работает пример приложения Typhoon для Swift.
Я также пытался очистить все кеши Xcode и проекта и каталоги DerivedData, я очистил папку проекта и сборки и перестроил проект, но он не работает. Моя версия Xcode — 6.1 (6A1052d), и я использую OSX Yosemite 10.10.1.
Репозиторий GitHub с моим кодом: https://github.com/papcio28/Typhoon-Dyld-Error
Отредактировано 21 ноября 2014 г.
Что еще странно, если я создаю фабрику вручную и что-то заливаю тоже вручную, то Тайфун работает. Шаги, которые я сделал:
- Удален
TyphoonInitialAssemblies
элемент из Info.plist Изменяет
AppDelegate.application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
наfunc application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let factory = TyphoonBlockComponentFactory(assemblies: [AppAssembly()]) factory.inject(self) return true }
Но это не меняет того факта, что я хочу использовать Typhoon, не определяя фабрику вручную, так что вопрос по-прежнему актуален.