カテゴリーアーカイブ iOS

takahashi 著者:takahashi

“妖怪ウォッチ”の世界が現実化!? 位置情報ARゲーム”妖怪ウォッチ ワールド”

きっとこれは妖怪のせい…(オイ
どうも、最近夏バテ気味なたかはしです。

最近、”妖怪ウォッチ”のスマホ版ゲームが出たことを知ったのですが、内容がなかなかすごかったので取り上げてみたいと思います。

その名も、”妖怪ウォッチ ワールド”

Googleアカウント(Playゲーム)でユーザー登録して早速ログイン。


唐突に妖怪ウォッチの正当な所有者に選ばれちゃいましたw


ログインすると地図が表示されます。
実際には現在地が表示されるようですが、今回はチュートリアルなので、東京某所のエリアが表示されています。

右下に妖怪ウォッチアイコンがあり、クリックすると

サーチモードに移行。

はてなアイコンなら見えましたよウィスパーさん。


了解!
タップしてみますね。


するとカメラが起動。
…何やら空間内を紫色の靄が動き回っています。

この靄を、画面中央の円内に一定時間とらえ続けないといけないようなのですが、この靄が結構すばしっこくて、思わずあたふたしてしまいましたw

なんとかとらえ続けると、この靄が招待を表し…

</a

なんとオフィス内にジバニャンが!!!
なんだかやる気満々の様子。
どうやらここでバトルが始まるようです。


この後、チュートリアルの動画が再生されるのですが、
説明してくださる方はなんと超有名な有名なあの方…!!!

一体だれが出演するのかは、是非アプリで確かめてみてくださいw

しかしバトルとは言っても、自分まだ手持ちの妖怪(?)いないっすよ…?

と思っていたら…

なんと初期の時点で仲間の妖怪が!
流石ウィスパーさん、かなり親切ですw

バトルは基本的に自動進行します。
が、仲間側の妖怪たちが状態異常になったり、体力が減ってきた場合に、控えの妖怪と入れ替えたりなどを行ってバトルを有利に進めることができます。
また、妖怪たちが持つ必殺技の発動なども、プレイヤーが行わせることができるようです。

ちなみに、妖怪に勝つと、場合によって仲間になってくれる場合もあるようです。
自分がまるで妖怪ウォッチの世界に入ってしまったかのような気分で楽しむことができますw

ちなみに、ゲームをプレイしていてふと、Pokemon Goに非常によく似ているなーと感じ、まさかNiantic社と妖怪ウォッチの版元であるLevel-5社がコラボしたのか…!?
と思ったら、なんと

パズドラ などで有名なGungHo社とLevel-5社のコラボで製作されていました…!
ただし、地図データはGoogleMapを使っているようで、地図データは完全にNiantic社系アプリと同じ情報源となっています。

今までこのタイプのゲームはほぼNiantic社しか出していないような印象で、今回初の競合他社が現れたか!?といった感じでした。

Niantic社のIngressやPokemon Goがヒットした理由として、そのゲーム性の面白さもありますが、現実世界で遊ぶことによって、ほかのプレイヤーの方々とのつながりやコミュニティ、そしてイベントの開催などによってよりコミュニケーションをとることができる”場”を提供してきたことが大きな要因となっています。

GungHo社とLevel-5社の今回の試みでも、ゲーム世界の内側外側両方で魅力を付加することができるのか。
是非注目したいですね。

妖怪ウォッチ ワールド公式サイト

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

【iOS】アプリ審査時のプレビューとスクリーンショットでのメタデータ却下

ただいま、アプリの修正&更新を行なっているのですが、iOSアプリがプログラム以外の部分で却下されたので、それについてです。

エラーの詳細ですが、特定の端末のサイズで、スクリーンショットの縦横比が崩れ、画像が潰れてしまっていることでした。
私の設定では、まず1回目に 12.9インチのiPadで、2回目は 9.7インチのiPadで画像がひしゃげました。

 

で、対処法ですが、単に画像をサイズごとに設定するだけ。
要は、エラーとなったサイズのスクリーンショットでは、「〇〇インチディスプレイを使用」というチェックボックスを使って、他のサイズのスクリーンショットを流用しないように修正しました。
……正直、「〇〇インチディスプレイを使用」と書いてあると、いい感じに調整してくれるんじゃないかと思ってしまうのですが、そうではないみたいですね。

 

で、Xcodeのシュミレーターを使って、各端末のスクリーンショットを撮影するのですが、その時に参考になるサイトがこちら。

iPhone/iPad/Apple Watch解像度(画面サイズ)早見表 – Qiita
https://qiita.com/tomohisaota/items/f8857d01f328e34fb551

スクリーンショットの仕様 – App Store Connect ヘルプ
https://help.apple.com/app-store-connect/#/devd274dd925

シュミレーターを起動する際、iPadは画面のインチ数が表示されるのですが、iPhoneは何故か省略されているので、いちいち調べていました。
ので、私のように画面サイズが覚えられない人は、1つ目のリンクページをブックマークしておくことをお勧めします。

2つ目のリンクについては、それぞれの画面のインチ数が、何ピクセルなのかを確認できます。
もし、追加した画像のサイズが違っていた場合、エラーとなり追加できないので、このリストで調べて、規定サイズに変更しましょう。

 

以上、スクリーンショットのサイズエラーの対処法でした。
iOSアプリはかなり厳格なので、なかなか面倒ですね。
ですが、しっかりと調べてくれる分、アプリにバグがある状態で公開されることを絶対に防げるので、かなり有難いです。

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

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