okay , i think this was a bug on UE4.11 .
in file:\UnrealEngine\Engine\Source\Developer\Apple\MetalShaderFormat\Private\MetalShaderCompiler.cpp
line 368: FString Params = FString::Printf(TEXT("%s -Wno-null-character -ffmast-math %s -o %s"), Standard, *InputFilename, *ObjFilename);
Here is the argument ‘-ffmast’ , it should be ‘-ffast’ . And this have been fix in version 4.12 .