use_frameworks! только для некоторых стручков или быстрых стручков

У меня есть оба Objective C и Swift Pods в моем проекте.

 pod 'WBWebViewConsole', '~> 1.0.1' use_frameworks! pod 'XWebView', '~>0.9.5' pod 'Starscream', '~> 1.1.3' 

Поскольку быстрые POD ( XWebView , Starscream ) могут быть добавлены только в качестве фреймворков, я должен использовать use_frameworks!

Но это делает все POD как фреймворк, включая Objective-C POD ( WBWebViewConsole ).

Но это вызывает проблему с Objective-C POD, но я не намерен создавать Objective-C POD в качестве рамки.

Так или иначе, я могу игнорировать пару POD из преобразования в качестве фреймворка?

Благодарю.

Обновить:

Как воспроизвести проблему?

Проблема с POD WBWebViewConsole

Запустите подключенный проект на любых устройствах iOS 8+, имеющих подключение к Интернету, когда он загружает html-документ из Google Drive.

в html doc … нажмите Общие / Информация / Предупреждение / Отладка / Журнал ошибок

введите описание изображения здесь

вы увидите какой-либо текст, появляющийся на странице html всякий раз, когда вы нажимаете любую из вышеперечисленных кнопок ….

Библиотека собирает журналы, созданные на html-странице …

Всякий раз, когда вы нажимаете кнопку отдельно от отображения некоторого текста на странице html, я пишу некоторый журнал в фоновом режиме.

введите описание изображения здесь

Теперь нажмите кнопку « Получить журналы» … и просмотрите журналы в Xcode IDE … вы увидите все журналы консоли, созданные в html

введите описание изображения здесь

Get logs-> – это встроенная кнопка super, наложенная на webview. Библиотека позволяет нам читать консольные журналы из wkwebview ..

Теперь в POD u раскомментируем следующие строки

 use_frameworks! pod 'PLCrashReporter' pod 'XWebView', '~> 0.9.5' 

и сделать pod install

затем вставьте следующий код поверх ViewController

 import WBWebViewConsole 

Вот проект, с которым все это не связано со всеми изменениями, необходимыми для воспроизведения проблемы

теперь вы запускаете проект на устройстве и нажимаете некоторые кнопки на странице html и нажимаете « Получить журналы», вы не можете видеть комментарии, созданные на странице html

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

 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler - (void)wb_evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(NSString *, NSError *))completionHandler 

Но при создании экземпляра WBWKWebView и загрузке URL-адреса все необходимые делегаты этого класса увольняются.

Вышеупомянутые делегаты должны запускаться при записи журнала при нажатии кнопки на странице html

Когда JSBridge init, он добавит некоторые «UserScripts» в webview, источник которых загружен из [NSBundle mainBundle] в предыдущей версии. Но если он находится в рамках, файлы ресурсов находятся в пакете framework вместо mainBundle .

Таким образом, исправление находится в WBWebViewConsoleDefines

замените это

 inline static NSBundle * WBWebBrowserConsoleBundle() { return [NSBundle bundleWithPath:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath], @"WBWebBrowserConsole.bundle"]]; } 

с

 inline static NSBundle * WBWebBrowserConsoleBundle() { return [NSBundle bundleWithPath:[NSString stringWithFormat:@"%@/%@", [NSBundle bundleForClass:[WBWebViewConsole class]], @"WBWebBrowserConsole.bundle"]]; } 

На самом деле автор выпустил новую версию, у нее также есть исправление

pod 'WBWebViewConsole', '~> 1.0.2'

  1. pod install
  2. перезапустите Xcode и очистите свой проект
  3. снова строить и запускать

Примечание: Это невозможно. если вы используете_frameworks! все становится динамической основой.

  source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' use_frameworks! pod 'WBWebViewConsole', '~> 1.0.1' pod 'XWebView', '~>0.9.5' pod 'Starscream', '~> 1.1.3' 

нет необходимости указывать цель c pod выше use_framework !.

Я использую оба объекта Objective-C и Swift вместе с моим проектом. Вы должны использовать директиву use_frameworks! если вам нужно включить стручки, написанные в Swift. Использование use_frameworks! директива с непередвижными стручками не вызывает проблем. Поместите директиву в верхнюю часть списков контейнеров.

Как правило, import ModuleName Objective-C должны работать только с использованием import ModuleName в любом быстром файле, который вы хотите использовать фреймворк, но если это не так, вы должны попробовать добавить мостовую-header.h в свой проект и #import объектно-c там есть заголовок.

Попробуйте это и обновите здесь о результатах.

Основанный на члене CocoaPods:

Это невозможно для общего случая из-за транзитивных зависимостей. Если Pod A строит динамически и зависит от Pod B, который строит статически, и приложение также зависит от Pod B, его невозможно построить, потому что либо Pod A будет пропускать символы Pod B во время ссылки, либо вы в конечном итоге с несколькими копиями Pod B. Есть, вероятно, больше сценариев, которые не будут работать.

Однако вы должны иметь возможность создавать плагин для поддержки определенных случаев, подобных вашим.

Interesting Posts

Правильная авторезисторная маска

Создание анимированного слайд-меню с использованием функции автозапуска

Отключение клавиш на клавиатуре

Ошибка POSIX 12 («Невозможно выделить память») при загрузке файлов с iPhone

Привлекательность рисования iPhone 5s SpriteKit

Можете ли вы получить настройки Wi-Fi от iOS и передать его на устройство BLE (похожее на Withings)?

Получение всех представлений для UIScrollView

Приложение WatchKit не будет компилироваться: «error: WatchKit Extension не содержит никаких приложений WatchKit»

Почему Xcode 7 показывает * .tbd вместо * .dylib?

Существует ли API для отмены автоматической возобновляемой подписки?

Ошибка выполнения модульных тестов Cedar из командной строки

Загрузка NSURLSession – нужно включить фоновый режим?

Как загрузить приложение iOS 6, которое может работать на iOS 7 с iOS legacy Look

Как отладить расширение share ios?

Ограничить обратную геолокацию – kCLErrorDomain Code = 2

Давайте будем гением компьютера.