質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

1回答

2589閲覧

iOS端末で、Cordovaのプラグインが使用できない。

y_oota

総合スコア14

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2017/06/07 04:50

Monaca(Cordova)を用いてアプリの開発をしているのですが、iOS端末にて下記コードを実行したところ、
以下のログが出力されます。
Androidでは正常に動作するのですが、どのようにすれば解決できますでしょうか?
よろしくお願いいたします。

出力ログ

deviceready has not fired after 5 seconds
Channel not fired: onCordovaReady
Channel not fired: onPluginReady

使用プラグイン

・File (zipの中身のファイルを端末に保存するために使用)

使用ライブラリ

・zip.js (zip解凍に使用)

バージョン

・Fileプラグイン:4.3.3
・cordova : 6.2.0

ソースコード

JavaScript

1//index.js 2var zipUrl = "http://example.com/target.zip": //zipがおかれている場所を示すurl 3const ZIP_EXTRACTION_DIRECTORY = "zip/temp/"; //zipファイル展開先 4 5//端末の準備が完了でき次第、zip解凍を行う。 6ons.ready(function(){ 7 unzipAndExpansion(zipUrl, ZIP_EXTRACTION_DIRECTORY, function () { 8 alert("zip解凍完了!"); 9 } 10 , function () { 11 //zipファイルの解凍に失敗した時の処理。 12 alert("zipファイルの展開に失敗しました"); 13 }); 14});

JavaScript

1//zipExpansion.js 2/** 3 * ZIPファイルをサーバーから取得し、展開します。 4 * @param {string} url...ZIPファイルの格納先 5 * @param {string} pathBase...ZIPファイルの展開先 6 * @param {function} successCallback...成功時のコールバック関数(任意) 7 * @param {function} faildCallback...失敗時のコールバック関数(任意) 8 */ 9function unzipAndExpansion(url, pathBase, successCallback, faildCallback) { 10 //ディレクトリ構成に応じて、適宜変更 11 zip.workerScriptsPath = "lib/zip_js/"; 12 13 if (pathBase.slice(-1) != '/') { 14 pathBase = pathBase + '/'; 15 } 16 17 zip.createReader(new zip.HttpReader(url), function (reader) { 18 reader.getEntries(function (entries) { 19 console.log("go to sendEntry"); 20 sendEntry(entries, entries.length); 21 }); 22 }, function (onerror) { 23 // onerror callback 24 console.log("zip get error."); 25 }); 26 27 function sendEntry(entryArray, target) { 28 if (target <= 0) { 29 //すべてのファイルの作成が完了した。 30 //コールバック関数(任意)を呼び出す 31 if (successCallback != null) { 32 successCallback(); 33 } 34 return; 35 } 36 37 entryArray[target - 1].getData(new zip.BlobWriter(), function (text) { 38 39 var fileName = entryArray[target - 1].filename; 40 var fileContent = text; 41 42 getDirectory(pathBase, function (directoryEntry) { 43 //取得したファイル名からディレクトリ部分を切り取る 44 var fileNameInDir = fileName.substring(0, fileName.lastIndexOf('/')); 45 //取得したファイル名からファイル名部分を切り取る 46 var pathinName = fileName.substring(fileName.lastIndexOf('/') + 1); 47 //ファイル作成メソッド呼び出し 48 createFile(pathBase + fileNameInDir + "/", pathinName, fileContent, function () { 49 var nextTarget = target - 1; 50 //ファイルの作成が完了し次第、次のファイルを作成する。 51 sendEntry(entryArray, nextTarget); 52 }); 53 54 }, function (error) { 55 console.log("get directory error"); 56 if (faildCallback != null) { 57 faildCallback(); 58 } 59 }); 60 }); 61 } 62} 63 64/** 65 * ファイルを新規作成・上書きします。 66 * @param {string} savePath 67 * @param {string} fileName 68 * @param {string} content. 69 */ 70function createFile(saveDirectoryPath, fileName, content, successCallback) { 71 console.log("request file system....(createFile method)"); 72 requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 73 console.log("get file system....(createFile method)"); 74 //保存場所のディレクトリを作成する 75 getDirectory(saveDirectoryPath, function (directoryEntry) { 76 //ディレクトリが完成し次第、ファイルの作成を行う。 77 directoryEntry.getFile(fileName, { create: true }, function (fileEntry) { 78 fileWriter = fileEntry.createWriter(function (fileWriter) { 79 80 //ファイル書き込み 81 fileWriter.write(content); 82 //ファイルの作成に成功した時のコールバック関数を呼び出す。 83 console.log("file write success : " + fileName); 84 successCallback(); 85 }, function (error) { 86 console.log("file write error"); 87 }); 88 }); 89 }); 90 } 91 , function (error) { 92 //ファイル作成エラー 93 console.log("create file error"); 94 }); 95} 96 97function string_to_buffer(src) { 98 return (new Uint16Array([].map.call(src, function (c) { 99 return c.charCodeAt(0) 100 }))).buffer; 101} 102 103 104/** 105 * ディレクトリを取得または新規作成します。 106 * 成功時のコールバック関数の引数には directoryEntry が入ります。 107 * @param {string} createDirectoryPath…作成するディレクトリのパス 108 * @param {function} successCallback…作成成功時のコールバック関数 109 */ 110function getDirectory(createDirectoryPath, successCallback) { 111 console.log("request file system....(getDirectory method)"); 112 113 //※iOS端末では、ここのrequestFileSystemメソッドのコールバック関数が実行されていない、、、。 114 requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 115 console.log("get file system....(createFile method)"); 116 117 fileSystem.root.getDirectory(createDirectoryPath, { create: true }, function (directoryEntry) { 118 //この時点で成功した場合は成功時のコールバック関数を呼び出す 119 successCallback(directoryEntry); 120 }, function (error) { 121 //失敗した場合はディレクトリ作成を行う 122 var directoryAry = createDirectoryPath.split('/'); 123 _creteDirectoryInner(directoryAry, -1, 0, successCallback); 124 }) 125 }, function(error) { 126 console.log("request file system error.(get directory method)"); 127 }); 128 129 function _creteDirectoryInner(dirAry, parentIndex, childIndex, successCallback) { 130 131 if (dirAry.length <= childIndex) { 132 //ディレクトリの作成が正常に終了。ファイル作成のためのdirectoryEntryを取得し、コールバック関数を呼び出す。 133 requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 134 135 //directoryEntryの対象のディレクトリのパスを作成。 136 var createdDirectory = ""; 137 for (var i = 0; i < dirAry.length; i++) { 138 139 if (i > 0) { 140 createdDirectory += "/"; 141 142 } 143 createdDirectory += dirAry[i]; 144 } 145 146 fileSystem.root.getDirectory(createdDirectory, { create: false }, function (directoryEntry) { 147 //directoryEntryが取得でき次第、コールバック関数を呼び出す。 148 successCallback(directoryEntry); 149 }); 150 }); 151 return; 152 } 153 154 requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 155 //new directory path 156 var newDirectory = ""; 157 if (parentIndex == -1) { 158 newDirectory = dirAry[childIndex]; 159 } else { 160 for (var i = 0; i <= childIndex; i++) { 161 newDirectory += dirAry[i]; 162 if (i != childIndex) { 163 newDirectory += "/"; 164 } 165 } 166 } 167 168 fileSystem.root.getDirectory(newDirectory, { create: true }, function (directoryEntry) { 169 //next dir 170 parentIndex++; 171 childIndex++; 172 _creteDirectoryInner(dirAry, parentIndex, childIndex, successCallback); 173 }, function (error) { 174 //ディレクトリ作成エラー 175 console.log("create directory error"); 176 }); 177 }, function (error) { 178 //ファイルシステムアクセスエラー 179 console.log("file system access error"); 180 }); 181 } 182}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

MonacaLocakkitにてFileプラグインのバージョンを変更したところ、期待通りの動作となりました。
どうやら、Monacaデバッガーで使用しているFileプラグインのバージョンが悪く、iOSでは動作しないようです。(2017/06/09時点)

投稿2017/06/09 03:23

y_oota

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問