2015年12月15日火曜日

Cordovaのプロジェクトにcordova-plugin-wkwebview-engineでつまづいた

開発に携わっている既存のCordovaプロジェクトで、
iOSでのパフォーマンスアップさせるためにUIWebViewの代わりにWKWebViewの導入を検討してるとこ。

とりあえず試してみるべと、
安易にプラグインをインストールしていくとアプリが起動中でプリーズする。
ログを見てみると、file://プロトコルで読み込もうとしている部分がすべてこけてる。

なんで?

ググってみると案の定WKWebViewでfile://でこけてる人がたくさんいた。
リンクは割愛するので「wkwebview file protocol」でググってみてください。

特定のディレクトリでしかfile://は動かないと。。。

現在の状態だとアプリバンドル内のwwwというディレクトリにすべてコピーされ、
file://で読み出そうとしている状態。

特定のディレクトリでfile://が動作するならば、
そもそもリソースのアップロード先を変更すれば解決できるそうだ!
これから検証していくけど、険しい道のりになるかもしれない。

2015年12月9日水曜日

nRF52 PDKを手に入れたの巻。

2015.12.08六本木ヒルズ49Fアカデミーヒルズにて開催された、

Nordicの「Global Tech Tour 2015」カンファレンスに行ってきた。


正直専門でもなく、電波にも疎いのでど素人として参加してきた。
同時通訳で行われたおかげで過ごしは話は理解できた。
わからないながらに話を聞き進めていくとnRF52(nRF51も)がすごいことに気づく。

特に2016年の世の中が変わっていくと感じた技術が、
NFC pairing(Touch-to-Pair)だ。

Bluetoothのペアリングを経験したしたことはありますか?
初めて接続する機器では必ずペアリングという作業が必要になります。
セキュリティを確保するためPasskey entryがつかわれているだとかで、
パスコード「0000とか9999とか1234とか」を入力したことはありませんか?

そ!れ!が!

Suicaをタッチする感覚でタッチするだけでペアリングができてしまうんですよ!!!
デモを見る限りおそらくSuicaより速度は遅い気がします。
もしかしたら環境、プログラムのせいもある気もしますが。
ともかく素晴らしく便利になる。

日本でモジュール提供する会社様からはすでに量産に向けて準備しているようで、
早ければ2016年のQ1、Q2には搭載された製品が市場に出てくるのではないかと勝手考えております。

他にも注目しなければいけないのが省エネ技術だ。
電力供給のオートメーション、CPU稼働を極力抑えたPPI(Programmable Peripheral Interconnect)技術、
ちょっと私には話が複雑で詳細までは掴めませんでしたがなるほどと納得はできた。
PPIはCPUを経由しないでイベント処理ができるとか。
Pin Crossbarなるものが入っていてピンの切り替えができるとか。
ん〜ど素人の私に誰か詳しくここらへん教えて欲しい。

nRF52 PDK
最後には、参加者にPDKボードを配布されたのでイジイジしながら勉強したいと思います。
とんでもないポテンシャルを持っている気がしてならない。
SDKおよびツールはここから、ドキュメントはここからダウンロードできます。

2015年10月21日水曜日

kAudioFormatAppleLosslessの型が変わったみたい

勉強がてらSwiftでアプリ開発してる時の話。
AVAudioRecorderで録音をしたいと思い初期化のサンプルを探した。

辞書型で設定を渡すと書いてあったが、
Xcode7.0.1ではエラーが出てしまう。
SOFによると原因は赤字の部分のようだ。
※参考(http://stackoverflow.com/questions/32509565/how-to-resolve-type-of-expression-is-ambiguous-without-more-context-for-an-audio
var recordSettings = [
            AVFormatIDKey: kAudioFormatAppleLossless,
            AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
            AVEncoderBitRateKey : 320000,
            AVNumberOfChannelsKey: 2,
            AVSampleRateKey : 44100.0

        ]

kAudioFormatAppleLosslessがIntからInt32/UInt32になったそうです。
Int32はNSNumberにブリッジされるために起きていました。

以下のようにIntにすればエラーは無くなります。
var recordSettings = [
            AVFormatIDKeyInt(kAudioFormatAppleLossless),
            AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
            AVEncoderBitRateKey : 320000,
            AVNumberOfChannelsKey2,
            AVSampleRateKey : 44100.0

        ]

細かい変更で出回っているサンプルが動かないことは他にもありそう。
学習コストはまだまだかかりそうだ。

2015年10月19日月曜日

軽自動車の名義変更まとめ

友人から軽自動車を譲り受けるとこになり、
名義変更の手続きは自分でやろうと思い代行は頼まなかった。

友達に教えてもらった手順が若干違って三度手間になってしまったが、
ようやく終わった。いい勉強になったのでまとめる。

今回名義変更にいった場所は「軽自動車検査協会東京主管事務所多摩支所」っていう場所です。味の素スタジアムの近くにある。

■概要
譲渡元「府中市在住の友人」
譲渡先「小金井市在住の俺」
譲渡物「軽自動車」

■必要な書類
・旧車検証(友人の名義のままでOKなので、友人から車と一緒にもらう)
・住民票(俺が役所またはコンビニで発行)
・自賠責保険証明書(だいたい車検証一式と一緒に入ってるはず。自分の名義じゃなくてもいいです。その車に自賠責保険があるかという確認だけをするそうです。)
・プレート(今回は同じ管轄内なので必要ありませんでした。管轄が違うと必要かもしれません。)
・申請用紙(現地で貰える。今回は友人が用意して先に署名、捺印したものをもらった)
※友達の印鑑を借りてくるか、事前に申請用紙をもらって友人に記入、捺印してもらった方が便利だろう。

■費用
無料だった。
念のため、ついでに警察署で車庫証明も取っておきました。
車庫証明発行に500円かかりました。

わからなければ、入ってすぐのカウンターの人に聞けば教えてくれる。
(ちょっと無愛想な人もいるけど概ね優しい人たち。)

用紙の記入をする際は住所を番号で書かなければいけないので、
それだけ事前に調べていけばよい。
住所コードは下記のURL先で調べることができるので活用してください。
http://www.kodokensaku.mlit.go.jp/motas/

どちらも待ち時間はほぼなく、
順調にいけば1時間もかかりません。
移動時間の方が長いくらいです。

もうすぐ車検切れなので受けなければなりません。
ユーザ車検とやらに行ってみたいと思います!

2015年10月16日金曜日

iTunesConnectアカウントの不具合?

私のAppleデベロッパーアカウントをabc@efg.jpだとする。

知り合いのデベロッパーの内部テスターとして、
abc@efg.jpあてに招待メールをもらう。

招待メールからアクティベイトする。
※そもそもアクティベイト画面がバグる。回避方法はmain.jsを書き換えて再読み込みすればいける。

自分のアプリが管理したくなったので、
その後、内部テスターを解除してもらう。

しかし、iTunesConnectに何度ログインしても、
はじめよう画面(初期の)が表示されてしまいます。

メンバーセンターへは正常にログインできるし、
ライセンスの有効期限は来年まである。

どうにもならなくなったのでアップル側サポートへメール。
1営業日以内には返事が来ました。返事は以下のような概要。
「あなたのアカウントを確認しました。内部テスターの解除も確認しました。
アカウントを調整したので再度サファリから正しいアカウントでログインしてください。」

言われた通りにする。

ログインすると、なんかアクティベイトに似た画面が出たので、
チェックして先に進むと画面が真っ白になった。

あ??と思ってリロードを何回かすると通常通りに戻った。

明らかにiTunesConnectの不具合だと思うのだけど、、、
他に同じような現象に遭遇した方はいるのかな。。

2015年10月7日水曜日

iOS9でHTTP通信できなかったので理由をメモ

LOVETOHOという拙いアプリを公開しています。
AppStoreで「toho」って検索すればトップにでます。

iOS9対応に重い腰を上げてやったのはいいが、
iOS8の頃と違っていろいろ不具合出ちゃう。

HTMLパースしかしてないアプリなのに。。。とほほ

そもそもhttpリクエストでHTMLを読み込むところでコケる。
iOS9からATS(App Transport Security)なるものがデフォで有効になっているせいだ。
そう、もう非セキュアなHTTP通信させないぜ、ということだ。
詳細はここを参考にしてください。
http://dev.classmethod.jp/smartphone/iphone/ios-9-intro-ats/

無効にすることもできるが、アプリ審査で弾かれるかもしれないという
噂がネット上に漂ってて。。。ゲロ吐きそう。

でも、対応は意外に単純でしたのでご紹介します。
特定のドメインとHTTP(S)通信をしますって宣言して、
どういうセキュリティレベルで通信しますってちゃんとplistに書いておけば良い。
もちろんHTTPSに対応してないサーバや、バージョンや暗号スイートが違うなんてザラ。
だから通信先のサーバではこれを許してねとかっていうのを明記していけばいいらしい。

世の中の流れ的にHTTP通信は撲滅の方向なのが身にしみた。
いろんなアプリが影響受けそう。

iOS9、Objective-CでHTMLParserを使っていたら文字化け起こした

何時間もかかってしまったが原因を特定できました。

HTMLParserはlibxml2のラッパーでHTMLをパースするときに
大いに助けられています。

が!iOS9で日本語部分がどうしても文字化けを起こしてしまい
使いものにならない。

パースする前は正常、パース後に文字化けする。
ってことは確実にHTMLParserが原因。にたどり着くまでが時間かかった。
iOS9でいろんな文字化けが出ているようで、その一つだと楽観視してたせいだ。

実際、原因はCFStringGetCStringPtrという関数がnullだったせいで、
エンコーディング引数が正常にわたっていなかったようで。
実際下記のサイトではnullになりうるからって書いてあった。
でもHTMLParser内ではそれは考慮された実装になっていないため気をつける必要がある。


NSString *enc = (__bridge NSString *) CFStringConvertEncodingToIANACharSetName(cfenc);
とするようにして
_doc = htmlReadDoc ((xmlChar*)[string UTF8String], NULL, [enc UTF8String], optionsHtml);
というように書き換えるとうまくいく。

文字化けっていやだね。
Githubのissueに出しておくかな。

と思ったらすでに提議されてたー!
https://github.com/zootreeves/Objective-C-HMTL-Parser/issues/34

2015年9月10日木曜日

Recon Jet向けAndroidアプリ開発:ヘッドトラッキング編

前回はRecon JetでAndroidアプリ開発するための前準備について書きました。

【注意】
ReconOSを最新版にしておきましょう。
Recon UplinkアプリをダウンロードしてデバイスをPCに接続するだけでアップロードが始まります。なお、Recon UplinkはEngageに登録後ダウンロードできます。
最新版のファームにしないと実機デバッグができない場合があります。

今回はヘッドトラッキングをするための手順をメモしていきます。
こちらの手引きを参考にすればできます。
英語なので苦手な方に参考になれば幸いです。

①AndroidManifest.xmlに追加します。
applicationタグの間に下線部を追加します。
<下記は引用>
<manifest…>

<application…>

<uses-library android:name="com.reconinstruments.os" />

</application>

</manifest>

②パッケージのインポート、マネージャーの取得、リスナーの実装をします。
Activityクラスに直接実装する場合は大枠は以下のようになるはずです。
<下記は引用>
import com.reconinstruments.os.HUDOS; ←インポート
import com.reconinstruments.os.hardware.sensors.HUDHeadingManager; 
←インポート
import com.reconinstruments.os.hardware.sensors.HeadLocationListener; 
←インポート

public class SampleActivity extends Activity implements HeadLocationListener ←ロケーション情報コールバック用のリスナーを実装します。
{

HUDHeadingManager mHUDHeadingManager = null; ←マネージャー保持用変数

@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG,"onCreate");
...
mHUDHeadingManager = (HUDHeadingManager) HUDOS.getHUDService(HUDOS.HUD_HEADING_SERVICE); ←onCreate時にマネージャー取得します。
}

@Override
public void onStart() {
Log.i(TAG,"onStart");
super.onStart();
mHUDHeadingManager.register(this); ←onStart時にリスナーを登録します。
mIsStarted = true; ←トラッキング中かどうかのフラグを保存しておけば便利になります。
}
@Override
public void onStop() {
Log.d(TAG,"onStop");
mHUDHeadingManager.unregister(this); ←onStop時にリスナーを登録を解除します。
mIsStarted = false;
 ←トラッキング中かどうかのフラグを保存しておけば便利になります。
super.onStop();
}

@Override
public void onHeadLocation(float yaw, float pitch, float roll) { ←リスナーの実装部分です。
// ここでRecon Jetの現在のヘッドロケーションがコールバックされます。
// yaw値:頭の水平方向の移動(※詳細は後述)
// pitch値:頭の上下方向の傾き(※詳細は後述)
// roll値:頭の左右方向の傾き(※詳細は後述)
}

}

③onHeadLocationコールバックについて
実際に20ms前後の間隔でコールバックされてきました。
yaw, pitch, rollそれぞれの値の単位は恐らく【度(°)】です。
yaw=0°になる位置とiPhoneのコンパスアプリの北が微妙にずれていました。
ちゃんと検証してないので間違っているかもしれないのでご注意を。
だいたい以下のような感じです。
■yaw
0°=北
90°=東
180°=南
360°=北
■pitch
−90°=真上仰向け
0°=正面
90°=真下
■roll
-90°=右真横
0°=垂直
90°=左真横

④あとは応用
好きに料理しちゃってください。

あまりRecon JETでアプリ開発してる人いなそうな。
ぐぐってもあまり情報がないような。。。

2015年9月2日水曜日

地元の豆腐屋食べ比べ。

午前の仕事終わり、帰りに地元の豆腐屋に寄ってみた。
最寄駅は西武多摩川線の新小金井駅。

お世辞にも活気がある商店街とは言えないが、豆腐大好きとしては買わずにはいられない。

木綿一丁。
あと夕食用にゆばと揚げ出しも。

早く豆腐を食べようと歩いてるともう一軒豆腐屋があった。

思いついた。

食べ比べよう!

木綿もう一丁。

先に買った方(写真右)をA、あとに買った方(写真左)をBとしよう。

弾力 A > B
水分 A < B

味はBはクリーミーで滑らかな舌触り。
Aはやや弾力がありかみごたえが楽しめる上味もしっかりしている。

木綿としての好みはA。

お店の詳細は今度紹介してみよう。

2015年8月27日木曜日

ドライブでまれのロケ地(大沢集落)に行ってみた【1日目】

■3日間(8月22日〜24日)の大体の概要
レンタカー(アクア)、2泊3日、宿予約なし。
走行距離1210km。
道中給油が3384円。
ガソリンは地方は高いですね。レギュラーはだいたい130円オーバー。東京だと120円程度。
平均燃費25.6km/L
最後は燃費計算で返却で総額43550円。(レンタカー3日間+ガス代+高速代)
ETCカードはレンタル。

コースはだいたいこんな感じ。
東京→山梨→長野→岐阜→富山→石川→富山→新潟→群馬→埼玉→東京。

天気
たまたま3日間晴天でした。曇りはありましたが。。。


①下道でゆっくり行こうとしたが思ったより時間がかかるので、
大月ICで高速へ。

②PM2:30頃にネットランキング3位のお蕎麦屋さん「水車挽き番所そば 中之屋」へ。水車で挽いてるとのこと。さっぱりと美味しかったです。写真下手でごめんなさい。
(左)おろしそば1550円  (右)水車小屋


③白川郷に向かう途中で鍾乳洞を見つける。入場券1000円で入る。気温12度でだいぶ冷やされた。上着必須。最後まで歩くと30分くらいかかるので今回は15分で出ました。進むに連れて狭くなるので苦手な人は気をつけてください。
あとでっかい鍋「日本一宿儺鍋」があった。数千人分の炊き出しができるとか。大橋展も併設されていたがあまり興味なかったのでスルー。
ライトアップされた鍾乳洞内(入場券1000円)


④夕方8時頃に白川郷に着く。この時間にはほとんどのお店は閉まっている。3時でほとんど閉まってしまうので要注意。さらに注意したいのは駐車場が18時に閉まってしまうので路頭に迷います。
★夏の夕暮れ時の白川郷は何とも言えない哀愁を漂わせ、なんだか懐かしい雰囲気で心落ち着きました。これはオススメ!予約すれば8000円台〜民宿に泊まれる。次は冬の景色を見に行きたいところ。
きれいな夕暮れに包まれた白川郷


⑤初日の宿探し。健康ランド「アラピア」に決めた。20時過ぎに着いた。付近でご飯を食べるために散策したが遠い。結局近くのインドカレー屋に入った。カレーとナンで1040円。つくってる方は現地の方っぽいのですが、地元のインドカレーの方が美味しかった^^;
アラピアは想像より大きい施設。16種類もある温泉でさっぱりして快適に過ごせました。ただ、難点がいくつかある。館内の温度設定が若干私には暑い。テレビが0時で消えるのはいいけど、朝テレビが大音量でいきなりつくのでびっくりする。女性専用部屋もあるしオススメ。一人2500円と格安。素泊りより安い。
貴重品の管理方法を決めて置かないと私みたいにビクビクしながら寝ることになりますのでご注意を。
でもリクライニングチェアーでプログラミングもはかどりましたし、Macbook Proもなくなりませんでした!
今晩の宿アラピア


2日目へつづく。

2015年7月4日土曜日

Recon Jet向けAndroidアプリ開発:開発準備編

昨今話題になっているメガネ型のウェアラブルデバイス「Recon Jet」
詳細はここ→http://www.reconinstruments.com/products/jet/

ようやくSDKが公開されたので早速アプリを開発しましょう!
ということで準備しましょ。

【注意事項】
Androidアプリの開発環境がすでに整っている前提とします。
また、ご自身の環境に合わせて読みといてください。

■環境
OS:Mac OS X 10.10.4
Java:1.8

■必須
事前にRecon JetのOSのバージョンを最新の4.2.0(2015年7月3日現在)にアップデートしておいてください。

本家のページを参考にすれば数分でセットアップは終わります。
http://www.reconinstruments.com/developers/develop/getting-started/recon-sdk-4-api/

1、Android Studioを起動します。Configure→SDK Managerを起動します。
2、一旦すべてのチェックをはずしてから、APIレベル16(4.1.2)のSDK PlatformとSources for Android SDKを選択しインストールする。
3、次にRecon SDK Add-Onをインストールするために、SDK ManagerのToolsメニュー→Manage Add-on sitesを選択する。
4、User Defined Sitesタブを選択し、Newを選択する。
5、http://www.reconinstruments.com/wp-content/recon-sdk/repository.xmlを入力してOKを選択し、Closeを選択する。
6、Recon instruments SDK Add-onが追加されているのでインストールする。
7、appモジュール内のbuild.gradleを開いてcompileSdkVersionの項目を下記のように修正する。
compileSdkVersion 'Recon Instruments:Recon Instruments SDK Add-On:16'
8、ついでに、targetSdkVersionをついでに「16」に変更します。
9、このままだと実機(Recon Jet)を接続しても表示されないので、Adbを差し替えます。
9−1、http://www.reconinstruments.com/wp-content/recon-sdk/adb.zipからダウンロードする。※3つのバージョンが入ってます。
9−2、./adb kill-serverで一旦終了させてから、既存のadbはadb.orgなどにリネームして置いておくといいと思います。
9−3、解凍したadbに置き換えてください。
10、アプリを実行してみてください。めでたくReconJetが表示されれば成功です。

2015年6月12日金曜日

Mac OS X Yosemite 10.10.3でParrot社のDroneSDKをAndroid向けにビルド

いろいろな事前準備と予期せぬエラーで大変だったのでメモしておきます。
間違っていたらご指摘ください。コメントなどで補足いただけると幸いです。

※個人メモのコピペなので親切じゃないです。
パスなど環境は適宜に読み替えてください。
※個人の環境によっても発生するエラーが異なるので
がんばってください。。。orz

公式ブログも合わせてご参照ください。
http://ardroneblog.com/ARDroneBlog/DroneBlog/Entries/2015/2/24_Bebop_SDK_in_OSX.html

-------ここから------
Homebrewをインストールして、brewコマンドを使えるようにしておく

Oracle Javaをインストールしてjava -versionでバージョン表示されるようにする

brewコマンドでgit, wget, automake, autoconf, libtool, yasm, nasm, mysqlあたりはインストールできるはず。
※mysqlはなぜかビルド失敗時にそれ関係のログを吐いたので入れてます

rplは以下のURLからダウンロードして解凍してパスに通しておく
http://sourceforge.net/projects/rpl/files/rpl/rpl-1.5.5/

AndroidSDKとAndroidNDKをそれぞれダウンロードして解凍しておく
適当に~/devディレクトリを作成して、~/dev/sdk、~/dev/ndkのように入れておく
次にANDROID_SDK_PATHとANDROID_NDK_PATHにそれぞれSDKのルートまでのパスをとおしておく。
Macだと~/.bash_profileでいいと思います。

$ANDROID_SDK_PATH/tools/androidを起動してAPI14とAPI19の2つに関するもの、
ADTの最新版をインストールしておく。
SupportLibraryなども入れといた方が良さそうです。

~/dev/android_toolchainsディレクトリを作成し、さらに中に
~/dev/android_toolchains/toolchain_arm,
~/dev/android_toolchains/toolchain_mips,
~/dev/android_toolchains/toolchain_x86の3つのディレクトリを作成する

以下のコマンドで上記の3つのディレクトリにツールを入れる
$ANDROID_NDK_PATH/build/tools/make-standalone-toolchain.sh --platform=android-14 --arch=<arch> --install-dir=<your/installation/dir>
【注意】
<arch>はそれぞれarm, mips, x86
<your/installation/dir>はフルパス指定で作成した3つのディレクトリをそれぞれ指定
(例)
<arch>がarmの場合は、
<your/installation/dir>を/Users/tsuyoshi/android_toolchains/toolchain_arm

上記のすべてが終われば事前準備は完了のはず。はず。

ビルドスクリプトをgitからダウンロードする。
~/dev/dronesdkを作成して
cd ~/dev/dronesdk; git clone https://github.com/ARDroneSDK3/ARSDKBuildUtils.git
すでにclone済みの人はgit pullで最新版にしておいてください。

【注意】
以下は、ARSDKBuildUtilsの中のpythonスクリプトが実行できない場合、改行コードが影響していると思われるエラーが出たらやってください。実行できるなら必要ないです。
ARSDKBuildUtils以下にある.pyファイルの改行コードをLFに変換する。
ARSDKBuildUtils/Utils以下にある.bashファイルの改行コードをLFに変換する。

環境セットアップが正しいかどうか必ずCheckEnv.pyを実行してオールグリーンにしておく
ただし、AndroidSDKのAPI19をインストールしてもMissingって出るのは放置。←10.10.3では出なかったな。。。
Platoforms/Android-19があることを確認して、あればおk。

CheckEnv.phを実行してAndroidセクションがOKであれば次はビルドを実行する

./SDK3Build.py -t Androidとすればビルドが開始される

2015/06/05にビルドしたらopensslのダウンロードで証明証エラーでコケる。
opensslで証明証エラーって怖いな。。と思いつつ、手動でダウンロード。
※これは発生しない場合もあったので注意
wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.2a.tar.gz -O /Users/[USERNAME]/mydev/drone/dronesdk/ARSDKBuildUtils/../openssl/openssl-1.0.2a.tar.gz
【追記】2015/06/12時点で上記のコマンドではエラーになる。原因はopenssl-1.0.2a.tar.gzがないようだ。openssl-1.0.2b.tar.gzになっているので以下のように手動でダウンロードおよび解凍をしてください。--no-check-certificateオプションは必要に応じて。
wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.2b.tar.gz -O /Users/[USERNAME]/mydev/drone/dronesdk/ARSDKBuildUtils/../openssl/openssl-1.0.2a.tar.gz
ダウンロードしたら、手動で解凍します。
cd ../opensslに移動して、tar xzvf openssl-1.0.2a.tar.gzで解凍します。
openssl-1.0.2bと解凍されるので、openssl-1.0.2aにリネームしてください。

そしたら、またARSDKBuildUtilsディレクターに戻って、
再度./SDK3Build.py -t Androidを実行してください。

スペックに依存しますが、10分前後くらい時間かかります。
正常にすべてのビルドが終了すると以下のような表示になるはずです。
そうするとARSDKBuildUtils/Targetsの中にビルド結果ができてますね。
結構面倒です。
がんばってください。。。

2015年1月23日金曜日

LOVE TOHO(Android版も)で映画上映時間をサクッと確認

映画好きの方に朗報です!
TOHOシネマズで映画をよく観る、という方のために「LOVE TOHO」というアプリを制作しました。
iOS版→https://itunes.apple.com/JP/app/id864004130
Android版→https://play.google.com/store/apps/details?id=jp.tajisoft.android.lovetoho2&hl=ja

アプリを起動するだけで上映時間が表示されます。
劇場を選択することで全国のTOHOシネマズの上映時間を観ることができます。
「マイシネ」として登録しておくと以降の起動で優先的に表示されます。


映画タイトルをタップすると映画の詳細情報が表示されます。

さらに上映予定のタイトル一覧も見れます。もちろん詳細情報も見れます。
通知登録すると前日にプッシュ通知してくれます。
観たい映画を見逃すこともなくなりますよ。


←iOS版












←Android版

2015年1月6日火曜日

Android StudioでFacebook SDKを追加する際に発生するエラーの回避

OS: Mac OS X 10.10
Android Studio: 1.0.2
Facebook SDK: 3.21.1

主に2つのエラーに出くわしました。
・SDKに関するプロパティがない
・bolts-androidがない
前者はわりと簡単に解決できました。
後者は他のブログでおっしゃっているような方法とちょっと異なっていたので、
メモしておきます。
例えば下記のブログエントリーではboltsのパスを書き換えればよいと書いてある。

android studioでfacebook sdkを使えるようにするまでにやった事


でも実際のbuild.gradleは以下のような記述になっています。
compile 'com.parse.bolts:bolts-android:1.1.2'
しかし、しっかりとbolts-androidは存在していた!なのになぜ?!
もしかして、mavenCentral()って書いてあるけど見てない??
facebookのbuild.gradleのリポジトリはmavenCentral()となっているけど、
作成したプロジェクトのbuild.gradleはjcenter()ってなってる!!!?ん??
ん??もしかしてこれに上書きされているのか!?
もっと調べてみるとSOFでこんな投稿を見つけた。
http://stackoverflow.com/questions/24852219/android-buildscript-repositories-jcenter-vs-mavencentral
どうやらまだ統一されていないようだ。

いろいろgradleファイルのrepositoryを書き換えてリビルドしたけど結局解決しないので、libsにあるものを見るようにしてあげた。これで一応ビルドは通るけどしっくりこないんだよね!!
//compile 'com.parse.bolts:bolts-android:1.1.2'
    compile files('libs/bolts-android-1.1.2.jar')

原因が分かる方いましたら教えてくださいm(_ _)m

とりあえずこれで。
まとめると以下のような手順。

1.SDKファイルをダウンロードする
ダウンロード先:https://developers.facebook.com/docs/android?locale=ja_JP
2.Android Studioにインポートする
2−1.Android Studioを起動する
2−2.ダウンロードしたzipファイルを解凍する
2−3.Android Studioの[File]-[Import Module...]を選択する
2−4.回答したフォルダ(例:facebook-android-sdk-3.21.1)の中のfacebookというフォルダを選択する
2−5.下記のようなエラーメッセージが表示される
Error:(8, 0) Could not find property 'ANDROID_BUILD_SDK_VERSION' on project ':Todo'.
2−6.gradle.propertiesフィアルに以下を追加する
※編集できないというメッセージが出ても強制編集
ANDROID_BUILD_TARGET_SDK_VERSION=18
ANDROID_BUILD_TOOLS_VERSION=20
ANDROID_BUILD_SDK_VERSION=18
ANDROID_BUILD_MIN_SDK_VERSION=14
2−7.Android Studioの[Build]-[Rebuild Project]を選択する
3.Android Studioの[File]-[Project Structure...]を選択する
4.左側の[app]を選択し、[Dependencies]タブを選択する
5.左下の[+]ボタンを選択肢[Module Dependency]を選択する
6.先ほど追加した[:facebook]を選択してOKを選択する
7.さらにOKで画面を閉じる
8.今度は以下のようなエラーメッセージが表示される
bolts-android.jarがありません
9.追加したfacebookモジュールのbuild.gradleを開く
10.11行目をコメントアウトし以下のように追加する
    //compile 'com.parse.bolts:bolts-android:1.1.2'
    compile files('libs/bolts-android-1.1.2.jar')
11.Android Studioの[Build]-[Rebuild Project]を選択する