カテゴリーアーカイブ iOS

村上 著者:村上

【Cordova】iOSの「The GOOGLE_APP_ID either in the plist file ‘GoogleService-Info.plist’ or the one set in the customized options is invalid.」エラーの対処法

タイトルが長くてすみません。
今回は、Cordovaで開発中のアプリが、Simulator・実機問わず、急に実行時に落ちる様になってしまったので、その対処法についてです。

ちなみに、エラー全文はこちらです。

The GOOGLE_APP_ID either in the plist file ‘GoogleService-Info.plist’ or the one set in the customized options is invalid. If you are using the plist file, use the iOS version of bundle identifier to download the file, and do not manually edit the GOOGLE_APP_ID. You may change your app’s bundle identifier to ‘(null)’. Or you can download a new configuration file that matches your bundle identifier from https://console.firebase.google.com/ and replace the current one.

凄く長いので、読むのも一苦労ですが、Google翻訳にかけてみたところ、「‘GoogleService-Info.plist’またはカスタマイズされたオプションに設定されているGOOGLE_APP_IDは無効です。」とのこと。
エラー文の中にもある「GoogleService-Info.plist」が何らかの理由で壊れていることが原因らしいです。

なお、今回参考にした投稿はこちら。

iOS : invalid GOOGLE_APP_ID in GoogleService-Info.plist or set in the customized options #308 − fechanique/cordova-plugin-fcm
https://github.com/fechanique/cordova-plugin-fcm/issues/308

今回のエラーと全く同じ質問でした。
どうやら「GoogleService-Info.plist」ファイルは壊れやすいようです。

 

対処法は至って簡単です。
私の環境では、platforms/ios/[プロジェクト名]/Resources/Resources にある GoogleService-Info.plist が壊れていたことが原因だったため、その一つ上のディレクトリの platforms/ios/[プロジェクト名]/Resources/ にある「GoogleService-Info.plist」をコピーするだけでした。
なお、すでにファイルが有る場合は上書きします。
あとは、通常通り実行すれば、問題なく起動・動作しました。
これで一件落着です。

 

以上、iOSの実機でアプリが実行できなかったときの対処法でした。
とりあえず、わからないエラーは丸々コピーして、Googleなどで検索しましょう。
大概の投稿者は、投稿記事にエラー文を載せているので、2〜3記事も見れば、解決策がヒットするはずです。

  • この記事いいね! (0)
takahashi 著者:takahashi

My Data Managerで今月使えるデータ量を常に表示

以前入れていたデータ使用量をカウント・表示してくれるアプリ MyDataManager を久々にインストールしてみました。

Androidの場合、システムに標準でデータカウントをしてくれる機能がついていますが、カウントと指定容量以上を超えたら制限、および通信制限をしてくれるというシンプルなものです。

ライトユーザーであればこれで十分なのですが、自分のようにテザリングで使っていてすぐに通信量を(通知バーなどで)確認したかったり、シェアプランなどで一つのデータ容量を複数端末で共有している場合はOS標準のものでは対応できません。

一方、MyDataManagerであれば、通知バーにも出せますし、複数端末で使用状況を共有することもできるようになっています。

以前はMyDataManagerがCPUリソースを多く消費していたことがあったのでしばらく使用するのをやめていたのですが、やっぱり必要性を感じて先日再インストールしました。

最後に使ってからかなり改良や機能追加が行われており、さらに使いやすくなった印象です。
プランの設定オプションに、以前からあったシェアプラン対応の他に、特定アプリのデータ量カウント対象外プランなども追加。

比較的新しく登場したプラン携帯にもばっちり対応していて、実用感が増しています。

勿論Android標準アプリが備えているような使用量警告通知やデータ通信の自動停止などの機能も揃えてますし、日毎の使用量も同時に出してくれたりとかなり至れり尽くせりです。

スマホでモバイルルーターのように常に使用データ量を確認したり、シビアなデータ通信管理をしたい方には是非オススメしたいアプリです。

Android版
https://play.google.com/store/apps/details?id=com.mobidia.android.mdm&hl=ja

iPhone版
https://itunes.apple.com/jp/app/my-data-manager-%E9%80%9A%E4%BF%A1%E9%87%8F%E7%AF%80%E7%B4%84/id477865384?mt=8

  • この記事いいね! (0)
村上 著者:村上

【Cordova】端末にインストールされたアプリのバージョンを確認する方法

以前、JavaScriptでストアに公開されたアプリのバージョンを取得する方法について投稿しましたが、今回はアプリ自体のバージョンを確認する方法です。
これらを組み合わせれば、端末にインストールされているアプリのバージョンが、最新なのかどうかをチェックすることができます。

使うプラグインはこちら。

GitHub – whiteoctober/cordova-plugin-app-version: Cordova plugin to return the version number of the current app
https://github.com/whiteoctober/cordova-plugin-app-version

Cordova AppVersion plugin というプラグインです。

で、以前のストアに公開済みのアプリのバージョンを取得する方法がこちら。

【JavaScript】App Storeに公開済みのアプリのバージョンを取得する方法
https://cpoint-lab.co.jp/article/201804/【javascript】app-storeに公開済みのアプリのバージョンを取得/

 

さて、プラグインの使い方ですが、まず下記のコマンドを、コマンドプロンプトやiTermなどのターミナルアプリで実行し、プラグインをインストールします。

cordova plugin add cordova-plugin-app-version

インストール後は、下記のコードを、アプリのバージョンを取得したいタイミングで実行します。

cordova.getAppVersion.getVersionNumber(function (version) {
    // アプリのバージョンチェック処理を記述
}, function(error){
    // エラー時の処理
});

なお、私は下記のようにプログラムしました。

$.ajax({
    url: 'https://itunes.apple.com/lookup?id=[iOSのアプリID]',
    method: 'GET',
    dataType: 'jsonp',
    success: function(data, textStatus, xhr) {
        var storeVer = data.results[0].version;
        cordova.getAppVersion.getVersionNumber(function(appVer) {
            if(appVer != storeVer){
                // アプリのバージョンが最新でなかった時の処理
            } else {
                // アプリが最新バージョンだった時の処理
            }
        }, function(error){
            // アプリのバージョンが取得できなかった時の処理
        });
    }, error: function(xhr, textStatus, error){
        // ストアのアプリバージョンが取得できなかった時の処理
    }
});

で、バージョンが一致しない=アプリが最新ではないと判断し、アップデートを促すようにしています。

 

以上、アプリのバージョンを確認する方法でした。
Google Playのアプリのバージョンが取得できないのがネックですが、そこは Android と iOSのバージョンを合わせて、かつほぼ同じタイミングでアプリを更新するようにしたので、何とかなりました。
ということで、Cordovaアプリを開発中の方は、是非参考にしていただければ幸いです。

  • この記事いいね! (0)
村上 著者:村上

【Mac】Simulator使用時にMacのキーボードから@が入力できない【未解決】

今回は、Macのキーボード入力についてです。
タイトル通りですが、何故かSimulatorで「アットマーク@」が入力できません。
別に「アットマーク」と日本語入力して、それを変換すれば入力できないこともないのですが…流石に手間すぎるので、解決策を模索している最中です。
ちなみに、タイトルにあるとおり、まだ解決できていません。

 

解決には至りませんでしたが、今回参考にさせていただいた記事はこちら。

Macで@が打てない&JISキーボードがUSキーボードと認識される現象の原因と解決策
https://fiv-nd.com/mac-keyboard-usjis.html

こちらは Simulator ではなく、通常の入力時にアットマークが入力できないときの対処法でした。
ちなみに、こちらの原因は、キーボードが JIS ではなく US で認識されていることが原因とのことでした。

私の環境でも確認したのですが、ご覧の通り、

キーボードの配列はJISとなっていました。
キーボードの設定は問題ないようでしたね。

もしかしたら、Simulatorの言語が英語なのが悪いのでは?とも思い、設定から変えたのですが、それも効果なしでした。

 

結局解決策は見つかりませんでした…。
時間を見つけてまた探したいと思います…。

  • この記事いいね! (0)
著者:aoki

iPhone「このアクセサリは使用できない可能性があります。」の対処法

このアクセサリは使用できない可能性があります。

家でiPhoneを充電しようとしたところ唐突にこのような表示が現れ充電ができなくなってしまいました。
唐突だったので焦りましたが接触不良などで充電できない事もあったのでいくつか原因を調べてみました。

1:接触不良
よくあるパターンですね。
という事で何度か抜き差しをしてみましたが毎回「このアクセサリは使用できない可能性があります。」と表示されるだけで一向に充電される気配がありません。

2:OS再起動
接触不良ではないとなかったので次に試したのは再起動。
しかしながら複数回再起動しても解消しませんでした。

3:ソフトウェアアップデート
こちらも疑いましたがOSは最新だったので無関係。

4:ケーブルを変える
最後に違うケーブルで試した所充電ができました!

調べていくとケーブル自体が壊れている場合に「このアクセサリは使用できない可能性があります。」と表示される場合があるようです。
特にサードパーティ製のケーブルは壊れやすく、私の使っていたケーブルもサードパーティ製でした。
安く買えるサードパーティも悪くないですがiPhoneを買ってから使い続けても壊れない純正のケーブルやはり凄い。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】アプリ内にAdMobのバナー広告を導入する方法

タイトル通り、Cordovaで開発したアプリにバナー広告を入れる方法です。
ちなみに、AndroidとiOSの両方に対応しています。
本当はネイティブ広告という、Twitterのタイムラインで表示されるような、記事っぽくみえる広告を導入したかったのですが、どうやらプラグインが対応していないようです。

今回使ったのは、cordova-plugin-admob-free というプラグインです。
GitHubはこちら。

GitHub – ratson/cordova-plugin-admob-free: Cordova AdMob Plugin
https://github.com/ratson/cordova-plugin-admob-free

 

まずインストールは下記のコマンドをコマンドプロンプト等で実行します。

cordova plugin add cordova-plugin-admob-free --save

インストールが終わったら、下記のコードをプログラムに記述するだけ!
なお、私の環境では、index.js というファイルに記述しました。

// AdMob 広告ID
var admobid = {}
if (/(android)/i.test(navigator.userAgent)) {  // Android
    admobid = {
        banner: 'ca-app-pub-3940256099942544/6300978111'
    }
} else if (/(ipod|iphone|ipad)/i.test(navigator.userAgent)) {  // ios
    admobid = {
        banner: 'ca-app-pub-3940256099942544/2934735716'
    }
}

document.addEventListener('deviceready', function () {
    // バナー広告表示
    admob.banner.config({
        id: admobid.banner,
        isTesting: true,  // テスト広告
        autoShow: true,
    })
    admob.banner.prepare()
}, false);

コードの上の方で、アプリを使っている端末が Android なのか iOS なのかを取得しています。
Android と iOS では、広告のIDが異なるので、この処理も重要です。

なお、広告のIDはテスト用のものを使っています。
なんでも、動作を確認している段階のアプリで本番用の広告IDを使うと、最悪の場合アカウント停止になることもあるとのことだったので…。
絶対にそれは避けたいので、慎重に。

ちなみに、広告の種類は他に「インタースティシャル」という画面に大きく表示される広告と、あとは「動画広告」もあります。
このあたりは、お好みで使い分けてください。
…が、個人的に画面全部を覆うような広告は嫌いなので、使うとすればバナー広告かな。

 

以上、アプリ内に広告を入れる方法でした。
アプリの利用者数が増えてきたら、導入を検討していきたいと思います。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】Android・iOSアプリを終了させる処理

Cordovaのアプリを開発中、プログラムからアプリを終了させる処理を行いたかったので、やり方を調べました。
が、結局アプリを終了しない処理で落ち着いたんですけどね。

今回参考にさせていただいたサイトはこちら。

monaca(cordova)でアプリを終了させる(Androidのみ)
https://blog.mitsuto.com/cordova-exit

 

で、アプリを終了させる処理は、実はこれだけ。

// アプリを終了する
navigator.app.exitApp();

アプリを終了させたいタイミングで、上記の一行を書くだけです!
思ったよりも簡単でした。

ですが、この処理は iOS では動作しません。
なので、下記のプラグインをインストールする必要があります。

GitHub – FRD49/iOS-ExitApp: navigator.app.exitApp() on iOS
https://github.com/FRD49/iOS-ExitApp

インストールするときは、下記を実行します。

// iOS-ExitApp のインストール
cordova plugin add com.frd49.cordova.exitApp

// 上のコマンドがエラーになる場合はこちらを実行
cordova plugin add https://github.com/FRD49/iOS-ExitApp.git

プラグインをインストールする時にエラーが発生した場合は、下のコマンドを実行してください。
私の環境では、上のコマンドではインストール元が見つからないとかで失敗しました。

プラグインの追加が完了したら、アプリを再ビルドして、実機で実行すればOKです。
これで、iOS でも「navigator.app.exitApp();」を使ってアプリを終了できるようになります。

 

以上、プログラムからアプリを終了させる方法でした。
が、確かにアプリは終了できるのですが、終了時の挙動が強制終了の時と似ている、というか同じなので、終了する前に「アプリを終了しますか?」の確認ダイアログは必須ですね。

  • この記事いいね! (0)
村上 著者:村上

【Xcode】実機でアプリを起動できない「Could not find Developer Disk Image」エラーの対処法

Xcodeでアプリを開発中に、実機でiOSアプリの動作確認をしようとしたときに遭遇した「Could not find Developer Disk Image」というエラーの対処法について。
こちらのエラーは、iOS端末をアップデートした際、そのバージョンに対応する Disk Image がXcodeになかったために発生するものです。
つまり、iOSのバージョンが新しく、かつXcodeのバージョンが古いときに発生します。

したがって、対処法としては、Xcodeをアップデートして、最新バージョンにするのが一番手っ取り早いです。

 

が、何らかの理由で、Xcodeを更新したくない場合の対処法についてはこちらから。
今回は、こちらのサイトを参考にさせていただきました。

【iOS】端末をアップデート後、Xcodeで実機に書き込めなくなった場合 – Qiita
https://qiita.com/Hakota/items/59b4247a203e2639f8c9

まず、下記のサイトから最新のXcodeをダウンロードしてきます。
https://developer.apple.com/downloads/index.action#
ここで注意することは、Beta版ではない最新バージョンのものをインストールすること。
なお、ダウンロード前に、既存のXcodeの名称を Xcode[バージョン] などに変更しておきましょう。
そうすると、既存のバージョンのXcodeを残したままで、最新のXcodeをインストールできます。

ダウンロードできたら、最新のXcode と、すでにインストール済みのXcode があるかと思うので、それぞれのアイコン上で右クリックして、 パッケージの内容を表示します。
開けたら、下記の場所まで移動します。

Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

すると、下の画像のように、フォルダがずらっと並んでいるかと思います。

で、この一覧を確認すると、今まで使用していた Xcode のフォルダ一覧には、iOS端末のバージョン名のフォルダがないと思います。
なので、最新の Xcode の方から、不足しているフォルダをコピー&ペーストしましょう。

あとは、ファイルを閉じて、Xcodeを再起動すれば完了です!
端末を接続し、実機でアプリを起動すれば、無事実行されるかと思います。

 

ということで、OSのバージョンをアップデートした実機で、iOSアプリを起動できないときの対処法でした。
私の環境ではこれで動いたので、同じことでお悩みの方は是非試してみてください。

  • この記事いいね! (0)
著者:aoki

iPhoneでいきなり「SIMはメッセージを送信しました」と表示される件

車ではスマートフォンはカーナビになるようにエアコン吹き出し口の所に設置できるようにしています。
先日夜に車で走っている際にいきなりiPhoneの通知で「SIMはメッセージを送信しました」と表示されたのを目撃!
その後停車中に確認しようと思ったのですが通知は跡形もなく消え・・・何が起こったのかわかりませんでした。
はっきり言っていきなりSIMがスマートフォンのデータを送った!なんて通知が来たら怖すぎます。

Twitterで検索してみると同じ現象が起こっている人が多数いることも分かりました。

https://platform.twitter.com/widgets.js

https://platform.twitter.com/widgets.js

どうもdocomoユーザだけが発生しているようです。
更に調べると対処法を書いている方がいらっしゃいました。

【iPhone】「SIMはメッセージを送信しました」の意味と対処方法
http://sbapp.net/appnews/app/upinfo/ios11/sim-message-send-78595
こちらの記事によれば

SIMがキャリアアップデートのサーバーに接続をした際に、何らかの通信障害が生じると「SIMはメッセージを送信しました」と画面に表示されることがあるとのこと。

という事らしいです。
なのでスマートフォンがおかしくなったとかウィルスとかそういう危険なものではなさそうですね。
対処法も書かれていましたので同様の現象が起こる方は「キャリアアップデート」の確認をしてみてください。
ちなみに私は電源を1度OFFにしたらそれ以降は1度も出てこなくなりました。

今思うとスマートフォンを触ってるときに振動だけして何も通知が無いという事が何度もあり、「SIMはメッセージを送信しました」が原因だったのかもしれませんね。

  • この記事いいね! (0)
村上 著者:村上

【Xcode】Type ‘UISlider’ does not conform to protocol ‘ValidatableInterfaceElement’エラーへの対処法

久しぶりに遭遇したXcodeでのエラーです。
特に内容を変更した記憶のないアプリを開いてみたら、いきなりビルドエラーが発生しました。
エラー分は下記のとおりです。

Type 'UISlider' does not conform to protocol 'ValidatableInterfaceElement'

どうやら、CocoaPodでインストールした「Validator」というライブラリ内部でエラーが発生していたことまでは突き止めたのですが、その原因がわからず…検索してもヒットしない状況でした。
なお、Validator についてはこちらから。

GitHub – adamwaite/Validator
https://github.com/adamwaite/Validator

が、会社にあるもう一台のMacbookでは問題なく動いていたので、そこが謎でした。

 

で、色々見てみた結果、どうやらXCodeのバージョンが影響していたことが判明!
先日、Xcode をアップデートして 9.3 にしたのですが、これを 9.2 に戻したら問題なく動き、ビルドも完了しました。
……Xcodeは不用意にアップデートしてはだめですね…。

なお、Xcodeの以前のバージョンをインストールする方法は、下記の記事を参考にしました。

Xcodeの旧バージョンをインストールする方法 – Qiita
https://qiita.com/TsukasaHasegawa/items/0d7d5c2cf3a2b8ce8993

ただ、ダウンロードに凄く時間がかかったので、何か別の作業をしながらのんびり待つことをおすすめします。
ダウンロード時間が「残り約60分」の表示を見た時は、正直ため息を付きそうになりました…。

 

ということで、ビルドエラーの解消方法でした。
同僚に聞いたところ、Xcode のバージョンの違いのせいで発生するバグってあるようなので、バグの原因が分からないときに確認するようにしましょう。

  • この記事いいね! (0)