当链接具有的iOS 7部署的JavaScriptCore框架靶向应用链接到Frameworks/JavaScriptCore.framework
:
otool -L -arch armv7 MyApp
MyApp:
/System/Library/Frameworks/JavaScriptCore.framework/JavaScriptCore (compatibility version 1.0.0, current version 537.51.2)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 2935.137.0)
...
当链接具有iOS 6的部署的JavaScriptCore框架靶向应用链接到PrivateFrameworks/JavaScriptCore.framework
:
otool -L -arch armv7 MyApp
MyApp:
/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore (compatibility version 1.0.0, current version 537.51.2)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 2935.137.0)
...
这是因为Ja vaScriptCore框架有special symbols即指示链接以改变其dylib取决于部署目标版本安装路径:
nm JavaScriptCore.framework/JavaScriptCore | grep '\$ld\$'
00000000003959a0 S $ld$install_name$os4.3$/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore
00000000003959a1 S $ld$install_name$os5.0$/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore
00000000003959a2 S $ld$install_name$os5.1$/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore
00000000003959a3 S $ld$install_name$os6.0$/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore
00000000003959a4 S $ld$install_name$os6.1$/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore
的JavaScriptCore的框架是在PrivateFrameworks
目录中的iOS 4.3到6.1可让应用程序发现它有启动。在iOS 7,PrivateFrameworks/JavaScriptCore.framework
是一个符号链接Frameworks/JavaScriptCore.framework
从而使应用程序可以同时在iOS 6中运行,7
虽然任何地方没有记录,这显然是从苹果刻意向后兼容性添加到JavaScriptCore的框架。但不幸的是,App Store验证团队没有从JavaScriptCore团队和应用链接JavaScriptCore框架和iOS 7以下目标iOS的应用中获得备忘录,因为他们正在使用PrivateFrameworks
目录中的框架。如果您想Apple解决此问题,请复制rdar://problem/17076670。
在此期间,您可以从您的项目去掉JavaScriptCore的框架,并使用以下其它链接器标记而不是解决办法拒绝(适应你所得到的每个未定义的符号错误)
-Wl,-U,_JSGlobalContextCreate
-Wl,-U,_JSGlobalContextRelease
这告诉链接器动态地解析符号。由于JavaScriptCore框架总是通过UIKit→WebKit→JavaScriptCore间接加载,所以这些符号在运行时可以很好地解决,并且应用程序不应该被拒绝,因为它不再显式链接JavaScriptCore框架。
不能相信! – loretoparisi
我敢打赌,那里也有LGPL合规问题。 – fluffy
我非常有信心,它与LGPL合规性无关,只是SDK不兼容问题。 – 0xced