Making the Cake: Preheat the oven to 350 degrees. Line three 8-inch cake pans with parchment paper and spray with non-stick baking spray.
In a medium bowl sift together the flours, baking powder and salt. Add the chopped coconut and mix until combined.
With your mixer, beat the shortening and butter at medium speed until creamy.
Add the sugar and egg yolks all at once and beat until incorporated, scraping down the sides as needed.
Combine the coconut milk and coconut extract. Add 3/4 cup dry ingredients and 1/2 cup milk mixture alternately to the creamed mixture beginning and ending with the dry ingredients. Beat on low speed after each addition to incorporate.
In a clean medium sized bowl, beat the egg whites until stiff peaks form. Using a spatula, gently fold the egg whites into the coconut batter until no streaks remain.
Divide the batter evenly among the prepared pans. Bake the pans on the center rack of the oven for 25-30 minutes.
Remove the pans from the oven and cool in the pans for 10 minutes. Invert the cakes onto a wire rack. Remove the parchment paper and cool completely.
Making the Frosting: In your mixing bowl, beat the cream cheese on high for 1 minute, until very creamy.
Reduce the speed to low and add the milk and coconut extract.
Add the powdered sugar 2 cups at a time, beating well after each addition. Add the final 1/2-1 cup of sugar and beat for 2 minutes on high.
The frosting should be stiff, but spreadable.
To Assemble: Frost the bottom layer–making a ridge with the frosting around the sides to hold in the cranberry puree’. Sprinkle on about 1/2 cup coconut.
Next add the cranberry puree’.
Place the next layer on and frost the top and sides.
Add the remaining 1 1/2 cups coconut to the top and sides.
Refrigerate a couple of hours or overnight before serving. Keep refrigerated.