How can I trap to the debugger and continue on iOS hardware?

Apple's libc signal.h includes XNU's sys/signal.h, which does define SIGINT (on all platforms):

// [...]

#define SIGHUP  1   /* hangup */
#define SIGINT  2   /* interrupt */
#define SIGQUIT 3   /* quit */
// [...]

So while I cannot confirm that this practice does indeed work (due to lack of an iOS 9 device on my part), the barrier that held you back should not actually be a problem.

As for the assembly instructions, BKPT is a valid ARM instruction, though only for A32. The A64 variant is called BRK.
If you're building fat binaries and use either of those unconditionally, you will always run into compiler error.

Also note that both instructions require an immediate value (which is passed to the debugger). Omitting that value will produce a compiler error as well.

That said, you should be able to insert debug instructions for A32 and A64 with a simple #ifdef:

#ifdef __aarch64__
asm volatile("BRK 0");
#else
asm volatile("BKPT 0");
#endif

You can substitute 0 by any value of your choosing between 0 and 255.

A note on the TRAP instruction: While Apple's assembler seems to accept this instruction for A32 and translates it to 0xe7ffdefe, it will issue an "unrecognized instruction mnemonic" on A64, analogous to the BKPT instruction.
I was also unable to find any reference to the instruction on the ARM Information Center or in Apple's documentation.