Phonegap, Кордова - Проблема с плагинами

Я установил Phonegap (3.0.3) и CLI Cordova.

Я также запускаю iOS в качестве платформы (подтвержденный с помощью $ cordova platforms ls)

Я установил плагины ($ cordova plugins ls)

org.apache.cordova.core.dialogs
org.apache.cordova.core.vibration

Однако, когда я запускаю эту консольную команду ($ cordova emulate ios), я получаю следующую ошибку.

Undefined symbols for architecture i386:
  "_AudioServicesAddSystemSoundCompletion", referenced from:
      _playBeep in CDVNotification.o
  "_AudioServicesCreateSystemSoundID", referenced from:
      _playBeep in CDVNotification.o
  "_AudioServicesDisposeSystemSoundID", referenced from:
      _soundCompletionCallback in CDVNotification.o
  "_AudioServicesPlaySystemSound", referenced from:
      _playBeep in CDVNotification.o
      -[CDVVibration vibrate:] in CDVVibration.o
  "_AudioServicesRemoveSystemSoundCompletion", referenced from:
      _soundCompletionCallback in CDVNotification.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)


** BUILD FAILED **


The following build commands failed:
    Ld build/MyApp.app/MyApp normal i386
(1 failure)

Я следил за указаниями на странице API здесь (http://cordova.apache.org/docs/en/edge/cordova_notification_notification.md.html#Notification), а ниже мой файл config.xml в MyApp > www > config.xml файл, который вызывает ошибку.

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.myapp.myapp" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>MyApp</name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="[email protected]" href="#" onclick="location.href='http://cordova.io'; return false;">
        Apache Cordova Team
    </author>
    <plugin name="Notification" value="CDVNotification" />
    <access origin="*" />
    <preference name="fullscreen" value="true" />
    <preference name="webviewbounce" value="true" />   
</widget>

Любые предложения, что может быть проблемой, и как я могу это исправить?

Ответы

Ответ 1

Добавьте инфраструктуру AudioToolbox в проект Xcode:

Ваша цель > Сборка фаз > Ссылка на двоичные файлы с библиотеками

Нажмите кнопку "+"

Выберите AudioToolbox.framework

Ответ 2

Вы запустили cordova build ios?

тогда cordova emulate ios

Эта ошибка возникает, если вы не добавляете источник в источники компиляции в фазе сборки. Попробуйте добавить плагины с помощью:

TargetSettings → Сборка фаз → Скомпилировать источники → добавить свой .m класс

Ответ 3

Взгляните на CDVNotification.h - строки #import сообщают вам все, что вам нужно добавить к фазе сборки ваших компиляторов.

Фонд/Foundation.h UIKit/UIKit.h AudioToolbox/AudioServices.h

Добавьте эти 3, и они будут скомпилированы.

ОБНОВЛЕНИЕ - требуется дополнительное изменение в CDVNotification.m

playBeep() вызывает soundCompletionCallback() soundCompletionCallback вызывает playBeep()

Для того чтобы playBeep был без ошибок, должен быть объявлен soundCompletionCallback. Простое решение - объявить его перед playBeep, а затем определить его после.

Добавьте эту строку непосредственно перед статическим void playBeep (int count)

// declared but not defined to avoid undeclared error in playBeep
static void soundCompletionCallback(SystemSoundID  ssid, void* data);