Неопределенные символы для архитектуры i386: _OBJC_CLASS _ $ _ SKPSMTPMessage ", ссылка из: error - PullRequest
233 голосов
/ 08 августа 2011

Я импортировал фреймворк для отправки электронной почты из приложения в фоновом режиме, т.е. SKPSMTPMessage Фреймворк. Может кто-нибудь подсказать, почему ниже показана ошибка

Undefined symbols for architecture i386:

"_OBJC_CLASS_$_SKPSMTPMessage", referenced from:
  objc-class-ref in ConfirmController.o

"_kSKPSMTPPartContentTransferEncodingKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

"_kSKPSMTPPartMessageKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

"_kSKPSMTPPartContentTypeKey", referenced from:
  -[ConfirmController sendEmail] in ConfirmController.o

ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

Источник, из которого взяты рамки: -

Блокировка полей в MFMailComposeViewController

Обновление

Ответ. Просто перетащите папку над проектом и нажмите «Копировать». Вот он и выбирает флажок проекта и целевой флажок.

Ответы [ 34 ]

566 голосов
/ 25 февраля 2012

Вы можете получить этот тип ошибки, если файл .m вашего класса не указан на шаге «Компиляция источников» на вкладке «Фазы сборки» вашей цели. Обычно XCode делает это за вас, но иногда он теряет график, и вам нужно добавить файл .m вручную.

Для этого:

TargetSettings -> Фазы сборки -> Исходники компиляции -> добавьте свой класс .m -> Построить и запустить

37 голосов
/ 20 сентября 2012

для меня проблема оказалась в отсутствии фреймворков.Как только я добавил их, это сработало.

28 голосов
/ 08 августа 2011

Отметьте только свойства Valid Architects и Build Active Architecture.

enter image description here

17 голосов
/ 19 октября 2015

, если вы используете cocoapods, убедитесь, что настройки сборки вашей цели содержат $ (унаследовано) в других флагах компоновщика раздел

enter image description here

10 голосов
/ 08 августа 2011

Ваш каркас скомпилирован для armv (x)?Мне кажется, что он скомпилирован для i386, код которого не будет работать на устройстве iOS.Или же он скомпилирован для armv (x), и вы пытаетесь запустить его на симуляторе, который является кодом i386.Убедитесь, что с помощью настроек сборки Akshay, показанных выше, ваш фреймворк правильно скомпилирован для чипа, на котором вы собираетесь его запускать.

7 голосов
/ 24 октября 2012

Если вы импортируете какой-то другой проект в xcode и если текущий и импортируемый проекты имеют одинаковые файлы в исходном коде компилятора, просто удалите один и тот же файл в текущем проекте в настройках «Build phase». Это сработало для меня.

4 голосов
/ 04 января 2013

У меня была эта проблема, когда я дважды открывал один и тот же проект, только один проект был оригиналом, а другой был клонирован из URL-адреса git.

'Product'> 'Clean' решил проблему.

4 голосов
/ 08 февраля 2013

Я также столкнулся с этой проблемой и исправил ее, проверив, содержит ли исходный файл компиляции и двоичный файл с библиотекой все необходимые мне файлы / библиотеки / рамки.

enter image description here

4 голосов
/ 16 января 2013

Когда я столкнулся с той же проблемой, что и эта:

Неопределенные символы для архитектуры i386:

_OBJC_CLASS _ $ _ SKPSMTPMessage, на которое ссылается: objc-class-ref в ConfirmController.o

Оказалось, что я просто забыл добавить рамки. Это была QuartzCore.framework, если быть точным.

4 голосов
/ 07 января 2013

попробуйте это в последний раз:

, поэтому я попробовал все предложения на этой странице .. ни один не сработал .. Моя проблема началась с того, что я следовал инструкциям этого учебника, который учиткак связать статические библиотеки.С моим примером проекта инструкции работали нормально ... но затем на моем реальном проекте я начал получать ошибку выше.

Итак, я прошел каждый шаг указанного урока и собрал его после каждого шага. Получившаяся строка оказалась следующей: добавив -all_load для сборкиsettings-> другие флаги компоновщика

оказывается, этот флаг рекомендовано когда-то давно для привязки категорий к статическим библиотекам ... но потом получилось что этот флаг больше не был необходим Xcode 4.2+ .. (то же самое касается флага -force_load .., который также рекомендовался в других posts ) ..

...