<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>スマホアプリ開発備忘録</title>
    <description>備忘録ブログ。
初心者の頃の記事が多いです。</description>
    <link>https://richter.blog.shinobi.jp/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>【iOS8対応】位置情報取得関連の変更点まとめ。</title>
      <description>位置情報を使用する既存のアプリへの対処内容&lt;br /&gt;
&lt;br /&gt;
カメラロール、カメラ等でも必要となります。&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;初回起動時に位置情報を取得することを確認するアラートが自動で表示されなくなった&lt;/li&gt;&lt;li&gt;info-plistに1にカスタマイズして表示する位置情報取得についての内容を書かないと許可の設定値が無効になる。&lt;/li&gt;&lt;li&gt;位置情報の取得状態について細かく設定出来るようになった。&lt;/li&gt;&lt;/ol&gt;1.について&lt;br /&gt;
&lt;br /&gt;
いままでは「&quot;(アプリ名)&quot;は現在の位置情報を利用します。よろしいですか？」というアラートが自動で表示されていた。&lt;br /&gt;
表示されるタイミングはユーザーが「許可しない」「OK」どちらも設定していない状態。&lt;br /&gt;
つまり設定値がNULLの状態のときのみ表示されていました。&lt;br /&gt;
&lt;br /&gt;
iOS8からこのアラートの表示に関してソースコード上に書く必要があります。&lt;br /&gt;
特にこの機能が必要なければ書く必要はありません。（そんなケース稀でしょうが）&lt;br /&gt;
&lt;br /&gt;
またこの設定値がNULLである状況は&lt;br /&gt;
&lt;br /&gt;
・初めてアプリをインストールした時&lt;br /&gt;
・アプリをアンインストールした時&lt;br /&gt;
&lt;br /&gt;
になります。&lt;br /&gt;
&lt;br /&gt;
つまり&lt;br /&gt;
・アプリの更新の際はNULLではなく以前のバージョンの設定値を引き継ぐ&lt;br /&gt;
・OSバージョンアップの際は以前のバージョンの設定値を引き継ぐ&lt;br /&gt;
&lt;br /&gt;
ということです。&lt;br /&gt;
&lt;br /&gt;
なのでiOS8の端末でアプリがない状態でインストールした際にユーザーが「なんでアプリ動かないんだろう？」と困惑しないように実装する必要があります。&lt;br /&gt;
&lt;br /&gt;
CLLocationManager *locationManager = [CLLocationManager new];&amp;nbsp;&lt;br /&gt;
[locationManager requestAlwaysAuthorization];&lt;br /&gt;
&lt;br /&gt;
これでアラートが表示されます。ただし、あくまでもNULLのときだけなので毎回聞く様名ことにはなりません。常時許可の設定になります。&lt;br /&gt;
&lt;br /&gt;
2.について&lt;br /&gt;
これはOSバグに繋がります。&lt;br /&gt;
info.plistにNSLocationAlwaysUsageDescriptionもしくはNSLocationWhenInUseUsageDescriptionの項目を追加しないと、位置情報サービスの許可設定が端末に保持されず、毎回設定が必要になります。&lt;br /&gt;
対応する必要のある設定値の記述のみで大丈夫です。&lt;br /&gt;
&lt;br /&gt;
元々この設定値は1.のアラートの下にカスタムメッセージを設定する際のメッセージ文言を設定するものでした。そのため必要なければ空でも大丈夫です。あくまでも項目として追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
3.について&lt;br /&gt;
許可の種類が常時許可とフォアグラウンド時のみの許可のとなりました。&lt;br /&gt;
iOS7までの位置情報サービスの「許可」にあたる設定は常時になります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以上iOS8に対応したいアプリが位置情報を使っている場合に最低限対応する必要のあるまとめです。</description> 
      <link>https://richter.blog.shinobi.jp/objective-c/%E3%80%90ios8%E5%AF%BE%E5%BF%9C%E3%80%91%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0%B1%E5%8F%96%E5%BE%97%E9%96%A2%E9%80%A3%E3%81%AE%E5%A4%89%E6%9B%B4%E7%82%B9%E3%81%BE%E3%81%A8%E3%82%81%E3%80%82</link> 
    </item>
    <item>
      <title>iOS8でUITableViewCellの階層構造が変わった。</title>
      <description>iOS6からiOS7にアップデートした時にUITableViewとUITableViewCellの階層構造が変わりました。&lt;br /&gt;
Cellに直接addSubViewをしている処理やTableViewからCellに情報を渡したい時の処理が変わって対応したと思います。&lt;br /&gt;
&lt;br /&gt;
原因としてはUITableViewとUITableViewCellの階層構造が変わったことです。&lt;br /&gt;
&lt;br /&gt;
今回もiOS7からiOS8のアップデートによって階層構造が変わりました。&lt;br /&gt;
以下に6から8までの階層構造です。&lt;br /&gt;
&lt;br /&gt;
iOS6 最下層まで3段階 Cellからは1段階&lt;br /&gt;
&amp;lt;UITableView&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; |&amp;lt;UITableViewCell&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;lt;addSubViewしたUIViewの階層&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; |&amp;lt;UITableViewCell&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;lt;addSubViewしたUIViewの階層&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iOS7 最下層まで５段階 Cellからは2段階&lt;br /&gt;
&amp;lt;UITableView&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;非公開クラスA&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;UITableViewCell&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;lt;非公開クラスB&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;addSubViewしたUIView&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;addSubViewしたUIView&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;lt;UITableViewCell&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;lt;非公開クラスB&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;addSubViewしたUIView&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;lt;addSubViewしたUIView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iOS8 最下層まで4段階 Cellからは1段階&lt;br /&gt;
&amp;lt;UITableView&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;非公開クラスA&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;lt;UITableViewCell&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; | &amp;lt;addSubViewしたUIViewの階層&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; | &amp;lt;addSubViewしたUIViewの階層&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;lt;UITableViewCell&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; | &amp;lt;addSubViewしたUIViewの階層&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; | &amp;lt;addSubViewしたUIViewの階層&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iOS7からiOS8になったらアコーディオンの体裁崩れが起きた場合はiOS6のときのロジックで良いかと思います。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
</description> 
      <link>https://richter.blog.shinobi.jp/objective-c/ios8%E3%81%A7uitableviewcell%E3%81%AE%E9%9A%8E%E5%B1%A4%E6%A7%8B%E9%80%A0%E3%81%8C</link> 
    </item>
    <item>
      <title>Blocksのお作法</title>
      <description>最近Blockをよく使うのでまとめ。&lt;br /&gt;
&lt;br /&gt;
まず前提としてblockの中でインスタンス変数を使用する場合の注意点。&lt;br /&gt;
・循環参照&lt;br /&gt;
block内でインスタンス変数にアクセスする場合インスタンス変数を直接参照するのではなく、そのインスタンス変数が属しているインスタンスオブジェクト全体を参照するため循環参照が発生する。&lt;br /&gt;
コレを回避する為に自インスタンスを弱参照のオブジェクトに代入してブロック内で強参照のオブジェクトとして扱う必要がある。&lt;br /&gt;
&lt;br /&gt;
@propaty (strong,nonatomic) IBOutlet *messageLabel;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__weak typeof(self)weakSelf = self;&lt;br /&gt;
anotherClass.handler = ^(NSString *messageString){&lt;br /&gt;
__strong typeof (weakSelf)strongSelf = weakSelf;&lt;br /&gt;
[strongSelf-&amp;gt; messageLabel setText:messageString];&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
こんな感じ。</description> 
      <link>https://richter.blog.shinobi.jp/objective-c/blocks%E3%81%AE%E3%81%8A%E4%BD%9C%E6%B3%95</link> 
    </item>
    <item>
      <title>UIViewClassのObjectをDraggableにする</title>
      <description>特定のImageViewをドラッグできるようなプログラムが必要になってつまった。&lt;br /&gt;
&lt;br /&gt;
最初に考えた方法&lt;br /&gt;
&lt;span style=&quot;text-decoration: line-through;&quot;&gt;Google先生に教えてもらう&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
・UIGestureRecognizerをつかってやる。&lt;br /&gt;
どうもうまく行かない。&lt;br /&gt;
たしかに動く。だけどもどこに指を置いても反応する。&lt;br /&gt;
&lt;br /&gt;
・やってて思ったこと。&lt;br /&gt;
各UIViewクラスのサブクラスのオブジェクトに対して設定してドラッグイベントが発生したらオブジェクトを引数として受け取ってイベント処理をしてくれるような物はないのか？&lt;br /&gt;
あとStoryBoardでUIのセッティングができるやつ。&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
&lt;br /&gt;
・UIImageViewやめてUIButtonにしてアクションをTouch Drag Insideでやる。&lt;br /&gt;
　&lt;br /&gt;
発想は良かったんだと思う。StoryBoard(iPhoneのGUIでの画面設定)をつかったサンプルが皆無なので海外サイト含めて探したけど見つからない。&lt;br /&gt;
いったんあきらめて動作をどんな方法でもいいから実現するプランに変更。&lt;span style=&quot;text-decoration: line-through;&quot;&gt;プランBに変更！&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
&lt;br /&gt;
・動的にUIButtonを設定する。&lt;br /&gt;
&lt;br /&gt;
Buttonで設定していますが多分ImageViewでも出来ます。&lt;br /&gt;
やはり問題はソースコードで全てのオブジェクトをインスタンス生成しなければいけない状態(今回は全部で14個)&lt;br /&gt;
ホントにコレでいいのかな？と確信をもてないので次回までの課題とします。&lt;br /&gt;
画像だけじゃなくてtagとか位置とかも一緒に情報として設定しておく方法がとりやすくなりそうではあるけど。&lt;br /&gt;
&lt;br /&gt;
</description> 
      <link>https://richter.blog.shinobi.jp/objective-c/uiviewclass%E3%81%AEobject%E3%82%92draggable%E3%81%AB%E3%81%99%E3%82%8B</link> 
    </item>
    <item>
      <title>NSArrayにNSDictionaryを直接いれる</title>
      <description>NSArrayでNSDictinary型の配列を一発で作れないかと考えた。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
※NSArrayとNSDictionaryの新しい宣言方法の確認&lt;br /&gt;
&lt;br /&gt;
// NSArray&lt;br /&gt;
NSArray *arr = @[@&quot;TOKYO&quot;,@&quot;LONDON&quot;,@&quot;NEWYORK&quot;,nil];&lt;br /&gt;
&lt;br /&gt;
// NSDictionary&lt;br /&gt;
NSDictionary *dic = @{@&quot;TOKYO&quot;:@&quot;JST&quot;};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
従前の記入方法よりカジュアルになった。（見た目が&lt;br /&gt;
&lt;br /&gt;
表題のNSArrayでNSDictionary型の配列をつくった。&lt;br /&gt;
&lt;br /&gt;
NSDictionaryはオブジェクトなのでNSArrayに入れることができるが書き方が分からなかった。&lt;br /&gt;
&lt;br /&gt;
NSArray *arr = @[@{@&quot;TOKYO&quot;:@&quot;JST&quot;,@&quot;country&quot;:@&quot;JAPAN&quot;}, @{@&quot;LONDON&quot;:@&quot;GMT&quot;,@&quot;country&quot;:@&quot;UK&quot;}, @{@&quot;NEWYORK&quot;:@&quot;EST&quot;, @&quot;country&quot;:@&quot;USA&quot;}];&lt;br /&gt;
&lt;br /&gt;
@マークだらけで見づらいが便利。</description> 
      <link>https://richter.blog.shinobi.jp/objective-c/nsarray%E3%81%ABnsdictionary%E3%82%92%E7%9B%B4%E6%8E%A5%E3%81%84%E3%82%8C%E3%82%8B</link> 
    </item>
    <item>
      <title>Objective-C TimeZoneを指定して世界の時刻を表示する。</title>
      <description>この夏に海外に行くので、2つの都市の時刻を表示するアプリを作った。&lt;br /&gt;
&lt;br /&gt;
アナログ時計は針の動きを実装するのに手間がかかる割には対して感動がないのでデジタルで作りました。&lt;br /&gt;
&lt;br /&gt;
iPhoneの時間について。&lt;br /&gt;
&lt;br /&gt;
・システムに設定されているタイムゾーン以外のゾーンの時刻の取得方法はない。&lt;br /&gt;
　通常必要とされるのは「現在地の正確な時刻」特別その他のタイムゾーンの現在時刻データを直接的に　取得する方法はない。&lt;br /&gt;
&lt;br /&gt;
・NSDateのインスタンスオブジェクトそのものにはUTC時刻のデータが入っている&lt;br /&gt;
　NSDateFormatterクラスでNSDateオブジェクトを文字列にする時にゾーンの設定を行っている。&lt;br /&gt;
　デフォルトの設定はシステムで設定しているタイムゾーン。&lt;br /&gt;
&lt;br /&gt;
NSDate *date = [NSDate date];&lt;br /&gt;
NSLog(@&quot;%@&quot;,[date description]);&lt;br /&gt;
&lt;br /&gt;
を試してみると分かります。&lt;br /&gt;
&lt;br /&gt;
つまりString型だけで扱うだけならNSDateFormatterクラスで設定するのが手っ取り早い。&lt;br /&gt;
&lt;br /&gt;
設定メソッドとサンプル&lt;br /&gt;
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];&lt;br /&gt;
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@&quot;PST&quot;]];&lt;br /&gt;
[formatter setDateFormat:@&quot;dd a HH:mm&quot;];&lt;br /&gt;
NSString *currentTime = [formatter stringFromDate:date];&lt;br /&gt;
NSLog(@&quot;%@&quot;,currentTime)&lt;br /&gt;
&lt;br /&gt;
この@&quot;PST&quot;とはタイムゾーンの略記でJST(日本)GMT(イギリス)など色々ある。&lt;br /&gt;
またサマータイムへの自動変換が行われる。&lt;br /&gt;
&lt;br /&gt;
PSTの地域はサマータイムを導入しているため夏期の期間はPDTに自動的に変更される。&lt;br /&gt;
[formatter setDateFormat:@&quot;zzz&quot;];&lt;br /&gt;
&lt;br /&gt;
と変更するとPSTと表示されるはずだが今はサマータイムなのでPDT（サマータイム）と表示される。&lt;br /&gt;
&lt;br /&gt;
各世界の都市とそのタイムゾーン（略記）は以下のコードでLogで見られる。&lt;br /&gt;
// 略記と代表的な都市名&lt;br /&gt;
NSLog(@&quot;timezones: %@&quot;, [NSTimeZone abbreviationDictionary]);&lt;br /&gt;
// 都市&lt;br /&gt;
for (NSString *name in&lt;br /&gt;
[timezoneNames sortedArrayUsingSelector:@selector(compare:)])&lt;br /&gt;
{&lt;br /&gt;
NSLog(@&quot;%@&quot;,name);&lt;br /&gt;
}</description> 
      <link>https://richter.blog.shinobi.jp/objective-c/objective-c%20timezone%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E4%B8%96</link> 
    </item>
    <item>
      <title>キー値監視、KVO(Key Value Observing)</title>
      <description>キー値監視、KVOについて。言葉だけ。&lt;br /&gt;
オブジェクトのプロパティが変更されたときに通知してくれるメソッド。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40003781&quot; title=&quot;KVO公式&quot; target=&quot;_blank&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
噛み砕いて説明すると&lt;br /&gt;
&lt;br /&gt;
・電車の遅延とそのお知らせの関係&lt;br /&gt;
&lt;br /&gt;
電車の遅延は駅に行かないと分からない。でも事前に「電車が遅延したときにお知らせが来るサービス」を登録しておく。&lt;br /&gt;
&lt;br /&gt;
いざ遅延した時お知らせが来るので自宅に居たままで遅延が分かるのでその後の対処が出来る。&lt;br /&gt;
&lt;br /&gt;
これがザックリとした説明。ここからややプログラム的に同じ文章で説明。&lt;br /&gt;
&lt;br /&gt;
電車（監視したいプロパティをもつインスタンスオブジェクト）&lt;br /&gt;
遅延（運行プロパティの種類の1つ他に平常通りや運休などある）&lt;br /&gt;
電車が遅延したときにお知らせしてくれるサービス　（運行プロパティが遅延の場合にコールされるメソッド）&lt;br /&gt;
&lt;br /&gt;
電車（オブジェクト）の遅延（運行プロパティの状態。他に平常や運休がある）は駅に行かないと分からない。でも事前に「電車（オブジェクト）が遅延したとき（運行プロパティが遅延になったとき）にお知らせがくるサービス（コールバック）」を登録（設定）しておく。&lt;br /&gt;
&lt;br /&gt;
いざ遅延したとき（運行プロパティが遅延になったとき）お知らせが来るので（コールバックされるので）自宅に居たままで遅延が分かるのでその後の対処（処理）が出来る。&lt;br /&gt;
&lt;br /&gt;
かえってややこしいだろうか？&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
</description> 
      <link>https://richter.blog.shinobi.jp/objective-c/%E3%82%AD%E3%83%BC%E5%80%A4%E7%9B%A3%E8%A6%96%E3%80%81kvo-key%20value%20observing-</link> 
    </item>
    <item>
      <title>Google Maps SDK for iOS 1.3.x その３</title>
      <description>&lt;a href=&quot;https://developers.google.com/maps/documentation/ios/start&quot; target=&quot;_blank&quot;&gt;Google Maps SDK for iOS&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
とりあえず、実装できたので少しずついじっています。&lt;br /&gt;
&lt;br /&gt;
そしてつまった。&lt;br /&gt;
&lt;br /&gt;
いろいろクラスが用意されているのは分かりました。&lt;br /&gt;
しかし一番の疑問は、UIKitとの同時表示は出来ないのだろうか？&lt;br /&gt;
例えばAndroidのように画面の下半分はMapで上半分にTextViewというような。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/23c1a3bf.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
とある。&lt;br /&gt;
&lt;br /&gt;
注目したいのが&lt;br /&gt;
&lt;br /&gt;
Create or update a ViewController. If the map will be displayed when this view controller becomes visible, be sure to create it within the loadView method.&lt;br /&gt;
&lt;br /&gt;
&quot;ViewControllerがVisibleになるときにmapを表示させたいならloadViewメソッドに書いてください&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadViewっていつどこから呼ばれてるんだろうか？&lt;br /&gt;
&lt;br /&gt;
ちょっと分からなかったので「とりあえずタイミングだけでも分かれば手がかりがあるかもしれない」とおもってNSLogをViewDidLoadとこの&quot;loadView&quot;に突っ込んでみた結果がこちら。&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/16b53891.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
viewDidLoadより早い！&lt;br /&gt;
ライフサイクルのなかにある普段オーバーライドしてないメソッドなんだろうと気がつく。&lt;br /&gt;
&lt;br /&gt;
Androidのライフサイクルのように、iOSのライフサイクルはまだ勉強してない。&lt;br /&gt;
授業でも全くやってない気がする。viewDidLoadが一番最初って思ってた。&lt;br /&gt;
&lt;br /&gt;
iOSのアプリのライフサイクル&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/iOS_lifecycle.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このAPIではAPIKeyの設定を上記図の中央:UIApplicationDelegate上から４番目で行う。&lt;br /&gt;
ViewController起動時にMapを表示する際は、UIオブジェクトを設定するのはUIViewControllerで一番最初に動くメソッドなければならないのでloadViewで動的にセットする。ということになるようだ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・GMSMapViewの上にButton等を設定したい場合はviewDidLoadで動的に設定する。&lt;br /&gt;
&lt;br /&gt;
上記のことから、もしUIKitのオブジェクトをマップの上にセットしたい場合は、loadViewでMapを設定したのちライフサイクルで次に呼ばれるviewDidLoadで動的に設定すれば可能ではないかと試してみた。&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/cf846652.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
できました。&lt;br /&gt;
&lt;br /&gt;
ほかのUIKitのアイテムに関しても可能だと思います。&lt;br /&gt;
&lt;br /&gt;
レイヤーをうまく使えば、下半分を別UIを配置して上半分は地図等も可能かと思います。&lt;br /&gt;
地図自体の範囲をいじれるかも挑戦してみたいと思います。&lt;br /&gt;
&lt;br /&gt;
サンプル&lt;br /&gt;
&lt;a href=&quot;https://github.com/yoshiyasu-shirasawa/GMSSample01&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
</description> 
      <link>https://richter.blog.shinobi.jp/objective-c/google%20maps%20sdk%20for%20ios%20%E3%81%9D%E3%81%AE%EF%BC%93</link> 
    </item>
    <item>
      <title>Google Maps SDK for iOS その２実装編</title>
      <description>準備できたので実装編&lt;br /&gt;
&lt;br /&gt;
参考はやはり本家&lt;br /&gt;
&lt;br /&gt;
本家リンク→&lt;a href=&quot;https://developers.google.com/maps/documentation/ios/start&quot; target=&quot;_blank&quot;&gt;■&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
GitHub→&lt;a href=&quot;https://github.com/yoshiyasu-shirasawa/GoogleMap_iOS_API_Sample01&quot; target=&quot;_blank&quot;&gt;■&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
公式通りなのにシミュレータ初回起動時にエラーで落ちる。２回目から落ちない。なんでだろう？ </description> 
      <link>https://richter.blog.shinobi.jp/objective-c/google%20maps%20sdk%20for%20ios%20%E3%81%9D%E3%81%AE%EF%BC%92</link> 
    </item>
    <item>
      <title>Google Maps SDK for iOS その１</title>
      <description>Androidの方はなんとなく分かったので今度はiOS&lt;br /&gt;
参考は本家のみ。&lt;br /&gt;
&lt;a href=&quot;https://developers.google.com/maps/documentation/ios/start&quot; target=&quot;_blank&quot;&gt;https://developers.google.com/maps/documentation/ios/start&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
事前に用意するもの&lt;br /&gt;
・Googleアカウント&lt;br /&gt;
・GoogleMapAPIを利用したいプロジェクトの作成or用意&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・SDKのダウンロード&lt;br /&gt;
ここでダウンロード&lt;br /&gt;
&lt;a href=&quot;https://developers.google.com/maps/documentation/ios/start&quot; target=&quot;_blank&quot;&gt;https://developers.google.com/maps/documentation/ios/start&lt;/a&gt;&lt;br /&gt;
場所はどこでもOK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
・SDKを有効にする作業&lt;br /&gt;
&lt;br /&gt;
①&lt;a href=&quot;https://code.google.com/apis/console&quot; target=&quot;_blank&quot;&gt;GoogleAPIsConsole&lt;/a&gt;にアクセス&lt;br /&gt;
&lt;br /&gt;
②左側にあるリストの中からServicesを選択&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/76435ede.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
③APIリストの&quot;Google Maps SDK for iOS&quot;をONにする。使用許諾の確認がでるので同意する。&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/b58953e7.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
④左側にあるリストのなかからAPIAccessを選択&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/8a15b708.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
⑤画面下部にあるCreate new iOS Keyをクリック&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/7c5f510a.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
⑥導入したいプロジェクトのBundle Identifierを入力してCreateをクリック&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/839e89b9.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
⑦新しいAPIKeyが生成される。Androidなど別のものと同じリストの中になる。&lt;br /&gt;
&lt;br /&gt;
・プロジェクト側（ややこしい操作あり）&lt;br /&gt;
&lt;br /&gt;
Xcodeは起動しておき、この状態にしておく&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/061a2891.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
①ダウンロードしたSDK &quot;GoogleMaps-iOS-1.x.x&quot;を解凍&lt;br /&gt;
&lt;br /&gt;
②&lt;span style=&quot;color:#FF0000;&quot;&gt;ここから注意！&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#0000CC;&quot;&gt;解凍したファイル内のGoogleMaps.framework&lt;/span&gt;を&lt;span style=&quot;color:#FF0000;&quot;&gt;Xcode&lt;/span&gt;の&lt;span style=&quot;color:#0000CC;&quot;&gt;Project Navigator内の自プロジェクトのFrameworksにドラック＆ドロップ&lt;/span&gt;&lt;img src=&quot;http://file.richter.blog.shinobi.jp/2b08e5af.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
この時&quot;Copy items into destination groups folder (if needed)にチェックを&lt;span style=&quot;color:#FF0000;&quot;&gt;いれる&lt;/span&gt;。&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/ed7ca44b.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
③さっきの②でXcodeにインポートしたGoogleMaps.frameworkを右クリックしShow In Finderを選択&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/60c15cb3.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
④&lt;span style=&quot;color:#0000CC;&quot;&gt;GoogleMaps.Framework内ResourcesGoogleMaps.bundleを選択&lt;/span&gt;し&lt;span style=&quot;color:#FF0000;&quot;&gt;Xcode&lt;/span&gt;のProject Navigator内のFrameworksにドラッグ＆ドロップ&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/096e11e8.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
この時&quot;Copy items into destination groups folder (if needed)にチェックを&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;u&gt;いれない&lt;/u&gt;&lt;/span&gt;。（今度入れない）&lt;br /&gt;
&lt;br /&gt;
山場終了&lt;br /&gt;
&lt;br /&gt;
⑤次に必要なFrameworkをBuild facesで設定。&lt;br /&gt;
&lt;br /&gt;
沢山あるのでSS参照&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/4594a24c.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
⑥APIKeyの設定&lt;br /&gt;
&lt;br /&gt;
AppDelegate.hにインポートの記述&lt;br /&gt;
#import &lt;GoogleMaps/GoogleMaps.h&gt;&lt;br /&gt;
&lt;br /&gt;
AppDelegate.mの(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsメソッドに[GMSServices provideAPIKey:@&quot;取得したAPIkey&quot;];を記入&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/c562dd95.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Build Settingsの変更&lt;br /&gt;
①&lt;br /&gt;
ArchitecturesのValid Architectureをデフォルトのarmv7 armv7sからarmv7のみに変更&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/8f35782d.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
②&lt;br /&gt;
LinkingのOther Linker Flagsに -ObjCを設定&lt;br /&gt;
&lt;img src=&quot;http://file.richter.blog.shinobi.jp/62968067.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
設定はコレで終了。&lt;br /&gt;
GoogleMapのAPIを導入するところの操作がややこしい。さらにBuildSettings関連でどこが間違ってるか分からなくなる。&lt;br /&gt;
&lt;br /&gt;
あとはサンプルをみつつ簡単な物作ってみます。</description> 
      <link>https://richter.blog.shinobi.jp/objective-c/google%20maps%20sdk%20for%20ios%20%E3%81%9D%E3%81%AE%EF%BC%91</link> 
    </item>

  </channel>
</rss>