Undefined символы для архитектуры i386: _OBJC_CLASS _ $_ SKPSMTPMessage ", на которые ссылаются: ошибка

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

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

Обновление

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

Ответ 1

Вы можете получить этот тип ошибки, если файл .m файла вашего класса не указан в разделе "Источники компиляции" на вкладке "Сборка фаз" вашей цели. Обычно Xcode делает это для вас, но иногда он теряет сюжет, и вам нужно добавить файл .m вручную.

Для этого:

TargetSettings → Build Phases → Compile Sources → добавить ваш .m класс → Build and Run

Ответ 2

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

Ответ 3

Проверьте свойства Valid Architectures и Build Active Architecture.

enter image description here

Ответ 4

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

введите описание изображения здесь

Ответ 5

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

Ответ 6

Если вы импортируете какой-либо другой проект в xcode, и если текущий и импортированный проект имеют одинаковые файлы в источнике компилятора, то просто удалите тот же файл в текущем проекте в настройках "Фаза сборки". Это сработало для меня.

Ответ 7

Да, это связано с тем, что сказал allen... найдите раздел TargetMembership в утилитах исходного файла. есть флажок, который связывает этот файл с проектом. Проверка этого решена и для меня.

Ответ 8

Также может быть, что вам не хватает ссылки на бинарную библиотеку, проверьте, чтобы Build Phase в ваших Targes добавляли необходимые библиотеки, а затем Продукт > Очистить Продукт > Сборка

Это тоже должно работать!

Ответ 9

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

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

Ответ 10

попробуйте это последнее:

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

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

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

Ответ 11

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

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

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

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

Ответ 12

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

enter image description here

Ответ 13

Когда я столкнулся с той же проблемой, я забыл добавить "скомпилированную версию библиотеки (с расширением .a)". Обычно мы добавляем библиотеку импортированного проекта в Target Dependency в Build Phase, но мы забываем добавить "скомпилированную библиотеку" в Link Binary с библиотеками в фазах сборки.

Ответ 14

Добавление того, что сработало для меня, в случае, если другие имеют такую ​​же проблему и в конечном итоге здесь. У меня был более старый проект, у которого параметр CLANG_ENABLE_MODULES установлен на Нет. После нескольких часов разочарования я сравнил с рабочим проектом и обнаружил, что у меня есть Enable Modules, которые не установлены под моими настройками сборки LLVM. Установка этого параметра да решила мою проблему, и приложение прекрасно работает.

Настройки проекта → Настройки сборки → найдите "Модули" и обновите разрешенные модули (C и Objective-C) до "YES".

Ответ 15

Я не добавлял "-all_load -lstdС++" в Other Linker Flags в настройке сборки, и я смог запустить sim без ошибок, но я не получил выход журнала MonkeyTalk при запуске и предыдущий script, что я написал, что используемый для подключения теперь показал кнопку воспроизведения как отключенную. Выход MT IDE показал как "Connection set to iOS Simulator", но не смог выбрать кнопку запуска/воспроизведения.

Оригинальный проект имел "ObjC -all_load" в других флажках компоновщика, и когда я добавил "-all_load -lstdС++" вместе с ним, я получил сообщение об ошибке, о котором идет этот пост. Когда я удалял "ObjC -all_load" и добавлял только "-all_load -lstdС++" , проект был создан, но все же не было выхода из режима обезьяны в качестве подтверждения в консоли

Ответ 16

Возможно, вы используете библиотеку, которая компилируется только для аппаратного обеспечения REAL. Например, если вы используете библиотеку Bluetooth, такую ​​как Zephyr HxM Smart, она, вероятно, не будет компилироваться на симуляторе и предназначена только для работы на реальных устройствах.

Ответ 17

Включение аналогичной проблемы с IOS 6. Был в состоянии решить эту проблему, добавив storekit.framework в "Link Binary with Libraries" в разделе фаз сборки.

Теперь это работает как шарм.

Ответ 18

У меня такая же проблема с 7 ошибками, когда я добавляю PSTCollectionviewcontroller. Одним из решений этой проблемы является проверка ваших фаз "xcode → build → compile sources", здесь добавьте все ваши файлы ".m"..I надеюсь, что этот пост поможет пользователям в будущем.

Ответ 19

На моем, я использовал Cocoapods для проекта Augmented Reality, и я узнал, что когда вы реализуете cocoapods и открываете свой проект .workspace, вы получаете цель проекта Xcode, а те Pods, которые вы реализовали внутри одного и того же файл. Случилось то, что некоторые из них были использованы обоими. После того, как я удалил дублированные объекты для цели Xcode на этапах сборки → Скомпилировать источники, он работал нормально.

Ответ 20

Я обнаружил это ВЫСОКО ошибочное сообщение при попытке перейти на новую библиотеку Google Analytics.

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

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

Ответ 21

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

Ответ 22

Продукт = > Чистый помогло

Ответ 23

Ответ. Вы просто перетаскиваете папку по проекту и копируете.

Ответ 24

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

Ответ 25

У меня была аналогичная ошибка с NSManagedObject, и это было потому, что я использовал Core Data, но у меня отсутствовала базовая структура данных в Build Phases - Link Binary With Libraries, как некоторые другие ответили

Ответ 26

Вы можете получить этот тип ошибки, если в проект добавлены сторонние библиотеки, для которых не требуются собственные фреймворки, не включенные в ваш проект.

Вам нужно заглянуть внутрь .h и .m файлов вашей недавно добавленной библиотеки и посмотреть, какие фреймворки она потребует, а затем включить эти рамки в свой проект (Target > Build Phases > Link Binary With Libraries).

Ответ 27

Попробуйте удалить фреймворк, очистить проект, добавить его и скомпилировать. Или Удалите класс, который был добавлен xcode в исходный код компиляции, очистите проект, добавьте его обратно и затем выполните.

Ответ 28

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

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

Не забудьте удалить любой MACRO, вызывающий файлы, которые вы уже удалили.

Спасибо:)

Ответ 29

В дополнение к тому, что сделал Аллан, добавив отсутствующие классы, я последовал за решением @emdog4 и добавил библиотеку Core Data, перейдя на "Сформировать фазы в Xcode" и в "Link Binary with Libraries", щелкнув по значку + и выбрав "CoreData".фреймворк'. Это разобрало мою ошибку

Ответ 30

В моем случае это было немного иначе

В заголовке префикса был указан отсутствующий

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

Итак, найдите PROJECTNAME-Prefix.pch и проверьте, нет ли чего-то в обоих проектах