Ошибка - команда компоновщика не выполнена с кодом выхода 1 - PullRequest
2 голосов
/ 11 октября 2019

Я новичок в разработке XCode Mac и IPhone. Поэтому, вероятно, я упускаю что-то очевидное здесь.

При попытке построить проект я получаю следующие предупреждения и ошибки. Я не могу понять, что здесь не так, я посмотрел на этот ответ и проверил мое значение Framework Search Path , а в BuildSettings его нет.

ld: warning: directory not found for option '-F/Users/macbook/Desktop/<app_name>__main/build/Release-iphoneos'
ld: warning: directory not found for option '-F/Users/macbook/Desktop/<app_name>__main/build/Debug-iphoneos'
ld: framework not found Pods_<app_name>
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я уже несколько часов бьюсь головой и, наконец, сдался.

Путь, упомянутый в ошибке, не существует, и когда я заглянул в папку buildнаходится в проекте XCode, я понял, что они находятся в общем каталоге ~/Library/Developer/Xcode/DerivedData. Поэтому я не понимаю, почему XCode ищет эти файлы в относительном пути проекта, где папка build не существует.

Я использую

XCode 10.1

CocoasPod 1.5.3 1.8.4

MacOS High Sierra

Примечание. Это же рабочее пространство успешно создается в другой системе.

Edit:

Если я скопирую project.pbxproj из другой системы в эту, проект на этом компьютере также будет успешно собран. project.pbxproj находится в файле *.xcodeproj.

Также, если я выберу Универсальное устройство iOS , проект будет работать нормально, но как только я переключаюсь на любое другое целевое устройство, я получаю то же самоеошибка.

Редактировать 2:

В левой части панели folder/directory я вижу пару файлов каркаса красного цвета.

  • Foundation.framework
  • Pods_<application_name>.framework

Решение:

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

В структуре папок моего проекта я видел несколько .framework файлов красного цвета. некоторые из них имеют различные расширения, чем те, которые присутствуют в пакете xCode. Поэтому я обновил их новыми файлами расширений, которые избавились от большинства красных файловых фреймворков и оставили только одну Pods_.framework ту же платформу в приведенной выше ошибке. Я удалил фреймворк из списка библиотек и фреймворков в разделе General. После того, как я выполнил сборку проекта и смог запустить приложение.

Однако я заметил, что файл Pods_<app_name>.framework всегда регенерируется после запуска pod install. Поэтому мне приходится вручную удалять эту нежелательную зависимость из списка каждый раз при запуске нового рабочего пространства, что, мягко говоря, очень болезненно.

И теперь я ищу способ исправить это, чтобы я не сталнеобходимо каждый раз удалять файл Pods_<app_name>.framework.

Пока я искал решение, я обнаружил закрытую ошибку cocoapods, которая сообщала о той же проблеме для более старой версии. Я потерял ветку и не могу найти ее снова, иначе я бы связал ошибку.

Как отмечается в одном из комментариев к ответу, я теперь обновил версию cocoapods 1.8.4 .

Редактировать 3:

Подфайл

# Uncomment this line to define a global platform for your project
# platform :ios, '7.0'
# Uncomment this line if you're using Swift
use_frameworks!

target '<app_name>' do

pod 'Google-Mobile-Ads-SDK', '~> 7.39.0'

end

Ответы [ 4 ]

0 голосов
/ 22 октября 2019

Раньше я сталкивался с этой проблемой один раз, но я уже решил ее таким же образом @alxlive answer, и она сработала.

Проблема возникла у меня из-за модуля, который мы уже установили.

За это время я уже установил свой cocoapod для своего проекта. Затем я добавил 2 новых Build Configurations.

Ваша проблема может быть такой же, потому что вы упомянули о копировании других project.pbxproj из другой системы, и это заставило ваш проект работать нормально. Так что это может иметь место.

По deintegrate и install обратно на модуль, что решит проблему.

0 голосов
/ 18 октября 2019

Пакеты должны быть установлены один раз для Mac. Конфигурация, установленная в project.pbxproj, зависит от версии Cocoapods и версии Xcode на компьютере.

Попробуйте выполнить следующее:

1 - удалите файл Podfile.lock и папку Pods излокальный проект

2 - удалить содержимое папки «Производные данные»: ~/Library/Developer/Xcode/DerivedData

3 - выполнить команду:

pod deintegrate

4 - выполнить команду

pod install

5 - запустить проект снова

0 голосов
/ 21 октября 2019

Xcode имеет различную систему сборки для симулятора и реальных устройств. Таким образом, он будет генерировать разные приложения для обоих. Если вы выберете любую цель Simulator , то она создаст приложение для симулятора, а если вы выберете Generic iOS Device или любую цель реального устройства, то она создаст другую сборку.

Возможно, вы используете некоторые фреймворки, созданные для устройств iOS, поэтому выполните следующие действия:

  1. Различайте те фреймворки, которые выдают ошибку, удалите эти стручки из файла pod и выполните команду pod installи удалите DerivedData .
  2. Загрузите код этого фреймворка в вашу систему.
  3. Добавьте файлы проекта фреймворка в ваше рабочее пространство. Для этого вы можете сослаться на this и this .

Если вы не хотите добавлять весь код фреймворка в свой проект, тогда вы можете добавить(для устройства или симулятора) сборка фреймворка в вашем проекте xcode. Для этого выполните следующие действия:

  1. Откройте загруженный проект фреймворка.
  2. Выберите любую цель симулятора и создайте проект.
  3. Получите сгенерированный файл .framework из Продукты папка.
  4. Добавьте этот фреймворк в ваш проект, например this .
  5. Теперь создайте свой проект для симулятора.
  6. Следуйте вышешаги для целевого устройства, если вы хотите создать для устройств.

Для Google Mobile Ads вы можете следовать этим рекомендациям. Добавьте флаг -ObjC компоновщика в Другие флаги компоновщика в настройках сборки вашего проекта

Надеюсь, это сработает для вас.

0 голосов
/ 15 октября 2019

Основываясь на ваших комментариях и журналах сборки, я считаю, что подфайл Pods_<application_name> недоступен для вашего проекта (он добавлен, но не загружен).

Стручки - это способ обмена кодом между проектами и поддержания версий. Вам просто нужно обновить модуль, чтобы он загружался и добавлялся в ваш проект. Для этого просто запустите приложение Terminal, cd в папку вашего проекта и запустите pod update (вы можете обратиться к https://freakycoder.com/ios-notes-12-how-to-update-pods-249ecf88fe57)

Если у вас не установлено pod, вы можете перейти к https://guides.cocoapods.org/using/using-cocoapods.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...