2016-01-29 1 views
0

У меня возникла проблема с получением моего модуля PerfectServer (называемого MCPushServer) для компиляции на Ubuntu при ссылке на обновленную версию PerfectLib. Что касается моего предыдущего вопроса, я обновил PerfectLib, чтобы использовать lazy var param postBodyString для WebRequest для доступа к данным тела JSON. Все это отлично работает на Mac, но когда я копирую новые файлы на виртуальную машину Linux и перекомпилирую проект, мой RegistrationHandler в MCPushServer не скомпилируется, так как он не распознает параметр в WebRequest:PerfectLib on Ubuntu: модуль действительно ссылается на устаревший сгенерированный интерфейс

Выход из компилятора :

  • MCPushServer/MCUnregistrationHandler.swift:33:28: error: value of type 'WebRequest' has no member 'postBodyString' let bodyData = request.postBodyString

Подробное описание шагов ниже:

  • COPIE d PerfectLib на мой удаленный сервер
  • Удалить ранее существовавшего PerfectLib.so
  • запустить «сделать»: PerfectLib.so будет создан заново, и он содержит ссылку на «postBodyString (Grep файл и он вернулся матч)
  • беги 'Sudo сделать установку' для ссылки/пользователь/местные/Библиотека /> все хорошее
  • скомпилирован Re-PerfectServer
  • кд в примерах/MCPushServer и запустить сделать: выше ошибка происходит

Я также попытался прокомментировать существующие методы в W ebRequest (например: lazy var params) и повторил процесс: я бы ожидал, что мой обработчик будет жаловаться на отсутствующий элемент в WebRequest, но он, похоже, справляется, как будто ничего не произошло.

Мне кажется, что есть какой-то устаревший сгенерированный интерфейс PerfectLib/WebRequest, который мой модуль ссылается при попытке построить. Кто-нибудь может указать мне в правильном направлении здесь?

ответ

0

Проводя длинный ответ на мой собственный вопрос, если он может помочь кому-то другому портировать свой разработанный XCode код в Linux.

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

Проблема связана с использованием официального выпуска Swift 2.2 для Ubuntu: это не содержит (незавершенное производство) библиотеку Swift Foundation. При разработке на OS X это не проблема, поскольку я считаю, что последний XCode поставляется с базовой библиотекой Swift Foundation, и в любом случае он скомпилирует любой тип, определенный в библиотеке Foundation Objective-C.

Установка текущего дистрибутива и компилятора Swift 3.0 решила проблему.

Мое лучшее предположение заключается в том, что реализация postBodyString ссылается на некоторый Foundation API, который требует либо библиотеки Objective-C, либо библиотеки Swift. Я бы предпочел, чтобы WebRequest не компилировался в первую очередь, а не раскрывал интерфейс для инкриминируемых методов, но это таинственность, которую я оставлю для кого-то с большим опытом в этом вопросе.

Кроме того, это также объясняет, почему я получаю ошибки при использовании индексов на «JSONDictionaryType»:

> типа «JSONDictionaryType» не имеют членов индексного

JSONDictionaryType имеет типовой-псевдонимы в словаре, но снова Мне не хватало библиотеку Foundation, которая расширяет базовый тип, заставляя его соответствовать «SequenceType», что является предварительным условием для подписи.

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