Неопределенные символы для архитектуры 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 ]

1 голос
/ 16 августа 2014

Убедитесь, что все ресурсы вашего пакета скопированы на этапе сборки.

1 голос
/ 04 февраля 2014

Что касается меня, то я использовал Cocoapods для проекта дополненной реальности, и я обнаружил, что когда вы реализуете cocoapods и открываете .workspace вашего проекта, вы в конечном итоге получаете цель проекта Xcode и те цели Pod, которые вы реализовали внутри того же самогофайл.То, что происходило, было то, что некоторые из .m использовались обоими.После того, как я удалил дублированные из них для цели XCode в Фазах сборки >> Компиляция источников, она работала нормально.

1 голос
/ 03 августа 2014

Я обнаружил это ОЧЕНЬ вводящее в заблуждение сообщение при попытке перейти на новую библиотеку Google Analytics.

В моем случае проблема заключалась в том, что ДВУХ КОНФЛИКТНЫХ КОПИЙ библиотеки. Они были в разных папках, но оба они были указаны в путях сборки библиотеки моего приложения (в разделе «Настройки сборки»).

Перемещение всех устаревших библиотечных файлов из папки в итоге выполнило трюк и заставило загадочные сообщения об ошибках исчезнуть.

0 голосов
/ 17 июля 2013

У меня была похожая ошибка с NSManagedObject, и это было потому, что я использовал Базовые Данные, но пропускал Базовую платформу Данных в Фазах сборки - Соединение двоичных данных с библиотеками, как некоторые другие ответили

0 голосов
/ 09 марта 2017

Ни один из приведенных выше ответов не решил мою проблему. Я получил эту же ошибку, когда после обновления XCode до 8 я перешел на Target -> Этапы сборки -> Двоичные ссылки с библиотеками и удалил структура, которая вызвала проблему и повторно добавила ее, и все ошибки исчезли. Надеюсь, что это поможет другим. enter image description here

0 голосов
/ 09 августа 2011

Ответ - вы просто перетащите папку над проектом и нажмите кнопку «Копировать».

0 голосов
/ 28 декабря 2014

В моем случае обновление модуля не обновляло проект каким-либо образом.Поэтому мне пришлось сделать это самому, добавив MBProgressHud к OtherLinkerFlags.

enter image description here

0 голосов
/ 14 ноября 2014

У меня такая же проблема.И я добавляю 2 фреймворка, которые мне нужны для фаз сборки.Надеюсь, это поможет!symbol(s) not found for architecture i386

0 голосов
/ 07 июля 2012

Я получил это сообщение, когда перетаскивал некоторые исходные файлы из другого проекта. Когда я удалил их, а затем добавил их через «Добавить файлы ...» из меню «Файл», он был построен без ошибок.

0 голосов
/ 27 июня 2014

В моем случае это было немного по-другому

В заголовке префикса отсутствовало определение

#ifdef DEBUG
#   define TWDLog(fmt, ...) NSLog((@"\n%s\n" fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__)
#else
#   define TWDLog(...)
#endif

Так что ищите PROJECTNAME-Prefix.pch и проверяйте, есть ли что-то, что отсутствует в обоихпроекты

...