iPhoneアプリ開発 −iOS6からの「写真」へのアクセス問題−

公開日: : iPhone, IT, Mac


写真を扱うアプリを開発している際に問題になったこと。
※結構前の話を今更まとめてみる。

 写真へのアクセス周りについて

 iOS5まで

写真を扱うときによく使うフレームワーク「AssetsLibrary」。
これを利用している際に、「位置情報サービス」でオンになっている必要がありました。

 iOS6から

「位置情報サービス」は「プライバシー」に統合されました。
「AssetsLibrary」を使っても、「位置情報サービス」については問われません。
代わりに「写真」にアクセスする許可のダイアログが表示されるようになりました。

※「AssetsLibrary」を使わなくても、「写真」にアクセスする場合はダイアログが表示されます。

 問題点

アプリが「写真」へのアクセスをした際に表示されるダイアログ。
このダイアログで「いいえ」を選択してしまうとアプリが使えなくなってしまいます。

ただし、「写真」へのアクセスなので写真系のアプリでよくあるカメラ起動に関しては、(何も対処をしてなければ)起動してしまいます。

つまり、「カメラ起動」→「写真撮影」→「編集画面」という流れをしたくても編集画面に遷移するところでアクセスがNGになり動かなくなります。

ユーザが間違えて「いいえ」を教えてしまうケースはよくあるかと思います。
そこで、「写真」へのアクセスが不許可にされている際はアラートを表示させてユーザに気づいてもらうようにします。

 対応方法

現在の状態を確認し、もし「いいえ」にしていたらアラートを表示させます。

 (1)フレームワークの追加

「TARGETS」の「Build Phases」の「Link Binary With Libraries」でAssetsLibrary.frameworkを追加する。

 (2)状態の確認

以下のコードで現在の状態が分かります。

ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];

状態は以下。

 ALAuthorizationStatusNotDetermined

まだ選択していない。

 ALAuthorizationStatusRestricted

機能制限(ペアレンタルコントロール)で許可されていない。
参考:iPhone、iPad、iPod touch で機能制限を使う – Apple サポート

 ALAuthorizationStatusDenied

「写真」へのアクセスを許可していない。

 ALAuthorizationStatusAuthorized

「写真」へのアクセスを許可している。

 (3)アラートの表示

そこで「写真」へアクセスする必要がある箇所で状態をチェックします。

if([ALAssetsLibrary respondsToSelector:@selector(authorizationStatus)]) {
  ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
  if(status == ALAuthorizationStatusDenied) {
  	//アラート表示
  }
}

※authorizationStatusはiOS6からであってiOS5では使えないので、respondsToSelectorで使えるかを確認します。

これで、ユーザにアラートを表示させて「写真」へのアクセスを許可するようお願いすることができます。

 参考

広告

関連記事

no image

mailtoリンクの件名や本文の文字化け -N-02Aのケース-

* mailtoリンクの仕様 携帯電話用のWebサイトではmailtoリンクを使うことが多いと思い

記事を読む

no image

iPhoneアプリ開発 -利用するべきサービス-

iPhone(iOS)アプリ開発において使っているサービスを列挙。 この手のサービスがないと、開発中

記事を読む

no image

iPhoneアプリ開発 -mixiSDKを使ってmixi連携をしてみる(2)-

* 前回 は、「ユーザーにAPI利用のための認可」をおこなってもらうところまでやりました。 本エン

記事を読む

no image

MySQLのバックアップ手順 -消えたら困るものはバックアップ-

そろそろデータが消えてもらったら困るぐらいになっていたのでバックアップをとることにしました。 とい

記事を読む

no image

CakePHPのモデルのキャッシュではまった -新しく追加したカラムに値が入らない-

タイトルのとおり、ちょこっとCakePHPではまったのでメモ。 * 作業内容 -MySQLで、ある

記事を読む

ndk

Androidアプリ開発 -画像処理をC言語で高速化-

* 画像を扱う際の問題(1):計算処理の遅さ 前回、セピア画像にする方法を書きました。

記事を読む

no image

iPhoneアプリ開発 芳名帳アプリ作成(3) -名前を書けるようにする-

* 今までの流れ - -[http://pplace.jp/2013/06/1531/:title=

記事を読む

構成

定期的にデータ取得のためにCakePHP1.3でシェル機能を利用

定期的にデータを取得する行為をするために、はじめてシェル機能を使ってみたのでメモ。 * ス

記事を読む

no image

Twitterでプロテクトをかけているユーザが投稿したステータスを取得する方法

* 前提 ID Twitterの各投稿にはIDが存在していています。 そのIDを元にステータス

記事を読む

no image

ViewController単位で画面の向きを変えてみる

ViewController毎に画面の向きを変えたい!ということがあったのでやってみました。 *

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑