2013年5月21日火曜日

Game Centerの設定不足でリジェクト

1年振りにGameCenter を設定し、テストモード(Sandbox)でも動作確認できて、満を持して審査待ちをしていましたがリジェクト…


Binary Rejected

  • 2.3: Apps that do not perform as advertised by the developer will be rejected

Apple
May 20, 2013 08:19 AM
----- 2.3 -----

We found that your application is using Game Center features, however, you have not yet submitted the features for review. It would be appropriate to submit the Game Center features for review.

While your iTunes Connect Application State shows as Rejected, we don't require a new binary to address this issue. Please visit iTunes Connect, Manage Your Applications, then select your app and click on Manage Game Center to complete the features setup or to remove it. When you are finished, please reply to this message and we will proceed with your review.

IMPORTANT: After making the necessary changes to your metadata and clicking the "Save" button at the bottom of the page, do NOT click "Ready to Upload Binary" unless you plan to submit a new binary. If you click the "Ready to Upload Binary" button, a new binary upload will be required.

GameCeterは、Enableになっているのに、何を言うとるねん…。
気付いたのは、
ページ下部にある青いボタン「View Detail」こちらから入ったところにもGameCetnterの設定があるが、ここも勿論、Enableにしておいたのだが、その下は空っぽになっていることに気付く。



こちらをEditを押して、設定したIDを有効にして再申請。(バイナリーはアップせずに変更したよと連絡すれば良いようだ。)
上図の左側の矢印の部分が空でした。
右側は、Manage Game Centerの画面。
同じミスをまた時間が経つとしそうなのでメモとして記録。




現在は単にハイスコアだけの利用だが、アチーブメントなどの設定も次回チャレンジした。
(参考)
http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/GameKit_Guide/GameCenterOverview/GameCenterOverview.html




2013年5月15日水曜日

GameCenterを設定してみる


GameCenter(GameKit)を使う準備
iTunesConnect側で新規アプリを登録します。実際のアプリデータはまだ送信しなくてOKです。iTunesConnectGameCenterの設定をしないと、テストも出来ないのです。Xcodeの方だけで設定をしていても「this game is not recognized by game center」とエラーが出るだけです。
アプリを登録したら、アプリの設定画面から「Manage Game Center」をクリック。


Edit」で中に入ったら、左上の「Add Leaderboard」をクリックして新しくLeaderboardを作ります。Choose Leaderboard Typeでは「Single Leaderboard」をクリック。




Leaderboardの各項目について
  • Leaderboard Reference Name・・・リーダーボードの名前:任意
  • Leaderboard ID・・・リーダーボードのID:任意 (Xcodeでの実装にも必要なので忘れずに…)
  • Score Format Type・・・スコアの送り値 整数 / 固定小数点数 / タイム / 金額 より選択
  • Ascending・・・並び順を昇順か降順を選択
  • Score Range・・・とりあえず0から、マックスまで指定
Leaderboard Localizationでは各国毎に表記を変更できます。例えば単位に「点」、「秒」をつけることができます。


Xcodeでの実装
GameKitのフレームワークを追加。
Cocos2dだと、最初からフレームワーク入ってた…。

次にResorces > info.plistの中のRequrired device capabilities内に+ボタンを押して
Keyにgamekit,、TypeはBookean、ValueはYESと入力



アプリ起動時にGameCenterへのログイン認証を行いたいので、AppDelegate.m内に追記。
#import <GameKit/GameKit.h>



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    
    //gamecenterのプレイヤーを取得
    [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error){}];



ログインしていれば、ログインしました。と上部ににょろっと表示される。SANBOXというモードはテスト専用のモード。(テストの高得点が、実際のGameCenterに反映されないようになっています。テストユーザーを作る時は、特に注意が必要。ここで使ったメアドは、本番のApple IDに利用できなくなるなどのトラブルが続き、アップル内でも部署をまたぎかなり面倒なことに…)

次にGameCenter呼び出す。
実装ファイルの.h .mの両方に#import <GameKit/GameKit.h>を追加

以下は自分の備忘録的にCocos2dでの実装…。
1)デリゲートをちゃんと記述する
XXXScene.h
@interface XXXScene : CCLayer<GKLeaderboardViewControllerDelegate>{
XXXScene.m
//リーダーボードを立ち上げる
- (void)GoToRankng {
    GKLeaderboardViewController *leaderboardController =
    [[GKLeaderboardViewController alloc] init];
    
    if (leaderboardController != nil)     
        {
        leaderboardController.leaderboardDelegate = self
        [[CCDirector sharedDirector]
         presentModalViewController:leaderboardController animated:YES];
        }
    }

//リーダーボードで完了を押した時に呼ばれる
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
    {
    [[CCDirector sharedDirector] dismissModalViewControllerAnimated:YES];
    }


これでビルドしてランキングボタンを押すとリーダーボードが呼び出される(感動)


続いて仕上げにスコアを送る設定
ゲームオーバー処理の箇所に下記を追加。スコア値と、先程メモしておいたリーダーボードIDを設定。

// Game Center スコア送信
    GKScore *scoreReporter = [[GKScore alloc] initWithCategory:@"●●●リーダーボードID●●●"];
    NSInteger scoreR;
    scoreR=●●●スコア値●●●;
    scoreReporter.value = scoreR;
    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
        if (error != nil)
        {
            CCLog(@"error %@",error);
        }
    }];


リーダーボードが呼び出されればスコア送信はすんなり行き完了。
GameCenterはいろんな設定ができますが、頭の悪い私はスコアのランキングだけできればとりあえず満足。

2013年5月13日月曜日

Xcodeで実機デバッグができなくなる…。


原因は、脱獄した時に入れたLocationHolicという位置情報偽装アプリが原因でした。
こちらCydiaのInstalledというタブから探して右上のModifyよりRemove。


ちなみに上記のアプリは、東京にいながら大阪のFMを聴いたりすることができます。

脱獄は違法ではありませんが、アップルのサポートが受けれなくなるリスクがあるので自己責任で行いましょう。必ずバックアップを取ってから…。

ちなみに最近のお気に入りは、
InfiniFolderというアプリは最強でフォルダーに無制限?にアプリが格納できるのでかなり整理できてかなり良いです。(有料)

2013年5月2日木曜日

Xcode 起動中にスリープさせない


時計アプリなど、デバイスのスリープを無効にするために… 
ViewDidLoadの部分に追加しておくと機能したぜ。

[UIApplication sharedApplication].idleTimerDisabled = YES;

ステータスバーを半透明にする

カメラアプリに実装しようとするが、撮影画面にステータスバーを表示していなかったことを思い出す。


これを実現するコードはこんな感じ。UIViewController 内に記述する。
- (void)viewWillAppear:(BOOL)animated
{
 [super viewWillAppear:animated];

 // setup *bar translucent
 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
 self.wantsFullScreenLayout = YES;    // ステータスバーの背景も描画対象にする

 self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
 self.navigationController.navigationBar.translucent = YES;
 
 self.navigationController.toolbar.barStyle = UIBarStyleBlack;
 self.navigationController.toolbar.translucent = YES;

}

Cocos2d iPhone4SだけBGMが鳴らない…

iPhone5もiPad3もシュミレーターも音が鳴るのに…。
クリーンしても、アプリを削除して再度ビルドしてもBGMだけ鳴らない(単音は鳴る)

神秘的な状況が解決しない。

【対策1】
 初期化でBGMのプリロードを一番最初に持ってくる。
 (一瞬、これで復活)

【対策2】
 実機を再起動(電源オフ)。
 電池切れで直っていたことで音が鳴ったことにより解決。

Xcode iPhone iPadアプリ作成に必要なアイコンサイズ一覧

iPhoneアプリを作る時はiPadでも必ずチェックしないとアイコンがスプラッシュ画像になっていることが…。iPad用のアイコンの追加を忘れない。




icon.png                             (57 x 57)                 【iPhone用】
icon@2x.png                     (114 x114)              【iPhone Retina用】
icon-small@2x.png          (58 x 58)                【iPhone4 Spotlight用】
icon-small.png                  (29 x 29)                【設定メニュー/Spotlight用】
icon-small-50.png            (50 x 50)               【iPad Spotlight用】
icon-72.png                        (72 x 72)                【iPad用】
icon-72@2x.png                        (144 x 144)                【iPad Retina用】
iTunesArtwork.png (512 x 512)              【App Store用 拡張子不要】
iTunesArtwork@2x.png (1024 x 1024)       【App Store用 拡張子不要】

iPadがない場合はシュミレーターでも十分。
反映されない場合はplistをチェック。
ファイルがない場合は、上図のように追加して、Cleanを実行して、実機またはシュミレーターのアイコンを削除してから再度ビルドする。