Подтвердить что ты не робот

Предупреждения Xcode 7: объектный файл был создан для новой версии iOS, чем связанный

Недавно я интегрировал Google Cloud Messaging в приложение, ориентированное на iOS 7 и iOS 8. Просто захватил X4-версию Xcode 7, чтобы начать работу с поддержкой iOS 9, и теперь я получаю сообщение от компоновщика:

ld: warning: object file (.../Pods/GoogleInterchangeUtilities/Libraries
/libProtocolBuffers.a(Descriptor.pb.o)) was built for newer iOS version (8.3)
than being linked (7.0)

и несколько больше, чем все для частей libProtocolBuffers.a.

Означает ли это, что iOS 8.3 требуется для использования библиотеки GCM? Если да, то почему Xcode 6 с радостью выплюнул код, который (по всей видимости, в моем тестировании на устройствах iOS 7) отправил push-уведомления в iOS 7.3 без проблем?

Учитывая, что это просто предупреждения, я все еще могу скомпилировать все, но я предпочитаю не отправлять код, который является неправильным.

Изменить: Я отправил по электронной почте Google, и они сказали, что топ-люди будут изучать его. В то же время, если вы читаете это и беспокоитесь о предупреждении, возможно, также отправляйте по электронной почте, поэтому им будет предложено разобраться с ним.

4b9b3361

Ответ 1

Это просто означает, что одна из библиотек (здесь Buffer Protocol) GCM зависит от того, была ли она построена для 8.3, хотя она совместима с версией min sdk GCM, т.е. 7.0. XCode 7 является более серьезным и сообщает об этом в качестве предупреждения, но он всегда был там, о котором не сообщалось предыдущими версиями.

В целом это просто безвредно, все должно работать нормально. Также мало что можно сделать, если Google не заплатит GCM, построив все его зависимости с помощью версии min sdk (7.0).

Ответ 2

Это на самом деле означает, что Минимальная цель развертывания включенной библиотеки была равна 8.3, а привязка ее к нижней минимальной цели развертывания вызывает это предупреждение.

В этом случае библиотека официально не поддерживает цели ниже, чем 8.3. При связывании этой библиотеки с целевым показателем с минимальным уровнем развертывания Target будет работать, это может привести к сбоям во время выполнения, если есть только код с кодом 8.3 выполняется на устройстве с более старой системой, чем 8.3.

Существует причина, по которой разработчики устанавливают 8.3 как минимальную цель, и это предупреждение не должно быть игнорироваться. В этом случае это может быть безвредным, но в других случаях это не обязательно безопасно!

Чтобы исправить эти предупреждения, используйте либо более старую версию библиотеки, либо установите минимальную цель развертывания в 8.3.

Ответ 3

Мой способ исправить:

  • Проверить, что "Цель развертывания" соответствует подфайлу "Платформа"
  • Удалить DerivedData (/Users/yourUser/Library/Developer/Xcode)
  • Pod install (Terminal)
  • Проект очистки/сборки

P.s. При необходимости можете добавить дополнительную информацию.

Ответ 4

В целях/Установки/Связывание/Другие флаги компоновщика добавьте

-w

отключите предупреждение для меня.

Ответ 5

FYI, последняя версия соответствующих модулей, похоже, исправила эту проблему.

В частности, похоже, что это было обновление GoogleInterchangeUtilities с 1.0.0 до 1.1.0, что сделало трюк.

Если вы видите это, обновление "pod update" должно сделать все лучше!

Ответ 6

В моем случае причина заключалась в том, что я только что обновил pods, а затем изменил deployment target, чтобы опуститься ниже, чем раньше, и получил такие предупреждения. Выполнение обновления pod снова решает проблему.