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

ios objective-c iphone compiler-errors email-integration

252819 просмотра

30 ответа

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

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

Обновление :

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

Автор: Mann Источник Размещён: 12.11.2019 09:05

Ответы (30)


566 плюса

Решение

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

Сделать это:

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

Автор: Allen Pike Размещён: 24.02.2012 10:14

37 плюса

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

Автор: verma Размещён: 20.09.2012 12:44

28 плюса

Отметьте только свойства Действительная архитектура и Активная архитектура.

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

Автор: Akshay Размещён: 08.08.2011 03:40

17 плюса

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

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

Автор: Tim Размещён: 19.10.2015 08:57

10 плюса

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

Автор: Owen Hartnett Размещён: 08.08.2011 03:52

7 плюса

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

Автор: star18bit Размещён: 24.10.2012 03:49

4 плюса

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

Автор: yeahdixon Размещён: 20.03.2012 08:23

4 плюса

Также может быть, что вам не хватает ссылки на двоичную библиотеку, отметьте Фазы сборки в ваших тарифах, добавьте необходимые библиотеки, а затем выберите «Продукт»> «Чистый продукт»> «Сборка».

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

Автор: Gabriel Ramirez Размещён: 09.11.2012 11:37

4 плюса

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

«Продукт»> «Чистый» решил проблему.

Автор: kraftydevil Размещён: 03.01.2013 08:19

4 плюса

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

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

Автор: yujohnnyzhou Размещён: 08.02.2013 12:03

4 плюса

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

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

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

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

Автор: Mitch Viray Размещён: 16.01.2013 04:30

4 плюса

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

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

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

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

Автор: abbood Размещён: 07.01.2013 02:10

3 плюса

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

Автор: Balamurugan Размещён: 27.03.2013 12:25

3 плюса

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

Настройки проекта -> Настройки сборки -> найти «Модули» и обновить модули активации (C и Objective-C) до YES.

Автор: jlichti Размещён: 09.09.2014 07:31

2 плюса

Я не добавил «-all_load -lstdc ++» в другие флаги компоновщика в настройке сборки, и я смог запустить sim без ошибок, но я не получил вывод журнала MonkeyTalk при запуске и предыдущий сценарий, который я написал, который использовался для подключения теперь показывал кнопку воспроизведения как отключенную. Вывод MT IDE показывался как «Соединение установлено с iOS Simulator», но не мог выбрать кнопку «Run / Play».

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

Автор: Laser Hawk Размещён: 09.04.2013 06:11

2 плюса

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

Автор: DiscDev Размещён: 07.10.2013 07:41

1 плюс

Столкнулся с подобной проблемой с IOS 6. Был в состоянии решить ее, добавив storekit.framework к «Связать двоичные файлы с библиотеками» в разделе фаз сборки.

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

Автор: Troy Размещён: 07.01.2013 05:23

1 плюс

У меня та же проблема с 7 ошибками, когда я добавляю PSTCollectionviewcontroller. Единственное решение для этой проблемы - проверить ваши "xcode -> фазы сборки -> исходники компиляции", здесь добавьте все ваши ".m" файлы ... Я надеюсь, что это пост поможет пользователям в будущем.

Автор: Naveen Размещён: 25.04.2013 08:03

1 плюс

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

Автор: Joao Paulo Размещён: 03.02.2014 08:19

1 плюс

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

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

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

Автор: bkbeachlabs Размещён: 03.08.2014 04:11

1 плюс

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

Автор: Arpan Dixit Размещён: 16.08.2014 10:22

1 плюс

Продукт => Чистый сделал свое дело для меня

Автор: YogevSitton Размещён: 06.11.2014 10:06

1 плюс

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

В настройках сборки >> измените Build Active Architecture Only на Yes с NO

Это сработало для меня. Надеюсь, это поможет и другим.

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

Автор: Satish Mavani Размещён: 30.06.2019 02:22

0 плюса

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

Автор: Mann Размещён: 09.08.2011 09:53

0 плюса

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

Автор: RyeMAC3 Размещён: 07.07.2012 02:37

0 плюса

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

Автор: Sam Размещён: 17.07.2013 05:07

0 плюса

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

Вам нужно заглянуть в файлы .h и .m недавно добавленной библиотеки и посмотреть, какие фреймворки ей требуются, а затем включить эти фреймворки в ваш проект (Цель> Фазы сборки> Связать двоичные файлы с библиотеками).

Автор: Cosmin Размещён: 11.09.2013 02:55

0 плюса

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

Автор: Saif Размещён: 13.10.2013 08:16

0 плюса

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

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

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

Спасибо :)

Автор: Abo3atef Размещён: 21.01.2014 01:49

0 плюса

В дополнение к тому, что сделал Аллан, добавив недостающие классы, я последовал решению @ emdog4 и добавил библиотеку Core Data, перейдя в раздел «Фазы сборки в XCode» и в разделе «Связать двоичные файлы с библиотеками», щелкнув по + и выбрав «CoreData.framework». , В этом разобрался моя ошибка

Автор: malkoty Размещён: 11.03.2014 03:12
Вопросы из категории :
32x32