В вашем коде используется символ, которого нет в библиотеках, доступных на устройстве, в то время как он доступен на симуляторе.
Если вы осмотрите свой проект, вы обнаружите, что «цель развертывания» (скажем, 3.1.3) установлена на что-то отличное от вашего «базового SDK» (скажем, 4.0). Это означает, что в коде вам разрешено использовать все символы, доступные для базового SDK (и симулятор предоставит эту среду или тот, который вы выберете среди доступных SDK во всплывающем меню Xcode), но когда вы включены устройство, которое вы могли бы использовать «цель развертывания», которое старше и не имеет этого символа.
Либо вы используете более новый базовый SDK (если это приемлемо для вас), либо вы используете условную компиляцию, чтобы избежать использования символов, недоступных на старых устройствах.
Посмотрите также на это С.О. статья .