読者です 読者をやめる 読者になる 読者になる

Swift,Objective-Cプログラミング ~ iOS ~

Objective-C,Swift,Apple Watchなどのプログラミング

【iOS Swift入門 #228】位置情報アクセス許可変更のためにアプリから設定画面を表示するサンプル

Swift Objective-C

■はじめに
設定画面からアプリの位置情報オン・オフする場所が
結構深い位置にあるため、ユーザーが一度位置情報アクセス許可を
オフにした場合、その後オンにしてもらうのはハードルが高い。

iOS8ではアプリから、位置情報のアクセス許可オン・オフにする場所に簡単に表示できるようになった。

ボタンなどのイベント処理に下記追加するだけ。

// 設定画面へ移動
let url = NSURL(string: UIApplicationOpenSettingsURLString)!
UIApplication.sharedApplication().openURL(url)

※ひとつ注意がいる
・アプリが位置情報やプッシュ通知などを使用している場合
→アプリの設定画面を表示

・アプリが位置情報やプッシュ通知などを使用していない場合
→設定トップ画面を表示

■サンプル
画面のボタンを押すとアプリの設定画面を表示する。
※サンプルはこちらからダウンロード
SampleMoveSetting.zip - Google ドライブ


下記動画のような結果になります。

import UIKit
import CoreLocation

class ViewController: UIViewController {
    @IBOutlet weak var moveSettingButton: UIButton!

    var locationManager = CLLocationManager()
    var currentLocation: CLLocation?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        // locationManageの設定
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.delegate = self

        // 位置情報のアクセス許可の状況に応じて、アクセス許可の取得、位置情報取得の開始を行う
        let status = CLLocationManager.authorizationStatus()
        switch status{
        case .Restricted, .Denied:
            break
        case .NotDetermined:
            // iOS8ではアクセス許可のリクエストをする。iOS7では位置情報取得処理を開始することでアクセス許可のリクエストをする
            if locationManager.respondsToSelector("requestWhenInUseAuthorization"){
                locationManager.requestWhenInUseAuthorization()
            }else{
                locationManager.startUpdatingLocation()
            }
        case .AuthorizedWhenInUse, .AuthorizedAlways:
            locationManager.startUpdatingLocation()
        default:
            break
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func pressButton(sender: AnyObject) {

        // 設定画面へ移動
        let url = NSURL(string: UIApplicationOpenSettingsURLString)!
        UIApplication.sharedApplication().openURL(url)
    }
}

extension ViewController: CLLocationManagerDelegate{
    // 位置情報のアクセス許可の状況が変わったときの処理
    func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {

        switch status{
        case .Restricted, .Denied:
            manager.stopUpdatingLocation()
        case .AuthorizedWhenInUse, .AuthorizedAlways:
            locationManager.startUpdatingLocation()
        default:
            break
        }
    }

    // 位置情報が取得できたときの処理
    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {

        if locations.count > 0{
            currentLocation = locations.last as? CLLocation
            NSLog("緯度:\(currentLocation?.coordinate.latitude) 経度:\(currentLocation?.coordinate.longitude)")
        }

    }
}

■おわりに
MacBookにはこのケースがいい。

Inateck 13.3Inch インナーケース Macbook Air/ MacBook Pro Retina/ウルトラブック/ネットブック用 プロテクターケース [寸法: 13.3インチ, カラー: グレー]


【参考情報】
iOSアプリ開発未経験の人向け
iOSアプリ開発をはじめたとき最初に買った書籍
【アプリ作成未経験の人向け】
Storyboardを使って画面を作成していく。
手順にしたがって操作していくと、ボタンの作成やWebViewの作成などができる。
アプリって、こんな感じで作るんだというのを体験できる。

Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】

Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】

・わかりやすくていい、と聞いた本
立ち読みした感じだと【アプリ作成未経験の人向け】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

②を終えたくらいの知識の方向け
・アプリ開発独学中に2冊めに購入した書籍
プログラミング知識はなくても、若干理解するのに時間がかかる程度で、
読み進められるわかりやすさがある。

iPhoneアプリ開発塾

iPhoneアプリ開発塾

③中級者、上級者向け

詳解 Swift

詳解 Swift