iphone отсутствует необходимая архитектура i386

Я получаю эту ошибку для одного из моих проектов, чтобы использовать статическую библиотеку. Проект хорошо работает на iOS устройстве. Но не в симуляторе. Статическая библиотека не моя, поэтому я не могу перекомпилировать ее для i386. Но это аппаратный драйвер для iPhone. Поэтому при работе в симуляторе мне действительно не нужна эта библиотека. Это как если аксессуар присутствует с устройством, то приложение будет иметь другой поток.

Поэтому я должен сохранить ссылку на этот файл. Но понадобится только в iOS устройстве. Не требуется при запуске в симуляторе для запуска приложения для пользовательского интерфейса и других целей тестирования.

Как я могу избежать этой ошибки? Есть ли способ настроить цель или схему, чтобы избежать объектного файла /lib при запуске в симуляторе?

ld: warning: ignoring file 
/Framework/iSmartSDK/libiSmartSDK_Lib.a, missing required architecture i386 in file  
/Framework/iSmartSDK/libiSmartSDK_Lib.a (2 slices)
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_iSmart", referenced from:
      objc-class-ref in SmartCardReaderVC.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

2 ответа

Решение

Когда вы используете его, на символ ссылаются и требуется библиотека. если вам действительно не нужна эта функциональность, оберните ее использование в определение. "определить это":

#if TARGET_OS_IPHONE
   iSmart *smart = ....
#else
   NSLog(@"no ismart on mac");
#endif

ПРИМЕЧАНИЕ. Недостаточно не назначать / вызывать символ. даже не используйте символ для объявления переменной **


Это может быть только в 1 файле AFAICS .. #ifdef всего файла и, возможно, создать заглушку SmartReaderVC

Даже если вы говорите, что вам не нужна библиотека в эмуляторе, компоновщик говорит что-то еще. Это ищет класс iSmart,

Лучший способ продвинуться, вероятно, написать заглушку для класса iSmart:

  • Создайте статический проект библиотеки.

  • Добавить очень, очень минимальный класс iSmartНапример, класс и два метода. Каждый метод ничего не делает или возвращает 0.

  • Постройте библиотеку для эмулятора (i386).

  • Использовать lipo инструмент для объединения библиотеки из стороннего производителя и части i386 вашей библиотеки-заглушки в одну библиотеку (в результате получается большая часть для устройства и очень минимальная часть для эмулятора).

  • Свяжите свое приложение с пользовательской библиотекой вместо оригинальной.

Другие вопросы по тегам