この記事は前置きが結構長いです。 「ネットワークにアクセス可能かを調べる方法だけ知りたいんだよ!」という方は こちらをクリックすることで前置きを読み飛ばすことができます。

前置き

この treastrain Press でも、少しずつ私の開発日誌のようなものを書いていきたいと思います。

私は現在、Sacuri という名前のサービス・アプリケーションの開発を行っています。
アプリケーションはとりあえず、iOS のものを作ろうと考えていて、 Swift 2 を勉強中です。

おそらく、この記事を読んでいる方はプログラミングに精通していたり、 コロコロ描き方が変わる Swift に躓いた方が多いかなと思います。

私は C 言語もほとんど分かりません。初めて本格的なプログラミングに挑戦するときに出会ったのが Swift でした。
Apple 信者ということもあり、「アプリケーション開発は iOS だ!」と考えていましたが、
どうも Objective-C の敷居が高いと感じ、躊躇していました。

そんな中で登場した Swift でしたから、私はすぐに飛びつきましたね。
それで、Swift 1.0 や 1.2 などで遊んでいましたが、Swift 2 が発表され、
いざ Xcode で今までどおりに書いていくと かなりの数のエラーが出ます。

また、Swift 2 は記事執筆時点で beta 版であり、これからもどんどん書き方が変わっていくことでしょう。
さらに、日本語で書かれたドキュメントなども Swift 1.2 のものが多かったり、 そもそも存在していなかったり。
「コピペでいけるっしょ」と思いきや画面がエラーを示す赤で染まったり…
そんな方の手助けになれば、 また、私オリジナルのリファレンスのようなものを用意すると考えて、
開発日誌を書いていきます。  

開発環境

今回の記事は、以下の開発環境を想定して書かれています。

  • Xcode 7.0 beta 5 (7A176x)
  • iOS 9  beta 5
  • Swift 2.0 (swiftlang-700.0.52.2 clang-700.0.65)

Xcode 7.0 beta は Apple Developer Program に参加していなくても入手可能なため、 Xcode に関してはスクリーンショットを掲載します。

デバイスがネットワークに接続可能かを調べる

iOS App を開発していくに当たって、 「iOS デバイスがインターネットに接続されているか調べたい」と思うことがあります。

Apple の iOS Developer Library には Reachability というサンプルがありますが、 これは Objective-C で書かれており、Swift と共存する方法もありますが今回は避けます。

また、有志の方々が Swift で書いた Reachability のようなサンプルなども GitHub などで 公開されていますが、Swift 1.2 などで書かれており、Xcode 7 では使い物になりません。

Xcode に搭載されている「最新の Swift 構文に変換」機能もあまり上手な動作をしてくれません。 それでは紹介していきます。  

SystemConfiguration.framework の追加

まず、プロジェクトに SystemConfiguration.framework を追加します。
プロジェクトを選んで、「TARGETS」をアプリケーション名の書かれた項目にします。
「General」タブの中にある「Linked Frameworks and Libraries」項目の「+」をクリックし、 表示された画面の中から SystemConfiguration.framework を選択して「Add」します。 スクリーンショット2-2015-08-19-01.42.55

CheckReachability.swift の作成

プロジェクト内に CheckReachability.swift を作成します。
CheckReachability.swift とこのページではしますが、名前はなんでも結構です。
Xcode のメニューバーより、「File」>「New」>「File…」へ進んで、
「Swift File」から CheckReachability.swift を「Create」してください。 スクリーンショット2 2015-08-19 01.50.57 続いて、CheckReachability.swift のサンプルコードです。

コピペして構いません。
少し解説をすると、この CheckReachability.swift で CheckReachability という関数を作成しています。
引数に String 型を指定し、「host_name」としています。
それで、この「host_name」にアクセスすることができたら true、できなければ false が返ってきます。
次はこの関数を使っていきます。  

ViewController.swift に実装

今回は簡単な紹介ということで ViewController.swift に実装していきます。
ViewController.swift のサンプルコードはこちらです。

viewDidLoad に print(CheckReachability(“google.com”)) を追加しただけです。
この 「google.com」の部分にアクセス可能かどうかを調べることができます。
単純に「インターネットにアクセスできるか調べたい!」ということであれば、
稼働率が 100% に“近い” Google を指定してもいいような気がしますね。

追記
その後、何度かデバッグしてみたところ、google.com 以外のどんな文字列を入れても
しっかりとネットワーク状況を教えてくれるので、例えば abc でも大丈夫です。
もしかしたら今後、仕様変更があるかもしれません。
それで、今回はその結果を print (Swift 1.2 までは println) しているので Xcode で実行すると、
ネットワークに接続できれば「true」 ネットワークに接続できなければ「false」 の文字がデバッグエリアに表示されます。 スクリーンショット2-2015-08-19-01.53.52  

あとがき

いかがだったでしょうか。
Apple の iOS Developer Library の Reachability はリアルタイムでネットワーク状況を教えてくれるようですが、
残念ながらそこまでの技術を私が持っておらず、「指定した host にアクセスできるか」という調べ方で
ネットワーク状況を調査するというコードとなりました。 不備や不明な点などがあればコメントにどうぞ。  

参考サイトなど