Did Begin is never called

Hello!

I am trying to figure out how to detect a collision, but no matter what I do, it seems to not want to work(Using didBegin). I have used multiple resources to no avail and im so close to banging my head against the wall lol. Im hoping someone can Identify what im doing wrong with it. I'll attach my class for you :)

Thank you for any help!

Code Block //
//  GameView.swift
//  DogeBall
//
//  Created by James Biser on 2/21/21.
//
import UIKit
import SpriteKit
import SceneKit
import QuartzCore
import CoreMotion
class GameView: UIViewController, SKSceneDelegate, SKPhysicsContactDelegate {
    
    @IBOutlet var gameView: UIView!
    @IBOutlet weak var pointsLabel: UILabel!
    @IBOutlet weak var livesLeftLabel: UILabel!
    
    
    let player = SKSpriteNode(imageNamed: "gameElement.png")
    let goal = SKSpriteNode(imageNamed: "goal.png")
    var motionManager = CMMotionManager()
    var destX:CGFloat  = 0.0
    var destY : CGFloat = 0.0
    @IBOutlet weak var SKGameView: SKView!
    
    var scene = SKScene()
    var toggle = true
    
    
    override func viewDidLoad() {
        // self.navigationController?.isNavigationBarHidden = true
        scene.size =  gameView.bounds.size
        scene.scaleMode = .aspectFill
         SKGameView.presentScene(scene)
         SKGameView.showsFPS = true
         SKGameView.showsNodeCount = true
         SKGameView.showsPhysics = true
         
         
         
         player.position = CGPoint(x: SKGameView.frame.size.width/2, y: SKGameView.frame.size.height/2)
         player.physicsBody = SKPhysicsBody(circleOfRadius: player.size.width / 2.0)
         player.physicsBody?.affectedByGravity = false
         player.physicsBody!.contactTestBitMask = 0
         player.physicsBody?.collisionBitMask = 0
         
       //  goal.position = spawnGoalAtRandom()
         goal.physicsBody = SKPhysicsBody(circleOfRadius: goal.size.width / 2.0)
        goal.position = CGPoint(x: SKGameView.frame.size.width/2+9, y: SKGameView.frame.size.height/2+9)
         goal.physicsBody?.affectedByGravity = false
         goal.physicsBody!.contactTestBitMask = 0
         goal.physicsBody!.collisionBitMask = 0
         goal.physicsBody?.usesPreciseCollisionDetection = true
         player.physicsBody?.usesPreciseCollisionDetection = true
         
        scene.addChild(goal)
        scene.addChild(player)
         motionManager.startAccelerometerUpdates()
        
        startAccelerometers()
    }
    func didBeginContact(contact : SKPhysicsContact){
        print("cool")
    }
    
    func update(_ currentTime: TimeInterval, for scene: SKScene) {
        print("update frame")
    }
    func spawnGoalAtRandom() -> CGPoint{
        let height = self.scene.frame.height
        let width = self.scene.frame.width
        let randomPosition = CGPoint(x: CGFloat(arc4random()).truncatingRemainder(dividingBy: height) - 10 , y: CGFloat(arc4random()).truncatingRemainder(dividingBy: width) - 10)
      
        return randomPosition
    }
    
    var isTouched = false
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let touch = touches.first {
            if player.contains(touch.location(in: scene)) {
                isTouched = true
            }
        }
    }
    
    
    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        if (isTouched == true) {
            player.position = (touches.first?.location(in: scene))!
        }
    }
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        if isTouched {
            isTouched = false
        }
    }
    
    var timer = Timer()
    
    func startAccelerometers() {
       // Make sure the accelerometer hardware is available.
       if self.motionManager.isAccelerometerAvailable {
          self.motionManager.accelerometerUpdateInterval = 1.0 / 60.0  // 60 Hz
          self.motionManager.startAccelerometerUpdates()
          // Configure a timer to fetch the data.
          self.timer = Timer(fire: Date(), interval: (1.0/60.0),
                repeats: true, block: { (timer) in
             // Get the accelerometer data.
             if let data = self.motionManager.accelerometerData {
                let x = data.acceleration.x
                let y = data.acceleration.y
                let z = data.acceleration.z
              
                self.didMove()
                self.update()
             }
          })
          // Add the timer to the current run loop.
        RunLoop.current.add(self.timer, forMode: .default)
       }
    }
    
    
     func didMove() {
           
        if motionManager.isAccelerometerAvailable {
            // 2
            motionManager.accelerometerUpdateInterval = 0.01
            motionManager.startAccelerometerUpdates(to: .main) {
                (data, error) in
                guard let data = data, error == nil else {
                    return
                }
                // 3
                let currentX = self.player.position.x
                let currentY = self.player.position.y
                self.destX = currentX + CGFloat(data.acceleration.x * 500)
                self.destY = currentY + CGFloat(data.acceleration.y*500)
            }
        }
    }
    func update() {
        if toggle {
            let action = SKAction.moveTo(x: destX, duration: 1)
            let action2 = SKAction.moveTo(y: destY, duration: 1)
            player.run(action)
            player.run(action2)
            
            if !scene.frame.contains(player.position) {
                
                self.player.position = CGPoint(x: SKGameView.frame.size.width/2, y: SKGameView.frame.size.height/2)
                
                // self.navigationController?.present(ac, animated: true, completion: nil)
            }
            
            if player.contains(goal) {
                print("work")
            }
            
        }
    }
    
//Never gets called
    func didBegin(_ contact: SKPhysicsContact) {
         print("asdas")
    }
}


Hello,

I'm not seeing in your snippet here where you are setting the contactDelegate property of your SKScene's physicsWorld. You need to set this delegate to your GameView object (self), otherwise the delegate methods will never be called.
Did Begin is never called
 
 
Q