Классы не найдены в сторонней среде iOS
Я использую Appcelerator Hyperloop
в надежде на интеграцию сторонней платформы iOS под названием KolorEyes
в мой Titanium
приложение.
Вот мой appc.js
файл:
module.exports = {
hyperloop: {
ios: {
xcodebuild: {
flags: {
FRAMEWORK_SEARCH_PATHS: '../../src',
LD_RUNPATH_SEARCH_PATHS: '@executable_path'
},
frameworks: [
'KolorEyes'
]
},
thirdparty: {
'KolorEyes': {
source: ['src'],
header: 'src',
resource: 'src'
}
}
}
}
};
У меня есть мой KolorEyes.framework
папка в моем src
папка в корне моего проекта.
То, что я делаю, похоже, должно работать:
index.js
var KolorEyes = require('KolorEyes/KolorEyes');
var KolorEyesSessionParams = require('KolorEyes/KolorEyesSessionParams');
var KolorEyesRenderViewParams = require('KolorEyes/KolorEyesRenderViewParams');
console.log('CLASS: ' + KolorEyes);
console.log('CLASS: ' + KolorEyesSessionParams);
console.log('CLASS: ' + KolorEyesRenderViewParams);
И вот вывод:
[INFO] : CLASS: [class KolorEyes]
[INFO] : CLASS: [class KolorEyesSessionParams]
[INFO] : CLASS: [class KolorEyesRenderViewParams]
Но когда я пытаюсь сделать это:
var params = KolorEyesSessionParams.alloc().init();
Он говорит мне, что не может найти класс KolorEyesSessionParams
:
[ERROR] : Cannot find class with name: KolorEyesSessionParams
[ERROR] : Script Error {
[ERROR] : column = 32;
[ERROR] : description = "Cannot find class with name: KolorEyesSessionParams";
[ERROR] : line = 108;
[ERROR] : message = "Cannot find class with name: KolorEyesSessionParams";
[ERROR] : name = ClassNotFound;
[ERROR] : nativeStack = "1 libobjc.A.dylib 0x23a6ae17 objc_exception_throw + 38\n2 kolor_test 0x0019ce0b kolor_test + 1515019\n3 kolor_test 0x00195d05 kolor_test + 1486085\n4 JavaScriptCore 0x275f77cd <redacted> + 364\n5 JavaScriptCore 0x273c7dfb <redacted> + 314\n6 JavaScriptCore 0x273c6629 <redacted> + 120\n7 JavaScriptCore 0x2768302f <redacted> + 20366\n8 JavaScriptCore 0x27683039 <redacted> + 20376\n9 JavaScriptCore 0x2767de91 <redacted> + 336\n10 JavaScriptCore 0x275d87db <redacted> + 102\n11 JavaScriptCore 0x273caa09 <redacted> + 344\n12 JavaScriptCore 0x273ca8ad _ZN3JSC4callEPNS_9ExecStateENS_7JSValueENS_8CallTypeERKNS_8CallDataES2_RKNS_7ArgListE + 52\n13 JavaScriptCore 0x275887a3 <redacted> + 126\n14 JavaScriptCore 0x276dc183 _ZNK3JSC12PropertySlot14functionGetterEPNS_9ExecStateE + 42\n15 JavaScriptCore 0x273c220b <redacted> + 1406\n16 JavaScriptCore 0x276804ed <redacted> + 9292\n17 JavaScriptCore 0x27683039 <redacted> + 20376\n18 JavaScriptCore 0x27683135 <redacted> + 20628\n19 JavaScriptCore 0x27683039 <redacted> + 20376\n20 JavaScriptCore 0x2767de91 <redacted> + 336\n21 JavaScriptCore 0x275d87db <redacted> + 102\n22 JavaScriptCore 0x273b8d0d <redacted> + 7292\n23 JavaScriptCore 0x274c839b _ZN3JSC8evaluateEPNS_9ExecStateERKNS_10SourceCodeENS_7JSValueERN3WTF8NakedPtrINS_9ExceptionEEE + 354\n24 JavaScriptCore 0x275f6ba5 JSEvaluateScript + 268\n25 kolor_test 0x0003c91d kolor_test + 71965\n26 kolor_test 0x00042fa7 kolor_test + 98215\n27 kolor_test 0x00044741 kolor_test + 104257\n28 kolor_test 0x00044b81 kolor_test + 105345\n29 kolor_test 0x0003caf3 kolor_test + 72435\n30 kolor_test 0x0003da83 kolor_test + 76419\n31 kolor_test 0x00045589 kolor_test + 107913\n32 kolor_test 0x00044521 kolor_test + 103713\n33 libdispatch.dylib 0x23e3d823 <redacted> + 10\n34 libdispatch.dylib 0x23e3d80f <redacted> + 22\n35 libdispatch.dylib 0x23e4bba9 <redacted> + 1524\n36 CoreFoundation 0x24291b6d <redacted> + 8\n37 CoreFoundation 0x24290067 <redacted> + 1574\n38 CoreFoundation 0x241df229 CFRunLoopRunSpecific + 520\n39 CoreFoundation 0x241df015 CFRunLoopRunInMode + 108\n40 GraphicsServices 0x257cfac9 GSEventRunModal + 160\n41 UIKit 0x288b3189 UIApplicationMain + 144\n42 kolor_test 0x00030747 kolor_test + 22343\n43 libdyld.dylib 0x23e87873 <redacted> + 2";
[ERROR] : sourceURL = "file:///var/containers/Bundle/Application/1536D545-76AB-48FA-BDF7-C2729A175F82/kolor_test.app/hyperloop/koloreyes/koloreyessessionparams.js";
[ERROR] : }
У меня нет проблем с использованием UIKit
вещи, но эти сторонние классы просто не видны. Даже если Hyperloop
говорит, что он генерирует классы для них:
[INFO] : [Hyperloop] Generating class GLKit/GLKView
[INFO] : [Hyperloop] Generating class GLKit/GLKViewController
[INFO] : [Hyperloop] Generating class KolorEyes/KolorEyes
[INFO] : [Hyperloop] Generating class KolorEyes/KolorEyesRenderViewParams
[INFO] : [Hyperloop] Generating class KolorEyes/KolorEyesSessionParams
[INFO] : [Hyperloop] Generating class ModelIO/MDLCamera
[INFO] : [Hyperloop] Generating class ModelIO/MDLLight
Есть идеи?
0 ответов
У меня такая же проблема. Согласно этому ответу, проблема заключается в том, что фреймворк используется на платформе раньше, чем он был создан.
Могу подтвердить, что после того, как я перестроил фреймворк (необходимый для сборки с iOS 12 вместо iOS 13) с более старой версией SDK, эта проблема была решена для меня.
Это общая проблема, при которой вы не можете запустить код, зависящий от версии, на старых устройствах. Переместим и переименуем, спасибо, что сообщили об этом!
Ян Веннеманн: Это то, что мы обсуждали несколько дней назад. У меня пока нет окончательного плана для этого, но поскольку ошибка возникает при ссылке на фреймворк iOS (а не фактический API), который доступен только в определенной версии и выше (в данном случае: "Speech.framework", iOS 10+), мы можем решить эту проблему, защитив фреймворки с их версией iOS, если их версия выше, чем версия по умолчанию (например, 8.1 в нашем случае).
Я мог бы даже придумать обходной путь: если мы передадим ссылку на фреймворк через appc.js, мы также сможем передать флаги компоновщика, возможно, что-то вроде того, что я сделал в моем модуле ARKit. Кстати, в конечном итоге это может быть проблема, связанная с модулем, поскольку нам больше не нужен module.xcconfig, и фреймворки связываются автоматически. Если мы сможем передать их на правильную архитектуру и версию, все будет в порядке!
Источник: