Класс Admob Framework не обнаружен построителем интерфейса Xcode
Я пытался внедрить собственные объявления Google adMob в свое приложение для iOS и следовал официальному руководству по admob: https://developers.google.com/admob/ios/native/advanced
Независимо от того, добавил ли я необходимую структуру admob вручную или с помощью CocoaPods, все классы в структурах admob не были обнаружены построителем интерфейса, поэтому я не мог установить пользовательский класс UIView на требуемые классы представления admob. Но, как ни странно, я мог использовать все классы, связанные с admob, после того, как фреймворк был импортирован в мои быстрые файлы. См. Снимок экрана ниже:
Я нашел проект github, который ничего не делал, кроме как просто имплементировал нативную рекламу admob с помощью Cocoapoding фреймворка admob ( ссылка на проект ). Я загрузил его исходный код, и, как ни странно, классы фреймворка admob можно определить по лицу интерфейса в этом проекте.
Я пару дней чесал затылок и безуспешно искал решение. Пожалуйста, помогите мне, если вы знаете, почему это произошло, и ваша помощь очень ценится.
5 ответов
TL;DR
Понизьте версию модуля CocoaPods до. (-:
Подфайл
pod 'Google-Mobile-Ads-SDK', '7.67.0'
Объяснение
Это потому что
Основной код имеет другую, более быструю среду выполнения Objective-C под капотом, и поэтому отслеживает классы, использующие разные структуры данных для
Чтобы обойти это, просто используйте
Я бы также предложил создать новую проблему GitHub для этой ошибки, но похоже, что SDK не является открытым исходным кодом. Возможно, эта ошибка будет устранена Apple в будущем или Google, как только они узнают о ней, но на данный момент это обходной путь .
Согласно Google Developer в этой ссылке.
Нам известно об этой проблеме - .xcframework обычно несовместим с файлами .xib. Это ошибка Apple, и мы не знаем, когда она будет исправлена.
В качестве временного обходного пути вы можете вручную скопировать файл GADNativeAdView.h и включить его в свой проект. Затем вы должны увидеть все выходы, появляющиеся в Интерфейсном Разработчике, как и ожидалось.
Я успешно могу получить розетки после этого обходного пути.
Вот что тебе нужно сделать
- Скопируйте содержимое файла. Вы можете открыть этот файл, установив класс представления в IB как
GADNativeAdView
. Затем щелкните стрелку раскрытия, чтобы открыть класс. Обязательно измените его на то, что было изначально.
Теперь создайте новый файл, т.е. файл заголовка. Назови это
GADNativeAd.h
.Вставьте содержимое этого файла во вновь созданный файл.
Постройте проект один раз.
Теперь вы должны увидеть выходы в инспекторе подключений xib.
Воздержитесь от возврата к рабочей версии, так как в них не будет изменений iOS ATT.
TL;DR: для тех, кто не может перейти на более раннюю версию SDK ниже 7.68.0, откройте
xib
в качестве исходного кода и вручную отредактируйте код, чтобы установить Custom Class и связать выходы с представлениями.
Вы можете установить для настраиваемого класса значение (или сделать его устаревшим), введя имя класса непосредственно в поле.
Обратите внимание, что вам не нужно беспокоиться, если имя класса не отображается в раскрывающемся списке. Вы можете просто ввести его, как показано на скриншоте ниже. ( Например)
Однако вы не можете связать выходы с представлениями (например, связать свои представления с каждым просмотром нативной рекламы), поскольку вы не увидите выходы в, как вы можете видеть на следующем снимке экрана.
В этом случае вы можете связать выходы, отредактировав исходный код представления.
- Завершите макет нативной рекламы с помощью конструктора интерфейса.
- На панели Project Navigator щелкните правой кнопкой мыши вид (
*.xib
) и выберите Открыть как> Исходный код . - В рамках
<view>
тег для /GADNativeAdView
, добавить<connections>
пометьте и объявите выход для каждого просмотра нативной рекламы. Обратите внимание, что вам нужно ссылаться на идентификатор объекта вашего представления изdestination
тег и самостоятельно сгенерируйте идентификатор объекта для каждой розетки.
Вот пример, в котором представлены четыре нативных рекламных объекта (медиа, значок, заголовок и основной текст):
<?xml version="1.0" encoding="UTF-8"?>
<document ...>
<objects>
<view contentMode="scaleToFill" id="iN0-l3-epB" customClass="GADUnifiedNativeAdView">
<subviews>
<view ... id="BAF-yb-wZL" userLabel="media" customClass="GADMediaView">
...
</view>
<view ... id="U4D-Gx-1Wm" userLabel="bottom">
<subviews>
<imageView ... id="6hd-Ad-50f" userLabel="icon">
...
</imageView>
<stackView ...>
<subviews>
<label ... id="UdA-3o-ttn" userLabel="headline">
...
</label>
<label ... id="Dqe-NX-Uu2" userLabel="body">
...
</label>
</subviews>
</stackView>
</subviews>
</view>
</subviews>
<!-- TODO: Add outlet connections -->
<connections>
<outlet property="bodyView" destination="Dqe-NX-Uu2" id="GAD-Nat-Bdy"/>
<outlet property="headlineView" destination="UdA-3o-ttn" id="GAD-Nat-Hdl"/>
<outlet property="iconView" destination="6hd-Ad-50f" id="GAD-Nat-Ico"/>
<outlet property="mediaView" destination="BAF-yb-wZL" id="GAD-Nat-Mdv"/>
</connections>
</view>
</objects>
</document>
Важно: вам необходимо сгенерировать идентификатор объекта для торговых точек, похожих на другие (например,
XXX-YYY-ZZZ
), чтобы избежать непредвиденных ошибок. я использовал
GAD-Nat-XXX
формат в приведенном выше примере.
Если вы хотите найти имя свойства для каждой розетки, нажмите кнопку с серой стрелкой в раскрывающемся списке настраиваемого класса.
Затем вы найдете имя свойства для розеток в его заголовочном файле. (
GADUnifiedNativeAdView
Например)
Важно: вам нужно собрать свой проект хотя бы один раз, чтобы ваш Xcode нашел заголовок для вашего пользовательского класса.
В навигаторе проекта откройте файл представления с помощью построителя интерфейса, щелкнув представление правой кнопкой мыши и выбрав « Открыть как»> «Документ XIB Interface Builder» .
В инспекторе подключений подтвердите подключения, добавленные на предыдущем шаге. Вы увидите значок предупреждения, но можете его проигнорировать.
- Загрузите и покажите объявление.
Попробуйте отредактировать XML раскадровки, чтобы решить эту проблему.
- Щелкните правой кнопкой мыши раскадровку или конструктор интерфейса.
- Выберите контроллер представления или представление, перейдите на панель Project Navigator и выберите пункт меню Open As->SourceCode.
- добавить атрибут customClass = "
GADUnifiedNativeAdvView
"
Сохраните раскадровку или представление.
Снова щелкните правой кнопкой мыши запись раскадровки / представления на панели Project Navigator и выберите Open As->Interface Builder.
Надеюсь, вы увидите имя настраиваемого класса.
1: pod install —clean-install
2: откройте Xcode и shift- command-k
3: закройте Xcode и снова откройте
4: возьмите кофе и дождитесь завершения предварительной сборки xcode