iPhoneアプリ開発における各種機能利用時の確認事項

iPhoneアプリケーション開発のため日々奮闘中。今日も『iPhone Application Programming Guide』を読んで学んだ事を記載したいと思います。
参考文献は以下です。
iPhoneApplicationProgrammingGuide


各種ハードウエアを使う際の注意点

iPhoneにはカメラ、GPS機能、ネットワーク接続機能など様々なハードウエアが存在します。しかしiPhoneiPad、iPodTouchなど使う機種により、また使う環境により使える機能と使えない機能が存在します。
今日は各種機能をアプリケーションで使う際に、気をつける事を記載します。


Info.plistの記載

もし必須機能が存在する場合には、Info.plistにUIRequiredDeviceCapabilitiesキーで登録しておく必要があるようです。


マルチタスク

Get the value of the multitaskingSupported property in the UIDevice class.

UIDeviceクラスのmultitaskingSupportedプロパティの値を確認します。
マルチタスク対応の場合はYESを取得できます。マルチタスクアプリはまだ作ってないけど、作るときには注意しよう。。


iPhone用?それともiPad用?

Use the userInterfaceIdiom property of the UIDevice class. This property is applicable only to universal applications that support different layouts based on whether the content is intended for iPad versus iPhone and iPod touch.

UIDeviceクラスのuserInterfaceIdiomプロパティを利用します。このプロパティは異なるiPadiPhoneiPod touchなど異なるレイアウトをサポートするユニバーサルアプリケーションのときにだけ役立ちます。
userInterfaceIdiomは構造体で、UIUserInterfaceIdiomPhoneや、UIUserInterfaceIdiomPadといった値を返します。プロパティの値によりWindowやViewの作成を切り替えて、iPadiPhoneの画面サイズに対応するということですねっ!!


外部スクリーン

Get the value of the screens property in the UIScreen class. If the array contains more than one screen object, one of the objects corresponds to the main screen and the other corresponds to an external screen.

UIScreenクラスのscreensプロパティを参照します。screensプロパティは配列を保持しており要素数が2以上であれば、1つはメインスクリーンそれ以外は外部スクリーンとなります。
外部に接続して何か画面を表示するときに使うものなのでしょうか。そーゆうアプリは見た事が無いので使い方がまだよくわかりませんが、まあおいおい使う事もあるかな=*^-^*=


保護ファイル

Get the value of the protectedDataAvailable property in the shared UIApplication object.

UIApplicationクラスのprotectedDataAvailableプロパティを取得します。
もしYESの場合には、デバイスがアンロック状態で保護ファイルを利用できます。もしNOの場合には、デバイスがロック状態(画面が真っ暗になって待機している状態とか)で保護ファイルは利用できません。ログイン情報など重要な情報を保持する為に保護ファイルとか使いますが、そのファイルの利用可否を判断できるようですね。


ネットワーク

If you need to transfer something using the network, just do so and be prepared to handle any errors that might crop up. The CFNetwork framework (as well as NSStream and other network interfaces) report errors when they occur, so you should be sure to provide appropriate error handlers when using these interfaces.

もしネットワークを利用して何からのデータの送受信を行いたい場合は、発生するかもしれないエラーを扱う必要がある。CFNetwork Frameworkはエラーを発生させる可能性があり、あなたはエラーを適切にハンドリングする必要がある。
シミュレータや実機でのカンタンなテスト中はなかなかネットワークが切断されるなどは起きないけど、いざ実用で使うとネットワークなんてすぐ切れますよねー、地下鉄とか。だからこのエラーハンドリングはかなり重要だと思ってます。


カメラの利用

Use the isSourceTypeAvailable: method of the UIImagePickerController class to determine if a camera is available.

UIImagePickerControllerクラスのisSourceTypeAvailable:を利用してカメラが使えるかを確認する。
引数にはUIImagePickerControllerSourceTypeCameraを指定。シミュレータとかでふとカメラを使うとエラーになりますよねー。


ビデオ撮影

Use the isSourceTypeAvailable: method of the UIImagePicker- Controller class to determine if a camera is available and then use the availableMediaTypesForSourceType: method to request the types for the UIImagePickerControllerSourceTypeCamera source. If the returned array contains the kUTTypeMovie key, video capture is available.

カメラ機能が利用できる事を確認する。その後、UIImagePickerControllerクラスのavailableMediaTypesForSourceType:メソッドに引数としてUIImagePickerControllerSouceTypeCameraを渡し戻り値を得る。戻り値にkUTTypeMovieが含まれる場合には、ビデオ撮影機能は利用できる。
なるほど、ビデオ撮影機能はまだ使った事無いですが、こうやって確認するんですね。


音声入力

In iOS 3 and later, use the AVAudioSession class to determine if audio input is available. This class accounts for many different sources of audio input on iOS-based devices, including built-in microphones, headset jacks, and connected accessories.

iOS3以降AVAudioSessionクラスを利用して音声入力が利用できるかを確認することができる。AVAudioSessionクラスは様々なiOSをベースとしたデバイスの音声入力機能から成り立っている。
音声入力もまだした事無いですねー。こうやって確認するのか。


GPS機能

Configure a CLLocationManager object for location updates and specify a high level of accuracy. The Core Location framework does not provide direct information about the availability of specific hardware but instead uses accuracy values to provide you with the data you need. If the accuracy reported in subsequent location events is insufficient, you can let the user know.

位置情報更新や位置特定のためにCLLocationManagerクラスを利用する。Core Location frameworkは、GPS機能が使えるかどうかが直接分かるような情報は提供しないが、必要なデータを提供するため正確な値を利用する(?)。もし連続的に正確なデータが取得できない場合は、それをユーザーに伝える事ができる。
これは、とりあえず使ってみて、返ってくる値を見て利用可否を判断しろという事でしょうか。もうちょっと資料を見てみないと分からない。。。英語力の無さが。。


近さセンサー

Use the proximityState property of the UIDevice class. Not all devices have proximity sensors, so you should also check the proximityMonitoringEnabled property to determine if this sensor is available.

UIDeviceクラスのproximityStateプロパティを利用する。全てのデバイスに近さセンサーが搭載されているわけではないので、proximityMonitoringEnabledプロパティを確認し、近さセンサーが利用できるかを判断する。
電話アプリで顔が近くにあると画面が暗くなる、そんな時に使われているセンサーですね。このセンサーはどんな仕組みなんだと、不思議に思います。電話以外にもどんな機会で使えるかな??


最後に

iPhoneアプリには様々なハードウエアや機能が搭載されていて、それらを利用した実装はすごく楽しいです。でもユニバーサルアプリ(いろんなデバイスで動くアプリ)を作るとなると、上記のように各種機能を使う際にチェックするなど、ちょっと面倒なんですね。Androidに比べるとかなり楽だと思いますが。
各種機能を使ったアプリを色々と作ってみよっと。アプリの可能性は無限大(o(*゚▽゚*)o)