swift — спецификация Cocoapods, которая использует C ++ и компилирует в качестве фреймворка

Краткое резюме: как я могу добавить включаемый путь к заголовкам, распространяемым с XCode для .podspec.json файл?

Я работаю над проектом Swift, где я хочу включить AudioKit в качестве зависимости. Для этого проекта я должен добавить ‘use_frameworks!’ в моем подфиле

Поэтому я добавляю свой Pod в Podfile (основной репозиторий еще не обновлен, поэтому я указываю прямо на репозиторий github)

pod 'AudioKit', :git => 'https://github.com/niklassaers/AudioKit.git'

и добавить в один из моих файлов Swift

import AudioKit

тогда мой компилятор предупредит меня, что CsoundFile.hpp ссылается iostream который не может быть найден. iostream.h в:

/Applications/Xcode62.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/c++/4.2.1/backward/iostream.h

По сравнению с stdlib.h, который находится в:

/Applications/Xcode62.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/stdlib.h

Как я могу добавить этот каталог заголовка к пути поиска в AudioKit.podspec.json (что я раздвоил).

Я сделал пример проекта, который демонстрирует то, что я написал выше: https://github.com/niklassaers/AudioKitSwiftFrameworkError — Вы можете скачать его и скомпилировать, и вы увидите сообщение об ошибке.

1

Решение

Основная проблема здесь заключается в том, что AudioKit.podspec.json отсутствует определение публичного заголовка. Таким образом, все заголовки считаются общедоступными, включая заголовки C ++.

Поскольку нет транзитивного импорта из заголовков класса Objective C, он все равно должен работать, если только они объявлены как public:

"public_header_files": [
"AudioKit/Core Classes/**/*.h",
"AudioKit/Instruments/**/*.h",
"AudioKit/Notes/**/*.h",
"AudioKit/Operations/**/*.h",
"AudioKit/Parameters/**/*.h",
"AudioKit/Sequencing/**/*.h",
"AudioKit/Tables/**/*.h",
"AudioKit/Utilities/**/*.h"],
…
"osx": {
…
"public_header_files": ["AudioKit/Platforms/OSX/classes/*.h"]
}
"ios": {
…
"public_header_files": ["AudioKit/Platforms/iOS/classes/*.h"]
}
5

Другие решения