Dyld: Символ не найден: _NSURLAuthenticationMethodClientCertificate при попытке запустить приложение iOS
Мое приложение разбивается с сообщением:
dyld: Символ не найден: _NSURLAuthenticationMethodClientCertificate
Ссылка из: /VAR/ мобильные/Применения/C7B596AD-FB09-4685-BDFC-7E955A5DD185/ЖЕЛЕЗА TRAINERS.app/IRON TRAINERS Ожидается в: /System/Library/Frameworks/CFNetwork.framework/CFNetwork в /VAR/ мобильные/Применения/C7B596AD-FB09-4685-BDFC-7E955A5DD185/ЖЕЛЕЗА TRAINERS.app/IRON TRAINERS (lldb)
когда я пытаюсь создать и запустить. Когда я удаляю CFNetwork из моего проекта, он работает, я не знаю, почему.
Я только что установил Xcode6Beta и открыл свой проект. Он отлично работал на Xcode5.1.
UPDATE:
Он отлично работает на iOS-симуляторе с Xcode 6, проблема в моем устройстве iOS 7.1.1.
ОБНОВЛЕНИЕ 2:
Выбранный ответ ниже работал у меня, хотя я уже использовал базовую структуру, добавленную в мой проект, мне пришлось удалить ее и добавить ее снова. Проблема решена, по крайней мере, пока.:)
Ответы
Ответ 1
Отредактировано для включения двух возможных шагов, которые необходимо предпринять:
- Убедитесь, что у вас есть Foundation framework для вашего проекта. (Удалить
и добавьте его снова, чтобы убедиться).
- Убедитесь, что фреймворк Foundation включен в CFNetwork.
Кажется, что изменения в заголовках включают то, что в iOS8.0 (файл glextensions, например, больше не находится в верхнем заголовке). Если вы явно добавите фреймворк Foundation в свой проект, он будет прекрасно работать. Предоставление CFNetwork необязательно, конечно, приведет к сбоям и является лишь решением для ошибки построения, а не для решения в целом.
![enter image description here]()
Ответ 2
У меня была аналогичная проблема с UIAlertAction
dyld: Символ не найден: _OBJC_CLASS _ $_ UIAlertAction Ссылка из:/var/mobile/Applications/.... app/... Ожидается в:/System/Library/Frameworks/UIKit.framework/UIKit в/var/mobile/Приложения/.... приложение /...
Создание UIKit.frameWork
Optional
решило мою проблему. В вашем случае я предполагаю, что ваш CFNetwork.framework
Optional
также решит вашу проблему.
![Make your <code>CFNetwork.framework</code> optional]()
Ответ 3
Переупорядочение в XCode не привело к трюку; Я использую Cocoapods, который создает файл Pods.xcconfig. Это имеет строку OTHER_LDFLAGS. Я положил -framework Foundation
в качестве первой записи, и это заставило мою работу над проектом.
OTHER_LDFLAGS = -framework Foundation -ObjC …
(Остерегайтесь, этот файл будет повторно генерироваться каждый раз, когда вы pod update
.)
Ответ 4
Измените порядок своих фреймворков, чтобы иметь Foundation перед CFNetwork.
Это временное исправление для чего-то, что, очевидно, является ошибкой в Xcode 6.
Ответ 5
Я столкнулся с этой точной проблемой на WWDC. Я поговорил с несколькими инженерами Apple, которые сказали мне, что это ошибка в SDK, вызванная перемещением некоторых символов между CFNetwork и Foundation и что это будет разрешено в следующем выпуске, потому что очень скоро. Вы можете обойти его в некоторых случаях, играя с картой заказа, импортируются, но это не всегда будет работать.
Ответ 6
У меня была такая же проблема с использованием sqlite3 с Xcode 6.3 на устройстве под управлением iOS 8.1.3 и поэтому с использованием sqlite3 v3.7.13.
Функция C sqlite3_errstr() была введена в sqlite3 v3.7.15.
Мой код вызывал sqlite3_errstr().
При запуске приложение сработало.
Настройка libsqlite3.dylib как необязательного (а не обязательного) задания выполнялась.
Ответ 7
Я получил некоторую ошибку:
dyld: Символ не найден: _NSDictionary0
По ссылке:
I reset my related projects "Цель развертывания для одного и того же значения: 8.0, тогда это нормально. Может быть, что-то изменилось в ios9.0 и ios8.0, поэтому, если мы хотим сделать совместимым с 8.0, мы должны сообщать соответствующим проектам.
dyld: Символ не найден: ___NSDictionary0__ при использовании бинарного файла Google ServiceGenerator с документами обнаружения в XCode 7 и целевой программе iOS 9.0
Ответ 8
Сделать CFNetwork.framework необязательным, чтобы он работал у меня
Ответ 9
Несколько раз, когда это случилось со мной, простой "Чистый" (shift + cmd + K) сделал трюк.