В delphi Tokyo, если вы посмотрите, например, iOSapi.MapKit.pas
, вы можете увидеть, что раздел инициализации запускается, только если NOT defined(CPUARM)
(в основном, раздел инициализации выполняется только для симулятора iOS):
{$IF defined(IOS) and NOT defined(CPUARM)}
initialization
MapKitModule := dlopen(MarshaledAString(libMapKit), RTLD_LAZY);
finalization
dlclose(MapKitModule);
{$ENDIF IOS}
Но когда вы видите iOSapi.CoreTelephony.pas
, это не тот случай:
initialization
CoreTelephonyModule := dlopen(MarshaledAString(libCoreTelephony), RTLD_LAZY);
finalization
dlclose(CoreTelephonyModule);
end.
Есть идеи почему?Сегодня я сталкиваюсь со странной ошибкой, я реализую PHPhotoLibrary
(Photos Framework) так же, как они делают с iOSapi.MapKit.pas
, так что я делаю
{$IF defined(IOS) and NOT defined(CPUARM)}
initialization
PhotosModule := dlopen(MarshaledAString(libPhotos), RTLD_LAZY);
finalization
dlclose(PhotosModule);
{$ENDIF IOS}
, и это работает в моем ipad Pro, но не на iphone 7, где у меня ошибка:
Не удалось найти класс ObjectiveC PHPhotoLibrary
при выполнении TPHPhotoLibrary.OCClass.authorizationStatus
удаление {$IF defined(IOS) and NOT defined(CPUARM)}
заставляет код работать корректно на Iphone 7. Итак, какому правилу следовать, чтобы правильно связать библиотеку Apple Ios (Библиотека из инфраструктуры Apple)?всегда используете длопен или нет?