しむしむてるるの日記&雑談 同人誌の進捗やら仕事のあれこれやら書いています。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | TB(-) | CM(-)

【iOS】Yahoo地図が実機で動かない【Titanium】

先々週くらいかな?
Yahoo地図をTitaniumで使うコードを書いて、iPhoneシミュレータで動いたからそこで安心して、実機でのテストをしなかったんですけど...
実機で動かしたらまったく動きませんでした。(ーーι

手順はこのサイトを参考にして
Yahoo! iOSマップSDKを使ったtitanium moduleを作ってみた
モジュールで使うフレームワークのリンク部分にパス(-F path)を追加するだけでシミュレータ上は正常に動作しました。

そして、実機でのテストですが...>画面が真っ黒になって固まります
色々考えて、XCodeの設定を見直したり、いくつかテストコードを書いてみたりしても解消されませんでした。

そこで、ネイティブにObjective-Cで組んでみたんですが...
なんと!同じ現象が!!!
少し焦りました。(>Д<
プロジェクトの報告でObjective-Cだと動くと行っていたので...
実際に、以前のテストでは実機でもちゃんと動いていたんですよ?

それで、以前のコードと何が違うのかを調べた結果、
画像リソース(imageディレクトリ)がプロジェクトに追加されていない
ことが原因だと分かりました。

参考にしたサイトでは使わないから要らないって書いてあったし、
シミュレータ上でもそれで問題なく動いていたので、気付かなかった。
そんな訳で、Objective-Cの方はリソースを追加してあっさり解決。

問題は...Titaniumの方です。
Titaniumでのリソースの扱いはXCodeと違うので、単純にプロジェクトに追加するだけだと意味がありません。
じゃぁ、モジュールを作る時のXCodeのプロジェクトで追加すれば...
と思ったのですが、ダメでした。

最終的に、Titaniumで一度ビルドしてXCodeのプロジェクトを生成して、
その生成されたXCodeのプロジェクトにリソースを追加して、
XCodeでビルドし直すという方法でなんとか動作させる事が出来ました。

できましたが...Titaniumでビルドし直す度に作業が必要になるので、
完全解決にはなっていません。

Yahooへの問い合わせでもTitaniumは想定していないし、
対応する予定も無いとのことです。(まぁ、当然と言えば当然ですけどね)

結論としては、TitaniumでYahoo地図を使おうとしたら、ある程度の覚悟が必要。
少なくともXCode&Objective-Cの知識がある程度必要ですね。
でも、その知識があるなら素直にネイティブで書いた方が...と思います。

この原因究明と解決、結論に5日もムダにしたので、
他の方がそんな無駄な時間を過ごさない為にメモとして残しておきます。
スポンサーサイト
[ 2012/12/06 07:53 ] iPhoneアプリ開発 | TB(0) | CM(0)

【iOS】インデックスバーを使う【UITableView】

以前、仕事で1000を超える要素を持つテーブルを作る必要がありました。
これだけ要素が多くなるとスクロールをするのも一苦労です。
おそらく、ユーザーからしてみたらストレスに感じる事でしょう。
そんな場合の為に、iOSでは下の図の様に右側にインデックスバーを表示して、そのインデックスをタップすると、そのセクションまでスクロールしてくれる機能がついています。

セクションインデックス1

と言う訳で、今回はその実装方法に触れたいと思います。
と言っても至って簡単で、次の2つのメソッドを追加するだけです。
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index

どちらも UITableViewDataSourceプロトコル のメソッドです。
sectionIndexTitles...の方はその、インデックスバーに表示させるタイトルの配列を設定するメソッドです。
今回は全セクションをそのままインデックスバーに対応させていますが、
"あ か さ た な は ま や ら わ"のように間引いた形にする事も可能です。
続いて、...sectionForSectionIndexTitle... ですが、
こちらは、先に設定したインデックスと実際のセクションを関連づけるメソッドです。
例えば、インデックスバーに"あ か さ た な ..."のように実際のセクションを間引いたような設定にする場合、"さ"が選択されたらセクション番号10に飛ぶという様な設定を行います。

以下が実際のコードです。
※ このIBTableViewControllerクラスはXIB利用での新規作成を行っています。
XIB未使用の場合は、initWithNibName: bundle: メソッド内での
  [self setSourceData];
を initWithStyle や init メソッドに記述して下さい。

IBTableViewController.h
//
// IBTableViewController.h
//

#import

@interface IBTableViewController : UITableViewController {
NSArray *titles;
NSMutableArray *source;
}

@end

IBTableViewController.m
//
// IBTableViewController.m
//

#import "IBTableViewController.h"

@interface IBTableViewController ()

- (void)setSourceData;

@end

@implementation IBTableViewController

- (void)setSourceData
{
// セクションタイトルのアレイ作成
titles = [NSArray arrayWithObjects:
@"あ", @"い", @"う", @"え", @"お",
@"か", @"き", @"く", @"け", @"こ",
@"さ", @"し", @"す", @"せ", @"そ",
@"た", @"ち", @"つ", @"て", @"と",
@"な", @"に", @"ぬ", @"ね", @"の",
@"は", @"ひ", @"ふ", @"へ", @"ほ",
@"ま", @"み", @"む", @"め", @"も",
@"や", @"ゆ", @"よ",
@"ら", @"り", @"る", @"れ", @"ろ",
@"わ", @"を", @"ん", nil];
[titles retain];

// 各セクション分の項目を保持するアレイを作成
source = [[[NSMutableArray array] init] retain];
for( int i=0; i<[titles count]; i++){
[source addObject:[[NSMutableArray alloc] init]];
}

// 項目を作成(各セクションに10個ずつ作成)
NSMutableArray *items;
for( int i=0; i<[titles count]; i++){
items = [source objectAtIndex:i];
for( int j=0; j<10; j++){
[items addObject:[NSString stringWithFormat:@"%@-%d", [titles objectAtIndex:i], j]];
}
}
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if(self){
[self setSourceData];
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}

- (void)dealloc{
[source release];
[titles release];

[super dealloc];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [source count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [titles objectAtIndex:section];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[source objectAtIndex:section] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

cell.textLabel.text = [[source objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

return cell;
}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return titles;
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
return [titles indexOfObject:title];
}


#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}

@end

これで、始めに載せた図のようなテーブルを作成する事が出来ます。

このテーブルでインデックスを"あ行 か行 さ行 ..."のようにする場合は、
先に紹介した2つのメソッドを次のように書き換えます。
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return [NSArray arrayWithObjects:@"あ行", @"か行", @"さ行", @"た行", @"な行", @"は行", @"ま行", @"や行", @"ら行", @"わ行", nil];
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
// インデックスタイトルから"行"を削除
NSString *target = [title stringByReplacingOccurrencesOfString:@"行" withString:@""];
// セクションタイトル配列から文字が一致する要素の番号を取得
NSInteger section = [titles indexOfObject:target];

return section;
}

これだけで次の様な画面へと変わります。
セクションインデックス2

結構簡単ですね。
これと同じ事ってAndroidでも出来るんでしょうか?
今度調べてみようと思います。
[ 2012/11/18 08:09 ] iPhoneアプリ開発 | TB(0) | CM(3)

TitaniumでiPhoneアプリ開発

さ〜、東京での仕事の初週が終わりました。
一日目は設計環境の構築で終了しましたが、
その後は実際に開発...と言うより開発準備?を行いました。

今回の開発も今まで2ヶ月と同様iPhoneアプリ開発ですが、ポイントが以下の3点。
1. 客先は初のiPhoneアプリ開発でノウハウがない
2. 客先側でTitaniumを使用することが決まってる
 (Objective-CよりJavaScriptの方が1発目として作り易いと判断したらしい)
3. Titaniumでは困難な部分があると予想できるので、
  そう言った部分はObjective-Cでモジュールを作成して使う。

私が今回このプロジェクトに入る事になったのは、iPhoneアプリ開発のノウハウを期待されてのことなのですが......
今回の作るアプリを説明されて感じた事は......
『普通にObjective-Cで作れば一人でも1ヶ月くらいで出来るんじゃね?』
そんなに複雑な事もしてないし、画面遷移だってそんなにないから、作る画面・使うUIも限られてるし。
多分と言うより、ほぼ確実に2ヶ月あればレビューも終われると思います。

ただ、まぁ〜お客様の意向なのでTitaniumを使いますけど...気が進まないです。
何より、一番キモの部分はObjective-Cで作る事になりそうなのと、
いちからTitaniumを勉強する必要があるので。
別に、新しくツールを使う事は問題じゃないです。
むしろ、色々な事に挑戦して行きたいので、大歓迎です。
じゃぁ、何が嫌かと言うと...
Titaniumで作った方が容易だと勝手に決めている点です。

確かにTitaniumだけで基本的な事はできますし、
新しくObjective-Cの勉強をして開発をするのに比べたら楽でしょう。
ただし、それはTitaniumで完結できる場合に限られる気がします。
あるいは、Androidアプリも同時に開発するとか、
今後もTitaniumを使った開発を何度も行う可能性があるとか。
そう言う事情があるなら、素直にTitaniumで開発します。

ですけど、今回の開発は違います。
まず、Titaniumを使った開発は今回だけでの可能性があるらしいです。
そして、iOSの地図は使わずYahoo地図の利用を検討しています。
当然YahooMapはTitaniumの標準Mapでは無いので使えません。
そうなると、XCodeとObjective-Cでモジュールを作成して、
Titaniumに組み込む必要があるんですけど......
結局、Objective-Cを使うし、Titanium用モジュール開発という勉強が余計に発生する訳です。
それって、トータルで考えるとObjective-Cだけを勉強するのと変わらないんじゃ?
それに、iPhoneアプリ開発経験者(私の事)をわざわざプロジェクトに加えてるんですよ?
どう考えても素直にObjective-Cでの開発にした方が楽です。

ま、とは言っても、Titaniumを使う事が決定しているので、仕方がないです。
個人的にも興味はあるので、Titaniumの勉強をする機会をもらえたと思う事にします。
あと、ちょうど良いので、このblogかWebサイトでTipsを載せて行こうと思います。

ちなみに、開発は今年度いっぱいらしいです。
工数的には12人・月くらいでしょうか?
私の感覚だと1/5の工数で十分な気がしますが...(^^;

...もう、秘密裏にTitaniumを使わないアプリも作ってしまおうか...とか考えてしまいます。
[ 2012/11/18 07:59 ] iPhoneアプリ開発 | TB(0) | CM(0)

iPhoneアプリ『録画コメ流し』

先週末に4作目のiPhoneアプリがリリースされました。\(^▽^)/

今回のアプリはツイートをニコ動のように流すアプリです。
このアプリは、キーワードと日時を指定してツイートを取得&再生するので、
録画したアニメやドラマと同時に再生すると他の人のコメントを見ながら番組を楽しむことができます。
無料アプリですので、ぜひ使ってみて下さい。
そして、感想とか改善案とかを聞かせて下さい。m(_ _)m

さて、今回のアプリですが...
Appleのレビューで一回跳ね返されました。
リジェクトではなく、デモを作って下さいって理由でのレビュー中断でした。
やっぱり、日本の一部の人以外にはよく分からない機能なんでしょうか?
そもそも実況ツイートなんてのが日本以外にあるのかも不明ですしね。
そんな訳で、急ぎでデモを作って連絡しました。
連絡して、直ぐにレビューに入ったけど...
なかなかレビューが終わらず...2日間ほどレビューになってました。
何か問題でもあったのかな?
本社だと判断できなかったから、一度日本のスタッフに連絡とって、もう一度本社で確認したとかでしょうか?
(実際にそんなやり取りが存在するのか知りませんが)
まぁ、無事にリリース出来たので良しとしましょう。(^_^)

【デモ】



次は、少し頭を使うパズルゲームっぽいものを作ろうと考えています。
そして、ステージを多く作ってアプリ内課金を導入しようかと...
どんなゲームなのかは乞うご期待です☆
[ 2012/06/05 22:27 ] iPhoneアプリ開発 | TB(1) | CM(0)

第3弾iPhoneアプリ『傾けて水溜め』リリース!

まだサポートページが作れてないんですが...
本日、簡単操作なiPhoneゲームアプリ『傾けて水溜め』がリリースされました!

操作は簡単!
ゲームが始まったら、タイミングよくiPhoneを傾けるだけ。
傾ける角度によって、水の流れ出る位置や量が変わりますので、
上手く操作して、沢山の水をプールに溜めましょう!
RWC_ゲーム画面



条件を満たすと、コレクションアイテムをゲットできます。
RWC_コレクション画面


GameCenter対応でランキングにも参加できます。

無料アプリですので、
是非DLしてみて下さい。 (^o^)

RWC_アートワーク

[ 2012/04/27 21:25 ] iPhoneアプリ開発 | TB(0) | CM(0)
FC2カウンター
カレンダー
08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Twitter@sweetsblast
過去ログ

2017年 08月 【1件】
2017年 06月 【3件】
2017年 05月 【3件】
2017年 04月 【3件】
2017年 03月 【5件】
2017年 01月 【1件】
2016年 09月 【2件】
2016年 04月 【2件】
2016年 03月 【2件】
2016年 01月 【5件】
2015年 12月 【3件】
2014年 05月 【1件】
2014年 04月 【1件】
2013年 12月 【1件】
2013年 03月 【4件】
2013年 02月 【3件】
2013年 01月 【1件】
2012年 12月 【3件】
2012年 11月 【4件】
2012年 10月 【2件】
2012年 09月 【4件】
2012年 08月 【2件】
2012年 07月 【3件】
2012年 06月 【11件】
2012年 05月 【11件】
2012年 04月 【9件】
2012年 03月 【15件】
2012年 02月 【17件】
2012年 01月 【5件】
2011年 12月 【14件】
2011年 11月 【11件】
2011年 10月 【19件】
2011年 09月 【10件】
2011年 08月 【4件】
2011年 07月 【11件】
2011年 06月 【4件】
2011年 05月 【1件】
2011年 04月 【17件】
2011年 03月 【29件】
2011年 02月 【24件】
2011年 01月 【30件】
2010年 12月 【30件】
2010年 11月 【22件】
2010年 10月 【26件】
2010年 09月 【27件】
2010年 08月 【30件】
2010年 07月 【27件】
2010年 06月 【24件】
2010年 05月 【7件】
2010年 04月 【6件】
2010年 03月 【3件】
2010年 02月 【6件】
2010年 01月 【8件】
2009年 12月 【8件】
2009年 11月 【5件】
2009年 10月 【7件】
2009年 09月 【18件】
2009年 08月 【22件】
2009年 07月 【14件】
2009年 06月 【16件】
2009年 05月 【28件】
2009年 04月 【25件】
2009年 03月 【5件】
2009年 01月 【2件】
2008年 12月 【1件】
2008年 11月 【2件】
2008年 10月 【3件】
2008年 09月 【6件】
2008年 08月 【3件】
2008年 07月 【2件】
2008年 06月 【2件】
2008年 05月 【3件】
2008年 04月 【4件】
2008年 03月 【11件】
2008年 02月 【12件】
2008年 01月 【7件】
2007年 12月 【8件】
2007年 11月 【5件】
2007年 10月 【8件】
2007年 09月 【6件】
2007年 08月 【15件】
2007年 07月 【10件】
2007年 06月 【14件】
2007年 05月 【12件】
2007年 04月 【10件】
2007年 03月 【7件】
2007年 02月 【19件】
2007年 01月 【18件】
2006年 12月 【25件】
2006年 11月 【27件】
2006年 10月 【19件】
2006年 09月 【26件】
2006年 08月 【12件】
2006年 07月 【5件】



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。