【问题标题】:App crashes on iOS 8.1.3, can't reproduce issue应用程序在 iOS 8.1.3 上崩溃,无法重现问题
【发布时间】:2015-04-22 23:33:24
【问题描述】:

我最近向应用商店提交了一个应用(使用 swift 制作的 spritekit 游戏),但由于发现其中存在错误而被拒绝。苹果的确切回应是:

在通过 Wi-Fi 和蜂窝网络运行 iOS 8.1.3 的 iPad 上进行审查时,我们在您的应用中发现了一个或多个错误。 具体来说,应用程序加载到空白显示。有关详细信息,请参阅随附的屏幕截图。

我收到了一张空白屏幕截图(灰色),但这没有任何帮助。我无法重现该问题,因为该应用程序在我的 iPad (8.1.3) 上运行良好。有谁知道这可能是什么?我测试了发送给苹果的相同版本。

这是我的视图控制器代码:

    super.viewDidLoad()

    let scene:SKScene = GameScene()

        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = false
        skView.showsNodeCount = false

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .ResizeFill
        scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
        scene.size = skView.bounds.size

        skView.presentScene(scene)

}

override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> Int {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue)
    } else {
        return Int(UIInterfaceOrientationMask.All.rawValue)
    }
}

这是游戏第一个场景的一些代码(didMoveToView):

    authenticateLocalPlayer()

    //add background
    self.addChild(backgroundpic)

    //retrieve ad
    //loadAds()

    //get high score
    var accessPlayScene = PlayScene()
    var gameSceneHighScore = accessPlayScene.returnHighScore()
    //set background color
    backgroundColor = SKColor.blackColor()

    //add leaderboardbutton
    leaderBoardButton.position = CGPointMake((CGRectGetMidX(self.frame)), ((-1) * self.frame.size.height*0.27))
    self.addChild(leaderBoardButton)

    //add play button
    self.tutorialButton.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMaxY(self.frame)*(-0.05))
    self.addChild(self.tutorialButton)

    //add high score label
    gameSceneHighScoreLabel.fontColor = UIColor.redColor()
    gameSceneHighScoreLabel.position = CGPointMake(CGRectGetMidX(self.frame), (CGRectGetMaxY(self.frame)*0.75))
    gameSceneHighScoreLabel.text = "High Score: " + String(gameSceneHighScore)
    self.addChild(gameSceneHighScoreLabel)

    //add intro text
    self.appName.position = CGPointMake(CGRectGetMidX(self.frame),(CGRectGetMaxY(self.frame)*0.90))
    self.addChild(appName)

    //add tutorial button
    PLAYBUTTON.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame)*0.45)
    self.addChild(PLAYBUTTON)
}

感谢您的帮助

【问题讨论】:

  • "在 Wi-Fi 和蜂窝网络上运行 iOS 8.1.3" 这是否意味着您在应用启动时进行了某种网络连接?如果是这样,那就是问题所在。
  • 该应用程序使用 iAd,但这似乎工作正常。即使我从应用程序中取出 iAd 并重新提交,我也收到了同样的错误。

标签: ios xcode ipad swift crash


【解决方案1】:

我联系了应用审查,他们基本上说该应用在 iPad 和 iPhone 上运行良好。我不知道他们最初为什么或如何遇到这个问题。

【讨论】:

    【解决方案2】:

    只是一个猜测:视图的加载是否完全取决于 uikeyboard 是否可见? Apple 使用模拟器进行测试,如果他们没有启用软件键盘,那么这可能不会触发您的视图显示。在实际设备上,这绝不是问题。

    【讨论】:

    • 该视图最初会加载一个键盘以允许用户登录 Game Center,因此您可能会遇到一些问题,但该应用程序在我的模拟器中运行良好。问题在于 1. 不知道问题是什么 2. 无法重现错误。假设您是正确的,我将如何解决这个问题?
    • Command+K 打开和关闭软件键盘。当您想使用硬件键盘打字时,您禁用软件键盘,它会在模拟手机上消失。现在,如果您尝试在禁用软件键盘(并启用硬件键盘)的情况下运行应用程序,您的视图可能无法正确加载。 Apple 在禁用软件键盘的情况下进行测试,因为它允许他们使用硬件键盘输入您的应用程序。让我知道这是否会导致应用无法加载,我会告诉你如何处理 Apple。
    • 我关闭了软件键盘,应用程序在我的 iPad 模拟器中仍然运行良好。
    • 对不起,我刚刚意识到我有点不正确。 Command+K 打开和关闭软件键盘(这反过来可能会影响您的视图加载方式),但启用软件键盘并不一定会禁用您的硬件键盘。该命令是 Command+Shift+K
    • 好吧,还有其他事件会触发子视图的显示吗?我的观点是,这可能不是一个错误(如异常/崩溃),但实际上可能只是一个显示问题。您的子视图是否一开始隐藏,然后在某个时候淡入?
    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 2015-12-29
    • 2018-05-09
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2018-08-12
    • 2011-04-20
    相关资源
    最近更新 更多