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
и проверьте, нет ли чего-то в обоих проектах