Ваш пример кода выглядит очень сложным и запутанным способом создания контроллера с разделенным видом, поэтому я просто рассмотрю более общий вопрос:
Мое приложение имеет несколько целей. В зависимости от выбранной цели (и через #ifdef ... в коде), я хотел бы указать другой файл XIB для RootViewController.
Если в вашем проекте определено несколько целей, вам не нужно #ifdef
s для этого. Намного проще использовать целевой механизм процесса сборки.
Допустим, у вас есть два ресурса, оба из которых называются «MyFunResource», но один вы хотите использовать в цели под названием «синий», другой - в одном, который называется «красный».
Добавьте оба ресурса в свой проект. Но в инспекторе файлов («Просмотр»> «Утилиты»> «Показать инспектор файлов») обратите внимание на раздел «Целевое членство». Обратите внимание, что все ваши цели перечислены там с флажками рядом с ними. При создании данной цели выбранный ресурс будет скопирован в пакет только в том случае, если здесь будет проверено имя этой цели.
Итак, выберите «MyFunResource», который вы хотите использовать в «красной» цели, и убедитесь, что «красная» - это единственная вещь с галочкой рядом с ней в «Target Memberships». Затем выберите тот, который вы хотите для "синий" и убедитесь, что только "синий" установлен.
Теперь, когда вы создаете красную цель, система сборки будет копировать только связанный с красным ресурс в пакет, поэтому волшебным образом красный ресурс - это то, что будет использоваться во время выполнения. И наоборот с синим. Нет кода или '# ifdef требуется.