在 Xcode 模拟器中运行我的 CN1 应用程序(制作 6.5 英寸屏幕截图)时遇到问题。
顺便说一句,我的应用程序在 CN1 模拟器和 (iOS) 设备上运行良好,当应用程序通过电缆连接从设备上的 Xcode 运行时(用于分析)也是如此。
我使用的是 macOS Big Sur 11.4 和 Xcode 12.5。
Steps:
- 生成包含源代码的 CN1 iOS 调试服务器版本
- 下载并解压源代码,然后使用 Xcode 打开 dist 文件夹中的 .xcworkspace 文件
- 构建项目
这会产生 2 个紫色问题:从后台线程调用 UI API
-[UIViewController视图]
-[UIView 边界]
必须仅在主线程中使用。
以下是第一期的额外信息:
Thread 5
#0 0x0000000102e4d1f7 in Java_com_codename1_impl_ios_IOSImplementation_getDisplayWidthImpl at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/CodenameOne_GLViewController.m:1234
#1 0x000000010307e684 in com_codename1_impl_ios_IOSNative_getDisplayWidth__ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/IOSNative.m:375
#2 0x0000000103092084 in com_codename1_impl_ios_IOSNative_getDisplayWidth___R_int at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/IOSNative.m:8229
#3 0x0000000102e65184 in com_codename1_impl_ios_IOSImplementation_getDisplayWidth___R_int at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_impl_ios_IOSImplementation.m:1337
#4 0x0000000102e65c64 in virtual_com_codename1_impl_ios_IOSImplementation_getDisplayWidth___R_int at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_impl_ios_IOSImplementation.m:16729
#5 0x0000000102e94c24 in com_codename1_impl_ios_IOSImplementation_convertToPixels___int_boolean_R_int at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_impl_ios_IOSImplementation.m:8585
#6 0x0000000102ddacc4 in virtual_com_codename1_impl_CodenameOneImplementation_convertToPixels___int_boolean_R_int at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_impl_CodenameOneImplementation.m:14619
#7 0x00000001028c0f4c in com_codename1_ui_Display_convertToPixels___float_R_int at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_ui_Display.m:5746
#8 0x00000001029515c4 in com_codename1_ui_plaf_UIManager_resetThemeProps___java_util_Hashtable at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_ui_plaf_UIManager.m:692
#9 0x0000000102950a2c in com_codename1_ui_plaf_UIManager___INIT____ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_ui_plaf_UIManager.m:288
#10 0x00000001029657b0 in com_codename1_ui_plaf_UIManager_getInstance___R_com_codename1_ui_plaf_UIManager at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_ui_plaf_UIManager.m:308
#11 0x00000001028ab188 in com_codename1_ui_Display_mainEDTLoop__ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_ui_Display.m:2199
#12 0x0000000102e0bfdc in com_codename1_ui_RunnableWrapper_run__ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_ui_RunnableWrapper.m:467
#13 0x0000000102d0e558 in virtual_java_lang_Runnable_run__ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/java_lang_Runnable.m:60
#14 0x0000000102c5bea8 in com_codename1_impl_CodenameOneThread_run__ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_impl_CodenameOneThread.m:384
#15 0x0000000102d0e558 in virtual_java_lang_Runnable_run__ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/java_lang_Runnable.m:60
#16 0x0000000102bc70c4 in java_lang_Thread_runImpl___long at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/java_lang_Thread.m:254
#17 0x0000000102b5fee4 in threadRunner at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/nativeMethods.m:1337
#18 0x00000001bca3ec8c in _pthread_start
我的理解是,这与从主线程调用 getDisplayWidth() 有关。我检查了自己的调用,据我所知,我只在 EDT 上调用此函数。
无论如何运行应用程序给出构建成功,然后是很多警告(“cyclone”不是该目标可识别的处理器(忽略处理器)),最后是运行时错误:EXC_BAD_ACCESS,堆栈跟踪如下。我的应用程序显示启动屏幕,然后初始化正常,然后在显示主屏幕之前崩溃。堆栈跟踪:
Thread 2 Queue : com.apple.opengl.cvmDoWork (serial)
#0 0x00000001a88848b0 in cvmsServerElementBuild ()
#1 0x00000001a8880cd0 in cvms_element_build_from_source ()
#2 0x00000001a8877680 in cvm_deferred_build_modular(void*) ()
#3 0x0000000105d55884 in _dispatch_client_callout ()
#4 0x0000000105d5c8dc in _dispatch_lane_serial_drain ()
#5 0x0000000105d5d58c in _dispatch_lane_invoke ()
#6 0x0000000105d693e4 in _dispatch_workloop_worker_thread ()
#7 0x00000001bca3b028 in _pthread_wqthread ()
Enqueued from com.apple.main-thread (Thread 1) Queue : com.apple.main-thread (serial)
#0 0x0000000105d59570 in _dispatch_async_f_slow ()
#1 0x0000000107da9a84 in gleSetVPTransformFuncAll ()
#2 0x0000000107da4d24 in gleLLVMVecPrimMultiRender ()
#3 0x0000000107d4651c in glDrawArrays_IMM_ES2Exec ()
#4 0x0000000104f717f4 in -[DrawString execute] at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/DrawString.m:250
#5 0x0000000104621128 in -[ExecutableOp executeWithClipping] at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/ExecutableOp.m:60
#6 0x0000000104a563a4 in -[CodenameOne_GLViewController drawFrame:] at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/CodenameOne_GLViewController.m:2601
#7 0x0000000104a56f5c in __61-[CodenameOne_GLViewController flushBuffer:x:y:width:height:]_block_invoke at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/CodenameOne_GLViewController.m:2872
#8 0x0000000105d55884 in _dispatch_client_callout ()
#9 0x0000000105d64f8c in _dispatch_async_and_wait_invoke ()
#10 0x0000000105d55884 in _dispatch_client_callout ()
#11 0x0000000105d63f84 in _dispatch_main_queue_callback_4CF ()
#12 0x0000000180365d1c in __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ ()
#13 0x000000018036025c in __CFRunLoopRun ()
#14 0x000000018035f3bc in CFRunLoopRunSpecific ()
#15 0x000000018afdd70c in GSEventRunModal ()
#16 0x00000001843f03d0 in -[UIApplication _run] ()
#17 0x00000001843f51ac in UIApplicationMain ()
#18 0x0000000104c832fc in com_codename1_impl_ios_IOSNative_initVM__ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/IOSNative.m:348
#19 0x0000000104a694dc in com_codename1_impl_ios_IOSImplementation_postInit__ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_impl_ios_IOSImplementation.m:1262
#20 0x00000001049df89c in virtual_com_codename1_impl_CodenameOneImplementation_postInit__ at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_impl_CodenameOneImplementation.m:14664
#21 0x00000001044a6c20 in com_codename1_ui_Display_init___java_lang_Object at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_codename1_ui_Display.m:1273
#22 0x00000001046122ec in com_xx_yy_MainStub_main___java_lang_String_1ARRAY at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_xx_yy_MainStub.m:282
#23 0x0000000104612348 in main at /Users/MyName/Documents/Xcode/MyApp/dist/Main-src/com_xx_yy_MainStub.m:291
#24 0x0000000180224554 in start ()
偶然间我发现它是无论如何都可以在 Xcode 模拟器中运行应用程序。发生上述崩溃后,停止在 Xcode 中运行该应用程序。然后模拟器会显示“桌面”,第 2 页上有我的应用程序的图标。当我点击该应用程序成功运行!
然而,它的速度非常慢,而且动画也很不流畅。最重要的是,该应用程序在不同情况下经常挂起,有时在几秒钟后,有时在几分钟后。用户界面不再响应,但例如屏幕上的时钟继续运行。在这些情况下没有可用的堆栈跟踪。
任何关于如何在 Xcode 模拟器中正确运行 CN1 应用程序的提示都值得赞赏。是否有相关CN1代码需要更新?