Неопределенные символы для архитектуры i386: OBJC CLASS $ SKPSMTPMessage", ссылка из: ошибка
я импортировал базу для отправки электронной почты из приложения в фоновом режиме, т. е. 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
обновление:
ответ: просто перетащите папку над проектом и нажмите кнопку Копировать. Вот он установите флажок проект и целевой флажок, а также.
30 ответов:
вы можете получить этот тип ошибки, если вашего класса .файл m не указан на шаге "компиляция источников" вкладки "этапы сборки" вашего целевого объекта. Обычно Xcode делает это за вас, но иногда он теряет сюжет, и вам нужно добавить .файл M вручную.
для этого:
TargetSettings - > Build Phases - > Compile Sources - > add your .класс m - > построить и запустить
ваш фреймворк скомпилирован для armv (x)? Мне кажется, что он скомпилирован для i386, который код не будет работать на устройстве iOS. Или же он скомпилирован для armv (x), и вы пытаетесь запустить его на симуляторе, который является кодом i386. Убедитесь, что с помощью настроек сборки Akshay, показанных выше, что ваш фреймворк правильно скомпилирован для чипа, на котором вы собираетесь его запустить.
Если вы импортируете какой-либо другой проект в xcode, и если текущий и импортный проект имеют одинаковые файлы в источнике компилятора, то просто удалите один и тот же файл в текущем проекте в настройках "Build phase". Это сработало для меня.
Да, это связано с тем, что сказал Аллен... найдите TargetMembership в разделе Утилиты исходного файла. существует флажок, который связывает этот файл с проектом. Проверка этого решила эту проблему для меня тоже.
также может быть, что вам не хватает для связи с двоичной библиотекой, проверьте этапы сборки в ваших Targes добавьте необходимые библиотеки, а затем Продукт > Чистый Продукт > Построить
Это тоже должно сработать!
У меня была эта проблема, когда я дважды открывал один и тот же проект, только один проект был оригиналом, а другой был клонирован из url-адреса git.
'продукт' > 'чистый' решил проблему.
Я также встретил эту проблему, и я исправил ее, проверив, содержат ли как исходный код компиляции, так и двоичный файл ссылки с библиотекой все необходимые мне файлы/библиотеки/фреймворки.
когда я столкнулся с той же проблемой, это:
неопределенные символы для архитектуры i386:
_OBJC_CLASS_$_SKPSMTPMessage, ссылка из: objc-class-ref в ConfirmController.o
оказалось, что я просто забыл добавить рамки. Он был QuartzCore.рамки, если быть точным.
попробуйте это в последний раз:
поэтому я попробовал все предложения на этой странице.. никто не работал.. Моя проблема началась с того, что я выполнил шаги в этой учебник, который учит, как связать статические библиотеки. С моим образцом проекта инструкции работали нормально.. но затем на моем фактическом проекте я начал получать ошибку выше.
Так что я сделал, чтобы пройти через каждый шаг сказал учебник и построен после каждого шага.. обижая линия оказалась вот такой: добавление-all_load для построения настроек- > другие флаги компоновщика
оказывается, этот флаг был рекомендовано когда-то давно, чтобы связать категории со статическими библиотеками.. но тогда это получилось чтобы этот флаг больше не был нужен Xcode 4.2+.. (то же самое касается флага-force_load.. что также было рекомендовано в других посты)..
когда я столкнулся с той же проблемой, я забыл добавить "скомпилированную версию библиотеки(с расширением .ля.") Обычно мы добавляем библиотеку импортированного проекта в целевую зависимость на этапах сборки, но мы забываем добавить "скомпилированную библиотеку" в двоичный файл ссылки с библиотеками на этапах сборки.
добавление того, что работало для меня в случае, если другие имеют ту же проблему и в конечном итоге здесь. У меня был более старый проект, в котором для параметра CLANG_ENABLE_MODULES было установлено значение No. После нескольких часов разочарования я сравнил с рабочим проектом и обнаружил, что у меня есть модули Enable, установленные в no в моих настройках сборки LLVM. Установка этого значения да решила мою проблему, и приложение отлично строится.
настройки проекта - > настройки сборки - > поиск "модулей" и обновление включить модули (C и Objective-C) да.
Я не добавил "-all_load-lstdc++" к другим флагам компоновщика в настройках сборки, и я смог запустить sim-карту без ошибок, но я не получил вывод журнала MonkeyTalk при запуске, а предыдущий сценарий, который я написал, который использовался для подключения, теперь показал кнопку воспроизведения как отключенную. Выход MT IDE показал, что" соединение установлено на iOS Simulator", но не может выбрать кнопку run/play.
исходный проект имел "ObjC-all_load" в других флагах компоновщика и когда Я добавил "- all_load-lstdc++ " вместе с ним я получил сообщение об ошибке это сообщение о. Когда я удалил " ObjC-all_load "и только добавил"- all_load-lstdc++ " проект построен, но до сих пор не обезьяна talk log out поставить в качестве подтверждения в консоли
возможно, вы используете библиотеку, которая компилируется только для реального оборудования. Например, если вы используете библиотеку Bluetooth, такую как Zephyr HxM Smart, она, вероятно, не будет компилироваться на симуляторе и предназначена только для работы на реальных устройствах.
столкнулся с аналогичной проблемой с IOS 6. Удалось решить ее, добавив storekit.фреймворк для "связывания двоичного файла с библиотеками" в разделе этапы сборки.
теперь это работает как шарм.
У меня такая же проблема с 7 ошибками, когда я добавляю PSTCollectionviewcontroller .Одним из решений этой проблемы является проверка вашего "xcode --> build phases-->compile sources" здесь добавьте все ".m-файл. .Надеюсь вам этот пост поможет пользователям в будущем.
на моем, я использовал Cocoapods для проекта дополненной реальности, и я узнал, что когда вы реализуете cocoapods и открываете свой проект .рабочая область, вы в конечном итоге с целью проекта Xcode и те стручки целевой вы реализовали внутри того же файла. То, что происходило, было тем, что некоторые из них .м были использованы как. После того, как я удалил дублированные для цели Xcode на этапах сборки >> компиляции источников, он работал нормально.
Я обнаружил это очень вводящее в заблуждение сообщение при попытке перейти на новую библиотеку Google Analytics.
в моем случае проблема была ДВЕ КОНФЛИКТУЮЩИЕ КОПИИ библиотеки. Они были в разных папках, но оба были перечислены в пути сборки библиотеки моего приложения (в разделе параметры сборки).
перемещение всех устаревших файлов библиотеки из папки в конечном итоге делает трюк и сделал таинственные сообщения об ошибках уйти.
Я получил это сообщение, когда я перетащил некоторые исходные файлы из другого проекта. Когда я удалил их, а затем добавил их через "добавить файлы..."из меню "Файл", он построен без ошибок.
У меня была аналогичная ошибка с NSManagedObject, и это было потому, что я использовал основные данные, но отсутствовал каркас основных данных в фазах сборки - Link Binary с библиотеками, так как некоторые другие ответили
вы можете получить этот тип ошибки, если вы добавляете сторонние библиотеки в свой проект, которые требуют собственных фреймворков, не включенных в ваш проект.
вам нужно заглянуть внутрь .h и .m файлов вашей недавно добавленной библиотеки и посмотрите, какие фреймворки для нее требуются, а затем включите эти фреймворки в свой проект (цель > этапы сборки > связать двоичный файл с библиотеками).
Попробуйте удалить фреймворк, очистить проект, добавить его обратно и скомпилировать. Или Удалите класс, который был добавлен xcode в compile source, очистите проект, добавьте его обратно, а затем постройте.
помните, что вы можете поместить макрос в любой контроллер вида, который вызывает файлы, которые вы уже удалили.
приложение не будет показывать никаких ошибок, пока вы не создадите свое приложение, оно выдаст ошибку на этапе компиляции .o файлы.
Не забудьте удалить любой макрос, который вызывает файлы, которые вы уже удалили.
спасибо :)
в дополнение к тому, что сделал Аллан, добавив отсутствующие классы, я последовал решению @emdog4 и добавил библиотеку основных данных, перейдя к этапам сборки в Xcode и под "связью двоичных файлов с библиотеками", нажав на + и выбрав " CoreData.рамки". Это разобрало мою ошибку
в моем случае было немного иначе.
в заголовке префикса отсутствовало определение
#ifdef DEBUG # define TWDLog(fmt, ...) NSLog((@"\n%s\n" fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__) #else # define TWDLog(...) #endif
Так что ищите
PROJECTNAME-Prefix.pch
и проверить, если он имеет что-то отсутствует в обоих проектах