🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

1478閲覧

助けてください!xcode12.2 iphone機種判別が出来なくなりました。

instinct

総合スコア28

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

2クリップ

投稿2020/12/10 23:27

編集2020/12/11 05:41

プログラミング初心者です。xcode Version 12.2 を使用し、iOSのターゲットは10以降にしています。新しいアプリを作成しようと思い、create a new Xcode project → game → swift , SpriteKit と作成しました。GameViewController.swiftで

if let view = self.view as! SKView? { if let scene = GameScene(fileNamed: "GameScene") { if (UIScreen.main.nativeBounds.height == 2532.0) { print("iphone 12,iphone 12 pro") scene.scaleMode = .aspectFit scene.size = CGSize(width: 755, height: 1700) }

print("(UIScreen.main.nativeBounds.height)")

printで調べてみたら 1440.0という数字が返ってきて、調べてもわからない状態です。iphone6で調べたら960になりました。仮に iphone12のUIScreen.main.nativeBounds.height == 1440.0 でデバッグしてみた所、iphone12の判別はできたのですが、画面が縮小して表示されてしまいます。

原因と解決方法を教えていただきたいです。今までこのやり方で判別してきましたので、方法が間違っている事はないと思います。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/12/11 02:28 編集

ターゲットiOSは、14〜でしょうか?
instinct

2020/12/11 04:58

ターゲットは iOs10からにしています!
miyabi_takatsuk

2020/12/11 05:27

わかりました。 その旨を、質問本文にも記載お願いします。 また、iOS10なら、私の回答の方法が使えるのでは?と思われます。
instinct

2020/12/11 05:45

判別はできたのですが、画面が縮小されているのが気になります。 ストーリーボードは使用した事が無いのでわからないのですが、何か変更があったのかなと思っています。
guest

回答1

0

ベストアンサー

デバイスのスクリーンサイズで、うまくいかないのであれば、
(出力サイズが変動するのであれば)
デバイス固有名というのが存在するので、
それで判別した方がいいかもしれません。

以下サンプルです。

swift

1struct GetDeviceCode { 2 static func DeviceStr() -> String { 3 var size : Int = 0 4 sysctlbyname("hw.machine", nil, &size, nil, 0) 5 var machine = [CChar](repeating: 0, count: Int(size)) 6 sysctlbyname("hw.machine", &machine, &size, nil, 0) 7 let code: String = String(cString:machine) 8 9 print(code) 10 11 switch code { 12 case "i386","x86_64": 13 return "Simulator" 14 case "iPod1,1","iPod2,1","iPod3,1","iPod4,1","iPod5,1","iPod7,1": 15 return "iPod Touch" 16 case "iPhone3,3": 17 return "iPhone 4" 18 case "iPhone4,1": 19 return "iPhone 4S" 20 case "iPhone5,1","iPhone5,2": 21 return "iPhone 5" 22 case "iPhone5,3","iPhone5,4": 23 return "iPhone 5c" 24 case "iPhone6,1","iPhone6,2": 25 return "iPhone 5s" 26 case "iPhone7,1": 27 return "iPhone 6 Plus" 28 case "iPhone7,2": 29 return "iPhone 6" 30 case "iPhone8,1": 31 return "iPhone 6S" 32 case "iPhone8,2": 33 return "iPhone 6S Plus" 34 case "iPhone8,4": 35 return "iPhone SE" 36 case "iPhone9,1","iPhone9,3": 37 return "iPhone 7" 38 case "iPhone9,2","iPhone9,4": 39 return "iPhone 7 Plus" 40 case "iPhone10,1","iPhone10,4": 41 return "iPhone 8" 42 case "iPhone10,2","iPhone10,5": 43 return "iPhone 8 Plus" 44 case "iPhone10,3","iPhone10,6": 45 return "iPhone X" 46 case "iPhone11,8": 47 return "iPhone XR" 48 case "iPhone11,2": 49 return "iPhone XS" 50 case "iPhone11,4": 51 return "iPhone XS Max" 52 case "iPhone11,6": 53 return "iPhone XS Max" 54 case "iPhone12,1": 55 return "iPhone 11" 56 case "iPhone12,3": 57 return "iPhone 11 Pro" 58 59 default: 60 return code.contains("iPad") ? "iPad" : "none info" 61 } 62 } 63}

ここに、iPhone12系はありませんが、
まず、実機にて、どういった文字列が出力されるか確認し、switch構文のcaseに加えるといいでしょう。

投稿2020/12/11 02:34

miyabi_takatsuk

総合スコア9555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

instinct

2020/12/11 05:36

ありがとうございます。そんな方法もあるんですね。 あれから UIScreen.main.nativeBounds.height を2532 から1440.0 に変えた所、iphone12を判別する事が出来ました。ですが実機で表示してみた所、縮小して表示される事がわかりました。 いくら調べてもiphone12の UIScreen.main.nativeBounds.height は2532 なはずなので、何故か縮小されてしまっているようです。 if (UIScreen.main.nativeBounds.height == 2532.0) { print("iphone 12,iphone 12 pro") scene.scaleMode = .aspectFit scene.size = CGSize(width: 755, height: 1700) } 今まではこのやり方で画面サイズを調整していたのですが、デバッグすると縮小されて表示されてしまいます。何かわかる事があれば教えていただければ嬉しいです。
miyabi_takatsuk

2020/12/11 05:56

物理ピクセルと論理ピクセルが関わってきそうですね。 その変数に格納される論理ピクセルの基準が変わったのかもしれません。 物理ピクセルより、画面の論理ピクセル(iPhone 12の場合、横390pxのようです)の方が、仕様による変動は少ないので、その論理ピクセルで検知した方がいいかと思います。 iPhone 8〜11は、横375ですが、 縦幅の比率の違いはあるので、アスペクト比率で計算すると確実です。
instinct

2020/12/11 06:48

解決しました!!!! どのバージョンからかは解りませんが、LaunchScreenFileを設定しなくてはいけなくなったようです。 UIScreen.main.nativeBounds.height == 2532.0 でも判別出来るようになりました。 下記記事の通りです。 https://qiita.com/Sab_swiftlin/items/4f184c66477e291d4a0a
miyabi_takatsuk

2020/12/11 07:28

なるほど・・・。 私も勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問