ラベル Xcode の投稿を表示しています。 すべての投稿を表示
ラベル Xcode の投稿を表示しています。 すべての投稿を表示

2015年2月12日木曜日

cocos2d-xでPIE disabledというWarningの消し方

cocos2d-x(ver3.2)でiOSアプリを開発中にXcodeでビルドしたら以下のようなWarningが発生しました。

Apple Mach-O Linker Warning
PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE …



このワーニングの消し方を調べましたので備忘録も兼ねて記載しておきます。


PROJECTを選択して→Build Settings→Linking
Don’t Create Position Independent Executablesを『YES』にします。



これで再度ビルドすればワーニングは消えます。


『パズ銭』はハマり過ぎ注意な中毒者続出のパズルゲーム

パズ銭 ~スワイプで両替パズル

2015年2月9日月曜日

cocos2d-x(v3.2)でARC対応

cocos2d-x(ver3.2)のXcodeでの(iOS版)ARC対応のやり方を備忘録として記載しておきます。



プロジェクトを選択してPROJECT→Buil Settings

Objective-C Auto matic Reference Counting を「YES」にする





プロジェクトを選択してTARGETS→Build Phases→Compile Sources

以下の2ファイルのCompiler Flagsを「-fno-objc-arc」とする
・RootViewController.mm
・main.m





AppController.mmの以下の箇所を修正


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions の中にある・・・

cocos2d::GLView *glview = cocos2d::GLView::createWithEAGLView((__bridge_retained void *)eaglView);
//cocos2d::GLView *glview = cocos2d::GLView::createWithEAGLView(eaglView);


以下はコメントアウト

/*
- (void)dealloc {
    [window release];
    [super dealloc];
}
*/



『パズ銭』はハマり過ぎ注意な中毒者続出のパズルゲーム

パズ銭 ~スワイプで両替パズル

2014年6月12日木曜日

iOSアプリでSQLiteを簡単に使えるFMDB

iOSアプリでデータベースを使いたくなることがあります。
でも、Core Dataはなんだか取っ付きにくいですよね。
そこで、SQLiteを使ってみてはいかがでしょうか?
FMDBというライブラリを使えばiOSアプリでも簡単に使えます。


準備



1.ライブラリをダウンロード


https://github.com/ccgus/fmdb



2.ライブラリを追加


ライブラリの『fmdb』以下にあるファイルを全部Xcodeに追加する。



3.フレームワークの追加


『libsqlite3.0.dylib』を追加する。



使い方



初期処理


#import "FMDatabase.h"


//FMDB
FMDatabase *db;

//DBファイル名
NSString *DB_FILE = @"test_db.sqlite3";

//DBファイルのパスを取得
NSString *dbPath = nil;
NSArray *documentsPath = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);

//取得データ数を確認
if ([documentsPath count] >= 1) {
    
    //固定で0番目を取得
    dbPath = [documentsPath objectAtIndex:0];
    
    //パスの最後にファイル名を追加
    dbPath = [dbPath stringByAppendingPathComponent:DB_FILE];
} else {
    
    //エラー
    NSLog(@"database file not found.");
}

//DBファイルがDocument配下に存在するか判定
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:dbPath]) {
    
    //存在しない場合、DBファイルをコピー(初回起動時のみ)
    NSBundle *bundle = [NSBundle mainBundle];
    NSString *orgPath = [bundle bundlePath];
    orgPath = [orgPath stringByAppendingPathComponent:DB_FILE];
    
    //DBファイルをDocument配下へコピー
    NSError *error = nil;
    if (![fileManager copyItemAtPath:orgPath toPath:dbPath error:&error]) {
        
        //エラー
        NSLog(@"db file copy error. : %@ to %@.", orgPath, dbPath);
    }
}

//パスを設定して、データベースオープン
db = [FMDatabase databaseWithPath:dbPath];
[db open];



//処理が終わったら、データベースクローズ
[db close];




SELECT


//クエリ実行
NSString *query = @"SELECT item_id, word, date FROM items WHERE word = ? ";
FMResultSet *rs = [db executeQuery:query, @"test1"];

if ([db hadError]) {
    //エラー
    NSLog(@"db execute error");
}

//結果の取得(カラム名指定)
while ([rs next]) {
    
    //数値の取得
    int itemID = [rs intForColumn:@"item_id"];
    
    //文字列の取得
    NSString *word = [rs stringForColumn:@"word"];
    
    //日付の取得
    NSDate *date = [rs dateForColumn:@"date"];
}

//ResultSetのクローズ
[rs close];




INSERT


NSString *word = @"test1";
NSString *mean = @"テスト1";

//INSERT実行
NSString *sql = @"INSERT INTO items (word, mean) VALUES (?, ?) ";
[db executeUpdate:sql, word, mean];

if ([db hadError]) {
    //エラー
    NSLog(@"db insert error");
}



UPDATE


NSNumber *itemID = [NSNumber numberWithInt:12345];
NSDate *timeStamp = [NSDate date];

//UPDATE実行
NSString *sql = @"UPDATE items SET date = ? WHERE item_id = ? ";
[db executeUpdate:sql, timeStamp, itemID];

if ([db hadError]) {
    //エラー
    NSLog(@"db update error");
}



DELETE


NSNumber *itemID = [NSNumber numberWithInt:12345];

//DELETE実行
NSString *sql = @"DELETE FROM items WHERE item_id = ? ";
[db executeUpdate:sql, itemID];

if ([db hadError]) {
    //エラー
    NSLog(@"db delete error");
}



まとめ


RDBを使ったことがある人は簡単ですよね。
Core DataでDBを使うことを断念した人も、FMDBでSQLiteを検討してみてはいかがでしょうか。


せり上がってくる数字と演算子で計算式を作り消して行く
5つ正解でクリアー、全30ステージの知育系パズルゲーム


2014年6月5日木曜日

Objective-Cで0.1+0.2が0.3にならない?

新作アプリ『パズオペ』は計算式を作るパズルゲームです。


数字と演算子を組み合わせて、正しい計算式を作って行きます。

ところが、小数も計算できるようにしていたら不具合が発生しました。
具体的には『0.1+0.2=0.3』とすると、なぜか不正解と判定されてしまうからです。


=================

double num1 = 0.1;
double num2 = 0.2;
double num3 = 0.3;
double ans = num1 + num2;

//比較
if (ans == num3) {
    NSLog(@"YES");
} else {
    //こちらが表示される
    NSLog(@"NO");
}

=================


これは私もすっかり頭から抜け落ちていたのですが、小数の値が二進数では表現できないことによる誤差が原因でした。

そもそも、プログラム内部では値を二進数で計算しています。
十進数の『0.1』は二進数だと『0.0001100110011…』となり循環小数となってしまいます。
演算するときはどこかで丸められてしまうので、十進数の値とは誤差が生じてしまうというわけです。

Objective-Cではそういう場合は『NSDecimalNumber』を使って対処します。

=================

NSDecimalNumber *decimal1 = [NSDecimalNumber decimalNumberWithString:@"0.1"];
NSDecimalNumber *decimal2 = [NSDecimalNumber decimalNumberWithString:@"0.2"];
NSDecimalNumber *decimal3 = [NSDecimalNumber decimalNumberWithString:@"0.3"];
NSDecimalNumber *decimalAns = [decimal1 decimalNumberByAdding:decimal2];

//比較
if ([decimalAns isEqualToNumber:decimal3]) {
    //ちゃんとこちらが表示される
    NSLog(@"YES!!");
} else {
    NSLog(@"NO!!");
}

=================

プログラムを書いていると、内部は二進数で…ということは忘れがちです。
これはどの言語でもある現象なので、覚えておくと良いでしょう。


せり上がってくる数字と演算子で計算式を作り消して行く
5つ正解でクリアー、全30ステージの知育系パズルゲーム


2014年5月14日水曜日

Xcodeで便利になるコメントの書き方

プログラムを書くときに、ちゃんとコメントを入れていますか?
一人で書く場合は、案外適当だったりしますよね。
そのコメントの入れ方で実はXcode上で便利になることを知りました。


普通はこんな感じでコメントを書くと思います。

スラッシュ2つ『//』のコメント

---------------------------------
//コメントテスト用メソッド
- (void) commentTest1 {
    
    //変数コメント
    int commentVal = 0;
}
---------------------------------


それをこのように変えてみてください。

『/**』と『*/』の間に書くコメント

---------------------------------
/** コメントテスト用メソッド */
- (void) commentTest1 {
    
    /** 変数コメント */
    int commentVal = 0;
}
---------------------------------


そして、その関数を補完候補で見てみると…

このように、コメントがメソッドの説明として表示されます。


同じように、変数でもこの通り。


このコメントの入れ方はドキュメント出力するとき用だと思っていました。
実はXcodeの補完候補でも使われているんですねえ。
今まで知りませんでした。

簡単で地味に便利なので、コメントを入れる時はこのやり方にしてはいかがですか?


アルファベットをタップして英単語を作る知育系アプリはいかがですか?
「しりとり」や「文字数制限」などのステージが48もありますよ。



2014年4月24日木曜日

Xcode付属のdiffツール『FileMerge』を使ってみた

iOSアプリを開発中に、ファイルの差分を取りたくなりました。
もしかして、Xcodeにその機能が無いかと調べてみたら、やっぱりありました。
知らない人もいるかと思うので、そのdiffツールの起動の仕方をご紹介します。

Finderで『アプリケーション』⇒『Xcode』を右クリック⇒『パッケージの内容を表示』

『Applications』フォルダの『FileMerge』がdiffツールです

起動して、左右のファイルを選択します

このように、簡単にdiffが取れました

シンプルなdiffツールですが、ちょっとした用途ならこれで十分です。
知らなかった人はお試しあれ。



アルファベットをタップして英単語を作る知育系アプリはいかがですか?
「しりとり」や「文字数制限」などのステージが48もありますよ。



2014年4月14日月曜日

Xcodeでgitを使うべき3つの理由

前回、Xcodeでgitを途中から使う方法について書きました。
でも、そもそもなぜgitを使うのか理由が分からない人もいるのではないでしょうか?

仕事でプログラムを書いたことがある人はバージョン管理ソフトの利便性は理解されていると思いますが、そうではない人はピンとこないかも知れません。

そこで、バージョン管理というよりも、こんな便利な機能が使えるので使った方が良い。
そんな3つの理由をあげたいと思います。


追加、修正したファイルが分かる


gitを使うと以下のように追加、修正したファイルに印がつきます。
※A:追加(Add)  M:修正(modify)

複数のクラスにまたがって修正することも多いはずなので、「あれ、どのファイルを修正してたんだっけ?」となったときに直ぐに分かるので地味に便利です。


2.変更履歴が分かる


ソースの変更履歴が簡単に分かります。

『Source Control』→『History…』

Commitした日時とコメントが見られます

また、ソースの細かい改修履歴も見ることができます

リリース後の機能追加やバグFIXなどは、ここを見ればアップデート時の新機能に何を書けば良いのか直に分かりますね。


3.ソースを前の状態に戻せる


ソースを前回コミットした状態へと簡単に戻せます。

『Source Control』→『Discard Changes in …』

試しにコードを書いてみて、『やっぱり駄目だから前の状態に戻そう』なんてときに、ちまちまUndoしなくても一発で戻ります。


gitの運用方法


以上の3つが使えるだけで、便利だと思いませんか?
これらの機能を使うだけなら、gitの運用の仕方は簡単です。
ある程度の切りが良いところでソースをcommitして行くだけ。

追加、修正したファイルを『Source Control』→『Commit …』

基本的にはコメントとして何を書くのかを意識して、その単位でコミットすればOK
例えば、『ヒント機能の追加』とか『間違った音が鳴るバグを修正』など。


とりあえず、ここに書いてある機能が便利だなあと思った人は、gitを使ってみてはいかがでしょう。


タップで計算式を作って暗算する知育系アプリです。
あなたの脳偏差値はいくつかな?




2014年4月11日金曜日

Xcodeで途中からgitを使う方法

Xcodeでは標準でgitによるバージョン管理をすることができます。
プロジェクトを新規作成するときに使うかどうかを選択します。
でも、最初は必要ないと思ったけど、途中から使いたくなったときはどうすれば良いのでしょうか?
実は途中からでも簡単にgitを使うことができるので、その方法を記載します。


gitを使っていないプロジェクトはXcodeのユーティリティエリア(右側)の『Source Contorol』の部分が黄色くなっています。

※ユーティリティエリアは以下の赤で囲んだ所をクリックすると出ます


一旦、Xcodeは閉じてターミナルを立ち上げ以下のコマンドを実行します。


1.プロジェクトファイル(xxxxx.xcodeproj)のあるディレクトリへ移動

cd /Users/xxxx/Desktop/project


2.リポジトリの作成

git init


3.ファイル追加

git add .


4.コミット(メッセージ付き)

git commit -m "initial commit"
※コミット時のメッセージは任意のものでOK


Xcodeでプロジェクトを開くと既に使えるようになっています。
右側のユーティリティエリアに緑が灯っていれば大丈夫です。


『Source Control』→『History…』で履歴を見ると


コミットの履歴が残っています


このように途中からでも簡単にgitを使い始めることができるので、活用して行きましょう。