#javascript #ios #cordova #geolocation #ios8
#javascript #iOS #кордова #геолокация #ios8
Вопрос:
Это скорее информационный пост: последние несколько дней я боролся с нефункциональным приложением геолокации в последней бета-версии iOS 8.
Сначала я не был уверен, был ли он изолирован для iOS 8, или это была проблема device vs simulator, но после повторной загрузки XCode 6 Beta 2 (по какой-то причине у моей первой загрузки был сломанный симулятор), я подтвердил, что действительно, симулятор iOS 8 Beta 2 не казалсямне нравятся мои попытки получить геолокацию.
Сначала вызов, похоже, вообще не работал; затем я изменил включение phonegap.js
на включение cordova.js
и, наконец, добился некоторого прогресса. Документация по этому поводу ужасна, так как следующие руководства в официальных документах, похоже, заставляют поверить, что они взаимозаменяемы. Я бы посоветовал тем, у кого есть проблемы, сначала проверить это.
Вместо того, чтобы запускать функции navigator.geolocation.getCurrentPosition(....)
обратного вызова, как ожидалось, вместо этого он зависнет и вообще ничего не будет делать. Иногда переход от страницы к ней и обратно приводил к обратному вызову с ошибкой, но это было очень непоследовательно. После установки { timeout: 5000 }
опции, казалось, что он продолжает отсчитывать время при каждом вызове. Не было никаких ошибок в консоли, никаких ошибок в XCode, ничего. Функция успеха просто не будет выполняться, точка, и обратный вызов ошибки тоже не будет, если я явно не установил тайм-аут через X секунд. Это ошибка, изолированная от бета-версии iOS 8, поэтому для большинства (пока) это не проблема, но я чувствовал, что должен опубликовать это на случай, если кто-то столкнется с этим. Я также буду размещать сообщения в Центре разработки Apple.
Комментарии:
1. Я сталкиваюсь с той же проблемой. Моя функция ошибки настроена на получение местоположения по IP-адресу, поэтому использование тайм-аута все равно работает. Однако хотелось бы, чтобы это было исправлено. Вы должны подать отчет об ошибке.
Ответ №1:
Это известная проблема, и она исправлена здесь:
Только что протестировал его в iOS8, он работает.
Выполните следующую команду в папке platforms / ios вашего проекта phonegap:
cordova plugin rm org.apache.cordova.geolocation
cordova plugin add https://github.com/apache/cordova-plugin-geolocation.git
По какой-то причине он удаляет CDVLocation.m из списка компиляции, вам нужно отменить это.
Записи в XXX.xcodeproj/project.pbxproj:
979B00CA27D6412CB8C6CF74 /* CDVLocation.m in Sources / = {isa = PBXBuildFile; fileRef = E3B4F7C4AF8242A09E9BF8C1 / CDVLocation.m */; };
979B00CA27D6412CB8C6CF74 /* CDVLocation.m in Sources */,
Без этих 2 строк плагин недоступен для использования в приложении.
Если у вас есть этот файл в системе управления версиями, просто отмените удаления, связанные с CDVLocation.m в XXX.xcodeproj/project.pbxproj.
Если нет, попробуйте добавить CDVLocation.m на этапе компиляции исходных текстов на этапах сборки в настройках проекта.
Комментарии:
1. Я сам не проверял это, но собираюсь пойти дальше и принять этот ответ, поскольку он подтверждает исправление, о котором я только что прочитал. Спасибо за обновление!
2. Простое переключение URL-адреса плагина в моем ху-ке работает. Ничего не требуется, как манипулировать проектом Xcode.
3. Да, пришлось добавить CDVLocation.m на этапы сборки. Спасибо @onlyurei
4. я просто подтверждаю, что если вы добавите add CDVLocation.m в «Этапы сборки» -> «Скомпилировать исходные тексты», это будет работать для последней версии iOS 8 (официальная версия, а не БЕТА-версия или RC)
5. Просто попробовал это сделать, и это сработало. добавлен в качестве плагина через командную строку.