アドレス交換アプリの2.1が公開されました。

LINEで送る
Pocket

去年リリースしたアドレス交換アプリをアップデートし、本日2.1が公開されました。
1.0を使っていただいた方からすれば全く別アプリのようなUI変更、位置情報の共有などの機能、Bluetoothでの共有機能を追加しています。
2.1ではGoogle Mapアプリが入っている端末に位置情報を共有した場合に現在地からの経路を検索できるようになりました。

これをつかって共有すれば待ち合わせにもすごく便利だと思いますのでぜひ。

https://itunes.apple.com/jp/app/adoresu-jiao-huan/id541392045?mt=8

位置情報の共有

位置情報をメール、SMS、Lineなどで共有する事ができます。

BlueToothでも交換できます

BlueToothを使ってアドレス帳や写真の交換もできます

2012/06/23 MEGライブで撮影コーナーをやりました。

LINEで送る
Pocket

久しぶりの投稿です。

先日、6/23に渋谷AXで行われたMEGの10th Anniversary Party “Arivee´”にて記念フォトブースなるコーナーをやってきました。

MEGさんへの思い入れを語りだすと非常に長くなりそうなので簡単にですが、5年以上前、名古屋に住んでいるときからのファンで、冗談ではいつか会えたらなあ、とかいつか何らかの形で力になれたらなあと思っていただけに、まさか現実になるとは!という感じで非常に
テンションがあがっていました。
また出来たらいいなあ。

コンテンツ自体は、
LA JAPONESEのポスターの様な写真をライブの記念にとれます、という至ってシンプルなものです。
技術的にもシンプルなものを組み合わせて一気に制作しました。

今回のシステム全体図はこういう感じです。
ブログ資料

メインとなる撮影コンテンツはOpenframeworks(以下、oF)で作りました。

制作メモ

【カメラ画質が汚かった】

カメラの映像を常に画面に表示しているのですが、普通にofGrabberを使おうとするとなぜか映像が非常に荒くなって使い物にならないという問題発生。
解決する時間も無かったので映像を綺麗に表示できていたVJソフトのmodul8の映像をsyphon経由で撮影アプリにおくり、syphon経由でビデオの映像を表示しました。
また、webカメラだとどうしてもカメラとしての性能が良くないので画面が綺麗にならず、ビデオカメラを借りました。(ありがとうございました。)

【撮影について】

撮影→画像化はoFで行いましたが、通信周りの実装が時間的に厳しかった事もあり、サーバーへのアップロードはPHPスクリプトにて作りました。

oFで画像化→シェル経由でPHPスクリプト起動→curlでサーバーの保存スクリプトへアップロード

という流れです。
ちなみに今回はほとんど使わなかったですが、撮影画像のアップロードが完了すると画面にQRコードが現れるという仕組みも作りました。

【iPhoneアプリについて】

どれだけ入力の煩わしさを減らし、なるべく速く多くの人に体験してもらいながらも今回の要求を満たすセキュリティを確保できるかというのも課題の一つとしてあり、PCのキーボードで入力するとなると敷居が高くなるので、パスワードだけを登録できるアプリをiPhoneアプリとして作りました。
改善点はあるものの、PCで入力させるよりは使いやすかったのではないかと思っています。
これは前日まで悩んでいたのですが、ちゃちゃっと作ってみました。

【ダウンロードについて】

撮影時に動的にURLがつけられるので、そこにアクセスしたときにiPhoneアプリに入力したパスワードを入れると画像を表示する、というものだったのですが、思ったよりいわゆるガラケーユーザー、古い機種を持っている人が多かったので、ダウンロード方法などで少し工夫する余地がありました。
画像サイズも大きめにしていたのですが、古い機種だとサイズオーバーしてしまって表示できないと言う事がありました。
また、保存方法も機種によりまちまちだったので、メール送信などの方法をとった方が良かったのかなとも思いました。

【ネットワークの回線について】

懸念事項ではあったのですが、途中で回線が遅くなり、画像アップロードに時間がかかってしまう時がありました。
ここは改善の余地ありですね。

——
とはいえ、予想以上にお客さんが撮影コーナーにきて撮影してくれた事、撮影中みんながすごく楽しそうに撮影してくれたり、ポーズをとってくれたり、非常に楽しそうにしてくれていてすごく嬉しかったです。
色々気にしていて肝心のライブをあまりみれなかった事は非常に残念ではありますが、
自分が前から応援しているMEGのライブを僕と同じように心待ちにしていたみなさんの思い出づくりに少しでも役に立てたのかと思うと充実感がすごくありました。

最後に、当日まで色々とやり取りしていただいたり設置でアドバイスをいただいたスタッフの方々、機会を与えてもらえて気を遣って言葉をかけてくれたMEGさん、
コンテンツの相談や当日頭が動いていなく、不器用な僕なんかよりすごく動いてくれて考えてもらえた友達にも改めて感謝いたします。
また、ビデオカメラを貸してくれた村上さんありがとうございました。

ライブ後のエンドロールに名前を入れてもらえてた事を知ったときはすごい嬉しかったです。

また機会があればよろしくお願いします。

あとは現場風景の写真をいくつか。

撮影場所。このようにビデオカメラを横に設置しました。ディスプレイは50inch。

撮影場所。このようにビデオカメラを横に設置しました。ディスプレイは50inch。

ブースのパネル。横のポスターのテイストで撮影できるようなコンテンツでした。

ブースのパネル。横のポスターのテイストで撮影できるようなコンテンツでした。

撮影画面。ここに入って撮影しました。

撮影画面。ここに入って撮影しました。

※確認を取っていないので名前は伏せ気味で。。

SA_TwitterEngineでのログアウトについて

LINEで送る
Pocket

試行錯誤した後のコードをもとに書いているので無駄なコードがあるかもしれません。ご了承ください。。。

iOS5からはOSベースでのTwitter連携のサポートがありますが、2012年1月現在だとまだiOS4にも対応させたいですよね。

そんな時の便利なライブラリとしてこちらがあります。
https://github.com/bengottlieb/Twitter-OAuth-iPhone

サンプルコードもついていて、サンプルをビルドするとすぐに挙動が確認できて、テスト投稿なんかも簡単にできてしまいます。
この取っ付きやすさはライブラリを使う際に「簡単なんだ」と思う事ができてやる気をあげてくれます。

ただ、このライブラリはログアウトの事はあまり考えていないようで、ログアウトしてアカウントを切り替えるなどしたい場合は結構大変です。

僕は下記の方法をとりました。あくまで一例ですのでご容赦ください。


SA_OAuthTwitterEngine.m

- (BOOL) logout
{
	BOOL res = NO;
	
	NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
	[defaults removeObjectForKey:@"authData"];
	res = [defaults synchronize];
	[self clearAccessToken];
	[_accessToken release];
	_accessToken = [[OAToken alloc] initWithKey: nil secret: nil];
	
	return res;
}

アクセストークンもクリアしてるしこれで問題ないはずなのですが、これだけだとキャッシュデータが残ってしまっているようで、ログアウトして再度認証画面を呼んでもテキストの入力ができません。

なのでSA_OAuthTwitterEngineを保持しているクラスで認証画面を呼ぶ処理でこの用に書きました。

if (_engine){	return;}
_engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self];
_engine.consumerKey = kOAuthConsumerKey;
_engine.consumerSecret = kOAuthConsumerSecret;

[_engine setClearsCookies:YES];

_authorizeViewController = [[SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self] retain];

[_engine setClearsCookies:NO];

_authorizeViewControllerを初期化する前に

[_engine setClearsCookies:YES];

を呼んでキャッシュをクリアできるようにしておき、初期化後に

[_engine setClearsCookies:NO];

としてデフォルトのNOに値を戻します。
これでログアウト後に再度ログイン用の認証ダイアログを呼んでも新たにアカウントを入力する画面が表示されたはずです。

ちなみに、iOS5以降は送信先URLがhttpではなく、httpsでないとうまく認証できないのでご注意を。ちなみにhttpsにするとiOS4でも問題ないので修正しておくと良いと思います。

ちなみに「強火で進め」様のサイトが詳しいです。
http://d.hatena.ne.jp/nakamura001/20100519/1274287901

ちゃんと精査して書ききれていない記事ですみませんが、同じようにはまる方の助けになればと思います。

何かありましたらコメント欄でも twitterの @mmlemon でもお気軽に突っ込んでください。

[メモ] カスタムUITableViewCellの選択時の文字色を変える

LINEで送る
Pocket

今日はメモです。

iOSアプリ開発で、独自に作成したUITableViewCellをタップした時にデフォルトのUITableViewCellと同じように文字色を変えたかったのですが、見つかるまでに少し時間がかかったのでメモしておきます。

独自で作成したUITableViewCellのサブクラス内に

-(void)setHightlighted:(BOOL)highlighted animated:(BOOL)animated

というメソッドがあるので、それをオーバーライドしてhighlightの値を元に表示を切り替えると画面に触れたときに、文字色を変える事ができます。

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    if(highlighted){
        [self setWhite];
    }else
    {
        [self setBlack];
    }
    [super setHighlighted:highlighted animated:animated];
}

※setWhite, setBlackは文字色を変更するための独自メソッドです。

iPhoneのSimulatorと実機での違い

LINEで送る
Pocket

iPhoneアプリの開発をしていてハマった事がまたありましたので残しておきます。

Objective-Cで、
例えばクラスAの@interface部で@protectedとして宣言していた変数aをサブクラスで呼ぶ場合、通常であればそのまま使えるはずなのですが、実機に向けてビルドするときにはエラーになってしまいました。

これは調べてみるとどうやら、
・シミュレータではデフォルトの設定が@protected
・実機ではデフォルトが@private
と言う事に原因がある様です。(そういった差が生まれないように@で明示的に宣言したつもりだったのですが)

最善の解決策ではないですが、-(id)gethoge;といったメソッドを作成しました。
カプセル化がしっかりできていないとは思うのですが、これでひとまずはエラー出ずにビルドし、問題なく動作するようになりました。

参考URL(StackOverflow:英語):
http://stackoverflow.com/questions/5513605/inheritance-working-on-simulator-but-not-on-iphone

iPhoneの実機に転送できない

LINEで送る
Pocket

開発中のアプリをiPhoneの実機に転送できなくて、はまっていました。
根本的な解決をしたわけではないですが、あまり情報がみつからなかったので同じようにはまった人の助けになればとおもって残しておきます。

まず、僕が出会ったエラーは

The executable was signed with invalid entitlements.

The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile.

というものでした。
こちらのサイト様(iPhoneアプリ開発の備忘録)ではクリーンビルドする方法を示されていましたが、僕のサイトではそれでは解決しませんでした。

僕の場合はiOSのバージョンをあげた事が原因なのか(4.3.5にアップしました。)provisioningファイルがiPhone実機とあっていなかったみたいなので、Provisioning Portalから再度Provisioningファイルを作成し、Organizerにインストールして無事に実機へ転送する事ができました。

[iOS] OSStatusの結果について

LINEで送る
Pocket

オーディオとかMIDIとかの場合は良くOSStatus err
とかして処理が成功しているかを確認すると思うのですが、エラーを出したときにいつも検索して調べてたので自分のために残しておきます。
せっかくなので、日本語にしておきました。ちょっと翻訳が怪しいところもあるので突っ込みがあれば頂けると助かります。

errSecSuccess = 0
成功(エラーなし)
errSecUnimplemented = -4
関数か操作が実装されていない
errSecParam = -50
関数に送っている一つ以上のパラメーターが不正。
errSecAllocate = -108
メモリの確保に失敗
errSecNotAvailable = -25291
利用可能なキーチェーンが存在しない。コンピューターの再起動をすすめます。(翻訳が怪しいかも?)
errSecDuplicateItem = -25299
特定のアイテムが既にキーチェーンに存在する
errSecItemNotFound = -25300
特定のアイテムがキーチェーンの中に見つけられなかった
errSecInteractionNotAllowed = -25308
ユーザーインタラクションが許されていない
errSecDecode = -26275
与えられたデータをデコードできない

完全にこちらのサイトを見させていただいて書きました。ありがとうございます。
http://d.hatena.ne.jp/feb-hare/20100729/1280359887

[iOS] UIViewの背景画像を設定する

LINEで送る
Pocket

iPadアプリを現在作っているのですが、背景画像の設定方法がわからなくて、Interface Builder上のいちばん下にUIImageViewを貼付けていたりしたのですが、他のパーツを動かすときにいちいち選択状態になって邪魔だったり、そもそも余分なインスタンスを持ってしまうのでバグが発生しやすくなるかも?という事でなるべく避けたかったので調べていたら、UIColorに画像を指定する方法を見つけました。
ほぼ100%こちらのブログを参考にさせていただいています。。すみません。

http://r-force.seesaa.net/article/164146136.html

使用方法はこんな感じです。background.pngってのは背景画像として使う画像ですよ。

UIImage *backgroundImage = [UIImage imageNamed:@”background.png”];
self.view.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];
[backgroundImage release];

要するに、UIImageをUIColorのcolorWithPatternImage: を使う事で設定できる、という事ですね。
ActionScriptで言うところのbeginBitmapFill();みたいなものであり、
WPF/Silverlightで言う所のImageBrushって所でしょうかね。

これで簡単に背景画像を設定できるようになったので、リンク先にもあるようにどこまで応用できるかで外観のカスタマイズがどこまでできるか、というのが解りそうですね。