In any case, I decided to answer because the comments are not suitable due to the large amount of information that I want to share. Unfortunately, my answer, unfortunately, does not answer the question, but it gives some useful information about this unidentified, obviously capable of flying (physical object) :)
So this is the code how to capture it (and change it ???):
//you can use self.frame here...I just copied Alessandro code self.physicsWorld.enumerateBodies(in:(label?.frame)!) { body, stop in if let node = body.node { print("Type of this node: \(type(of:node))") print("Frame of this node: \(node.frame))") }else{ print("This body node property is nil") body.affectedByGravity = true body.isDynamic = true body.applyImpulse(CGVector(dx: 0.003, dy: 0.0003)) } print("Area covered by this node physicsBody: \(body.area)") }
So, if you set a breakpoint inside this else statement, you can completely scan this physical body and get all the information about it, for example, that the node property is set to nil or that the isDynamic property isDynamic set to false . But you can change this, and, as in my code, set the isDynamics example to true. This makes it movable. Therefore, if you apply any forces to it, it will move.
However, as I said in the comments, I have no idea why it is and what it represents or what its purpose is.
In addition, for those who are wondering how it is possible that one physical body does not have a node associated with it ( body.node equals nil ), but is still displayed on the screen when showsPhysics set to true , there is a reasonable explanation. The world of physics is separated from the node tree. Therefore, we can remove the sprite from the node tree, but this does not mean that its physical body will be immediately deleted. It may happen that the physics engine has not finished modeling ... So you probably wonder how this can happen?
Let's say you have three SKSpriteNode objects intersecting at the same time (for example, A contacts B and A contacts C at the same time). SpriteKit can only handle one contact per time. And say that you remove A from the parent when it contacts B. Then there is contact between A and C, so didBegin:(_ contact) will be called twice. And if you remove A from your parent on the first call to didBegin(_ contact) , the next call to didBegin(_ contact) bodyA.node will be nil ( bodyA is the physical body of sprite A), but its physical body will remain visible until the engine finishes what it takes. This is because the node tree and the world of physics are separate.