Преобразование приложения cocoa в плагин NPAPI с помощью Firebreath Framework

#cocoa #plugins #webkit #npapi #firebreath

#cocoa #Плагины #webkit #npapi #firebreath

Вопрос:

Недавно я обнаружил, что модель webkit не будет поддерживаться Apple в последней версии Lion и Safari и что все переходят на Firebreath project, чтобы использовать NPAPI.

У меня есть базовое приложение Cocoa, которое связывается со следующими собственными фреймворками:

  1. CoreGraphics
  2. CoreData
  3. IOKit
  4. PFEventTaps (это 3-сторонний фреймворк от: Pfiddlesoft.com )

Я никогда не использовал плагины, так что это немного ново для меня, я начал с руководства по MAC, написанного Ричардом Бейтманом, и, следуя рекомендациям, я заканчиваю шаблоном проекта firebreath для своего личного проекта. следующим шагом, который я сделал, было просто поместить все мои классы Objective-C в папку с исходными файлами, добавив ссылку на 4 фреймворка, наконец, я добавил новые общедоступные методы, которые мне нужно предоставить в подключаемом модуле, в MyProjectPluinApi.h, например( registerMethod(«myMethod», make_method(this, amp; WilmerPlugInAPI::myMethod ));

Когда я создаю проект firebreath, я получаю много ошибок компиляции, одна из них очень повторяющаяся: NSString was not declared in this scope. Ошибка указывает на NSObjCRuntime.h

До сих пор я не могу успешно выполнить эту сборку с помощью XCODE 3.2.6

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

ПОДРОБНЕЕ: 7 ноября 2011: я пытался протестировать простой проект:

  • Сначала я создаю проект testOfFB
    • он создается в /users/Me/Firebreath-dev/build/projects/testofFB
  • затем я изменяю класс testFBApi.cpp и переименуйте его в testFBApi.mm .
  • Я написал класс Objective-c с именем testMath.m и переименовал его в testMath.mm
  • Я добавляю метод Add с подписью:

     -(long) Add:(long)a:(long)b:(long)c;
      
  • Наконец, я изменяю файл testFBApi.mm с помощью этого:

     registerMethod("add", make_method(this, amp;testFBAPI::add ));
      
  • При реализации метода add я создаю экземпляр метода класса objective-c «add», чтобы протестировать вызов моего метода objective-c. Я включил и изменил файл / Mac /projectDef.cmake таким образом:

     target_link_libraries(${PROJECT_NAME}
        ${PLUGIN_INTERNAL_DEPS}
        ${Cocoa.framework} // added line
        ${Foundation.framework} //added line
    )
      

Я запускаю prepmac.sh скрипт, а затем создайте решение xcode, и появятся те же ошибки, плюс некоторые другие, такие как testFBApi, не были объявлены.

Ответ №1:

Трудно сказать без дополнительной информации, но вам может потребоваться обновить файлы cmake, чтобы импортировать нужные вам фреймворки; если вы делаете это вручную в xcode, это, вероятно, также должно работать, но я не пробовал этот способ. Вы должны знать, что добавление его с помощью cmake не добавит его в список фреймворков в xcode, хотя он должен быть там.

Если вам нужно использовать код objective-c и код c в одном файле, вам нужно будет использовать расширение файла .mm (objective-c ), а не более распространенное расширение .m (objective-c).

Помимо этого, мне нужно было бы просмотреть больше вашего кода, чтобы точно угадать, что может быть неправильным; Я бы предположил, что, возможно, у вас отсутствуют включения, например. Обратите внимание, что если у вас был PCH в вашем старом проекте, он, скорее всего, не используется в новом проекте.

Для получения дополнительной информации о добавлении фреймворков с помощью cmake см.http://www.firebreath.org/display/documentation/Using Libraries

Комментарии:

1. Я даю более подробную информацию в исходном сообщении ниже в разделе «ПОДРОБНЕЕ». но в основном я сделал все, что упомянуто, я не знаю, упускаю ли я что-то или я делаю неправильные вещи с включениями фреймворков внутри XCODE. кстати, я все сделал вручную, я не могу придумать другой способ сделать это. С помощью XCODE.

2. Похоже, что у вас отсутствуют включаемые файлы. Готов поспорить, что в вашем исходном проекте есть PCH; когда у вас есть PCH, он автоматически включает что-либо из PCH в каждый файл, но с FireBreath / cmake вы не можете использовать этот PCH, поэтому он больше не работает. Вероятно, вам просто нужно скопировать включаемые оттуда в другие ваши файлы. Есть ли у вас #import <Cocoa/Cocoa.h> в верхней части ваших файлов, на которые жалуются?

3. Хорошо, Taxilian спасибо за вашу помощь, наконец-то мой проект хорошо компилируется. Тем не менее, мне интересно, почему классы objective-c, которые я создал в проекте xcode, отображаются в папке «firebreath-dev»? это кажется таким странным, потому что, когда я закрываю проект, а затем снова открываю его, я не вижу классов objective-c, но когда я просматриваю папку firebreath-dev, я вижу их все там. кстати, если я добавлю еще один новый фреймворк в свой проект и другой класс objective-c, нужно ли мне запускать prepmac.sh опять??

4. xcode добавляет их не в то место; лучше всего добавить файлы в файловую систему, где они вам нужны, а затем повторно запустить сценарий подготовки. Это недостаток использования cmake :/ (однако преимущества перевешивают недостатки)