2014-05-07 22 views
7

ben introduced in iOS 7 oldu JavaScriptCore çerçevesini kullanıyorum. Uygulamamın iOS 6.0 dağıtım hedefi var. Uygulamayı JavaScriptCore.framework (varsayılan olarak gerekli modunda) ile bağladım. iOS 6 üzerinde çalışan ama yine de düz C API, yani JSGlobalContextCreate(), JSObjectCallAsFunction() vb kullanabilirsiniz zaman yeni JavaScript Objective-C classes (JSContext, JSValue vs.) açıkça bulunmayanJavaScriptCore çerçeve kullanılabilirliği iOS

Ben de kullanılmaya başlanan MultipeerConnectivity çerçevesini bağlarsanız iOS 7 ve ben başlangıçta beklenen kazasında olsun, iOS 6 benim app çalıştırın: Ben JavaScriptCore çerçeve bağlantı varken neden benim app aynı dyld hatasıyla kilitlenen değil

dyld: Library not loaded: /System/Library/Frameworks/MultipeerConnectivity.framework/MultipeerConnectivity 
    Referenced from: /var/mobile/Applications/5AB83411-CEFC-437D-88F8-6B80C36CCE9F/MyApp.app/MyApp 
    Reason: image not found 

?

cevap

21

Frameworks/JavaScriptCore.framework için uygulama bağlantılar hedef bir IOS 7 dağıtım ile JavaScriptCore çerçeve bağlama:

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) 
    ... 

PrivateFrameworks/JavaScriptCore.framework için uygulama bağlantılar hedef bir IOS 6 dağıtım ile JavaScriptCore çerçeve bağlama :

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) 
    ... 

Bu, çünkü Ja vaScriptCore çerçevesi onun dylib dağıtım hedef sürümüne bağlı yükleme yolu değiştirmek için bağlayıcı talimat special symbols sahiptir:

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 çerçeve 6.1'e iOS 4.3 PrivateFrameworks dizinde kullanılabilir böylece uygulama başlangıçta orada bulur . Uygulamanın her iki iOS 6 üzerinde çalışabilir ve 7.

yerde belgelenen olmasa da bu açıkça JavaScriptCore çerçevesine geriye dönük uyumluluk eklemek Apple kasıtlı bir hareket olduğunu, böylece iOS 7 günü, PrivateFrameworks/JavaScriptCore.frameworkFrameworks/JavaScriptCore.framework sembolik bağlantıdır. Ancak Maalesef, App Store doğrulama ekibi, PrivateFrameworks dizininde bir çerçeve kullandıkları için JavaScriptCore ekibinden ve JavaScriptCore çerçevesini bağlayan ve iOS'u 7 will be rejected'un altına hedefleyen uygulamalardan not almamışlardır. Apple'ın bu sorunu çözmesini istiyorsanız lütfen rdar://problem/17076670'u kopyalayın. Bu arada

, sen projenizden JavaScriptCore çerçevesini kaldırma ve yerine aşağıdaki Diğer Bağlayıcı Flags kullanarak reddini geçici bir çözüm bulabilirler

-Wl,-U,_JSGlobalContextCreate 
-Wl,-U,_JSGlobalContextRelease 

Bu söyler (Alacağınız her tanımsız sembol hata için adapte) sembolleri dinamik olarak çözmek için bağlayıcı. JavaScriptCore çerçevesi, UIKit → WebKit → JavaScriptCore aracılığıyla her zaman dolaylı olarak yüklendiğinden, semboller çalışma zamanında çok iyi bir şekilde çözer ve JavaScriptCore çerçevesini artık açıkça ilişkilendirmediğinden uygulamanız reddedilmemelidir.

+1

İnanamıyorum! – loretoparisi

+0

Bahse girerim orada da LGPL uyumluluğu ile ilgili bir şey var. – fluffy

+0

LGPL uyumluluğunun, sadece SDK uyuşmazlığı meselesiyle ilgisi olmadığı konusunda oldukça eminim. – 0xced

İlgili konular