Как обнаружить во время выполнения, что приложение использует Swift - PullRequest
3 голосов
/ 24 января 2020

Я разрабатываю фреймворк (obj c), и мне нужно обнаружить, что приложение использует swift. Неважно, что приложение разработано на swift полностью или это swift / obj c hybrid.

У вас есть идеи, как получить эту информацию? Я думал об obj c времени выполнения, но я не знаю, как это реализовать.

Большое спасибо.

Я не знаю, почему мой предыдущий вопрос был закрыт. Но я постараюсь быть более сфокусированным: мне нужно получить информацию о том, сколько клиентов, интегрирующих мою инфраструктуру, используют swift в качестве языка программирования, поэтому я должен определить, что проект использует swift.

1 Ответ

3 голосов
/ 24 января 2020

Ниже приведен возможный подход, основанный на опубликованном c документированном dyld API, доступном с iPhone2 и действительном для всех современных iOS версий. И libswiftCore.dylib всегда присутствует для swift.

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

#import <mach-o/dyld.h>

BOOL isSwiftLoaded() {
    return NSVersionOfRunTimeLibrary("libswiftCore.dylib") != -1; 
            // -1 is documented indicator that library is not loaded
}
...