Check your collisionBitMasks. By default they are set to 0xFFFFFFFF (node will collide with all the other nodes). However, if you want to explicitly set the collisions, you should set your masks something like this:
static const uint32_t kBoundariesCat = (0x01 << 0); // 0001
static const uint32_t kBreakerCat = (0x01 << 1); // 0010
static const uint32_t kBlockCat = (0x01 << 2); // 0100
static const uint32_t kBoundariesCatCollisionMask = kBreakerCat | kBlockCat; // 0110
static const uint32_t kBreakerCatCollisionMask = kBoundariesCat | kBlockCat; // 0101
static const uint32_t kBlockCatCollisionMask = kBoundariesCat | kBreakerCat; // 0011
boundariesCat.physicsBody.categoryBitMask = kBoundariesCat;
boundariesCat.physicsBody.collisionBitMask = kBoundariesCatCollisionMask;
breakerCat.physicsBody.categoryBitMask = kBreakerCat;
breakerCat.physicsBody.collisionBitMask = kBreakerCatCollisionMask;
breakerCat.physicsBody.categoryBitMask = blockCat;
breakerCat.physicsBody.collisionBitMask = kBlockCatCollisionMask;
Also, if you want to enable contact handlers, you set the contactTestBitMasks:
static const uint32_t kBoundariesCatContactMask = kBreakerCat | kBlockCat;
static const uint32_t kBreakerCatContactMask = kBoundariesCat | kBlockCat;
static const uint32_t kBlockCatContactMask = kBoundariesCat | kBreakerCat;
boundariesCat.physicsBody.contactTestBitMask = kBoundariesCatContactMask;
breakerCat.physicsBody.contactTestBitMask = kBreakerCatContactMask;
breakerCat.physicsBody.contactTestBitMask = kBlockCatContactMask;