當鏈接具有的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