Не удалось испустить предварительно скомпилированный заголовок для объединения заголовка
Я загрузил проект из GitHub, затем загрузил следующие файлы, некоторые из которых написаны OBJ-C, и я использовал заголовок моста.
pod ‘SnapKit’
pod ‘MJRefresh’
pod ‘Alamofire’
pod ‘Kingfisher’
pod ‘MBProgressHUD’
pod ‘pop’
pod ‘EVReflection’
pod ‘StreamingKit’
pod ‘iCarousel’
pod ‘ReflectionView’
Когда я запускаю проект с Xcode 9.0 beta 2, но, к сожалению, журнал ошибок выглядит следующим образом:
Ошибка: не удалось выпустить предварительно скомпилированный заголовок '/var/folders/kd/4gh0_kxx3jx4thjb_sssmmcw0000gn/T/EvoRadio-Bridging-Header-97bd5f.pch' для соединения заголовка '/Users/ringo/Downloads/EvoRadio-master/EvoRadio/Resources/EvoRadio-Bridging-Header.h'
У меня есть googled, но нет такой проблемы. Ошибка означает, что ему нужен файл PCH?
Это моя конфигурация заголовка .pch
:
Он не может его решить.
Как это сделать?
Ответы
Ответ 1
Я также получил ту же самую проблему (Xcode9 beta 6) после того, как я добавил cocoa pods для Зашифрованные основные данные.
Это мой PodFile
:
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
pod 'EncryptedCoreData', :git => 'https://github.com/project-imas/encrypted-core-data.git'
target 'Root' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for Root
target 'RootTests' do
inherit! :search_paths
# Pods for testing
end
target 'RootUITests' do
inherit! :search_paths
# Pods for testing
end
end
Решение:
1 Я добавил $(inherited) non-recursive
в Search Path -> Header Search Paths
2 Затем добавили ${PODS_ROOT} recursive
в Search Path -> User Header Search Paths
Оба указанных выше в настройках целевой настройки моих проектов.
Пожалуйста, взгляните на эти ответы SO:
1 Наследовать пути поиска заголовков
2 Наследовать пути поиска пользователей
Ответ 2
Обратите внимание, что это также может произойти, если ваш соединительный заголовок импортирует код Objective-C, который сам импортирует ваш модуль Swift приложения через myproject-Swift.h
. Решение состоит в том, чтобы использовать предварительные объявления для типов Swift и импортировать модуль Swift проекта в файл .m
.
@class MySwiftClass
или...
typedef NS_ENUM(NSInteger, MySwiftEnumType)
MySwiftEnumType
- это имя самого низкого уровня даже для классов. Так что Swift enum MyClass.MySwiftEnumType
становится просто MySwiftEnumType
Ответ 3
Убедитесь, что вы открываете надлежащее рабочее пространство проекта, в противном случае Podfile
может не иметь всех ресурсов, необходимых для компиляции.
Я видел ту же ошибку в проекте, который раньше работал нормально.
Я обнаружил, что случайно открыл файл ProjectName.xcodeproj
, а не файл ProjectName.xcworkspace
. Открыл файл xcworkspace
и presto, проект снова работает!
Ответ 4
Для меня эта проблема возникла, когда я добавил новую конфигурацию сборки и схему в существующий проект.
Решением было запустить pod install
на вновь созданной схеме. После этого проект был успешно выполнен.
Ответ 5
Вы можете попробовать это решение. Я решил эту проблему таким же образом.
Продукт> Схема> Редактировать схему> Выберите "Построить" в левом меню> Найти неявные зависимости
На вкладке сборки установите флажок "Найти неявные зависимости":
![Find implicit dependencies]()
Затем почистите и постройте снова.
Ответ 6
В моем случае у меня была такая же ошибка компилятора с дополнительными ошибками, как "Неизвестный тип" в одном из моих файлов проекта. Поэтому я просто добавил это в проблемный файл, и он немедленно решил его.
#import <UIKit/UIKit.h>
Ответ 7
Для моего случая у меня была опечатка в названии папки "Поддержка файлов" вместо "Поддержка файлов".
Ответ 8
Мой опыт показывает, что Xcode не может найти заголовочные файлы для pods/frameworks, импортированных в проект.
Мой проект с этим связан с: Обновлением Xcode9.2 - 9.3, где пришлось обновить многие cocoapods из-за неявных определений, которые сейчас недоступны или устарели.
Я изменил Podfile, чтобы теперь включить "use_frameworks!". После этого и после решения других проблем компиляции я обнаружил ошибку, с которой вы столкнулись. Я считаю, что добавление 'use_frameworks! препятствовал компиляции некоторых модулей с поддержкой до iOS 8. Шаги, которые я предпринял, чтобы исправить эту проблему:
- Я попытался удалить каталог
pod deintegrate
/, используя pod deintegrate
cocoa pod deintegrate
- Затем я открываю проект с помощью Xcode и очищаю папку сборки и проект. (удалить содержимое в папке производных данных)
-
Затем я снова pod install
но проблема осталась.
-
В конечном итоге я удалил строку use_frameworks в Podfile, а затем повторил шаги 1-3, и теперь проект смог найти отсутствующие заголовочные файлы, и проблема больше никогда не представлялась.
Ответ 9
Удаление Podfile.lock
и повторная pod install
исправили это для меня.
Ответ 10
Есть так много причин и вещей, которые можно сделать, например:
У меня работает только один - принятый ответ в Xcode 9 - не удалось создать скомпилированный заголовок.
platform :ios, '11.0'
в подфайле должно соответствовать цели в проекте
Ответ 11
Я попробовал все вышеупомянутые шаги, упомянутые в ответах, но у меня ничего не получалось, проблема была в основном с целевой версией развертывания для проекта и в подфайле.
В моем проекте цель развертывания была 10.0, а в моем подфайле - 11.0.
![Scr1]()
![scr2]()
Ответ 12
У меня был такой же сценарий, убедитесь, что для файла A, который вы включили в YourProjectName-Bridging-Header.h
- если он использует какой-либо другой класс (ы), то эти другие классы также включаются перед этим файлом A
Ответ 13
В моем случае я строил с неправильной схемой (верхнее левое меню).
Ответ 14
Я также пострадал от этого после того, как я обновил новый Xcode. После нескольких часов исследования я обнаружил, что если у вас есть несколько целей, теперь вам нужно добавить больше целей в файл pod в Xcode 10. Поэтому ваш код должен выглядеть следующим образом:
platform :ios, '9.0'
target 'EvoRadio' do
pod ‘SnapKit
pod ‘MJRefresh
pod ‘Alamofire
pod ‘Kingfisher
pod ‘MBProgressHUD
pod ‘pop
pod ‘EVReflection
pod ‘StreamingKit
pod ‘iCarousel
pod ‘ReflectionView
target 'EvoRadio2ndtarget' # add your second target
end
Я обнаружил, что в Xcode 9 вам не нужно добавлять, но в Xcode 10 вам нужно добавить это. Надеюсь это поможет.