#cocoa #plugins #webkit #npapi #firebreath
#cocoa #Плагины #webkit #npapi #firebreath
Вопрос:
Недавно я обнаружил, что модель webkit не будет поддерживаться Apple в последней версии Lion и Safari и что все переходят на Firebreath project, чтобы использовать NPAPI.
У меня есть базовое приложение Cocoa, которое связывается со следующими собственными фреймворками:
- CoreGraphics
- CoreData
- IOKit
- 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 :/ (однако преимущества перевешивают недостатки)