[解決済み] iOSのバージョンを確認する方法を教えてください。
質問
を確認したい。
iOS
バージョンより大きい
3.1.3
などと試してみました。
[[UIDevice currentDevice].systemVersion floatValue]
が、うまくいかないので、aが欲しいだけです。
if (version > 3.1.3) { }
どうすれば実現できるのでしょうか?
どのように解決するのですか?
クイックアンサー ...
Swift 2.0の時点では、以下のように
#available
の中に
if
または
guard
を使用して、特定のシステムでのみ実行されるべきコードを保護します。
if #available(iOS 9, *) {}
Objective-Cでは、システムのバージョンを確認し、比較を実行する必要があります。
[[NSProcessInfo processInfo] operatingSystemVersion]
をiOS 8以降で使用する場合。
Xcode 9時点。
if (@available(iOS 9, *)) {}
フルアンサー ...
Objective-C、そしてまれにSwiftでは、デバイスやOSの能力を示すものとして、オペレーティングシステムのバージョンに依存することは避けた方がよいでしょう。 特定の機能またはクラスが利用可能かどうかを確認するために、通常、より信頼性の高い方法があります。
APIの存在を確認する。
例えば、以下のようなチェックが可能です。
UIPopoverController
を使用して、現在のデバイスで利用可能です。
NSClassFromString
:
if (NSClassFromString(@"UIPopoverController")) {
// Do something
}
弱くリンクされたクラスについては、直接メッセージを送っても安全です。特に、これは "Required" として明示的にリンクされていないフレームワークのために動作します。見つからないクラスについては、式は nil と評価され、条件に失敗します。
if ([LAContext class]) {
// Do something
}
のようなクラスもあります。
CLLocationManager
と
UIDevice
は、デバイスの能力を確認するためのメソッドを提供する。
if ([CLLocationManager headingAvailable]) {
// Do something
}
シンボルがあるかどうかをチェックする。
ごくたまに、定数の存在を確認する必要があります。これは iOS 8 で導入された
UIApplicationOpenSettingsURLString
を介して設定アプリをロードするために使用されます。
-openURL:
. この値はiOS 8以前には存在しません。このAPIにnilを渡すとクラッシュするので、最初に定数の存在を確認するように気をつけなければなりません。
if (&UIApplicationOpenSettingsURLString != NULL) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
オペレーティングシステムのバージョンと比較する。
比較的稀なケースとして、OSのバージョンを確認する必要がある場合を考えてみましょう。iOS 8以上を対象とするプロジェクトの場合。
NSProcessInfo
には、エラーの可能性を低くしてバージョン比較を実行する方法が含まれています。
- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version
古いシステムを対象とするプロジェクトでは
systemVersion
で
UIDevice
. Appleはこれを
GLSprite
のサンプルコードです。
// A system version of 3.1 or greater is required to use CADisplayLink. The NSTimer
// class is used as fallback when it isn't available.
NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
displayLinkSupported = TRUE;
}
もし、何らかの理由で
systemVersion
を文字列として扱わないと、パッチのリビジョン番号を切り捨ててしまう危険性があります (例: 3.1.2 -> 3.1)。
関連
-
[解決済み] デバイスがiOSであるかどうかを検出する
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み] iphoneアプリのベータテストはどのように行うのですか?
-
[解決済み] iOSで現在のデバイスの言語を取得するには?
-
[解決済み】Xcodeのプロセス起動に失敗しました。セキュリティ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] Objective-Cで文字列が空かどうかをテストするにはどうすればよいですか?
-
[解決済み] iOS Simulatorでネットワークを無効にすることは可能ですか?
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み】デバイスがどのiOSバージョンで動作しているかをプログラムで検出するにはどうすればよいですか?重複