Yahoo! iOSマップSDKを使ったtitanium moduleを作ってみた
概要
最近はDBの勉強をほっぽってtitaniumの勉強の勉強なんぞをしてます。
手始めにYahoo!のiOSマップSDKを使ったmodule作りを作ってみたので、環境構築を含めて手順を残しておきます。
titaniumもobj-cも初心者なので、間違っていたらご指摘いただけるとうれしいです。
titaniumの用意
ユーザ登録して、以下のページからダウンロード。
Titanium Cross Platform Mobile App SDK | Native iOS, Android, Hybrid, and Mobile Application Development | Appcelerator Inc
インストール方法と細かい設定は省略。
Xcode4.3の場合は以下のようにパスを設定しておきます。
$ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
あとはtitaniumを起動しやすいようにエイリアスを張っておきます。
$ alias titanium='~/Library/Application\ Support/Titanium/mobilesdk/osx/2.0.1.GA2/titanium.py'
Yahoo! iOSマップSDKの用意
以下のページからsdkをダウンロード。
YOLP(地図):Yahoo! iOSマップSDK - Yahoo!デベロッパーネットワーク
sdkの利用にあたりアプリケーションIDが必要になるので、アプリケーションIDを取得します。
アプリケーションの管理:Yahoo!デベロッパーネットワーク
プロジェクトの作成
作業ディレクトリでプロジェクトを作成。
自分はIDEに慣れてないのでターミナルで作業してますが、titanium studioで作業してもおkです。
titanium create --platform=iphone --type=module --name=YMapTest --id=ymap.test
Xcodeでの作業
作成したプロジェクトに移動して、xcode用のプロジェクトファイルを開きます。
$ cd YMapTest $ open ymaptest.xcodeproj
ClassesにViewを追加。
New Files... -> Appcelerator -> TiUIViewで"YmapTestView"として保存します。
さらにViewProxyも追加。
New Files... -> Appcelerator -> TiUIViewProxyで"YmapTestViewProxy"として保存します。
最後にYahoo! iOSマップSDKを追加。
左カラムのProject Navigatorのプロジェクト名を選択し、
TARGETS -> ymaptest ->Build Phases -> Link Binary With Librariesに
ダウンロードしてきたYahoo! iOSマップSDKの中のYMapKit.Frameworkを追加します。
imageの中のファイルは今回利用しません。
OpenGLES.Frameworkの修正
(YMapKitのバグなのか)そのままビルドしようとすると/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.hでエラーが出ます。
仕方ないので修正。
#define GL_API extern #ifndef GL_ES_VERSION_2_0 // 追加 typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef signed char GLbyte; typedef short GLshort; typedef int GLint; typedef int GLsizei; typedef unsigned char GLubyte; typedef unsigned short GLushort; typedef unsigned int GLuint; typedef float GLfloat; typedef float GLclampf; typedef void GLvoid; typedef int GLfixed; typedef int GLclampx; typedef long GLintptr; typedef long GLsizeiptr; #endif // 追加
YmapTestView.hの実装
#import "TiUIView.h" #import <YMapKit/YMapKit.h> @interface YmapTestView : TiUIView { YMKMapView *map; } @end
YmapTestView.mの実装
チュートリアルに習って地図を表示するだけの実装です。
#import "YmapTestView.h" @implementation YmapTestView -(void)dealloc { RELEASE_TO_NIL(map); [super dealloc]; } -(YMKMapView*)map { if (map == nil) { map = [[YMKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 320) appid:@"アプリケーションID"]; map.mapType = YMKMapTypeStandard; CLLocationCoordinate2D center; center.latitude = 35.6657214; center.longitude = 139.7310058; map.region = YMKCoordinateRegionMake(center, YMKCoordinateSpanMake(0.002, 0.002)); [self addSubview:map]; } return map; } -(id)init { [super init]; [self map]; return self; } @end
module.xconfigの編集
以下の行を追記します。
OTHER_LDFLAGS=$(inherited) -framework YMapKit
moduleのビルド
ひとまずビルドしてみます。
$ ./build.py
example/app.jsの編集
ビルドに成功したら、自作moduleを使ったサンプルアプリを実装してみます。
app.jsの適当な場所に以下を追記。
var ymapView = ymaptest.createView();
win.add(ymapView);
win.open();
感想
titanium楽そう!と思って取り組んだけど、objective-c触ってる時間の方が長くて若干後悔してます。