カテゴリー別アーカイブ: Swift

【SwiftでAlgorithm】BinarySearch(二分探索)

KhanAcademyでアルゴリズムの勉強中。KhanAcademyではJavaScriptが使われているので、Swiftに書き直してみます。なお、Swiftでアルゴリズムやりたい方は、『swift-algorithm-club』がおすすめです。Swiftで、代表的なアルゴリズムやデータ構造を実装したソースコードが多数公開されています。

今回は、バイナリサーチ。

コード

GitHub

https://github.com/bick-jp/swiftAlgorithmStudy

以上。

プログラマーに英語が必要か不要かはともかく、英語できると楽しいねという話。

figure-367946_1280

try!Swiftカンファレンスに参加しました。Appleが開発したSwiftというプログラミング言語に関するカンファレンスで、2016年3月2〜4日の3日間、登壇者計33名、参加者各日約500名という大規模なカンファレンスでした。さらに、外国人の参加者がとても多く、登壇者33名のうち26名(?)、参加者500名のうち150名(?)ほどが外国人の方だったと記憶しています(間違えてたらごめんなさい)。

私は、本業は語学学校勤務でして、プログラムは趣味でやってます。また、こういったカンファレンスに参加するのは初めてでした。こんなデカイ規模なんだな、外国人めっちゃ多いな、など思いながら、とても刺激的で楽しい3日間がすごせました。

内容に関しては、「try!Swift全日程聞き起こしまとめ」をあげてくださる方がいますので、ぜひそちらをご覧ください(感謝!)。

英語できると楽しい

で、内容とは別に、私が思ったことは、「俺、英語ある程度できて良かった」ということ。iOSディベロッパーとしては全然甘ちゃんの私ですが、幸い英語はある程度できるので、いろんな国の人と交流することができました。

わざわざカンファレンスのために飛行機乗って異国の日本まで来るような、超意識高い外国人エンジニアの方と触れ合うのは、とても楽しいことでした。また、全然知らなかったのですが、iOS界隈ではスゲー有名な方も来られていたのですね。

そんな方々と、直接話をして、色々なアドバイスをもらって、本当に良い刺激になりました。

英語ができない人を見るもどかしさ

人様のことをとやかく言うわけではなく、ほんと余計なお世話になってしまうのですが。。。

せっかく私なんかよりもよっぽど優秀な日本人エンジニアの方がたくさんいらっしゃるのに、「英語ができない」という理由だけで、その方々が、今回のカンファレンスに参加していた優秀な外国人エンジニアの方々と話ができない様子を見るのは、とてももどかしかったです。

せっかくのチャンスなのに!

英語って必要、不要?

職業柄、英語教育に関する書籍を読んだりブログを見たりします。よくある記事は、英語必要or不必要論。英語は必要か不要か、ゴチャゴチャと書いてあります。

正直、必要とか不必要とかそんなんどうでもよくて、やりたければやるし、やりたくなければやらなければいいじゃない、と思います。英語なんてできなくたって、楽しく幸せに生きていけます。

私の経験からすると、英語ができてとても役にたっているし、非常に楽しい。プログラムに関してだけで言っても、たくさん良かったことがあります。

  • 今回のtry!Swiftでたくさんの外国人エンジニアの方と触れ合えました。
  • 2年前、プログラム経験ほぼゼロの状態から独学でSwiftを勉強してアプリがリリースできたのは、海外の英語のリソースに触れることができたからです(当時は、ずぶの初心者の私が理解できるようなSwift関連情報が日本語ではあまりありませんでした)。
  • YouTube、各種Blog、TED、Udacity、Coursera、Kahn Academy、iTunesUなどのオンライン学習サイトなどで勉強して、分からなければStackOverFlowで質問したり、直接問い合わせをしてみたり。
  • AppleのSwiftに関するドキュメントを読んだり、などなど。

これらのことができたのは、英語ができたから、に他なりません。

もしも英語ができるようになりたければ

今回のカンファレンスで、もしも英語ができるようになりたいなーと思った方がいれば、参考にしてください。思いついたことをざざっとあげてみます。

・英語はプログラミング言語と一緒
英語は言語の一種ですから、その点で言えば、SwiftやPHPやRubyなどといったプログラミング言語と一緒です。Swiftという言語ができる人は、英語という言語も、やればできるようになります。

・英語は量
英語は、時間さえかければ誰でもできます。英語圏に生まれ育てば、3歳児でも英語を喋ります。頭の良さは関係ないです。逆に、時間をかけなければ英語はできるようになりません。どんなに天才でも、量をこなさないとできない。毎日コツコツやればできるようになりますし、やらなければできない。

・英語は伝えるという気持ち
英語ができないと、間違ったら恥ずかしいとか怖いとか、こんなこと言って相手は変に思わないだろうか、とか、色々不安ですよね。それで、結局、何も言えなくなっちゃうんですよね。でも、そんなこと思っているのは自分だけで、相手は気にしてないものですよ。逆に、日本語に不自由な外国人が日本語であなたに話しかけてきたら、どう思いますか?「がんばって話してるな、なんとか理解してあげたいな」と思うでしょう。伝えたいことがあるなら、言わないと、伝わらないですよ!

その他、以下の投稿も参考ください。
まだ英語の勉強で消耗してるの?英語の勉強の心構えとおすすめ書籍2冊。
まだ英語の勉強で消耗してるの?「正しい英語」より「伝える英語」が大事だよ編

おすすめの本

おすすめの書籍2冊を紹介します。数ある英語関連の書籍の中で、英語初心者、且つ、英会話ができるようになりたい方には、私は、常に以下の2冊をおすすめしています。

・『外国語を身につけるための日本語レッスン』

この本は、日本語を使って英語のように考える方法、を教えてくれる本です。「自分が言いたいことは何か?」をシンプルに考えるのに、とても役にたちますよ!

日本語と英語は、文化的にも言語的にも、大きな違いがあります。それを理解しないまま闇雲に英語を勉強しても、なかなか上手くいかないことがおおいです。まずは、日本語で、英語と日本語の違いは何か、そして、英語っぽく考えるにはどのようにすればいいか、を理解しましょう。

・『どんどん話すための瞬間英作文トレーニング』

「英会話ができるようになりたい、けど、どんな本で勉強すればいいだろう?」とお悩みの方には、間違いなくこの本をおすすめします。会話力を鍛えつつ、基礎的な単語や文法を復習できます。超良書。本当にいい本。

中身はとても単純で、左ページに日本語の文章が、右ページにはそれに対応する英語の文章が載っていて、日本文をみたら、それをすぐに英語に翻訳できるようになるまで、繰り返し声に出して覚えるというもの。

「中学高校と英語を勉強したけど、話せないし、今ではあんまり英語も覚えてないよ」という社会人の方にとって、難易度・分量ともに、絶妙です。3ヶ月くらいかけてこの本を1冊終わらせることを目標にしてみては?

最後に

宣伝になり恐縮ですが、、、

・東京都水道橋駅付近にある語学学校で講座をやります。興味あればご参加ください。『日本人の大人のための英語やりなおし講座』(2016年4月4日19時30分~/月曜日/全12回)

プログラマー向け英語勉強会みたいなのもやってみたいなと考え中。
以上。

try!Swift参加。プログラマーに英語が必要か不要かはともかく、英語できると楽しいねという話。

try!Swiftカンファレンスに参加しました。Appleが開発したSwiftというプログラミング言語に関するカンファレンスで、2016年3月2〜4日の3日間、登壇者計33名、参加者各日約500名という大規模なカンファレンスでした。さらに、外国人の参加者がとても多く、登壇者33名のうち26名(?)、参加者500名のうち150名(?)ほどが外国人の方だったと記憶しています(間違えてたらごめんなさい)。

私は、本業は語学学校勤務でして、プログラムは趣味でやってます。また、こういったカンファレンスに参加するのは初めてでした。こんなデカイ規模なんだな、外国人めっちゃ多いな、など思いながら、とても刺激的で楽しい3日間がすごせました。

内容に関しては、「try!Swift全日程聞き起こしまとめ」をあげてくださる方がいますので、ぜひそちらをご覧ください(感謝!)。

英語できると楽しい

で、内容とは別に、私が思ったことは、「俺、英語ある程度できて良かった」ということ。iOSディベロッパーとしては全然甘ちゃんの私ですが、幸い英語はある程度できるので、いろんな国の人と交流することができました。

わざわざカンファレンスのために飛行機乗って異国の日本まで来るような、超意識高い外国人エンジニアの方と触れ合うのは、とても楽しいことでした。また、全然知らなかったのですが、iOS界隈ではスゲー有名な方も来られていたのですね。

そんな方々と、直接話をして、色々なアドバイスをもらって、本当に良い刺激になりました。

英語ができない人を見るもどかしさ

人様のことをとやかく言うわけではなく、ほんと余計なお世話になってしまうのですが。。。

せっかく私なんかよりもよっぽど優秀な日本人エンジニアの方がたくさんいらっしゃるのに、「英語ができない」という理由だけで、その方々が、今回のカンファレンスに参加していた優秀な外国人エンジニアの方々と話ができない様子を見るのは、とてももどかしかったです。

せっかくのチャンスなのに!

英語って必要、不要?

職業柄、英語教育に関する書籍を読んだりブログを見たりします。よくある記事は、英語必要or不必要論。英語は必要か不要か、ゴチャゴチャと書いてあります。

正直、必要とか不必要とかそんなんどうでもよくて、やりたければやるし、やりたくなければやらなければいいじゃない、と思います。英語なんてできなくたって、楽しく幸せに生きていけます。

私の経験からすると、英語ができてとても役にたっているし、非常に楽しい。プログラムに関してだけで言っても、たくさん良かったことがあります。

  • 今回のtry!Swiftでたくさんの外国人エンジニアの方と触れ合えました。
  • 2年前、プログラム経験ほぼゼロの状態から独学でSwiftを勉強してアプリがリリースできたのは、海外の英語のリソースに触れることができたからです(当時は、ずぶの初心者の私が理解できるようなSwift関連情報が日本語ではあまりありませんでした)。
  • YouTube、各種Blog、TED、Udacity、Coursera、Kahn Academy、iTunesUなどのオンライン学習サイトなどで勉強して、分からなければStackOverFlowで質問したり、直接問い合わせをしてみたり。
  • AppleのSwiftに関するドキュメントを読んだり、などなど。

これらのことができたのは、英語ができたから、に他なりません。

もしも英語ができるようになりたければ

今回のカンファレンスで、もしも英語ができるようになりたいなーと思った方がいれば、参考にしてください。思いついたことをざざっとあげてみます。

・英語はプログラミング言語と一緒
英語は言語の一種ですから、その点で言えば、SwiftやPHPやRubyなどといったプログラミング言語と一緒です。Swiftという言語ができる人は、英語という言語も、やればできるようになります。

・英語は量
英語は、時間さえかければ誰でもできます。英語圏に生まれ育てば、3歳児でも英語を喋ります。頭の良さは関係ないです。逆に、時間をかけなければ英語はできるようになりません。どんなに天才でも、量をこなさないとできない。毎日コツコツやればできるようになりますし、やらなければできない。

・英語は伝えるという気持ち
英語ができないと、間違ったら恥ずかしいとか怖いとか、こんなこと言って相手は変に思わないだろうか、とか、色々不安ですよね。それで、結局、何も言えなくなっちゃうんですよね。でも、そんなこと思っているのは自分だけで、相手は気にしてないものですよ。逆に、日本語に不自由な外国人が日本語であなたに話しかけてきたら、どう思いますか?「がんばって話してるな、なんとか理解してあげたいな」と思うでしょう。伝えたいことがあるなら、言わないと、伝わらないですよ!

その他、以下の投稿も参考ください。
まだ英語の勉強で消耗してるの?英語の勉強の心構えとおすすめ書籍2冊。
まだ英語の勉強で消耗してるの?「正しい英語」より「伝える英語」が大事だよ編

おすすめの本

おすすめの書籍2冊を紹介します。数ある英語関連の書籍の中で、英語初心者、且つ、英会話ができるようになりたい方には、私は、常に以下の2冊をおすすめしています。

・『外国語を身につけるための日本語レッスン』

この本は、日本語を使って英語のように考える方法、を教えてくれる本です。「自分が言いたいことは何か?」をシンプルに考えるのに、とても役にたちますよ!

日本語と英語は、文化的にも言語的にも、大きな違いがあります。それを理解しないまま闇雲に英語を勉強しても、なかなか上手くいかないことがおおいです。まずは、日本語で、英語と日本語の違いは何か、そして、英語っぽく考えるにはどのようにすればいいか、を理解しましょう。

・『どんどん話すための瞬間英作文トレーニング』

「英会話ができるようになりたい、けど、どんな本で勉強すればいいだろう?」とお悩みの方には、間違いなくこの本をおすすめします。会話力を鍛えつつ、基礎的な単語や文法を復習できます。超良書。本当にいい本。

中身はとても単純で、左ページに日本語の文章が、右ページにはそれに対応する英語の文章が載っていて、日本文をみたら、それをすぐに英語に翻訳できるようになるまで、繰り返し声に出して覚えるというもの。

「中学高校と英語を勉強したけど、話せないし、今ではあんまり英語も覚えてないよ」という社会人の方にとって、難易度・分量ともに、絶妙です。3ヶ月くらいかけてこの本を1冊終わらせることを目標にしてみては?

最後に

宣伝になり恐縮ですが、、、

・東京都水道橋駅付近にある語学学校で講座をやります。興味あればご参加ください。『日本人の大人のための英語やりなおし講座』(2016年4月4日19時30分~/月曜日/全12回)

・ニコニコ動画で、私の勤めている語学学校のチャンネルがオープンしました。「英語やり直し講座」という初心者向けの講座をビデオ配信しているので、よければご覧ください!(http://ch.nicovideo.jp/kudan-english

プログラマー向け英語勉強会みたいなのもやってみたいなと考え中。
以上。

新規申請するアプリでiAdが表示されない話。

「2016年6月末にiAdが終了する」というニュースが、2016年1月中旬に発表されましたね。6月末まではiAdは使えるのかと思ってたら、新規申請するアプリではiAdは使わせてもらえないみたいです。iAd以外の広告を導入しないといけないですね。

経緯

新しいアプリ(動画再生アプリMotionVideo)をリリースしたところ、1週間たってもiAdが表示されない。おかしいなー?と思って、iTunesConnectにログインしてみると以下のような文面が。

The iAd App Network will be discontinued as of June 30, 2016. Although we are no longer accepting new apps into the network, advertising campaigns may continue to run and you can still earn advertising revenue until June 30. If you’d like to continue promoting your apps through iAd until then, you can create a campaign using iAd Workbench. We will continue to keep you updated, but if you have any questions,

「新しいアプリはiAd使えませんよ」ということですね。全然気づかなかった。。。

でもアプリの審査には通ってるし、もしかしたら、問い合わせしてみたらいけるかも!と思って、Appleに問い合わせしてみたところ、以下のような答えが。

New apps are no longer being accepted into the iAd App Network program.

やっぱだめでした。
違う広告入れよう!(AdMobあたりがいいのかな?)

以上

[Swift]UIWebViewでYouTubeを見るとき、ネイティブの動画プレーヤーを閉じて、動画のURLをパースし、自前のプレーヤーで再生させるためのメモ

スクリーンショット 2015-12-05 1.01.22

UIWebViewでYouTubeを開くと、勝手にネイティブのプレーヤーが動画を再生してしまいます。それを強制的に閉じて、YouTubeの動画IDからURLをパースして、自前のプレーヤーにURLを渡して動画を再生させたいときが、きっとあるはず。そのためのメモ。

環境

Swift2.0
Xcode Version 7.1.1

ネイティブの動画プレーヤーのフルスクリーンを検知する

ネイティブの動画プレーヤーは、full screenで動画を再生します。なので、videoがフルスクリーンになった状態を検知します。

NSNotificationのUIWindowDidBecomeVisibleNotificationを使いましょう。

参考:[Swift] UIWebViewでvideoタグをクリックしたときの、Videoプレイヤーのイベントハンドリング

ネイティブの動画プレーヤーを終了させる

UIWebViewではJavaScriptが使えます。以下のように、JavaScriptで、UIWebViewが再生する動画プレーヤーを強制的に閉じましょう。ネイティブの動画プレーヤーがフルスクリーンになったタイミングで閉じるのが良いかも。


func windowDidBecomeVisible(notification: NSNotification?) {
webView.stringByEvaluatingJavaScriptFromString("Array.prototype.forEach.call(document.getElementsByTagName('video'),function(v){v.webkitExitFullscreen();});")
}

参考:YouTube などのフルスクリーンで再生される UIWebView の動画をプログラムから終了させる方法

URLからYouTubeIDをとる

以下のような感じで、今WebViewが開いているURLをとって、正規表現を使って、IDだけを抽出。

let absoluteUrl: String = webView.request!.URL!.absoluteString
let youTubeID = extractYoutubeID(absoluteUrl)


func extractYoutubeID(youtubeURL: String) -> String {
let pattern: String = "(?<=v(=|/))([-a-zA-Z0-9_]+)|(?<=youtu.be/)([-a-zA-Z0-9_]+)" let regex = try! NSRegularExpression(pattern: pattern, options: .CaseInsensitive) if let regexMatch = regex.firstMatchInString(youtubeURL, options: [], range: NSRange(location: 0, length: youtubeURL.characters.count)) { let youtubeId: String = (youtubeURL as NSString).substringWithRange(regexMatch.range) return youtubeId }

タイミングは、ネイティブの動画プレーヤーが閉じたことを検知する、UIWindowDidBecomeHiddenNotificationあたりがよいでしょうか。

参考1:Youtube Video ID From URL - Objective C
参考2:[Swift] UIWebViewでvideoタグをクリックしたときの、Videoプレイヤーのイベントハンドリング

YouTubeIDから動画のURLをパースする

YouTubeIDから動画のURLを取ってくるParserが公開されてますので、それを使いましょう。

参考1:SSYoutubeParser
参考2:HCYoutubeParser

私が困ったこと

以下のように、UIWebViewで開いているYouTubeのURLを見ていると、

let absoluteUrl: String = webView.request!.URL!.absoluteString
print(absoluteUrl)

どうも、YouTubeIDがはいったURLがうまく読み込めないときがある。
例えば、一度ある動画を見た(とあるYouTubeIDがはいったURLを読み込む)あと、別の動画(別のYouTubeIDがはいったURLを読み込む)のページに移動しても、print(absoluteUrl)すると、最初にみた動画のURLがまんま入ってたり。。。

そんなときは、とりあえずWebViewを再読み込みすることで対応している。
webView.reload()

なんかうまく説明できなかったけど、ゆるしてください。
以上。

[Swift]TableView, TableViewCell, CustomCell周りのメモ

tableview

こんな感じでTableView使ってゴニョゴニョするとき、カスタムセルはどうすんだっけなとか、微妙に忘れることがあるので、参考サイトをメモ。

参考サイト

SwiftでCustomCellを作って画像付きリスト表示
[Swift] TableView をストーリボードで作る
[Swift] Custom Cell を使って TableView をいい感じに実装する – 最初の一歩

以上。

[Swift2]PCからiTunes経由で同期したiPhone内にある動画にアクセスする方法

iPhone内にある動画にアクセスしてゴニョゴニョしたい!と思ったのですが、ちょっと手間取ったので、メモがてら共有します。そもそもiPhone内にある動画と言っても、いくつか種類があるようでして。私がアクセスしたかったのは以下2つ。

(1)写真app内にある動画

photo

このアイコンのやつ。自分がiPhoneで撮ったビデオが入ってますね。

・写真app内にある動画へのアクセス

ちょっとググれば、以下のように参考になるサイトがたくさん出てくるので、助かります。
UIImagePickerControllerで動画だけを選択する方法
Choosing Images with UIImagePickerController in Swift

(2)ビデオappにある動画

video

このアイコンのやつ。iTunesから同期した動画が入ってますね。ここへのアクセスに困りました。うーん、困った困った。

・とりあえずStackOverFlow

ググってもどうもそれらしい答えが出てこないので、困ったときのStackOverFlowです、頑張って英語で質問!

How to access the video in iPhone synched through iTunes from PC

すると早速返信が。

You can’t access those videos using PhotoKit. PhotoKit only allows access to media stored in the central Photo Library – in short: everything that is shown in the Photos App.

Videos synced by iTunes are part of the Music(iPod)-Library. You can access these through the MPMediaLibrary:

なるほど。iTunesから同期した動画は、Photos FrameworkではMobile Core Services Frameworkでもなく、Media Player FrameworkのMPMediaLibrary classを使うのですね!

・このコードで動いた

import MediaPlayer

として、動画にアクセスしたい箇所で、

let mediaTypeNumber = MPMediaType.AnyVideo.rawValue
let query = MPMediaQuery()
query.addFilterPredicate(MPMediaPropertyPredicate(value: mediaTypeNumber, forProperty: MPMediaItemPropertyMediaType))

let items: [MPMediaItem] = query.items! as [MPMediaItem]
for item in items {
// If you want to get title.
let title = item.valueForProperty(MPMediaItemPropertyTitle) as! String
}

とでもすると、無事iTunesから同期した動画にアクセスできました。

・注意

MPMediaPickerが使えれば自分でUI作る必要なくて楽なんですが、なぜか、MPMediaPicker使うと動画にアクセスできません。。。

その他参考

MPMediaPickerController with video media types not working(Objective-cはこちら)
[iOS][Swift]ミュージックライブラリにアクセスして音楽を再生する(MPMusicPlayerController使用)

以上。

[Swift2]Storyboardから設置したUIViewでAVPlayerの動画を再生する方法

AVPlayerで動画再生するときに、Storyboardから設置したUIViewに動画を写したい。そして、オートレイアウトとかでゴニョゴニョしたい!本来は簡単なことなのでしょうが、情けないことに私は手間取ってしまったので共有します。なお、Xcodeのバージョンは7.1.1です。

全部コードでやる場合

とはいえ、まずは、コードでviewを追加しAVPlayerで動画を再生する場合を紹介します。「Swift Docs 006 動画の再生」をご覧ください。この通りにやればそのまま動きます。

以降、「Swift Docs 006 動画の再生」をベースに、いくつか変更を加えます。

やり方

(1)ViewController.swiftの変更

まずは、ViewController.swiftのコードを以下に変更(太字部分は追記、横線部分は削除)。「IBOutletの追加」と、「Viewを生成・レイヤーを追加部分の削除」だけです。

class ViewController: UIViewController {

// 再生用のアイテム.
var playerItem : AVPlayerItem!

// AVPlayer.
var videoPlayer : AVPlayer!

// シークバー.
var seekBar : UISlider!

@IBOutlet weak var videoPlayerView: AVPlayerView!

override func viewDidLoad() {

// パスからassetを生成.
let path = NSBundle.mainBundle().pathForResource("test", ofType: "mov")
let fileURL = NSURL(fileURLWithPath: path!)
let avAsset = AVURLAsset(URL: fileURL, options: nil)

// AVPlayerに再生させるアイテムを生成.
playerItem = AVPlayerItem(asset: avAsset)

// AVPlayerを生成.
videoPlayer = AVPlayer(playerItem: playerItem)

// Viewを生成.
let videoPlayerView = AVPlayerView(frame: self.view.bounds)

// UIViewのレイヤーをAVPlayerLayerにする.
let layer = videoPlayerView.layer as! AVPlayerLayer
layer.videoGravity = AVLayerVideoGravityResizeAspect
layer.player = videoPlayer

// レイヤーを追加する.
self.view.layer.addSublayer(layer)

// 動画のシークバーとなるUISliderを生成.
seekBar = UISlider(frame: CGRectMake(0, 0, self.view.bounds.maxX - 100, 50))
seekBar.layer.position = CGPointMake(self.view.bounds.midX, self.view.bounds.maxY - 100)
seekBar.minimumValue = 0
seekBar.maximumValue = Float(CMTimeGetSeconds(avAsset.duration))
seekBar.addTarget(self, action: "onSliderValueChange:", forControlEvents: UIControlEvents.ValueChanged)
self.view.addSubview(seekBar)

<以下同じなので省略>
}

(2)StoryboardからUIViewを貼り付け

貼り付けたUIviewは、以下のように、AVPlayerViewのインスタンスにすること!(ここやってなかった)

uiview

(3)Storyboardとコードの紐付け

こんな感じで、紐付け。UIViewをAVPlayerViewのインスタンスにしとかないと、紐付けできない。

attache

参考

How to play movies on UIView?

以上。

iOSで地図・領域観測アプリを作るときに参考にしたサイトまとめ

Swiftでジオフェンシングのアプリ作成するときのメモ。

各情報はググればでてきますが、ひとつひとつ散らばっていて探すのが面倒かと思います。メモ程度にまとめますので、CoreLocation, MKMapView, Geofencingなどでお悩みの方のお役にたてば幸いです。

ちなみに、私は、複数地点が同時に観測さてしまう現象で結構悩みました。。。

とりあえず地図表示

[iPhone] MapView で地図を表示する (Swift)

002 地図の縮尺の変更

現在地を中心にする

MKMapViewの初期中心点をユーザの現在地に設定する方法

003 現在位置の地図の表示

座標を決めてピン立てる

004 指定した座標にピンを立てる

緯度経度を10進法で求める

Googleマップで緯度・経度を求める

ピンの画像を変える

Swift different images for Annotation

calloutに画像追加する

Stuck on using MKPinAnnotationView() within Swift and MapKit

コールアウトにボタン追加する

MapKitでのピンの追加・削除、直線の描画

MapKit in Swift, Part 2

ボタン押したら文字列を表示

Swift Annotation CallOut Button selection

currentLocationのcalloutをオフに

How to suppress the “Current Location” callout in map view

ピンの周辺に円を描く

012 地図上に図形を描く(円)

iOS 8 の Location Notification を使って目的地に着いたら教えてくれるアプリ作ったった

トラッキングをアップル純正アプリに合わせる

MKMapView のユーザートラッキングモードを標準マップアプリと同等に実装する

領域観測(Geofence)

iOS7 で 位置情報サービス と マップ を使う! 〜 LocationManager と MapView 〜

iOSのジオフェンス機能

Core Location Tutorial: Geofencing

iOS Geofence CLCircularRegion monitoring. locationManager:didExitRegion does not seem to work as expected

複数の領域が一度に同時に観測されて困る!

Region Monitoring Glitch on iOS 7 – Multiple Notifications at the same time

LocalNotificationで通知だす

[iOS 8] Location Notification を使って領域観測で通知する

AppDelegate内でUIAlertControllerつかう

Apple Watch バックグラウンドLocal通知 UIAlertController 表示

Mapの矢印のアイコン出したい

Creating a left-arrow button (like UINavigationBar’s “back” style) on a UIToolbar

アプリ名変更

[iOS] アプリ名を変更する

アップルのドキュメント

Location and Maps Programming Guide

Getting the User’s Location

以上。

iBeaconを発信するためにMacにnode.jsをインストールするときの注意点

SwiftでiBeacon関連のiOSアプリを作ろうとしてまして、手持ちのiPhoneを受信機にするとして、発信はどうしようかなーと思っていたら、MacBookAir2011Midモデルからはnode.jsなどというものを使うと、iBeaconの発信ができるとのことで、よっしゃと思ってゴニョゴニョしてたら、エラーがでまして、ちょっと手間取ってしまったのでメモ。

エラー

npm install bleacon
したら、コマンドラインで明らかにエラーっぽい表示がでる!

原因

node.jsのバージョンに気をつけるなければいけない!

たった6行!最も簡単にiBeaconの電波を「発信」する方法を参考に、node.js公式から、当時最新版:v0.12.5をダウンロード&インストールしたら、bleaconをnpm installするところで詰まった。

v0.12.5をアンインストールし、v0.10.39をダウンロード&インストールすることで解決しました。

ヒントになったこと

Node.jsとiPhoneでiBeaconの送受信テストのコメント欄の、以下のやりとりのおかげです。ありがとうございます。

node 0.11.11だとnpm install bleacon でbignumのコンパイルに失敗する。nodeのバージョンが0.10.28だと成功しました

情報ありがとうございます。0.11以降だとネイティブ拡張の仕様で互換性のない変更が入ってるらしいので、bignumがそれに追従していないのだと思います。

node.jsのアンインストール

node.js v0.12.5はもういらないので、アンインストールしないといけない。
nvm を利用したnode.js のインストールにある「2.node.js のアンインストール」を参考に、まずはnode.js(v0.12.5)をアンインストール。

また、同サイトを参考に、nvm を使ってnode.jsのv0.10.39をインストール(v0.11以降だとbleacon入れられないっぽいので)。バージョン管理などなどの理由で、公式のパッケージではなく、nvmを使った方が良いようです。

iBeaconの発信

あとは、以下のサイトなどを参考にやればOKでした。
たった6行!最も簡単にiBeaconの電波を「発信」する方法
SwiftとiBeaconを使ってお母さんが自分の部屋に近づいて来た事を警告するアプリをつくる
Node.jsとiPhoneでiBeaconの送受信テスト

以上