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

4 голосов
/ 10 ноября 2012

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

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

4 голосов
/ 21 марта 2012

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

3 голосов
/ 27 марта 2013

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

3 голосов
/ 09 сентября 2014

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

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

2 голосов
/ 09 апреля 2013

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

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

2 голосов
/ 07 октября 2013

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

1 голос
/ 25 апреля 2013

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

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

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

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

1 голос
/ 30 июня 2019

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

В настройки сборки >> изменить Сборка только для активной архитектуры на Да от НЕТ

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

enter image description here

1 голос
/ 06 ноября 2014

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

...