2013年6月25日火曜日

UIImageをタイルで並べたら黒い線が出た

Viewの背景をパターン画像でタイル塗りした時に
一定間隔で黒い線が出ている。。
iOS5.1で現象を確認。

    UIImage* bgImage = [UIImage imageNamed:@"xxx.png"];
    [targetView setBackgroundColor:[UIColor colorWithPatternImage:bgImage]];

こんな感じで書いてるんですが。

原因は、XCodeが行うPNGファイルの圧縮によるもののようです。

・プロジェクトのBuild Settings - Packaging - Compress PNG Files を No にする。
または
・http://d.hatena.ne.jp/wasabi-arts/20090301/1235856525

こちらの方法で解決しました。

2013年6月15日土曜日

ADT22.0にしてみたら

PagerAdapter実装してるところでExceptionが出た。

 java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged!
うんぬん。。

解決策はこちらにあって。
http://stackoverflow.com/questions/16756131/fragmentstatepageradapter-stopped-working-after-updating-to-adt-22

コンテンツを追加等した後は、
notifyDataSetChanged()
を呼ばないとダメになったようです。

http://developer.android.com/reference/android/support/v4/view/ViewPager.html
リファレンスにも書いてありました。。
すんませんでした。。

2013年6月5日水曜日

Push NotificationsをEnableにしようとしてハマる

iOS Apps - Identifiers - App IDs - iOS App ID Settings
Push NotificationsをEnableにしようとしてハマった事


■Service - Push NotificationsをEnableにするため、
Enableにチェックを付けてDoneするが、Disableのまま変わらない。

(原因)
既に作成してあるCertificateが古いため(?)Enableに出来ない。(??)
Expiresが期限内であっても、
作成した時点から一定期間過ぎていると、うまくいかないようです。

(対応)
既に存在するCertificateをRevokeして、
新しく「Create Certificate」する。

これでEnableにできるようになりました。


■ アプリにプッシュ通知の確認アラートが出ない

(原因)
Provisioning ProfilesにPush NotificationsのEnable状態が反映されていない。

(対応)
iOS Apps - Provisioning Profiles - iOS Provisioning Profiles
該当のProfileを選択し、Editする。
内容に変更があってもなくても、Generateする。
更新したProfileをダウンロードして、Organizerに反映し、XCodeを再起動。
アプリをビルドし直す。

※Enables Servicesに「Push Notifications」の文字が見えていても、
Enableにした後、Editし直していなければ、
それは見かけ倒し。(←だまされた…)

該当のProvisioning Profileをテキストエディタで開いて、
<key>aps-environment</key>
上記キーが存在していなければ、Editし直す必要があります。


以上です。

2013年5月29日水曜日

iOSアドレス帳にグループ追加でハマる

ABAddressBookAddRecord
結果がfalseになって、グループ追加ができない・・なぜ! を調べている。

今のところ、auとsoftbankで連絡先の挙動…仕様…が異なるせいかと。 
auの方がややこしい印象。


【softbankの場合】
・iOS5
 未検証

・iOS6
 iCloudアカウントが未設定:trueが返る
 連絡先のデフォルトアカウント:項目なし

【auの場合】
・iOS5
 検証中

・iOS6
 iCloudアカウントが未設定:false
 iCloudアカウントが設定済み:これだけではfalse
 連絡先のデフォルトアカウントがキャリアメール:false
 連絡先のデフォルトアカウントがiCloud:true !!

au iPhoneの場合は、連絡先のグループ追加をするには
連絡先のデフォルトアカウントにiCloudが設定されている必要があるようです。

softbankは、iCloudアカウントを設定してなくてもできました。


・グループ削除
削除したいグループが存在している状態ならば、
iCloudアカウントの設定状態に関わらず、実行できました。
(au iOS6で確認)

2013年3月26日火曜日

そうだったのかService

AndroidのServiceのこと。
サービスってメインスレッドで実行されてるんですね
勝手に別スレッドでやってると思ってた・・・。

サービスのスレッド作ってそこで処理走る訳じゃないよ、
ANRのリスクを減らしたいなら別スレッドを自分で用意してねと書いてあった・・

2013年1月31日木曜日

cocos2dxのBox2Dプロジェクト

cocos2d-xのBox2Dプロジェクトを
Android用にビルドするときにはまったメモ。

以下、太線部分を追加します。

・HelloWorldScene.hを書き換える
#include "Box2D/Box2D.h"

・Android.mkを書き換える
15行目付近
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static box2d_static

19行目付近
$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions) \
$(call import-module,external/Box2D)


以上です!

cocos2d-x Eclipseで編集&実行

 XCode環境でcppファイルを編集して、Androidで動作確認する時には
build_native.shを叩いてビルドして実行。
・・のような手法が主流?のようですが
Eclipseでcppファイルを編集&ビルド&実行する方法も調べてみました。

 http://kayosystem.blogspot.jp/2012/11/macandroidcocos2d-x_14.html
こちらを参考にしました。

EclipseでC/C++環境を作るところ等々は割愛します。
自分がハマったところだけメモ。


・NDK_ROOTが見つからない場合
CDTのBuild Consoleに
「NDK_ROOTがないよ」みたいなことでビルドが出来ない場合、
proj.android/build_native.shに
NDK_ROOTを宣言すると良さそうです。

私は、.bash_profileにNDK_ROOTを設定していましたが
(・・設定しているはずですが(自信無し))
上記のようなエラーでビルドが通りませんでした。

ついでに、environment.plistも設定してみたのですが
それでもうまく行きませんでした・・。
設定の仕方が悪かっただけでしょうか。謎。

build_native.shの32行目付近に
(最初にNDK_ROOTという変数が出てくる前に)
NDK_ROOT="ndkのパス"
を追加したところ、ビルドが通るようになりました。


・icon.pngでエラー
無事にビルドが通り、いざRunしようとすると
プロジェクトにエラーがあるぞと言われました。
drawable-hdpi/icon.pngに×マークが出ます。
なぜ・・。

最初は、アイコンサイズが80x80になっているから??
と思い、Resources/Icon-72.pngを72x72にリサイズしてみましたが
(というか名前に72とついてるのに何故80なのか)
エラーは相変わらず。

何故! と思い、エラーが出ている状態で続けて
Run As - Android Application を押してみた所
今度はエラーが消え、実行することができました・・。

今の所、2回に1回、実行できる感じです。
不便・・。

どこにもこのような情報が無いと思われるので
私の所だけで起きているのかもしれません。
解決できるといいな・・。

それ以外は、無事にEclipseでcppを編集&実行できました。


2013年1月30日水曜日

cocos2d-xをAndroidでも動かす

目標:cocos2dxのプロジェクトがAndroidでも動くようにする。

動作確認した環境
Eclipse:Indigo
XCode:4.3.2
AndroidNDK:r8d
Cocos2d-x:cocos2d-2.0-x-2.0.4 
ADT:21.0.0.


・環境構築…省略
http://mdlab.jp/project/framework/01.html
こちらを参考にしました。
AndroidNDKのパスを通すところまでやっておく。
…そこまで色々あった気もしますが、思い出したら追記します。


・Android用のcocos2dxプロジェクトを作成する
create-android-project.shを実行する。
targetIDは7とかにしました。お好みで。
プロジェクト名は、XCodeで作成するプロジェクトと同一になるように意識。

出来上がったプロジェクト名のフォルダを、一旦退避。
(この後XCodeで同じ階層に、同じ名前のフォルダを作成することになるため)
フォルダ名をリネームで良いでしょう。(プロジェクト名_androidとか)


・XCodeでcocos2dxプロジェクトを作成する
ProductNameとAndroid用のプロジェクト名が同じになるように作成。
作成先のディレクトリはcocos2dxの直下にしました。
(どこでもよいと思います)

これで、Android用とXCode用のプロジェクトが揃いました。


・XCodeの方にAndroidのプロジェクトをマージ
 XCodeで作成したプロジェクト内の以下の場所に、
 Androidで作成したプロジェクトに入っているproj.androidをまるっとコピーします。
例)プロジェクト名がSample01の場合
Sample01/Sample01/Classes
Sample01/Sample01/...
Sample01/Sample01/proj.android
こんな感じの構成になるように。

・build_native.shを編集
テキストエディタなどで、proj.android/build_native.shを編集します。
40行目付近
COCOS2DX_ROOT="$DIR/../../../"
(Android用プロジェクトと比べて、cocos2dxまでの階層が1つ深くなったので)

私はプロジェクトをcocos2dx直下に作ったので
上記のように「/..」を1つ増やす感じでしたが
任意の場所に作られている場合は、
ここは絶対パスで指定する必要がありますね。


・build_native.shを実行
実行します。
たくさんのファイルがコンパイルされていくはずです。

そういえば、先ほど作成したAndroid用のプロジェクトフォルダはもう使用しません。
proj.androidフォルダは、XCode用のプロジェクトの方へ統合してしまいましたので。
リネームしていたフォルダは、削除しました。

・XCodeで実行してみる
問題なく実行できることを確認します。

・Eclipseで実行してみる
プロジェクトをインポートします。
インポート後は、エラーが発生するかもしれません。
私の場合、libcocos2dxの参照先がおかしいため、エラーとなりました。
プロジェクトのプロパティを開き、Android-Libraryで
cocos2dxライブラリへの参照先を修正します。

(追記)
Android-Libraryでcocos2dxのライブラリを参照する格好にしていましたが、
cocos2d-2.0-x-2.0.4/cocos2dx/platform/android/java/src
の中身を、
Android用プロジェクト/proj.android/src
の中にコピーする方が良さそうです。
(理由…Androidのバックキーを制御したい時、
Cocos2dxGLSurfaceViewを編集する必要がありそうだから…)
 
これでEclipse上から、Android端末で実行できるはずです。



以上です。