2013年03月04日

[iOS] Could not launch "アプリ名" launch or suspend in progress で端末が固まったときの対処

Xcodeで実行しようとしたとき、

Could not launch "アプリ名"
launch or suspend in progress

と表示が出て端末が固まりました↓

スクリーンショット 2013-03-03 22.56.09.png

Xcodeの停止ボタンを押しても反応なし。
ホームキーを押しても、2度押ししても反応なし。
電源ボタンを長押ししても反応なし。

これはバッテリーを外すしかないか?と思いきや、バッテリーってどうやって取り外すことができるんだ?
と困っていたら、ホームキーと電源ボタンを使って再起動することで対処できました。

再起動:
ホームキー & 電源ボタン 同時押しで10秒間

これで該当アプリを消して再インストールして実行できました。
posted by be-style at 09:18| Comment(0) | iOS

[iOS] GameCenter実装の流れと実機テストで動作しないときの対処

iOSアプリにGame Centerを導入しようとしてハマったので備忘メモ。

Game Center導入の流れを簡単にまとめると、

■Web管理画面での設定
・iTune Connectの該当アプリにおいて、「Manage Game Center」内の「Game Center」を Enabled にする

iTune Connectの該当アプリのトップ画面↓
スクリーンショット 2013-03-04 8.18.24.png

「Manage Game Center」を押した後の画面↓
スクリーンショット 2013-03-04 8.19.41.png

・iTune Connectの該当アプリにおいて、「Game Center」を有効にする
※既存アプリのバージョンアップのときは、「Add New Version」でGameCenter対応版を新しく登録する必要がある
※設定し忘れても、「View Details」から設定できる

View Detailsの画面のGame Centerを↓
スクリーンショット 2013-03-03 22.47.13.png
Enabledにする↓
スクリーンショット 2013-03-04 8.22.42.png

・iOS Provisioning Portalで、App IDs より、該当アプリのGame Center が Enabled になっていることを確認する

App IDsより、Game Center が Enabled になっていることを確認↓
スクリーンショット 2013-03-03 23.46.14.png

■Xcodeでの設定
・GameKit.frameworkをフレームワークに追加する
・info.plistの「Required device capabilities」に「gamekit」を追加する
・プログラム追加(iOS6以上とiOS6より下とで認証方法が違う)
 →iOS6以上: [self presentViewController:viewController animated:YES completion:nil];
 →それ以外: [localPlayer authenticateWithCompletionHandler:^(NSError *error)

●実機テスト
Game Centerが無効になっていると実機で何も動作しない ← メインはこれ

振り返ってみれば簡単なことなのですが、かなりハマりました。


==============================================
★参考サイト/資料と簡単コメント

正攻法でマニュアルを参照
 ↓
Game Centerプログラミングガイド:
https://developer.apple.com/jp/devcenter/ios/library/documentation/GameKit_Guide.pdf
 ↓
「リスト 3-1 認証ハンドラの設定」でGameCenterの認証画面を表示するのだけど、
この通り実装しても動作しなかった。
 ↓
× [self showAuthenticationDialogWhenReasonable: viewController];
○ [self presentViewController:viewController animated:YES completion:nil];
【参考】
iPhoneアプリをGameCenterのLeaderboard(ランキング)に対応させる方法:
http://golog.plus.vc/iphone/2867/


プログラミングガイドにもiOS6以上とそれ以外とで認証方法が違うことは記載されていたけど、
参考サイトの方がわかりやすかった
 ↓
Game CenterのiOS 6対応:
http://minnatomodachi.net/2012/10/30/ios6gamecenter/
 ↓iOSのバージョンで処理を分けるときは
float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (osVersion >= 6.0f) { } else { }


いざテストしようとしたら、Web管理画面で「Game Center」を有効にする必要があることを知る。
 ↓
このゲームは game center により認識されません:
http://d.hatena.ne.jp/ratatata/20120112/1326394199
Game Centerの実機テストができない。:
http://iphone-dev.doorblog.jp/archives/6392925.html


端末によって、Game Center の認証画面が表示されたり、Game Centerが無効となっていて何も起きないことがあった。
 ↓
アプリ「Game Center」からサインインした後、再度該当アプリを起動するとGame Centerが表示された
 ↓以前、このような画面が表示されて Game Center を無効にしたことがあったのが原因
Screenshot 2013.03.04 03.30.23.png


最後の実機確認が一番ハマりました。
Game Centerを無効にすることができて、
Game Centerにサインインすることで無効が解除されるなんて知りませんでした。

気づいてよかった。。。
posted by be-style at 09:05| Comment(0) | iOS

2013年02月28日

[iOS] 審査でリジェクトを受けて .crash ファイルを受け取ったときの対応

Appleの審査でリジェクトを受けて、そのときに .crash ファイルが添付されていたとき用の備忘メモ。


.crash ファイルの中身はログなのでそれを見て対処します。
.crashファイル、そのままでは内容の理解が難しいです。
クラッシュした箇所が「どのファイルの何行目なのか」がわかりません。


そこで必要となるのがこの2つ。
@.dSYMファイル ※申請時に.app ファイルと一緒にビルドされるはず
A.appファイルと.dSYMファイルを使って.crash内の数値を文字に変換する「symbolicatecrash」

@
.dSYMファイルの場所は、.appファイルと同じ場所にあります。
ターミナルで見ると↓
/Users/[ユーザー名]/Library/Developer/Xcode/DerivedData/
Finderで見ると↓
Macintosh HD > ユーザ > [ユーザー名] > ライブラリ(隠しディレクトリ) > Developer > Xcode
 > DerivedData > [該当プロジェクト] > Build > Products

A
「symbolicatecrash」がある場所↓
ターミナルで見ると↓
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/

都度このパスを書くのは大変なので、シンボリックリンクを作りました。
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash ./symbolicatecrash


これで「.appファイル」「.dSYMファイル」「symbolicatecrash」が揃ったので「.crashファイル」の中身を見てみます。
$ symbolicatecrash [アプリ名].crash [アプリ名].app.dSYM/

こうすることで、「どのファイルの何行目なのか」かがわかるようになります。
注意することは、申請後にビルドしてしまい.dSYMファイルが上書きされてしまってはダメという点です。
審査が通るまでは、念のためバックアップを取っておくとよいと思います。


【参考】
symbolicatecrash には .crash と .app.dSYM/ と .app/ が必要:
http://www.moonxseed.com/2012/11/10/symbolicatecrash-%E3%81%AB%E3%81%AF-crash-%E3%81%A8-app-dsym-%E3%81%A8-app-%E3%81%8C%E5%BF%85%E8%A6%81/
posted by be-style at 01:22| Comment(0) | iOS