2016-07-02 2 views
1

Мое приложение строит хорошо, но теперь я пытаюсь построить для архива, и я получаю эту ошибку:«Неопределенные символы для архитектуры arm64» на расширение

Undefined symbols for architecture arm64: 
    "type metadata for (extension in TwIM):__ObjC.NSData.ImageType", referenced from: 
     static TwIM.ImageCache.imagePath (imageURL : __ObjC.NSURL, imageType : (extension in TwIM):__ObjC.NSData.ImageType?) -> Swift.String? in ImageCache.o 
     function signature specialization <Arg[0] = Owned To Guaranteed and Exploded> of static TwIM.ImageCache.imagePath (identifier : Swift.String, imageType : (extension in TwIM):__ObjC.NSData.ImageType?) -> Swift.String? in ImageCache.o 
     function signature specialization <Arg[0] = Owned To Guaranteed and Exploded> of static TwIM.ImageCache.imageData (identifier : Swift.String, imageType : (extension in TwIM):__ObjC.NSData.ImageType?) -> __ObjC.NSData? in ImageCache.o 
     function signature specialization <Arg[0] = Owned To Guaranteed and Exploded> of static TwIM.ImageCache.image (identifier : Swift.String, imageType : (extension in TwIM):__ObjC.NSData.ImageType?) -> Swift.AnyObject? in ImageCache.o 
     function signature specialization <Arg[0] = Owned To Guaranteed, Arg[1] = Owned To Guaranteed and Exploded> of static TwIM.ImageCache.saveImage (imageData : __ObjC.NSData, identifier : Swift.String, imageType : (extension in TwIM):__ObjC.NSData.ImageType?) -> Swift.Bool in ImageCache.o 
     function signature specialization <Arg[0] = Owned To Guaranteed and Exploded> of static TwIM.ImageCache.removeImage (identifier : Swift.String, imageType : (extension in TwIM):__ObjC.NSData.ImageType?) ->() in ImageCache.o 
ld: symbol(s) not found for architecture arm64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Что имеет в виду является расширением у меня есть на NSData, который включает в себя перечисление:

extension NSData { 
    enum ImageType: String { 
    case jpg = "jpg" 
    case png = "png" 
    case gif = "gif" 
    } 
} 

Я не знаю, почему это будет вызывать проблему. Я очистил и очистил полученные данные, как это предлагали некоторые люди.

+0

Эта ошибка возникает, когда заголовок библиотеки объявляет некоторые функции, но компоновщик не может их найти. У вас нет необходимой библиотеки в вашем проекте или вы не добавили путь библиотеки к пути поиска библиотеки. – Bharat

+0

Любые идеи о том, как я могу устранить эту проблему? Любые шаги, которые я должен предпринять? – Andrew

+0

Вы вытаскивали этот код из любого другого проекта? Если да, найдите все фреймворки/библиотеки в этом проекте и добавьте их в свои. Не забудьте обновить путь поиска библиотеки. – Bharat

ответ

2

Какой Xcode и какая версия Swift вы используете?

Я впервые обнаружил это сообщение об ошибке с Xcode 8 и Swift 3 beta 6. Я посмотрел, что я импортировал, но это был только Cocoa для всех файлов. Было несколько ошибок такого рода, почти все принадлежащие к функции, которая была очень большой. Ошибка возникает только при выборе Global-Module-Optimization, независимо от того, выполняется ли она или архивируется.

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

Попробуйте выбрать Single-File-Optimization для выпуска и попытайтесь выполнить архивирование. Повторяется ли ошибка или вы успешно?

Я думаю, это не будет проблемой в финальной версии.

+0

Нет проблем в выпущенной версии, чтобы попробовать ваше решение. Обновление: исправление работает хм, вы сообщили об этой ошибке Apple? – mn1

+0

Нет, я не сообщил об этой ошибке. –

+0

Имеет эту проблему в функции (предоставленной, длинной функции), где функция использовала 'let' (логическое), которое было определено в глобальной области. Изменение оптимизации (Target> Optimization Level) в Fast One-File-Optimization решило эту проблему. – bauerMusic

0

У меня тоже была эта проблема. И я решил это с помощью следующих операций: 1. Перейдите к настройке сборки. 2. Найдите возможность включения testablility. 2. Установите Нет для отладки.

0

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

Смежные вопросы