Mapbox Maps SDK for Android/iOSのサンプルの実行環境を作る
はじめに
この記事はMapbox Maps SDK for Android/iOSに同梱されているサンプルコードが実行できる環境を構築する方法について解説します。Android StudioおよびXcodeはインストール済みであることが前提です。また、Mac環境を想定しています。
なぜSDKのサンプルを手元で実行できる状態にするの?
SDKのサンプルを手元で実行できる状態にしていると嬉しいことがいくつかあります。
サイトには掲載されていないサンプルを試せる
以下のサイトでAndroid, iOSそれぞれのExamplesを参照することができます。
しかし、ここに掲載されているサンプルはSDKに同梱されているサンプルのごく一部です。手元で実行できる状態にすることですべてのサンプルを確認することができます。
SDKのコードにシームレスにアクセスできる
サンプルの気になる部分にブレークポイントを設定し、そのままステップインでSDKのコードに入れます。ある機能を使っていて、もっと便利な使い方はないかな?とかどうやって動いているんだろう?と思ったときに気軽にSDKのコードが確認できます。
スムーズにサポートを受けられる
思ったとおりに動かないとき、自分のアプリケーションと同じ機能を使っているサンプルで再現するかどうかが簡単に試せます。再現する場合、その再現方法をサポートに伝えると開発チームはスムーズにデバッグに取り掛かることができます。
前準備
シークレットトークンの作成
Mapbox Maps SDK for Android/iOSの依存関係のうち、Mapboxのプライペートリポジトリからダウンロードするものがあります。その際にアクセストークンが必要となるため作成します。
- Mapboxアカウントを作成する
- https://account.mapbox.com/ にアクセスする
- Tokensを選択し、Access tokensページに移動
- 「Create a token」ボタンをクリック
- Nameに任意の名前を入力
- Public scopesのチェックをすべて外し、Secret Scopesの「DOWNLOADS:READ」のみを選択
- 「Create token」ボタンをクリック
- トークン一覧画面にトークンが表示されているので、コピーして安全な場所に保存
Secret Scopesを含むアクセストークンは「シークレットトークン」と呼ばれます。アカウントに関する操作を許可するトークンであるため、外部に公開してはいけません。また、シークレットトークンは「sk.」で始まる文字列となるため、パブリックトークン(「pk.で始まる」)と区別できます。
シークレットトークンは作成直後にしか表示されないので、このタイミングで確実に保存してください。
パブリックトークンの取得
パブリックトークンはアプリケーションが地図データを取得する際に使用します。Default public tokenというデフォルトで用意されているものがあるので、Access tokensページで取得しましょう。
パブリックスコープのみをもつトークンを作成すると、パブリックトークンになります。実際にアプリケーションをリリースする際にはアプリケーションごとにスコープを限定した個別のトークンを準備することをおすすめします。分けておくとトークン毎に使用量等が参照できて便利です。何らかの問い合わせをMapboxに行う際も、どのアプリケーションでのアクセスかが判別しやすく問題解決がスムーズになる可能性があります。また、Mapbox GL JS向けにはリファラでアクセスを制限するURL restrictionsがトークン毎に設定できます。
手順
それではいよいよAndroid/iOSそれぞれのサンプルが実行できる状態にしてきます!
Android
シークレットトークンの設定
~/.gradle/gradle.properties
に以下の行を追加します。
SDK_REGISTRY_TOKEN=YOUR_SECRET_MAPBOX_ACCESS_TOKEN
注意:Mapbox SDK for AndroidのInstallaionに記載されている手順(SDKを自分のアプリで使用する際の手順)ではMAPBOX_DOWNLOADS_TOKEN
という変数名が使用されており、名称が異なります。
コードの入手
GitHubからリポジトリをクローンします。今後自分のアプリケーションで使用する予定のバージョンをチェックアウトすると良いでしょう。ここでは執筆時点で最新の安定版のv10.13.0を使用します。
% git clone https://github.com/mapbox/mapbox-maps-android
% cd mapbox-maps-android
% git checkout v10.13.0
実行
とりあえず一旦実行します。以下のような画面が表示されます。
パブリックトークンの設定
この状態で、例えば「Creating a map view」をタップしても地図が表示されません。これはパブリックトークンが設定されておらず、地図データが読み込めないためです。
一度実行すると以下のようなapp/src/main/res/values/developer-config.xml
というファイルが作成されており、ここにパブリックトークンが設定できます。YOUR_MAPBOX_ACCESS_TOKEN_GOES_HERE
という文字列を自分のパブリックトークンに置き換えてください。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="mapbox_access_token" translatable="false" tools:ignore="UnusedResources">YOUR_MAPBOX_ACCESS_TOKEN_GOES_HERE</string>
</resources>
再度実行すると地図が表示されます。
iOS
シークレットトークンの設定
~/.netrc
に以下の内容を記述します。
machine api.mapbox.com
login mapbox
password YOUR_SECRET_MAPBOX_ACCESS_TOKEN
コードの入手
GitHubからリポジトリをクローンします。今後自分のアプリケーションで使用する予定のバージョンをチェックアウトすると良いでしょう。ここでは執筆時点で最新の安定版のv10.13.1を使用します。
% git clone https://github.com/mapbox/mapbox-maps-ios
% cd mapbox-maps-ios
% git checkout v10.13.1
実行
mapbox-maps-ios/Apps/Apps.xcworkspace
をダブルクリックするとXcodeが起動します。とりあえず一旦実行します。以下のような画面が表示されます。
パブリックトークンの設定
この状態で、例えば「Display a map view」をタップしても地図が表示されません。これはパブリックトークンが設定されておらず、地図データが読み込めないためです。
Androidとおなじくパブリックトークンを設定する必要がありますが、iOSは2通りの設定方法があります。
- Info.plistで設定する方法
- .mapboxを作成する方法
それぞれ見ていきましょう。
Info.plistで設定する方法
mapbox-maps-ios/Apps/Examples/Examples/Info.plist
を開き、MBXAccessTokenに自分のパブリックトークンを入力します。
<key>MBXAccessToken</key>
<string></string>
Xcode上で入力するのもOKです。
.mapboxを作成する方法
~/.mapbox
というテキストファイルを作成し、その中にパブリックトークンだけを記述して保存します。
いずれの方法でも以下のように表示されればOKです。
まとめ
この記事ではMapbox Maps SDK for Android/iOSのサンプルを動かす方法を解説しました。簡単に動かせて、たくさんのサンプルを試せるので非常にお得だと思います。
特にスムーズにサポートを受けられるという文脈では、SDKのバグと思しき場合にサンプルを使って再現環境をご提供いただけるとサポートチームは非常に助かります。一般にバグ発生状況をヒヤリングしてもなかなか再現が難しく、利用側で再現方法を確立してもらえると解析がスムーズに進みます。
また、サポートを受ける際には有償サポートへの加入をおすすめします。Mapboxは無償サポートプラン(ディベロッパープラン)もありますが、質問への回答時間に対するSLAがありません。つまり、ベストエフォート型なので、返信までに非常に時間が掛かるケースがあります。これに対し、一番安価なエッセンシャルプランに加入すると3営業日以内に一時応答というSLAがあるので安心です。サポートプランの内容やお問い合わせ先についてはこちらのサイトをご参照ください。
Discussion
はじめまして。
どうしてもビルドがうまく行かず、ここに辿りつきました。
解せないのは、PodfileやCathageさえなくなぜビルドがうまくいくのかということです。
な状況です。GitHubのIssueにも記載しています。
そもそもFingertipsはSPMで設定されているはずなのにモジュールがないと言われているのが不思議で仕方ありません。
Xcode上でTargetでの個別設定が必要だったりしますか?
MapboxMapsがないというエラーについてはPodfileやCathageで設定していないので当然な気もしますが、
なぜこのサンプルは中途半端な状態で上げているのかが不思議です。
もしかすると最新版がだめなのと思い、この記事通りに
git checkout v10.13.1
の安定版でチェックアウトしてもビルド不可能でした。~/.netrc
は記事の~/
なのでホームディレクトリで大丈夫でしょうか?
にあるように~/mapboxc
の設定は不要でしょうか?そこからリンクされている指示のように、
mapboxc
に貼り付けました。また以下の解釈は正しいでしょうか?
build phaseを1つ追加し、Input Filesの項目に
$(TARGET_BUILD_DIR)/$(INFOPLIST_PATH)
を追加しました。他には設定が必要ですか?
Mapbox Maps SDK for iOSをお試しいただきありがとうございます。
以下の環境で再現いたしました。
環境
再現手順
~/.netrc
を削除する、または作成しpassword
にパブリックトークンを設定Apps/Apps.xcworkspace
をダブルクリックしてXcodeを起動Missing package product 'Fingertips'
およびMissing package product 'MapboxMaps'
が発生つきましては、パッケージのダウンロードに必要なシークレットトークンの設定ができていない、またはパッケージが正しくダウンロードできていない可能性があります。以下をお試しいただけますか?
DOWNLOADS:READ
スコープが設定されていることを確認してください~/.netrc
を正しく作成してください。特にpassword
はパブリックトークンではなくシークレットトークンであることをご確認ください。このシークレットトークンは依存関係のダウンロードに使用されます。以下、ご質問への回答です。
はい、そのとおりです。
~/mapboxc
は~/mapbox
または~/.mapbox
のことでしょうか(記述を見つけられませんでした)?そうであれば、特に必須の設定ではありません。このファイルはパブリックトークン(地図の表示時に使用される)の設定なので、本文の記述中にある通りInfo.plist
の設定で代用できます。特にBuild phase等の設定は必要ないです。
返信ありがとうございます。
~/.netrc
に設定されていたのはシークレットキーで間違いなかったのすが、DOWNLOADS:READ
スコープをつけたつもりがついてなかったようでしたので、再度作り直して再度設定し、XcodeのFile --> Packages -> Reset Package Cachesを実行しました。必須ではないとのことなので、
~/.mapbox
を削除しました。(すみません、mapboxc
はtypodeでした)しかしこれでも失敗するので、
一旦プロジェクトを消し、cloneし直しました。
安定の
git checkout v10.13.0
にチェックアウトしました。Info.plistに再度、パブリックキーを設定しXcodeのFile --> Packages -> Reset Package Cachesを実行しました。
動くようになりました。
無事動いたようで、よかったです!