Podczas łączenia ramy JavaScriptCore się w iOS 7 rozmieszczenia cel łączy APP do 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)
...
Podczas łączenia ramy JavaScriptCore się w iOS 6 rozmieszczenia cel łączy APP do 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)
...
To dlatego, że Ja vaScriptCore ramy ma special symbols że instruować łącznik zmienić jego dylib ścieżki instalacji w zależności od wersji docelowej Wdrożenie:
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 ramy jest dostępny w katalogu PrivateFrameworks
w iOS 4.3 do 6.1 więc aplikacja znajdzie go tam przy starcie . IOS 7, PrivateFrameworks/JavaScriptCore.framework
jest dowiązaniem symbolicznym do Frameworks/JavaScriptCore.framework
tak, że aplikacja może działać zarówno na iOS 6 i 7.
Chociaż nie udokumentowano w dowolnym miejscu, to było wyraźnie celowe posunięcie ze strony Apple, aby dodać wsteczną zgodność z ramami JavaScriptCore. Niestety zespół ds. Walidacji App Store nie otrzymał notatek od zespołu JavaScriptCore i aplikacji łączących framework JavaScriptCore z targetami iOS poniżej 7 will be rejected, ponieważ używają one architektury w katalogu PrivateFrameworks
. Proszę duplikować rdar://problem/17076670, jeśli chcesz, aby Apple rozwiązał ten problem.
W międzyczasie można obejść odrzucenie przez usunięcie ramy JavaScriptCore z projektu i stosując następujące inne flagi Linker zamiast (dostosowanie do każdego nieokreślonego błędu symbolu masz)
-Wl,-U,_JSGlobalContextCreate
-Wl,-U,_JSGlobalContextRelease
opowiada tę linker, aby dynamicznie rozwiązywać symbole. Ponieważ struktura JavaScriptCore jest zawsze pośrednio ładowana za pośrednictwem UIKit → WebKit → JavaScriptCore, symbole zostaną rozwiązane poprawnie w środowisku wykonawczym, a aplikacja nie powinna zostać odrzucona, ponieważ nie łączy ona bezpośrednio struktury JavaScriptCore.
Nie mogę uwierzyć! – loretoparisi
Założę się, że jest tam również coś wspólnego ze zgodnością z LGPL. – fluffy
Jestem przekonany, że nie ma to nic wspólnego ze zgodnością z LGPL, tylko kwestią niezgodności SDK. – 0xced