2016-09-21 1 views
0

Моя ситуация следующая:Получить Obj-C Cocoapod API для потребления в Swift 3.0 приложения

У меня есть SDK, написанный на Obj-C и распределенной в качестве Cocoapod. В настоящее время он используется моими и моими приложениями для пользователей. Мое приложение написано в основном в Swift, и я использую модуль, используя заголовок с мостом, так как мой SDK и несколько других сторонних pod, которые я потребляю, не экспортируются в качестве фреймворков, поэтому использование use_frameworks! в podfile не будет работать.

Я перенес свое приложение в Swift 3.0 с помощью инструмента миграции XCode 8, но теперь он не будет скомпилирован с SDK Cocoapod.

, например - после переноса вызова на мой SDK:

SparkCloud.sharedInstance().getDevices({ (devices:[Any]?, error:Error?) -> Void in ... 

вызовет следующие компиляции ошибки времени:

Cannot convert value of type '([AnyObject]?, NSError?) -> Void' to expected argument type '(([Any]?, Error?) -> Void)?'

, который имеет смысл, так как NSError теперь Error и нетипизированное обнуляемое NSArray из Obj-c теперь разрешает [Any], но мой SDK не отражает этого.

Obj-C SDK соответствующая строка:

-(NSURLSessionDataTask *)getDevices:(nullable void (^)(NSArray * _Nullable sparkDevices, NSError * _Nullable error))completion; 

Я пытался добавить NS_REFINED_FOR_SWIFT мои заголовки функциональных Obj-C и написать обертку Swift файл для экспонирования в интерфейс «правильный» для Swift 3.0, но я озадачен тем, как я упаковываю и потребляю этот новый файл заголовка Swift в своих приложениях, учитывая, что SDK является библиотекой Cocoapod (а не фреймворком), а также как изменить файл podspec.

Любая помощь/советы/направления приветствуются!

+0

Проверьте настройки сборки для рассматриваемого элемента и посмотрите, установлено ли значение «Использовать устаревшее быстрое» значение «false/off». – Multinerd

+0

есть некоторые изменения в 'Any' и' AnyObject' в swift3. –

ответ

0

Если вы хотите использовать Swift 2.3 в xcode 8, вы можете использовать устаревшее.

+0

3.0 заменяет 2.3. В конечном итоге ему придется обновить его. – Multinerd

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

  • Нет связанных вопросов^_^