回答:
使用する UIApplication.openSettingsURLString
Swift 5.1のアップデート
override func viewDidAppear(_ animated: Bool) {
let alertController = UIAlertController (title: "Title", message: "Go to Settings?", preferredStyle: .alert)
let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in
guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else {
return
}
if UIApplication.shared.canOpenURL(settingsUrl) {
UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
print("Settings opened: \(success)") // Prints true
})
}
}
alertController.addAction(settingsAction)
let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
alertController.addAction(cancelAction)
present(alertController, animated: true, completion: nil)
}
Swift 4.2
override func viewDidAppear(_ animated: Bool) {
let alertController = UIAlertController (title: "Title", message: "Go to Settings?", preferredStyle: .alert)
let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in
guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else {
return
}
if UIApplication.shared.canOpenURL(settingsUrl) {
UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
print("Settings opened: \(success)") // Prints true
})
}
}
alertController.addAction(settingsAction)
let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
alertController.addAction(cancelAction)
present(alertController, animated: true, completion: nil)
}
viewDidAppear
メソッドのアラートを追加するためにSettings
、Cancel
ボタンを使用して回答を更新しました
UIApplication.sharedApplication().openURL(yourCustomURL)
し、現在のアプリからを呼び出す必要がありますが、設定アプリからのアクセス権がありません
⚠️注意してください!
この回答は文書化されていないAPIに基づいており、最近(iOS12以降)Appleはこのアプローチでアプリを拒否しています。
以下の元の答え
スウィフト5
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil)
スウィフト4
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: nil)
注:次のメソッドは、iOS 11より前のすべてのバージョンで機能します。それよりも高いバージョンの場合、アプリはプライベートAPIであるため拒否される可能性があります
ユーザーをアプリ設定以外の設定にしたい場合があります。次の方法は、それを達成するのに役立ちます。
まず、プロジェクトでURLスキームを構成します。[ターゲット]-> [情報]-> [URLスキーム]にあります。+ボタンをクリックして、URLスキームに設定を入力します
スウィフト5
UIApplication.shared.open(URL(string: "App-prefs:Bluetooth")!)
スウィフト3
UIApplication.shared.open(URL(string:"App-Prefs:root=General")!, options: [:], completionHandler: nil)
迅速
UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General")!)
Objective-C
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General"]];
そして以下は利用可能なすべてのURLです
** IOS <12 **
IOS 13の場合
アプリ設定:DO_NOT_DISTURB
未検証
App-prefs:TWITTER(??)
注:ネットワーク設定はシミュレーターで開かれませんが、リンクは実際のデバイスで機能します。
App-Prefs
代わりにprefs
を使用します。例App-Prefs:root=WIFI
App-Prefs
ないprefs:root
でください。これらはプライベートAPIであるため、非常に幸運でない限り、アプリは拒否されます。
iOS 8以降では、次のことができます。
func buttonClicked(sender:UIButton)
{
UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString))
}
スウィフト4
let settingsUrl = URL(string: UIApplicationOpenSettingsURLString)!
UIApplication.shared.open(settingsUrl)
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
URL(string: UIApplication.openSettingsURLString).map { UIApplication.shared.open($0, options: [:], completionHandler: nil) }
@vivekのヒントを使用して、Swift 3に基づくutilsクラスを開発しています。
import Foundation
import UIKit
public enum PreferenceType: String {
case about = "General&path=About"
case accessibility = "General&path=ACCESSIBILITY"
case airplaneMode = "AIRPLANE_MODE"
case autolock = "General&path=AUTOLOCK"
case cellularUsage = "General&path=USAGE/CELLULAR_USAGE"
case brightness = "Brightness"
case bluetooth = "Bluetooth"
case dateAndTime = "General&path=DATE_AND_TIME"
case facetime = "FACETIME"
case general = "General"
case keyboard = "General&path=Keyboard"
case castle = "CASTLE"
case storageAndBackup = "CASTLE&path=STORAGE_AND_BACKUP"
case international = "General&path=INTERNATIONAL"
case locationServices = "LOCATION_SERVICES"
case accountSettings = "ACCOUNT_SETTINGS"
case music = "MUSIC"
case equalizer = "MUSIC&path=EQ"
case volumeLimit = "MUSIC&path=VolumeLimit"
case network = "General&path=Network"
case nikePlusIPod = "NIKE_PLUS_IPOD"
case notes = "NOTES"
case notificationsId = "NOTIFICATIONS_ID"
case phone = "Phone"
case photos = "Photos"
case managedConfigurationList = "General&path=ManagedConfigurationList"
case reset = "General&path=Reset"
case ringtone = "Sounds&path=Ringtone"
case safari = "Safari"
case assistant = "General&path=Assistant"
case sounds = "Sounds"
case softwareUpdateLink = "General&path=SOFTWARE_UPDATE_LINK"
case store = "STORE"
case twitter = "TWITTER"
case facebook = "FACEBOOK"
case usage = "General&path=USAGE"
case video = "VIDEO"
case vpn = "General&path=Network/VPN"
case wallpaper = "Wallpaper"
case wifi = "WIFI"
case tethering = "INTERNET_TETHERING"
case blocked = "Phone&path=Blocked"
case doNotDisturb = "DO_NOT_DISTURB"
}
enum PreferenceExplorerError: Error {
case notFound(String)
}
open class PreferencesExplorer {
// MARK: - Class properties -
static private let preferencePath = "App-Prefs:root"
// MARK: - Class methods -
static func open(_ preferenceType: PreferenceType) throws {
let appPath = "\(PreferencesExplorer.preferencePath)=\(preferenceType.rawValue)"
if let url = URL(string: appPath) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
} else {
throw PreferenceExplorerError.notFound(appPath)
}
}
}
そのAPIは確実に変更されるので、これは非常に役立ちます。一度リファクタリングすると、非常に高速です。
アプリ固有のURLスキームからの最初の応答は、iOS 10.3で機能しました。
if let appSettings = URL(string: UIApplicationOpenSettingsURLString + Bundle.main.bundleIdentifier!) {
if UIApplication.shared.canOpenURL(appSettings) {
UIApplication.shared.open(appSettings)
}
}
App-Prefs:root=Privacy&path=LOCATION
一般的な場所の設定を取得するために私のために働いた。注:デバイスでのみ機能します。
ios10 /シミュレーターのXcode 8:
UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!)
働く
UIApplication.shared.openURL(URL(string:"prefs:root=General")!)
ではない。
NS
接頭辞は、iOS 10で削除されていますか?
私はこのコード行を見ました
UIApplication.sharedApplication() .openURL(NSURL(string:"prefs:root=General")!)
機能していません、それは私にとってios10 / Xcode 8では機能しませんでした。わずかなコードの違いです。これを
UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=General")!)
Swift3
UIApplication.shared.openURL(URL(string:"prefs:root=General")!)
と置換する
UIApplication.shared.openURL(URL(string:"App-Prefs:root=General")!)
それが役に立てば幸い。乾杯。
警告:prefs:root
またはまたはApp-Prefs:root
URLスキームはプライベートAPIと見なされます。これらを使用すると、Appleがアプリを拒否する場合があります。アプリを送信すると、次のようになります。
アプリは、プライベートエンティティである "prefs:root ="非パブリックURLスキームを使用します。App Storeで非公開APIを使用することは許可されていません。これらのAPIが変更された場合、ユーザーエクスペリエンスが低下する可能性があるためです。このアプリの今後の送信で非公開APIを引き続き使用または非表示にすると、Apple Developerアカウントが終了するだけでなく、関連するすべてのアプリがApp Storeから削除される場合があります。
次のステップ
この問題を解決するには、パブリックAPIを使用して関連機能を提供するようにアプリを修正するか、「prefs:root」または「App-Prefs:root」URLスキームを使用して機能を削除してください。
アプリに必要な機能を提供する代替手段がない場合は、機能強化リクエストを提出できます。
Swift 4.2、iOS 12
open(url:options:completionHandler:)
この方法は、この記事のよう唯一のタイプの一つの可能なオプションが含まれnil以外のオプション辞書、含むように更新されていますUIApplication.OpenExternalURLOptionsKey
(例では)。
@objc func openAppSpecificSettings() {
guard let url = URL(string: UIApplication.openSettingsURLString),
UIApplication.shared.canOpenURL(url) else {
return
}
let optionsKeyDictionary = [UIApplication.OpenExternalURLOptionsKey(rawValue: "universalLinksOnly"): NSNumber(value: true)]
UIApplication.shared.open(url, options: optionsKeyDictionary, completionHandler: nil)
}
「App-Prefs」などを使用してURLを明示的に構築すると、一部のアプリがストアから拒否されました。
@Luca Davanzoに追加
iOS 11、一部の権限設定はアプリパスに移動しました:
iOS 11のサポート
static func open(_ preferenceType: PreferenceType) throws {
var preferencePath: String
if #available(iOS 11.0, *), preferenceType == .video || preferenceType == .locationServices || preferenceType == .photos {
preferencePath = UIApplicationOpenSettingsURLString
} else {
preferencePath = "\(PreferencesExplorer.preferencePath)=\(preferenceType.rawValue)"
}
if let url = URL(string: preferencePath) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
} else {
throw PreferenceExplorerError.notFound(preferencePath)
}
}
SWIFT 4
これがあなたが探しているものなら、これはあなたのアプリの特定の設定を取るかもしれません。
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)