requestFileSystem никогда не возвращает Cordova 3.4 на iOS

Я нахожусь в процессе обновления своего приложения Cordova, которое в последний раз было выпущено в январе — до значительных изменений в плагине File. Все работает нормально в пульсации (старый стиль), но при запуске на симуляторе iOS или устройстве iOS (iOS 7.1) мой вызов window.requestFileSystem никогда не вернется (ни сбой, ни успех). Это происходит как для постоянных, так и для временных файловых систем.

Я предполагаю, что у меня есть некоторые проблемы с конфигурацией. Тем не менее, я пробовал все безрезультатно. Добавляя консольные сообщения, я обнаружил, что вызов window.requestFileSystem в моем коде действительно вызывает requestFileSystem в requestFileSystem.js плагина. Я также обнаружил, что все методы CDVFile вызываются (в следующем порядке: initWithWebView, pluginInitialize, getExtraFileSystemsPreference, getAvailableFileSystems, registerExtraFileSystems (который регистрирует библиотеку, библиотеку-nosync, документы, документы-nosync, кеш, пакет, корень)).

Однако вызов exec в requestFileSystem.js для «requestFileSystem» просто никогда не возвращается и никогда не выполняет метод в CDVFile. (Обратите внимание, что это происходит после возврата события deviceready.)

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


person dwhogg    schedule 10.05.2014    source источник
comment
Какую версию плагина File вы используете?   -  person Kerri Shotts    schedule 10.05.2014
comment
Использование последней выпущенной версии (1.1.0)   -  person dwhogg    schedule 12.05.2014
comment
Обновление: все еще борюсь с проблемами файловой системы в целом. Однако проблема с никогда не возвращающимся запросомFileSystem не возникает, если я сразу вызываю ее после того, как устройство готово (в отличие от более позднего). Мое приложение использует jquery mobile и backbone, а также различные другие библиотеки, но на данный момент не знаю, что может быть причиной такого поведения.   -  person dwhogg    schedule 13.05.2014
comment
Вам действительно нужно дождаться события deviceReady, прежде чем использовать плагин File, но вы говорите, что это не удастся: setTimeout(someFunctionThatRequestsFileSystem, 10000)? То есть, deviceReady обязательно будет вызван в течение 10 секунд, но вы не получите ответа по истечении тайм-аута?   -  person Kerri Shotts    schedule 13.05.2014
comment
Кроме того, возможно, стоит удалить все другие ваши библиотеки (даже если они находятся в демонстрационном проекте), чтобы добраться до корня проблемы. Это может быть какая-то другая библиотека, мешающая   -  person Kerri Shotts    schedule 13.05.2014
comment
Я всегда вызываю requestFileSystem ПОСЛЕ устройства, и да, он никогда не возвращался. Однако на данный момент я больше не могу воспроизвести эту проблему! Я также столкнулся с другими странными проблемами, такими как getDirectory (вызванная из корневой записи каталога с созданием true, эксклюзивным false), которая никогда не возвращалась. К сожалению, я не смог определить точные условия, когда это происходит, так как проблемы возникают периодически! В общем, я обнаружил, что использование последнего файлового плагина на Android работает просто отлично, но боролся с нестабильностью на iOS (как на симуляторе, так и на устройстве).   -  person dwhogg    schedule 16.05.2014


Ответы (1)


Оказывается, проблема, возникшая здесь, не была напрямую связана с плагином файловой системы. Причина, по которой requestFileSystem (или другие вызовы File Plugin, такие как getDirectory, упомянутые выше) никогда не возвращались, заключалась в том, что вызов cordova.exec никогда не возвращался, что могло произойти в любое время ПОСЛЕ загрузки консольного плагина (org.apache.cordova.console) (затем любой последующий вызов cordova.exec просто зависнет). Удаление плагина консоли устранило мои проблемы.

Почему удаление консольного плагина было исправлением, я менее уверен. Однако у меня есть собственный logger.js, который может как-то мешать консольному плагину? Надеюсь, это проблема, специфичная для моего кода. Не уверен, почему это было проблемой только для меня на iOS, а не на Android.

person dwhogg    schedule 16.05.2014
comment
Я знаю, что плагин консоли Cordova должен делать разные вещи на iOS/Android, и, вероятно, поэтому вы видели различное поведение. Если вы можете точно воспроизвести то, что вызывает проблему в вашем коде, возможно, вам следует отправить сообщение о проблеме, чтобы плагин мог быть лучше защищен от подобных вещей (или, по крайней мере, он мог быть хорошо известен, что не делать)? - person Kerri Shotts; 19.05.2014