Подтвердить что ты не робот

Как подавить "предупреждение: привязка к dylib небезопасно для использования в расширениях приложений"?

У меня есть динамическая структура, которая совместно используется приложением iOS и расширением. В этой структуре есть код, который ссылается на UIApplication, который, конечно же, не используется в расширении. Эти звонки полностью изолированы, поэтому я не беспокоюсь о том, что они вызывают проблемы с моим продлением.

Поскольку в предупреждающем сообщении не указан флаг, возможно, нет способа его выполнения, но как я могу подавить warning: linking against dylib not safe for use in application extensions при создании моего проекта?

4b9b3361

Ответ 1

Для целевой цели чата/сегодняшнего виджетов (а не для вашего приложения или цели libray) перейдите в настройки проекта и измените настройку сборки "APPLICATION_EXTENSION_API_ONLY" / "Требовать только API-интерфейс для расширения приложений" на NO.

Ответ 2

Короткий ответ: на самом деле нет способа сделать.

То, что я закончил, это рефакторинг моего кода, чтобы вытащить фрагменты, которые были распространены для моего расширения, и мой динамический фрейм, чтобы мое расширение могло безопасно ссылаться на эти части, не зависящие от кода, специфичного для телефона.

Я закончил это, потому что когда-нибудь в будущем мне нужно будет отправить это в App Store, и рекомендации Apple выглядят довольно ясно, что ссылки UIApplication довольно большие, нет-нет.

Ответ 3

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

Если ваш фреймворк не содержит такого Require Only App-Extension-Safe API не забудьте установить для параметра " Require Only App-Extension-Safe API значение " ДА" в Build Settings целевой платформы.

enter image description here

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

enter image description here

Ответ 4

Иногда "няня" не знает лучше.

Вы можете избежать ссылок на UIApplication.shared и просто динамически вызывать методы в вашей UIApplication.shared.

class Application {
    static var shared: UIApplication {
        let sharedSelector = NSSelectorFromString("sharedApplication")
        guard UIApplication.responds(to: sharedSelector) else {
            fatalError("[Extensions cannot access Application]")
        }

        let shared = UIApplication.perform(sharedSelector)
        return shared?.takeUnretainedValue() as! UIApplication
    }
}

Это позволяет вам эффективно вызывать UIApplication.shared (просто вызывать Application.Shared), не заставляя компоновщика волноваться.

Вы получите сбой, если попытаетесь вызвать это с расширения.

Ответ 5

Пожалуйста, НЕ устанавливайте это в настройках вашего проекта, так как Quick (и Nimble) исправили эту проблему с помощью своих обновлений: https://github.com/Quick/Quick/releases/tag/v1.3.1https://github.com/Quick/Nimble/releases/tag/v7.1.3)!

Просто обновите обе зависимости до последней версии, и предупреждение должно исчезнуть.