SpriteKitでiPad対応のリジェクトを避ける方法
Appleにアプリを提出すると、お決まりのように喰らうのがリジェクトです。リジェクト、ようは審査落ちです。お前のアプリなんか認めんぞ!!ってことを言われるわけですね。ああ、つらい。
んで、僕もご多分に漏れずそこそこリジェクトを喰らったことがあるんですけど、その中のひとつにiPad対応があります。iPadから見たときのレイアウトが汚いって理由で、リジェクトされるんですよ。
それもそのはず、僕はiPadへの対応を捨てています。なぜなら、iPhoneとiPadでは、画面の比率が違うから。極端に言うと、iPhoneは長方形で、iPadは正方形なんですよね。だから同じようなレイアウトにするのが難しい、てことで諦めた次第です。
とりあえずリジェクトはされたくない
当たり前のことなんですが、誰でもリジェクトされるのは嫌でしょう。だってそれだとせっかく作った自分のアプリが、世に出ないってことですからね。ここはなんとしてもリジェクトを免れたいところです。
僕も上記したようにiPad対応を諦めてるんですが、リジェクトだけは避けようと、いつも努力しています。
書くのが遅くなりましたけど、自分の場合、SpriteKitを使ってるっていうのが大きいかもしれません。なんかまだ上手く使いこなせてないんで、iPadへの対応が上手く出来ないんですよね。普通のストーリーボードなら、リジェクトを回避するくらいは出来るんですが、SpriteKitだと四苦八苦するって感じです。
普段書いてるコードはこれ
僕のSpriteKitの知識は、そのほとんどがiPhoneのゲームアプリをつくろう!って本から来ています。んで、この本に書いてある画面サイズのコードっていうのがこれ。
override func viewDidLoad() {
super.viewDidLoad()
let scene = GameScene(size:CGSize(width: 750, height: 1334))
let skView = self.view as! SKView
scene.scaleMode = .AspectFit
skView.presentScene(scene)
}
ようは最初に750*1334(iPhone6)の画面を作って、そこに合わせてくわけですね。んで、他のページはAspectFitで対応していきます。
AspectFitが審査落ちの原因になる
AspectFitって、画面の比率そのままに、画面一杯に広げるってやつなんですが、これだとダメなんですよ。iPadで見たときに左右に黒い帯が入るって理由でリジェクトされます。これはiPhoneとiPadの比率の差から来るものですね。AspectFitを使う限り、必ずこの帯は出るでしょう。
AspectFillでもダメ
一度なんとなくAspectFillに変えてたことがあったんですけど、これでもダメなんですよね。AspectFillはとにかく画面一杯に広げるってやつなんで、左右の帯は出なくなるんですが、その分上下の画像が削られます。見えなくなるんです。
とりあえずの結論はこれ
とりあえず現時点での僕の結論はこれです。AspectFitもAspectFillも使わないって方法ですね。なんか教科書に載ってたから使いたくなるんですが、これiPadへの対応を捨てれば、使わなくても大丈夫です。
override func viewDidLoad() {
super.viewDidLoad()
let scene = GameScene(size:CGSize(width: 750, height: 1334))
let skView = self.view as! SKView
scene.scaleMode = .AspectFit
skView.presentScene(scene)
}
赤字になってるところを消せばOK。んであとは画面遷移するときにも使わないんです。AspectFitとAspectFillは一切使わななければ、比率こそおかしくなるものの、リジェクトはされません。
750*1334で作る場合、iPhone5、6、Plusへの対応はバッチリです。これは画面の比率が大体同じだから。
僕はこれらにだけ対応しようと思ってるので、今は上記の方法を採用してる次第です。