如何正确链接Apple iOS库?

时间:2018-09-24 08:54:09

标签: ios delphi firemonkey dlopen

在delphi Tokyo下,如果您查看例如iOSapi.MapKit.pas,则可以看到仅在NOT defined(CPUARM)时才触发初始化部分(基本上,初始化部分仅针对iOS Simulator运行):

{$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相同的方式实现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框架中的库)应遵循的规则是什么?是否一直使用dlopen?

0 个答案:

没有答案