问题描述
我在这里有一个适用于 iOS 的开源 MS-DOS 模拟器: https://github.com/MattAndrzejczuk/MSDOS-for-iOS
当使用我的旧 iOS 设备(例如旧 iPhone 5S)时,此应用运行良好。但就在 iOS 13.0 发布后,由于未在主线程上调用 UIKit 方法,应用程序委托无法呈现 SDL,但我不太确定这次崩溃是否是由于 OpenGL 被完全弃用,或者,如果可能是更新的SceneDelegate 和 AppDelegate 似乎已在 iOS 13 中进行了大修的更改是导致此问题的原因。仅就某些情况而言,我注意到我无法创建一个带有基本 hello world 标签的新 Xcode 项目并直接为 iOS 12 设备构建它,而不这样做:
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
// ADD THIS TO DEFAULT APPDELEGATE.H:
@property (strong,nonatomic) UIWindow *window;
@end
Sources/dospad/Shared/DosEmuThread.m
#import "DosEmuThread.h"
extern int SDL_main(int argc,char *argv[]);
@implementation DosEmuThread
@synthesize started;
- (void)start
{
if (started) {
NSLog(@"DosEmuThread %p already started",self);
return;
}
NSLog(@"Start dosBox in new thread");
started = YES;
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
}
- (void) run {
@autoreleasepool {
/// UNCOMMENTING THIS SOMEWHAT FIXES THE ISSUE:
//dispatch_async(dispatch_get_main_queue(),^{
char *argv[1] = {"dosBox"};
SDL_main(1,argv);
self.started = NO;
//});
}
}
@end
这修复了应用程序,因为我可以进入 DOS 提示符,但是一旦我尝试打开这样的东西:
C:\ cd WAR2A
C:\ WAR2.EXE
我只是卡在一个空白屏幕上,所以很明显,一旦 SDL 尝试运行全屏 EXE 应用程序,将 dos 线程放在主线程上的快速修复就会中断。
我真的很想有能力模拟 x86 机器来运行经典的 DOS 游戏,甚至支持适用于 iOS 的 Windows 95,如果有替代的 git 存储库可以做类似的事情,请告诉我。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)