My answer to these scope kinds of questions is to limit the declaration to the smallest scope needed.
If you only need the enum in your implementation, then put the declaration in the .m. If the enum is only needed with the interface, then put the declaration in the interface's .h. If the enum is needed by multiple independent interfaces, then I would resort to putting it in a global .h file.
I have two reasons for doing this. 1) Limiting scope reduces merging. 2) Limiting scope reduces the number of files effected by a change.
When all of your typedefs are in a single file, any time two developer updates any type, then one of them will have to merge on commit. I've dealt with enough errors created by bad merges in my life. I try to avoid them.
When you have a file that's included by every file in your program, then any change to that file will effect every file in your program. I've shipped production code that had bugs in modules that didn't have any commits. A change to a global include caused a problem that no one expected and no one tested for because it looked like the module was untouched.