Google Maps SDK for iOSがキタ——(゚∀゚)——!!

Google Maps API Teamから「使えるようになったぜ」ってメールが着たのでお試し。
前はAPI keyが生成できなかったんだが、はてさて。

Getting Started

ココから順序通りにやってみる。
まずはSDKをダウンロード。なにげにバージョンが1.1.0に上がってるw

API keyを作成

  1.  ココからAPI Projectを作成
  2. ServicesのペインからGoogle Maps SDK for iOSをONにする
  3. API AccessのペインからCreate new iOS key…をクリックする
  4. ダイアログのテキストエリアにSDKを使用するアプリのbundle identifiersを登録する
  5. CreateをクリックするとAPI keyが作成される
  6. API AccessのペインのKey for iOS apps (with bundle identifiers)の項目にあるAPI keyがアプリで使用するキーになる

4のbundle identifiersの登録は制限をかけるためのものなので、API keyを使い回す場合は複数登録するのかな。
何も登録しなかったら全てのアプリからAPI keyが使い回せるみたい。

サンプルプロジェクトで確認

ダウンロードしたSDKにサンプルプロジェクトが同梱されているのでAPI keyがちゃんと使えるかどうかだけならこのプロジェクトで試せばいいかな。
SDKDemos/APIKey.hに

const static NSString *APIKey = @"";

があるので、API keyをコピペ。
実行するとサンプルのリストが出てくるので適当に。
iOSシミュレータのスクリーンショット 2013.02.22 1.48.58

MapSampleViewController

iOSシミュレータのスクリーンショット 2013.02.22 1.49.12

ShowcaseSample

iOSシミュレータのスクリーンショット 2013.02.22 1.54.00

CameraSample

iOSシミュレータのスクリーンショット 2013.02.22 2.00.12

サンプルの一覧

  • MapSampleViewController
  • UISettingsSample
  • Map Types
  • ResizeMapSample
  • CustomMarkerSample
  • GroundOverlaySample
  • ProjectionSample
  • TrafficSample
  • ShowcaseSample
  • CameraSample
  • PolylineSample
  • MarkerSample

自前のプロジェクトを起こしてみる

API keyが問題なく作成できたので自前のプロジェクトで試してみる。

  1. Single View Applicationでプロジェクトを作成
  2. ダウンロードしたGoogleMaps.frameworkをフォルダごとプロジェクトにコピー
  3. コピーしたGoogleMaps.frameworkをShow in Finderで開いて、ResourcesフォルダにあるGoogleMaps.bundleをプロジェクトにコピー
  4. プロジェクトのTargetsのBuild PhasesのLink Binary With Librariesに以下のライブラリを追加
    • AVFoundation.framework
    • CoreData.framework
    • CoreLocation.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libicucore.dylib
    • libstdc++.dylib
    • libz.dylib
    • OpenGLES.framework
    • QuartzCore.framework
    • SystemConfiguration.framework
  5. Build SettingsのArchitecturesをarmv7に変更
  6. Other Linker Flagsに-ObjCを追加
  7. AppDelegateあたりで初期化
    #import <GoogleMaps/GoogleMaps.h>
    

    application:didFinishLaunchingWithOptions:メソッドで

    [GMSServices provideAPIKey:@"YOUR_API_KEY"];
    

ViewControllerにマップの追加

#import "YourViewController.h"
#import <GoogleMaps/GoogleMaps.h>

@implementation YourViewController {
  GMSMapView *mapView_;
}

// You don't need to modify the default initWithNibName:bundle: method.

- (void)loadView {
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                          longitude:151.2086
                                                               zoom:6];
  mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  mapView_.myLocationEnabled = YES;
  self.view = mapView_;

  GMSMarkerOptions *options = [[GMSMarkerOptions alloc] init];
  options.position = CLLocationCoordinate2DMake(-33.8683, 151.2086);
  options.title = @"Sydney";
  options.snippet = @"Australia";
  [mapView_ addMarkerWithOptions:options];
}

サンプルコードそのまんまだけど、適当に自分のViewControllerに突っ込んだらマップが表示された。
iOSシミュレータのスクリーンショット 2013.02.22 4.00.43

広告

GPUImage for Androidを試してみた

GPUImageでiOSのカメラアプリを作るエントリーを読んでたら、GPUImage for Androidがあるとのことなのでサンプルを試してみた。

GPUImageで高速フィルター!iOSカメラアプリの作り方(まとめ・サンプルコードあり)
GPUImage for Android

サンプルコード

githubからcloneしたプロジェクトはmavenのプロジェクトになっているのだが、eclipseにインポートする際はAndroidのプロジェクトとしてインポートした。
どうもandroid-maven-pluginが上手く動いていないのか、SDKやNDKのパスが無いとか、maven installはできてもエラーのマークがプロジェクトから消えないとか、よく分からないのでeclipse上でのmavenは諦めた。
ここを参考に結構頑張ってみたけど。。。
EclipseでAndroidプロジェクトをMavenで管理するための環境構築 + Emacsキーバインドの設定 (2012年版)

Androidのプロジェクトとしてインポートしたら、コマンドラインでlibraryを

mvn clean install

して、サンプルプロジェクトをeclipseから実行すればよい。
ビルド時にminSDKのAPI levelが低いと怒られるので、AndroidManifest.xmlのAPI levelを14に修正した。

手元に開発機がなかったのでエミュレータを使ったら、実行時にsoがloadできないと言われてしまってちょっとハマった。
高速化用のIntel版のイメージを使ってたせいで、armビルドしたsoはloadできないのだった。
当たり前っちゃ当たり前なんだけど、普段エミュレータなんてほとんど使わないせいですっかり頭から抜け落ちていた。
arm版のイメージのエミュレータだとOpen GL 2.0がサポートされてないようなので、libraryをx86用にビルドすることにした。

ndk-build APP_ABI=x86

これでx86用にビルドしなおして実行したところエミュレータでもリアルタイムにフィルターが掛かるサンプルが動いた。
device-2013-02-03-005409
端末の向きを90度回転すると何故か上下逆になってしまうので縦のままw
フィルターは「Grouped Filters」を選択している。

フィルターを作ってみたいからフィルターのソース読んでOpenGLを勉強してみようかな。

%d人のブロガーが「いいね」をつけました。