Today Widget を調査してみた。

iOS8からはToay View(カレンダー、株価、etc….)に Widgetを追加できます。

Widgetの特徴

  • Widget上にアプリを常駐させる事ができます。
  • 制約はありますが、Widgetでは通常のアプリで出来る事が殆ど実現できます。
  • LockスクリーンからもWidgetが使えます。たとえば、Lockをはずさないで、Widget経由でアプリを起動させる事もできます。

Widgetの制約

  • 高さが大きくなりすぎるのは,Todayの中身が巨大になってしまうのでダメ.あまり大きいビューコントローラを利用すると自動的にサイズを切られる。
  • widgetの中にスクロールビューをいれるのはダメ.スクロール操作は一切処理できない。
  • キーボードが使えない。
  • タップイベントを取ることはできる。
  • 配布はアプリケーションにバンドルする形式で行う。
  • アプリケーションとのデータ共有はApp Groupを使って行う。
  • Extensionでは,UIApplicationクラスを利用できない。 アプリケーションを起動するときは,openURLを使うが,UIApplicationではなく,NSExtensionContextクラスのメソッドを利用する。

こんなことが出来ます。

  • Widget上からゲームを起動できます。
  • (例)DQMSLのイベント情報カレンダーをWidgetで実装して、タップするとゲームが起動する。(サンプル参照)
  • WidgetにWebViewをはれます。
  • 動画も再生できます。イベント告知ができるでしょう。
  • MPMoviePlayerController,AVFoundation等を用いる

実装上の注意点

CocoaPods

WidgetはホストアプリとはTargetが異なるので、Podfileに少々追記が必要になります。

target :(widgetのTarget名), :exclusive => true do
    pod 'ASIHTTPRequest'
end

コーディング注意点

viewDidLoad時にWidgetのサイズを指定しないと、viewがつぶれて見えなくなる。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    //このサイズを指定しないと、Widgetが潰れ見えなくなる。
    self.preferredContentSize = CGSizeMake(320, 300);
}

defaultではwidgetに余白が設定されている。 余白を無くしたい場合は、以下のコードを挿入する。

-(UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets(UIEdgeInsets)defaultMarginInsets
{
    return UIEdgeInsetsZero;
}

AppExtensionではUIApplicationのOpenURLは使えないので下記方法でURLスキームを利用します。

 [self.extensionContext openURL:myURL completionHandler:nil];

UIWebViewを利用してURLスキームもできます。(この手法だと、lockスクリーンからアプリを起動することが出来ません。)

 NSURL *myURL = [NSURL URLWithString:urlstring];
    UIWebView *webView = UIWebView.new;
    [self addSubview:webView];
    [webView loadRequest:[NSURLRequest requestWithURL:myURL]];

Sampleコード

カレンダー風widgetサンプル

iphoneアプリ アイコン広告のリジェクト

個人でリリースしているiphoneアプリの広告をバナー広告からアイコン広告に切り替えてリリースしたが、なんとリジェクトされた。

Appleから届いたメール内容がこちら

  • 2.25

Your app displays apps, other than your own, for purchase or promotion. This is not in compliance with the App Store Review Guidelines.

Specifically, your app contains a section that includes 3rd-party apps from other developers. The attached screenshot has been provided to help show this issue.

It would be appropriate to remove this feature from your app to be in compliance with the App Store Review Guidelines.

どうも、Icon広告自体がひっかかったような感じ。他のアプリのダウンロードを促す広告はアウトという事でしょうか。
とりあえず、Icon広告の配信を停止した状態で再申請してみて、様子を見てみる事にしよう。

cocos2dx 基本クラス

概要

Cocos2dxの基本クラスの理解

Sceneクラス

ゲームはたくさんのScene(場面)で構成される。 例えばタイトル画面、プレイ画面、勝利、敗北、ハイスコア、エンドロールなどがこれに当たる。 ゲームはたくさんのシーンを持つことができるが、ある一時点で実行されているのは必ず1つ。 開発者はこれを適切に切り替えながら、ゲームの流れを作っていく。

Directorクラス

Sceneクラスを管理するクラス。Sceneの切り替えを行う。シングルトン。

Layerクラス

表示される画面の1つのレイヤーを表す。背景画像レイヤー、Animationを管理するレイヤー、メニューを管理するレイヤー、タップ処理を受け付けるレイヤー等。1つのレイヤーに子レイヤーを持つ事もできる。

Spriteクラス

レイヤー上に表示する画像を管理するクラス。

Nodeクラス

Layer,Sceneの親クラスで、ツリー構造を構築する為のクラス。

2014年の個人目標

前置き

この8月をもってこれまで勤めてきた会社を辞め、9月から某ゲーム会社で勤務する事になりました。全くゲームとは関係ない業界からの転職になるのでほぼレベル0からのスタートになるので、かなりの知識を短期間で習得しないと経験者についていけなくなる恐れがあります。なので、まずは2014年度後期の個人目標をたてるのと、目標達成したかどうかの記録を残していこうと思います。

2014年度目標(12/31まで)

個人開発でcocos2dxによるゲームアプリを2本リリースする。

これまでカメラアプリ、地図アプリ等、ツール系のアプリは4本程度リリースしてきたが、方向性をかえてゲーム系アプリをリリースする事を目指す。

cocos2dxによるゲーム開発を勉強する。

ゲームアプリ開発の為の勉強。目標というより、日々勉強したはずの内容をこのブログに記録。

コンテスト、ハッカソンに3回は参加する。

特にGameアプリ系のハッカソン(GameJam)に焦点を当てる。

毎日1回はブログを投稿する。

どんな内容でもいいので、学んだ事、調べた事をOutputします。考えを整理する訓練だと思って。

cocos2dxの仕組み

cocos2dxではiphoneアプリandroidアプリもC++で開発ができるがその仕組みについて調べてみた。初心者が理解できる範囲でしか書いてないので、色々間違ってる記述があるかもしれない。

  • C++Androidアプリが開発できる仕組み
    • Android NDK JNIインターフェースによってJAVAでアクセスするAndroid固有のAPIC++でアクセスできる
    • cocos2dxのcocos2d.hからJNI経由でAndroid SDKへのアクセスをラッパー
      (Androidで開発した事無いので解釈が大雑把です。)
  • 一部、ネイティブ側でしか行えない処理は、cocos2d.hに頼らず独自に実装する。
    ・カメラ機能
    SNS連携
    ・ブラウザの起動
    ・課金処理 等

参考にしたページ

 

 

 

 

 

Cocos2dx-3.x の勉強を始めたのでメモ

iOS,Android両対応のゲームを作りたいという事でcocos2dxの勉強を始める事にしました。

 

元々iosアプリを作ってたので慣れてるXcodeで、

仕事でCを触っていたので近い言語のC++を選んで環境構築してみます。

 

下記のリンク先からダウンロード。

http://www.cocos2d-x.org/download

Cocos2dxのダウンロード先が2.X系と3.X系の2つあり、どうせなら新しいバージョンを覚えたいとおもい、3.2をDownload。
zip形式でDownloadできるので、適当な場所に解凍。

環境構築

解凍したDirectoryの中にsetup.pyがあるので、これをターミナルから下記のコマンドを入力。

python  setup.py

 コマンド実行中に、Android NDK ,Android SDK ,ANTのパスを聞かれますが、今回はAndroid用の環境は構築しないので無視。

正常にコマンドが完了すると".bash_profile"に環境変数が構築されるので、sourceコマンドでそれを反映させます。

source ~/.bash_profile

これでcocos2dx-3.2の設定は完了です。