Ответ 1
Добавьте инфраструктуру AudioToolbox в проект Xcode:
Ваша цель > Сборка фаз > Ссылка на двоичные файлы с библиотеками
Нажмите кнопку "+"
Выберите AudioToolbox.framework
Я установил 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>
Любые предложения, что может быть проблемой, и как я могу это исправить?
Добавьте инфраструктуру AudioToolbox в проект Xcode:
Ваша цель > Сборка фаз > Ссылка на двоичные файлы с библиотеками
Нажмите кнопку "+"
Выберите AudioToolbox.framework
Вы запустили cordova build ios
?
тогда cordova emulate ios
Эта ошибка возникает, если вы не добавляете источник в источники компиляции в фазе сборки. Попробуйте добавить плагины с помощью:
TargetSettings → Сборка фаз → Скомпилировать источники → добавить свой .m класс
Взгляните на 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);