カテゴリーアーカイブ iOS

村上 著者:村上

【Xcode】「Profile doesn’t match the entitlements file’s values for the application-identifier and keychain-access-groups entitlements.」エラーの対処法

今回は、Xcodeでアプリをリリース用のビルドを行なっているときに遭遇したエラーについてです。
他のアプリを同じようにリリース・ビルドするときにも遭遇したので、今後の自分のためにまとめました。

エラー文はこちら。

Profile doesn’t match the entitlements file’s values for the application-identifier and keychain-access-groups entitlements.

Google翻訳で訳したところ、「プロファイルは、アプリケーションIDおよびキーチェーン・アクセス・グループのエンタイトルメントのエンタイトルメント・ファイルの値と一致しません。」とのこと。
つまり、署名の設定のどこかが間違っているようでした。
ふわっとした把握で申し訳ない!

 

で、解決方法ですが、下の画像の設定を確認します。

TARGET ではなく PROGECT のBuild Settings を開いてください。
そうすると、青く選択されている箇所「Provisioning Profile(Deprecated)」の設定値を確認します。
私の場合、デフォルトだと、Automatic という値が入っていましたが、こちらを正しい Provisioning Profile に変更します。

あとは、いつも通り、Archive を行います。
それが完了すると Organizer が自動起動するので、Validate を実行します。

設定前では、下記の箇所で、エラー文が発生したため先の処理を行えなかったのですが、きちんと設定したため、今回は問題なく実行できました。

 

以上、アプリの署名に関するエラーの対処法でした。
発生するようになったのは、Xcodeをアップデートしてからな気も…?
…Xocde不用意なアップデートは避けましょう。

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

【Xcode】アプリのメモリ使用量を調べる方法

業務内でアプリを修正中、実機で動作確認をしているアプリが頻繁に落ちる現象に遭遇しました。
エラー文はこちら。

CoreAnimation: failed to allocate 183072 bytes

バイト数もほぼこの値でした。

こちらの原因ですが、書いてあるとおり、メモリの割り当てに失敗しているとのこと。
で、対処法を調べたところ、こちらの投稿がヒットしました。

ios – Core animation failed to allocate bytes though NOT using Core Plot – Stack Overflow
https://stackoverflow.com/questions/19403295/core-animation-failed-to-allocate-bytes-though-not-using-core-plot

こちらのページに投稿された対処法によると、「おそらくあなたはアプリ内の他の場所で多すぎるメモリ使用量を使用している可能性があります。コアアニメーションは最初に割り振りに失敗しています(特に大きな割り当てであるため)。」とのことでした。

 

ということで、メモリ使用量を調べようとしているのですが、どうやらXcodeにはメモリ使用量を調べられるDeveloper Toolsがあるとのこと。
それについて書かれているサイトはこちらから確認できます。

Instrumentsを使ってみた – Qiita
https://qiita.com/nohirap/items/39ed06c550b6b5c1f247

こちらを参考に、とりあえず起動してみました。

まず、Xcodeのメニューから、Open Developer Tools を選択し、そこから Instruments をクリックします。

Instruments を選択すると、下記のようなウィンドウが表示されるため、ログを取りたい項目を選択します。

私は Core Animation を選択しました。

そうすると、下のようなウィンドウが表示されるため、左上の録画ボタンのような赤丸アイコンをクリックします。

すると、何かしらの情報が黙々と記録されていきます。
こんな感じで、具体的にメモリ使用量を調査します。

 

以上、Xcodeでメモリ使用量を調べる方法でした。
が、私はまだこのデータの見方がわからない…!
頑張って調べたいと思います…。

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

【Xcode】ビルド時の「[プロジェクト名] has conflicting provisioning settings.」エラーの対処法 その2

Xcodeで証明書を設定した際のエラーの対処法について、以前紹介した方法では解決しなかったので、その2の対処法をまとめました。
ちなみに、以前の記事はこちらから。

【Xcode】ビルド時の「[プロジェクト名] has conflicting provisioning settings.」エラーの対処法
https://cpoint-lab.co.jp/article/201805/【xcode】ビルド時の「プロジェクト名-has-conflicting-provisioning-settings-」エ

 

今回参考にさせていただいたサイトはこちらから。
iOSアプリをリリースする際のプロビジョニングの設定
http://chinotsubo.com/ios-provisioning-config/

で、対処法ですが、アプリの Build SettingsCode Signing Identity に設定されている項目を、下記のように変更するだけです。

なお、記事の投稿者いわく、「イマイチなぜこの設定が正しいのかは理解していない」とのこと。
ちなみに、こちらの記事の下には参考にした記事のリンクもあるので、気になる方はぜひ御覧ください。

 

以上、Xcodeの証明書の設定方法その2でした。
前ご紹介した方法でビルドができなかった方は、この方法もお試しください。
なお、私の環境では、実機を接続してのビルド時に失敗するようでした。
…実機の接続・未接続で、設定等が違う箇所があるんでしょうね。

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

MBaaSのFirebase、脆弱性により情報流出が発覚

Googleが提供しているサービスであるFirebaseから、なんと合計1億件以上の情報流出(Gigazine)が確認されたようです。

合計1億件以上の個人情報がFirebaseの脆弱性によって公開状態に – Gigazine

Firebaseはモバイルアプリのバックエンドに必要な機能(ログイン管理やプッシュ通知など)を一括して提供してくれるmBaaS(mobile Backend as a Service)です。

Firebaseの始め方 – Qiita

Firebaseを使うことで、本来自前でサーバーを用意してアプリのバックエンドを構築しなければいけないところを、Firebaseで対応している機能であればすべてこのサービス上で賄える、というサービスのようです。(恥ずかしながら知りませんでした。)

Gigazineの記事によると、Firebaseとの連携処理がちゃんと行われていないアプリが原因だったとのことです。

この脆弱性はFirebaseデータベースの認証が適切に行われていないときに顕在化するもの。2017年第2四半期に見つかった、アプリ開発者によるデータ格納の保護が不完全なときに情報が露出してしまう「HospitalGown」と呼ばれる脆弱性の変種であると考えられています。

Appthorityのディレクターであるセス・ハーディ氏は「このFirebaseの脆弱性は膨大な量の機密情報を公開してしまうような重大かつ危機的なものです。多くの『脆弱なアプリ』があり、多種多様なデータが公開されてしまっているという事実は、企業がアプリの開発者に頼れず、アプリストアによるチェックや単純な『マルウェアスキャン』でも対策できないということを示します。GDPRやHIPAA、PCIといったデータ保護の規則を守るために、今後はこの種の脆弱性を見つけられるよう、深いアプリ分析に投資する必要があるでしょう」と述べています。

Firebaseのサービスを利用していなければ影響を受けなかったインシデントなので、個人的には”パブリッククラウドの危ない面”が露呈してしまったのかな、という印象です。

対策がされているとはいえ、複数のユーザーで共有している環境である以上、使用する際はこういった危険性も考えて置く必要がありそうですね。

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

【iOS】Xcodeアップデートで発生したエラー「library not found for -lrealmcore-ios」の対処法

タイトル通り、今まで問題なく動作していたのに、Xcodeのバージョンを上げたらエラーが発生しました。

エラー全文はこちら。

library not found for -lrealmcore-ios
Linker command failed with exit code 1 (use -v to see invocation)

ライブラリが見つからないというエラーのようですね。

 

解決策ですが、ライブラリのエラーだったので、再インストールを試してみました。
このアプリでは、管理ツールとして「CocoaPods」を導入していたので、こちらを使いました。

なお、CocoaPods について詳しくはこちらから。

iOSライブラリ管理ツール「CocoaPods」の使用方法-Qiita
https://qiita.com/satoken0417/items/479bcdf91cff2634ffb1

まず、プロジェクトのあるディレクトリから「Pods」フォルダと、「プロジェクト名.xcworkspace」を削除します。
なお、このとき、もしXcodeを起動している場合は先にプロジェクトを終了してください。

ファイルを削除したら、iTeam などのターミナルを開き、プロジェクトのあるフォルダまで移動します。
そして、下記のコマンドを実行します。

pod install

すると、先程削除した Podsフォルダと、プロジェクト名.xcworkspace が再作成されます。
あとは、通常通り xcworkspaceファイルを開き、アプリをビルドしましょう。
私の環境では、これで問題なくビルドが完了し、実機でアプリを起動できました。

 

以上、Xcodeで発生したエラーの対処法でした。
library not found for 〜」のときは、だいたいライブラリの再インストールで解決できるかと思います。
私自身、原因がわからないときは、よくこの方法を試してみたりしているので、困ったときはぜひお試しください。

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

【Xcode】アプリをアップロードできないときの対処法

最近は遭遇率がほぼゼロなのですが、一時期、正規の方法でXcodeからApp Storeにアプリをアップデートできない時がありました。
で、その時の対処法についてまとめ。
ちなみに、主な原因はネットワーク接続エラーでした。
そのため、接続先を変更すれば改善されることもありましたが、どうしようもないときにこちらの方法を使いました。

なお、今回参考にさせていただいた記事はこちらから。

Xcodeからアップロードできないときは、Application Loaderを使おう – Qiita
https://qiita.com/_natsu_no_yuki_/items/68140e7c0e96afbb2e4b

 

さて、そのアップロード方法ですが、まず Archive を実行すると自動的に表示される下の画面から、アプリをエクスポートします。

なお、この画面は、Xcodeのメニューから Window > Organizer からも開くことができます。

エクスポートが完了したら、Xcode の メニューから Xcode > Open Developer Tool > Application Loader を選択します。

すると、下記のような画面が表示されるので、下の選択から、先程エクスポートしたアプリの iOS App ファイル(拡張子が .ipa)を選択します。

ファイルを選択後、アプリの情報が表示されたら、次へを押せば完了です。
これでアップロードできたので、あとは、アプリ情報が反映されるのを待つだけです。

 

以上、アプリがアップロードできないときの対処法でした。
当時、ひどいときは 2〜3回試しても失敗したので、そのときはこの方法を使っていました。
最近では、全くと言っていいほど遭遇しなくなり、ありがたいですが…いざというときのために覚えておきたいです。

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

【Xcode】ビルド時の「[プロジェクト名] has conflicting provisioning settings.」エラーの対処法

今回はXcodeでアプリをビルドしようとしたときに遭遇したエラーについて。
長文エラーって、英語が苦手な身からしては読む気すら失せるので、それだけで億劫かつ憂鬱になります。

エラー全文はこちらから。

[プロジェクト名] has conflicting provisioning settings. [プロジェクト名] is automatically signed for development, but a conflicting code signing identity iPhone Distribution has been manually specified. Set the code signing identity value to “iPhone Developer” in the build settings editor, or switch to manual signing in the project editor.

ざっくり翻訳したところ、プロビジョニング設定が競合していることが問題とのことでした。
本来であれば、自動的に署名が行われている箇所に、手動で異なる設定が指定されているのだとか。
が、このあたりの設定を変更した記憶がないので、心当たりがありません…。

今回参考にさせていただいた記事はこちら。

iOS – iOSアプリ申請時のArchiveでconflicting provisioning settingsエラーが出る(56698)|Teratail
https://teratail.com/questions/56698

 

肝心な対処法ですが…「Automactically manage signing」のチェックを一度外し、再度チェックするだけ。
下の画像の下あたりにあるチェックボックスがそれです。

あとは、通常通りビルドを行ったところ、なんの問題もなくビルドが完了し、実機・Simulator のどちらでもアプリを実行することができました。
エラー文が長いので、最初に遭遇した時は身構えましたが、対処方法としてはなんてことはなかったですね。
チェックの解除・設定をおこなうと、プロビジョニングの設定がリセットされるので、今回のエラーが解消されるとのことでした。

以前も書いた気がしますが、とりあえず原因がわからないエラーに遭遇したら、丸々コピーして検索しましょう。

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

【jQuery】FastClickライブラリを特定の要素のみ無効にする方法【iOS】

Cordova開発をしているとお世話になるライブラリが、この「FastClick」だと思います。
これを使うことで、モバイルでアプリを実行したときのクリックの反応速度がかなり改善されます。
が、ものによっては、この FastClick ライブラリと競合を起こすライブラリもあるようで、今日、まさにその現象に遭遇しました。

 

競合を起こしたライブラリは、OpenstreetMap を使用した地図を表示できる「MapBox」です。
地図の表示の全てに影響するわけではなく、地図に表示したマップピンをクリックして、吹き出しを表示するロジックに影響が出ており、iOS でのみ吹き出しが表示できない状態でした。
クリックの動作をする箇所でのエラーだったので、最初は Click イベントを取得できていないことを疑いましたが、エラーログを見たところ、FastClick との競合が原因でした。

 

解決方法ですが、こちらのサイトを参考にしました。

JS/jQueryでFastClick.jsを使ってスマホのclickイベントの300ms遅延をなくす|ITハット
http://ithat.me/2016/11/06/js-jquery-smartphone-click-event-300ms-delay-fastclick

サンプルに書くほどでもないのですが…対策方法は、FastClick を無効化したい aタグなどの要素に、needsclick というクラスを追加するだけです。

<a class="needsclick">FastClickを無効にしたい要素</a>

特定の要素のみに FastClick を適用する方法もありますが、現在開発中のシステムでは、無効化したい要素がここのみだったので、この方法を採用しました。
ちなみに、特定の要素のみに適用する方法は下記の通りです。

<div>
    <div class="fastclick">
        <!-- FastClickを適用する要素 -->
    </div>
    <div>
        <!-- FastClickを適用しない要素 -->
    </div>
</div>
$(function(){
    FastClick.attach($('.fastclick')[0]);
});

全てに FastClick を適用するときには、下記のように記述します。

$(function(){
    FastClick.attach(document.body);
});

対策としては以上です。

 

ということで、FastClick を一部無効化する方法でした。
ライブラリの競合はやはり厄介ですね。
最悪、FastClick を無効化しなければいけないのでは…と思ったので、解決策があって良かったです。

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

【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)